Commit Graph
48 Commits
Author SHA1 Message Date
qer 66b0f6b2d6 feat: add kimi code cli integration (#463)
* feat: add kimi code cli integration

refs #431

* fix: improve kimi code screen detection

refs #431
2026-06-04 13:52:29 +03:00
Ogulcan Celik b751d102f1 feat: add preview update channel 2026-06-02 21:48:02 +03:00
Ogulcan Celik 295b09ca25 feat: make claude codex opencode hooks session-only 2026-06-02 21:25:32 +03:00
LaneandOgulcan Celik f7d315d494 feat: add github copilot cli integration (#386)
* feat: add github copilot cli integration

refs #232

* docs: restore 0.6.5 changelog and document copilot hook flow

* test: cover copilot camelcase hook payloads

---------

Co-authored-by: Ogulcan Celik <ogulcancelik@gmail.com>
2026-06-02 01:32:05 +03:00
Ogulcan Celik 9e302984cc feat: expose foreground cwd in pane info
refs #345
2026-05-29 20:38:55 +03:00
Ogulcan Celik 2d8b4e2db4 feat: expose agent session refs in api 2026-05-28 05:06:27 +03:00
bfb9e756a0 feat: add Qoder CLI integration (#309)
* feat: add qodercli agent integration

Recognize qodercli as an agent in herdr panes, with basic Idle/Working/
Blocked screen-state detection mirroring the existing claude / codex
patterns. Adds an IntegrationTarget::Qodercli variant, install_target
wiring for shell hooks under src/integration/assets/qodercli/, the
herdr integration install qodercli CLI surface, and sound-override
coverage so qodercli notifications follow the same routing rules as
other agents.

refs #308

* fix: detect qodercli permission required as blocked

refs #308

* fix: detect qodercli ask-user prompt as blocked

refs #308

* refactor: extract has_qodercli_blocked_prompt helper aligning detect_claude

refs #308

* fix: tighten qodercli working state detection

Combine spinner-row strictness and explicit cancel-hint matching, and
stop matching the bare word 'working'. This avoids false positives when
narrative output (logs, commit messages, Markdown) contains the word
'working' or when a stale braille glyph is sitting in the scrollback
from a previous frame.

- has_qodercli_spinner_row: require row-start braille glyph + space +
  alphabetic char so only an active spinner row triggers Working.
- has_qodercli_working_hint: match '(esc to cancel,' as a positive
  signal that survives spinner masking (e.g. when a hook icon replaces
  the spinner glyph).

refs #308

* fix: short-circuit qodercli press-again banners to idle

refs #308

* fix: detect qodercli AskUser dialog by its 'Asking User' title

refs #308

* feat: recognize qodercli, qoderclicn, qoder, qodercn process names

Map qodercli, qoderclicn, qoder, and qodercn process names all to the
Qodercli agent. Covers both international (qodercli/qoder) and CN
(qoderclicn/qodercn) Qoder CLI binary names.

refs #308

* feat: register qodercli hook in qoder settings.json with stdin payload

Address the integration-layer feedback on #308:

- `herdr integration install qodercli` now writes the bundled hook into
  ~/.qoder/hooks/herdr-agent-state.sh AND registers it in
  ~/.qoder/settings.json under the schema documented at
  https://docs.qoder.com/zh/cli/hooks (and confirmed against the
  packages/core/src/hooks/types.ts type definitions in qodercli's own
  source tree). The hooks object is keyed by event name —
  SessionStart / UserPromptSubmit / PreToolUse / PermissionRequest /
  Stop / SessionEnd — with each entry holding a matcher and a list of
  `{ type: "command", command, timeout }` invocations, mirroring how
  install_claude already wires claude code's settings.json.
- The bundled assets/qodercli/herdr-agent-state.sh now reads the hook
  payload from stdin (per HookInput in qodercli's types.ts:
  session_id, transcript_path, cwd, hook_event_name, agent_id, ...).
  No environment variable is consulted to identify the event;
  SubagentStop and subagent release events return early so a recap or
  away-summary frame cannot revive an idle pane, mirroring
  assets/claude/herdr-agent-state.sh.
- uninstall_qodercli reverses the same set of entries while preserving
  any foreign hook entries the user may have configured by hand.
- Tests cover write / idempotency / uninstall-preserves-others and
  lock the stdin contract via a bundled-asset assertion.

refs #308

---------

Co-authored-by: coderwayne <jlu1318079810@163.com>
Co-authored-by: Can Celik <ogulcancelik@gmail.com>
2026-05-27 17:42:26 +03:00
Ogulcan Celik 427c2606d8 fix: deliver agent status subscriptions from event hub 2026-05-26 21:53:50 +03:00
Ogulcan Celik 3750e0bae2 feat: add pane metadata reporting
refs #36
2026-05-26 17:10:28 +03:00
kangal-botandkangal-bot 33e71ed2f5 fix: emit matching agent status subscriptions (#295)
refs #288

Co-authored-by: kangal-bot <kangal-bot@users.noreply.github.com>
2026-05-26 01:35:28 +03:00
Ogulcan Celik d4a5e02e84 feat: hand off ptys during updates 2026-05-25 15:36:50 +03:00
Ogulcan Celik db67e9d74f feat: restore agent sessions
refs #233
2026-05-23 21:37:05 +03:00
Ogulcan Celik 9817820af1 feat: add worktree cli and socket api 2026-05-23 15:19:36 +03:00
Ogulcan Celik ed11779fca feat: add omp integration 2026-05-23 15:19:36 +03:00
Ogulcan Celik 866aaf740e refactor: separate server client boundaries 2026-05-21 20:22:57 +03:00
Ogulcan Celik e7f94a3f35 feat: support hermes agent integration
refs #144
2026-05-19 00:26:05 +03:00
Ogulcan Celik e4de58b37f feat: add agent start for server-owned terminals 2026-05-17 01:41:16 +03:00
Ogulcan Celik 86adf88351 feat: add terminal identity and agent cli facade 2026-05-17 01:41:16 +03:00
Ogulcan Celik 72770305d3 feat: add hook-owned custom agent status labels 2026-05-16 02:26:14 +03:00
Ogulcan Celik 73dba97521 fix: forward pane cursor shape
fixes #116
2026-05-15 20:53:55 +03:00
Ogulcan Celik 4da250ad17 test: update protocol fixtures 2026-05-13 14:51:47 +03:00
Ogulcan Celik f661fc928b fix: rerender after pane rename 2026-05-12 16:08:01 +03:00
Ogulcan Celik fe693f613a feat: add optional pane border labels 2026-05-11 23:34:20 +03:00
Ogulcan Celik 55cdf2e8f8 fix: stabilize integration agent state reports 2026-05-11 16:13:17 +03:00
Ogulcan Celik d284819e4c fix: make update server stop safer 2026-05-10 22:09:32 +03:00
Ogulcan Celik 9f210e9738 chore: enable clippy linting 2026-05-09 23:16:24 +03:00
Ogulcan Celik 3a9888cd56 feat: add ansi pane read format 2026-05-09 22:07:52 +03:00
Ogulcan Celik 793f127e54 feat(remote): add network-efficient thin client transport
Add SSH stdio remote attach, negotiate terminal-ANSI render encoding, move blit encoding server-side for remote clients, and split control/render writer delivery for safer backpressure.

Fixes #76
2026-05-08 22:20:04 +03:00
Ogulcan Celik b0aa7b2cdd fix: preserve osc8 hyperlinks in client rendering
fixes #73
2026-05-07 21:48:50 +03:00
Franz BettagandOgulcan Celik 5baf231e07 Add named persistent sessions (#57)
* feat: add named persistent sessions

* feat: add session management commands

* fix: tighten named session stop and override precedence

* fix: handle session help and stop test race

* test: isolate default session env test

---------

Co-authored-by: Ogulcan Celik <ogulcancelik@gmail.com>
2026-04-28 20:11:11 +03:00
Ogulcan Celik 5a61ae2f9d feat: add status command 2026-04-27 22:54:02 +03:00
Ogulcan Celik 3d1ef155bf feat: add live config reload 2026-04-26 02:07:33 +03:00
Ogulcan Celik 0d5cab85f7 fix: reduce default support log noise 2026-04-25 21:39:19 +03:00
Ogulcan Celik 4075041804 feat(logging): add robust rotating support logs 2026-04-23 00:48:22 +03:00
Can Celik 3397e1ce29 feat: add persistent server-client sessions
Make herdr persistent by default.

   Launching herdr now starts or reattaches to a background session
   server. Clients can detach and reattach while panes and agent
   processes keep running. Session mode now supports multi-client attach,
   auto-detect startup, and a thin-client/headless-server split.

   This also refactors the large app, ui, input, pane, config,
   workspace, and persistence modules into smaller focused submodules,
   while preserving behavior and colocating tests with the code they
   exercise.

   Upgrade notes:
   - persistence mode is now the default
   - in-app quit detaches the current client instead of stopping the server
   - use `herdr server stop` to stop the background session
   - use `--no-session` for the old single-process behavior
   - default socket paths now live under the config directory
2026-04-21 16:30:04 +03:00
Ogulcan Celik c45a3b2dc1 feat(api): return root panes from workspace and tab creation 2026-04-09 21:59:18 +03:00
Ogulcan Celik bb2c579df2 feat(cli): support labels when creating tabs and workspaces 2026-04-09 04:42:35 +03:00
Ogulcan Celik a3ecb4e3b4 feat(api): expose done as agent status 2026-04-09 03:31:37 +03:00
Ogulcan Celik acf5bbad51 fix: harden unix socket api waits 2026-04-08 03:17:44 +03:00
Ogulcan Celik 25974892c7 fix: make pane run use bracketed-paste-aware send input 2026-04-07 23:22:57 +03:00
Ogulcan Celik 5e05460816 docs: clarify herdr pane split and wait output usage 2026-04-07 02:48:13 +03:00
Ogulcan Celik 5ed262a43a fix: isolate debug runtime paths and block duplicate herdr instances 2026-04-03 17:11:20 +03:00
Ogulcan Celik 544c7ebebb feat: add tabs to socket api 2026-04-03 00:04:35 +03:00
Can Celik ca4270b31f feat: add authoritative pi hook integration 2026-04-01 19:32:26 +03:00
Ogulcan Celik ea57a65321 fix: make app rendering event-driven 2026-03-31 02:03:45 +03:00
Ogulcan Celik 0426bf53d7 refactor: rename agent states to working and blocked 2026-03-30 13:43:41 +03:00
Ogulcan Celik 8b7848aac3 feat(api): add socket subscriptions and lifecycle events 2026-03-29 17:20:53 +03:00
Ogulcan Celik fd1e3b8b05 feat: add initial socket api for workspace and pane control
add unix socket request/response api scaffolding

implement initial workspace and pane commands:
- ping
- workspace.list
- workspace.get
- workspace.create
- pane.list
- pane.get
- pane.read
- pane.send_text
- pane.send_keys
- pane.wait_for_output

improve pane read semantics:
- visible trims trailing blank viewport rows
- recent reads from parser scrollback/current screen
- wait_for_output returns matched snapshot plus matched_line

add real subprocess integration tests for socket api
2026-03-29 04:23:22 +03:00