diff --git a/distribution/preview.json b/distribution/preview.json index 44f7ff903..9de797258 100644 --- a/distribution/preview.json +++ b/distribution/preview.json @@ -1,37 +1,68 @@ { "schema_version": 1, "channel": "preview", - "base_version": "0.9.3", - "build_id": "2026-10-12-6d697e1e75ff", - "commit": "6d697e1e75ff1e94ebd5d176fcbf7a36545ac557", - "built_at": "2026-10-12T13:28:54Z", + "base_version": "0.9.4", + "build_id": "2026-10-14-fbd2ae23927f", + "commit": "fbd2ae23927fe4923752bdb2db29661917fb05d7", + "built_at": "2026-10-14T15:27:19Z", "protocol": 22, "endpoint_generation": 1, - "notes": "Preview build 2026-10-12-6d697e1e75ff\n\n[View changes](https://github.com/herdrdev/herdr/compare/v0.9.0...6d697e1e75ff1e94ebd5d176fcbf7a36545ac557)", + "notes": "Preview build 2026-10-14-fbd2ae23927f\n\n[View changes](https://github.com/herdrdev/herdr/compare/v0.9.4...fbd2ae23927fe4923752bdb2db29661917fb05d7)", "assets": { "linux-x86_64": { - "url": "https://github.com/herdrdev/herdr/releases/download/preview-2026-10-12-6d697e1e75ff/herdr-linux-x86_64", - "sha256": "ae95cf186ff3794de3ff10d6e9b883af2fc3a74576649c488c92b251f114f1b2" + "url": "https://github.com/herdrdev/herdr/releases/download/preview-2026-10-14-fbd2ae23927f/herdr-linux-x86_64", + "sha256": "0001fb5f0411124cf3ec42a940f4f74ff4004552f45e8d6ca3c5d050c58b631f" }, "linux-aarch64": { - "url": "https://github.com/herdrdev/herdr/releases/download/preview-2026-10-12-6d697e1e75ff/herdr-linux-aarch64", - "sha256": "7bceb09df1a6a2d50ac0817f444968641f2864d108d88a027ab4a604ff3602d1" + "url": "https://github.com/herdrdev/herdr/releases/download/preview-2026-10-14-fbd2ae23927f/herdr-linux-aarch64", + "sha256": "b3de37967592c2d1a70af0951e77f816729e616c6289c1925583f8bcf55fae5d" }, "macos-x86_64": { - "url": "https://github.com/herdrdev/herdr/releases/download/preview-2026-10-12-6d697e1e75ff/herdr-macos-x86_64", - "sha256": "9c39cb7f74c10e6e355b96cb66056c4e8d2f9040a557549892bc2496d865cfb1" + "url": "https://github.com/herdrdev/herdr/releases/download/preview-2026-10-14-fbd2ae23927f/herdr-macos-x86_64", + "sha256": "f5989b062205d8ba003e53ebe6775cc4bef044e8e18ab1cf19e37abf87eda72d" }, "macos-aarch64": { - "url": "https://github.com/herdrdev/herdr/releases/download/preview-2026-10-12-6d697e1e75ff/herdr-macos-aarch64", - "sha256": "ec72195c14f252db81fb850e153c19bebac4114ce4557c011c4a08aaf4ab6865" + "url": "https://github.com/herdrdev/herdr/releases/download/preview-2026-10-14-fbd2ae23927f/herdr-macos-aarch64", + "sha256": "e6543d05b318b9ecad8173a87bc2b50e20585ad99327f2ab3482879cdd3d9090" }, "windows-x86_64": { - "url": "https://github.com/herdrdev/herdr/releases/download/preview-2026-10-12-6d697e1e75ff/herdr-windows-x86_64.zip", - "sha256": "768764b8c0a5b2e1262d337465c9490556f8ab490742acda06bff9e6ee18ea25", + "url": "https://github.com/herdrdev/herdr/releases/download/preview-2026-10-14-fbd2ae23927f/herdr-windows-x86_64.zip", + "sha256": "e986eb2ba143ad9ad985469b1a1f45a52e113b84fbe0a18623b378528f884f91", "format": "zip" } }, "builds": { + "2026-10-14-fbd2ae23927f": { + "base_version": "0.9.4", + "commit": "fbd2ae23927fe4923752bdb2db29661917fb05d7", + "built_at": "2026-10-14T15:27:19Z", + "protocol": 22, + "endpoint_generation": 1, + "tag": "preview-2026-10-14-fbd2ae23927f", + "assets": { + "linux-x86_64": { + "url": "https://github.com/herdrdev/herdr/releases/download/preview-2026-10-14-fbd2ae23927f/herdr-linux-x86_64", + "sha256": "0001fb5f0411124cf3ec42a940f4f74ff4004552f45e8d6ca3c5d050c58b631f" + }, + "linux-aarch64": { + "url": "https://github.com/herdrdev/herdr/releases/download/preview-2026-10-14-fbd2ae23927f/herdr-linux-aarch64", + "sha256": "b3de37967592c2d1a70af0951e77f816729e616c6289c1925583f8bcf55fae5d" + }, + "macos-x86_64": { + "url": "https://github.com/herdrdev/herdr/releases/download/preview-2026-10-14-fbd2ae23927f/herdr-macos-x86_64", + "sha256": "f5989b062205d8ba003e53ebe6775cc4bef044e8e18ab1cf19e37abf87eda72d" + }, + "macos-aarch64": { + "url": "https://github.com/herdrdev/herdr/releases/download/preview-2026-10-14-fbd2ae23927f/herdr-macos-aarch64", + "sha256": "e6543d05b318b9ecad8173a87bc2b50e20585ad99327f2ab3482879cdd3d9090" + }, + "windows-x86_64": { + "url": "https://github.com/herdrdev/herdr/releases/download/preview-2026-10-14-fbd2ae23927f/herdr-windows-x86_64.zip", + "sha256": "e986eb2ba143ad9ad985469b1a1f45a52e113b84fbe0a18623b378528f884f91", + "format": "zip" + } + } + }, "2026-10-12-6d697e1e75ff": { "base_version": "0.9.3", "commit": "6d697e1e75ff1e94ebd5d176fcbf7a36545ac557", @@ -894,35 +925,6 @@ "sha256": "d83fca4971afd7ecd8be1bb36a730611d6b9f461480d75084680afc2c8e84f2c" } } - }, - "2026-06-07-3f7236f81735": { - "base_version": "0.6.8", - "commit": "3f7236f81735e338e2ed3ecbf0f1fed26392acba", - "built_at": "2026-06-07T14:10:04Z", - "protocol": 13, - "tag": "preview-2026-06-07-3f7236f81735", - "assets": { - "linux-x86_64": { - "url": "https://github.com/herdrdev/herdr/releases/download/preview-2026-06-07-3f7236f81735/herdr-linux-x86_64", - "sha256": "b5e5e539bcc34e49ea8e443c8d94ebbaf6c644e0eb3e0a5a63e134c6ebcc6407" - }, - "linux-aarch64": { - "url": "https://github.com/herdrdev/herdr/releases/download/preview-2026-06-07-3f7236f81735/herdr-linux-aarch64", - "sha256": "9dbf8047317fb86e3e61e00780dbdf6ff0344fc51f0d5da3dc49690bf29f80f9" - }, - "macos-x86_64": { - "url": "https://github.com/herdrdev/herdr/releases/download/preview-2026-06-07-3f7236f81735/herdr-macos-x86_64", - "sha256": "8d2fa2e82564b6f23e92577832fa222c9099b1e8902123d0d1d7ba118e824614" - }, - "macos-aarch64": { - "url": "https://github.com/herdrdev/herdr/releases/download/preview-2026-06-07-3f7236f81735/herdr-macos-aarch64", - "sha256": "1e202611df9f94e44af72cfa0975fafdaef19b514768d208a282f9f725ce8877" - }, - "windows-x86_64": { - "url": "https://github.com/herdrdev/herdr/releases/download/preview-2026-06-07-3f7236f81735/herdr-windows-x86_64.exe", - "sha256": "8a6a211edfb853615a39da8a03344a686e9bb28ee07080a8d17b116c5b1dbf13" - } - } } } } diff --git a/docs/preview/website/src/content/docs/agents.mdx b/docs/preview/website/src/content/docs/agents.mdx index b2799312a..e922477bd 100644 --- a/docs/preview/website/src/content/docs/agents.mdx +++ b/docs/preview/website/src/content/docs/agents.mdx @@ -75,7 +75,11 @@ Some restricted Linux runtimes do not expose a terminal foreground process group Blocked detection is deliberately strict for screen-manifest agents. Herdr only marks `blocked` when the live bottom-buffer snapshot matches known visible approval, question, or permission UI. If no manifest rule matches for a known agent, Herdr falls back to `idle` and labels that fallback as `default_known_agent_idle_fallback` in explain output. -This means unusual new agent prompts may initially show as `idle` instead of `blocked` until Herdr learns that screen shape. The misclassification affects only the visible status and waits. It should not make Herdr send input or take destructive action. +Unusual new agent prompts may initially show as `idle` instead of `blocked` until Herdr learns that screen shape. Detection itself does not send input, but automation that trusts a mistaken idle state can type into an approval dialog. Inspect unexpected prompts before sending more input; idle status is not authorization to approve an action. + +Antigravity and Grok count as idle once they return to their prompt, even if background tasks, monitors, or subagents are still running. `agent wait` and `agent prompt --wait` observe the agent's state, not completion of those jobs. + +Suspending an agent with Ctrl+Z preserves its name, session reference, and hook authority while the exact process remains alive behind the shell or another non-agent command. Returning with `fg` keeps that identity. This does not cover another recognized agent taking over the foreground. A retained identity does not mean the agent can receive input while suspended; inspect the pane before prompting it. ## Detection manifests diff --git a/docs/preview/website/src/content/docs/integrations.mdx b/docs/preview/website/src/content/docs/integrations.mdx index 96990acf0..691bc306c 100644 --- a/docs/preview/website/src/content/docs/integrations.mdx +++ b/docs/preview/website/src/content/docs/integrations.mdx @@ -59,7 +59,7 @@ Herdr saves integration configs atomically on Linux/macOS and for new files; exi Every integration tells Herdr which session the agent is in, so Herdr can resume it after a server restart. Turn this off with `[session] resume_agents_on_restore = false`. -The Pi, OMP, Kimi Code CLI, OpenCode, Kilo Code CLI, and MastraCode integrations also report the agent's state. While they report, Herdr uses them instead of reading the screen. Codex reports turn state when run with `--no-daemon`; screen detection still handles its visible blockers. Other integrations leave state to screen detection. +The Pi, OMP, Kimi Code CLI, OpenCode, Kilo Code CLI, and MastraCode integrations also report the agent's state. While they report, Herdr uses them instead of reading the screen. The others leave state to screen detection. Native session restore requires current Herdr integrations: Pi integration version `2`, OMP version `3`, Claude Code version `6`, Codex version `5`, GitHub Copilot CLI version `2`, Devin CLI version `2`, Droid version `2`, Kimi Code CLI version `3`, Qoder CLI version `2`, Qwen Code version `1`, Letta Code version `1`, Cursor Agent CLI version `1`, Grok CLI version `2`, OpenCode version `5`, Kilo Code CLI version `1`, Hermes Agent version `5`, MastraCode version `1`, or Antigravity CLI version `1`. Check installed versions with `herdr integration status`. @@ -123,7 +123,7 @@ Install the Codex hook: herdr integration install codex ``` -When Codex runs with `--no-daemon`, the hook reports session identity and turn start/stop state through Herdr's local socket API. Screen detection still handles visible blockers and fills gaps when hooks are unavailable. A shared Codex daemon can route hooks to the wrong pane, so use `--no-daemon` for reliable reports; disabling daemon auto-start alone does not stop an existing daemon. +The Codex hook reports session identity through the same local socket API used by other integrations. Codex state comes from Herdr's screen manifest detection. Herdr uses `~/.codex` by default, or `CODEX_HOME` when set. The Codex config directory must already exist. Install writes `herdr-agent-state.sh`, updates `hooks.json`, and ensures `[features] hooks = true` in `config.toml`. It also removes the deprecated top-level `codex_hooks` flag when present. Uninstall removes Herdr entries from `hooks.json` and deletes the hook script, but leaves `config.toml` unchanged. diff --git a/docs/preview/website/src/content/docs/ja/agents.mdx b/docs/preview/website/src/content/docs/ja/agents.mdx index cf2adac10..ada02c97d 100644 --- a/docs/preview/website/src/content/docs/ja/agents.mdx +++ b/docs/preview/website/src/content/docs/ja/agents.mdx @@ -75,7 +75,11 @@ Linux と macOS では、ホストから見えるラッパーが実際のエー スクリーンマニフェスト方式のエージェントでは、blocked の検出は意図的に厳格です。Herdr が `blocked` と判定するのは、ライブの下部バッファスナップショットが既知の承認・質問・許可 UI にマッチしたときだけです。既知のエージェントでどのマニフェストルールにもマッチしない場合、Herdr は `idle` にフォールバックし、explain の出力ではそのフォールバックに `default_known_agent_idle_fallback` というラベルを付けます。 -つまり、見慣れない新しいエージェントプロンプトは、Herdr がその画面の形を学習するまで、最初は `blocked` ではなく `idle` と表示されることがあります。こうしたやり取りによって Herdr が入力を送ったり破壊的な操作をしたりすることはありません。影響するのは表示上の状態と wait だけです。 +見慣れない新しいエージェントプロンプトは、Herdr がその画面の形を学習するまで、`blocked` ではなく `idle` と表示されることがあります。検出自体は入力を送りませんが、誤った idle 状態を信頼する自動処理は承認ダイアログへ入力してしまう可能性があります。予期しないプロンプトでは次の入力を送る前に画面を確認してください。idle は操作を承認する許可ではありません。 + +Antigravity と Grok は、バックグラウンドのタスク、モニター、サブエージェントが動いていても、プロンプトに戻ると idle と判定されます。`agent wait` と `agent prompt --wait` はエージェントの状態を監視し、それらのジョブの完了は待ちません。 + +Ctrl+Z でエージェントを中断しても、同じプロセスがシェルやエージェント以外のコマンドの背後で生きている間は、名前、セッション参照、フックの権限を保持します。`fg` で戻ると同じ識別情報を使えます。別の認識済みエージェントがフォアグラウンドを引き継ぐ場合は対象外です。識別情報が残っていても、中断中のエージェントが入力を受け取れるとは限りません。送信前にペインを確認してください。 ## 検出マニフェスト diff --git a/docs/preview/website/src/content/docs/ja/cli-reference.mdx b/docs/preview/website/src/content/docs/ja/cli-reference.mdx index a2ea967c1..91d10bb0b 100644 --- a/docs/preview/website/src/content/docs/ja/cli-reference.mdx +++ b/docs/preview/website/src/content/docs/ja/cli-reference.mdx @@ -424,13 +424,14 @@ herdr integration status [--outdated-only] ```bash herdr plugin install /[/subdir...] [--ref REF] [--yes] +herdr plugin update [...] [--yes] herdr plugin list [--plugin ID] [--json] herdr plugin uninstall herdr plugin enable herdr plugin disable ``` -`plugin install` は `ogulcancelik/herdr-plugin-examples/worktree-bootstrap` のような GitHub 省略記法のみを受け付けます。`git` を使い、対話的なターミナルでは信頼プレビューを表示し、サポートされるマニフェストのビルドコマンドを実行し、GitHub インストールを Herdr 管理のディレクトリに保存します。非対話的なインストールには `--yes` を使ってください。GitHub 管理プラグインの再インストールは、その管理チェックアウトを置き換えます。ローカルにリンクされたプラグインへの上書きインストールは拒否されます。プラグインのマニフェストは `min_herdr_version` を宣言しなければならず、プラグインがより新しい Herdr バイナリを要求する場合、install と link は失敗します。`plugin list` はデフォルトで人間可読です。生の API レスポンスが欲しいときは `--json` を渡してください。 +`plugin install` は `ogulcancelik/herdr-plugin-examples/worktree-bootstrap` のような GitHub 省略記法のみを受け付けます。`git` を使い、対話的なターミナルでは信頼プレビューを表示し、サポートされるマニフェストのビルドコマンドを実行し、GitHub インストールを Herdr 管理のディレクトリに保存します。非対話的なインストールには `--yes` を使ってください。`plugin update` は対象を省略すると GitHub 管理の全プラグインを、指定すると該当する id または GitHub ソースだけを更新します。記録された ref を使い、変更のないコミットと一括更新時のローカルリンクをスキップします。再インストールは新しいディレクトリを作成します。実行中のプラグインは元のファイルを、新しい呼び出しは新しい版を使います。ローカルにリンクされたプラグインへの上書きインストールは拒否されます。プラグインのマニフェストは `min_herdr_version` を宣言しなければならず、プラグインがより新しい Herdr バイナリを要求する場合、install と link は失敗します。`plugin list` はデフォルトで人間可読です。生の API レスポンスが欲しいときは `--json` を渡してください。 ローカル開発: @@ -439,7 +440,7 @@ herdr plugin link [--disabled] herdr plugin unlink ``` -`plugin link` は `herdr-plugin.toml` を含むプラグインディレクトリ、またはマニフェストへの直接パスを受け付けます。ローカルチェックアウトからプラグインを作成・テストしている間はこれが正しいコマンドです。`plugin unlink` はプラグインの登録を解除し、ファイルには触れません。`plugin uninstall` はプラグインの登録を解除し、Herdr 管理の GitHub チェックアウトファイルも削除します。GitHub インストールの場合、uninstall はプラグイン id と、install で使うのと同じ `owner/repo[/subdir...]` 省略記法の両方を受け付けます。アクション、イベントフック、ペイン、リンクハンドラーはマニフェストで宣言します。ランタイムでのアクション登録は v1 の範囲外です。 +`plugin link` は `herdr-plugin.toml` を含むプラグインディレクトリ、またはマニフェストへの直接パスを受け付けます。ローカルチェックアウトからプラグインを作成・テストしている間はこれが正しいコマンドです。`plugin unlink` と `plugin uninstall` は登録を解除し、実行中のプラグインが完了できるようファイルを残します。更新や再インストールも古い版を保持し、新しい呼び出しは設定の再読み込みなしで新しい版を使います。使用中のサーバーが終了した後、次に成功したインストール/更新、またはサーバー起動時に不要な管理インストールを削除します。設定の再読み込みでは解放されません。プラグインは親コマンドやペインの終了前に、切り離したバックグラウンドプロセスを停止する必要があります。サーバー終了後も残るプロセスは削除から保護されません。削除追跡のない旧インストールとローカルリンクのファイルは保持します。GitHub インストールの場合、uninstall はプラグイン id と、install で使うのと同じ `owner/repo[/subdir...]` 省略記法の両方を受け付けます。アクション、イベントフック、ペイン、リンクハンドラーはマニフェストで宣言します。ランタイムでのアクション登録は v1 の範囲外です。 設定ディレクトリ: @@ -474,7 +475,7 @@ herdr plugin pane close `plugin pane open` は、プラグインがリンクされ、有効で、現在のプラットフォームと互換であることを要求します。マニフェストで宣言された `[[panes]]` コマンドを Herdr 管理のターミナルペインとして起動します。マニフェストのデフォルトは `overlay` で、アクティブなペインの上に一時的なズームオーバーレイを開きます。分割、新しいタブ、ズームされたペイン、またはタブレイアウトを変更しないセッションモーダルな `popup` として開くこともできます。`--width` と `--height` は、外側のポップアップ寸法をターミナルセル数または `80%` のような割合で指定します。省略した寸法はデフォルトでターミナルの半分になり、小さすぎる値はポップアップの最小サイズに制限されます。ポップアップは Herdr ペインではなく、`HERDR_PANE_ID` を受け取らず、pane API やエージェント API に参加しません。ターミナル以外のネイティブなプラグインペインは今後の対応面です。 -新しいペインでは `TERM_PROGRAM=herdr` として識別され、`TERM_PROGRAM_VERSION` には Herdr のバージョンが設定されます。`TERM=xterm-256color` と `COLORTERM=truecolor` は維持されます。Herdr は、明示的な起動環境の値を適用する前に、継承した外側のターミナルのセッションマーカー(iTerm2、WezTerm、Kitty、Windows Terminal、tmux、screen、Zellij)、iTerm2 の `LC_TERMINAL` 識別子、既知の Claude Code、Codex、OMP セッションマーカーを削除します。これにより、新しいペインがサーバーを最初に起動したターミナルやエージェントのセッションを名乗ることを防ぎます。API キーやディスプレイ設定を含む通常の環境変数は、アタッチ中クライアントの環境に置き換えられず、引き続き継承されます。SSH エージェント転送には独自の再接続処理があります。このクリーンアップによって既存ペインのプロセスは変更されません。 +新しいペインでは `TERM_PROGRAM=herdr` として識別され、`TERM_PROGRAM_VERSION` には Herdr のバージョンが設定されます。`TERM=xterm-256color` と `COLORTERM=truecolor` は維持されます。リサイズ時に Herdr がテキストを折り返し直すため、`fish_handle_reflow=0` も設定します。継承した値や明示的な `fish_handle_reflow` の指定は優先されます。Herdr は、明示的な起動環境の値を適用する前に、継承した外側のターミナルのセッションマーカー(iTerm2、WezTerm、Kitty、Windows Terminal、tmux、screen、Zellij)、iTerm2 の `LC_TERMINAL` 識別子、既知の Claude Code、Codex、OMP セッションマーカーを削除します。これにより、新しいペインがサーバーを最初に起動したターミナルやエージェントのセッションを名乗ることを防ぎます。API キーやディスプレイ設定を含む通常の環境変数は、アタッチ中クライアントの環境に置き換えられず、引き続き継承されます。SSH エージェント転送には独自の再接続処理があります。このクリーンアップによって既存ペインのプロセスは変更されません。 `--env KEY=VALUE` はプロセスを起動するコマンドで繰り返し指定できます。新しく起動されるプロセスにのみ適用されます。`HERDR_SOCKET_PATH`、`HERDR_BIN_PATH`、`HERDR_ENV`、`HERDR_WORKSPACE_ID`、`HERDR_TAB_ID`、`HERDR_PANE_ID`、`HERDR_PLUGIN_ID`、`HERDR_PLUGIN_ROOT`、`HERDR_PLUGIN_CONFIG_DIR`、`HERDR_PLUGIN_STATE_DIR`、`HERDR_PLUGIN_ENTRYPOINT_ID`、`HERDR_PLUGIN_CONTEXT_JSON` のような Herdr 管理の変数は、呼び出し側が与えた環境変数と衝突した場合も権威を保ちます。 diff --git a/docs/preview/website/src/content/docs/ja/configuration.mdx b/docs/preview/website/src/content/docs/ja/configuration.mdx index 0759b432d..2e572c780 100644 --- a/docs/preview/website/src/content/docs/ja/configuration.mdx +++ b/docs/preview/website/src/content/docs/ja/configuration.mdx @@ -492,6 +492,8 @@ position = "bottom-right" macOS では、`system` は最初に `terminal-notifier` を試し、利用できない場合や失敗した場合は `/usr/bin/osascript` にフォールバックします。このフォールバックは通知センターで Script Editor として表示され、ホストターミナルをアクティブにできません。`brew install terminal-notifier` で `terminal-notifier` をインストールできます。対応するターミナルを Herdr が検出できた場合、通知のクリック時にそのターミナルアプリをアクティブにできます。または、`terminal` を選んで対応する外側のターミナルに通知を送信させてください。 +Windows の `system` 通知は通知センターに残ります。クリックすると、実行中の Herdr クライアントで元のペインを選択し、Windows が対象ウィンドウを取得できればターミナルを前面に出します。閉じたクライアントを開き直したり、再起動したサーバーのペインを選択したりはできません。Windows Terminal ではウィンドウを前面に出せますが、外側の別タブを確実に選択することはできません。 + ## サウンド サウンド通知はローカルの Herdr クライアントで再生されます。カスタムサウンドは mp3 ファイルでなければなりません。相対パスは設定ファイルのディレクトリから解決されます。 diff --git a/docs/preview/website/src/content/docs/ja/integrations.mdx b/docs/preview/website/src/content/docs/ja/integrations.mdx index d39d40560..8015f17c2 100644 --- a/docs/preview/website/src/content/docs/ja/integrations.mdx +++ b/docs/preview/website/src/content/docs/ja/integrations.mdx @@ -61,7 +61,7 @@ Herdr は Linux/macOS の統合設定と全プラットフォームの新規フ どのインテグレーションも、エージェントが今どのセッションにいるかを Herdr に伝えるので、サーバーの再起動後に Herdr がそのセッションを resume できます。`[session] resume_agents_on_restore = false` で無効にできます。 -Pi、OMP、Kimi Code CLI、OpenCode、Kilo Code CLI、MastraCode のインテグレーションは、エージェントの状態も報告します。報告している間、Herdr は画面を読む代わりにその報告を使います。その他のインテグレーションでは、状態は画面検出に任せます。 +Pi、OMP、Kimi Code CLI、OpenCode、Kilo Code CLI、MastraCode のインテグレーションは、エージェントの状態も報告します。報告している間、Herdr は画面を読む代わりにその報告を使います。Codex は `--no-daemon` で起動した場合にターン状態を報告し、表示中のブロッカーは引き続き画面検出で扱います。その他のインテグレーションでは、状態は画面検出に任せます。 エージェントネイティブのセッション復元には最新の Herdr インテグレーションが必要です: Pi インテグレーションはバージョン `2`、OMP は `3`、Claude Code は `6`、Codex は `5`、GitHub Copilot CLI は `2`、Devin CLI は `2`、Droid は `2`、Kimi Code CLI は `3`、Qoder CLI は `2`、Qwen Code は `1`、Letta Code は `1`、Cursor Agent CLI は `1`、Grok CLI は `2`、OpenCode は `5`、Kilo Code CLI は `1`、Hermes Agent は `5`、MastraCode は `1`、Antigravity CLI は `1` です。インストール済みバージョンは `herdr integration status` で確認してください。 @@ -125,7 +125,7 @@ Codex フックをインストールします: herdr integration install codex ``` -Codex フックは、他のインテグレーションと同じローカルソケット API を通じてセッション識別を報告します。Codex の状態は Herdr のスクリーンマニフェスト検出から得られます。 +Codex を `--no-daemon` で起動すると、フックがローカルソケット API を通じてセッション識別とターンの開始・終了を報告します。表示中のブロッカーやフックが使えない場合は、引き続き画面検出が補います。共有 Codex デーモンは別のペインへフックを送ることがあるため、確実な報告には `--no-daemon` を使ってください。デーモンの自動起動を無効にするだけでは、既存のデーモンは停止しません。 Herdr はデフォルトで `~/.codex` を使い、`CODEX_HOME` が設定されていればそちらを使います。Codex の設定ディレクトリはあらかじめ存在している必要があります。インストールは `herdr-agent-state.sh` を書き込み、`hooks.json` を更新し、`config.toml` に `[features] hooks = true` があることを保証します。非推奨のトップレベル `codex_hooks` フラグが存在すれば削除もします。アンインストールは `hooks.json` から Herdr のエントリを削除してフックスクリプトを削除しますが、`config.toml` は変更しません。 diff --git a/docs/preview/website/src/content/docs/ja/keyboard.mdx b/docs/preview/website/src/content/docs/ja/keyboard.mdx index ef0dfc2a4..cd7897fba 100644 --- a/docs/preview/website/src/content/docs/ja/keyboard.mdx +++ b/docs/preview/website/src/content/docs/ja/keyboard.mdx @@ -64,6 +64,12 @@ Herdr はマウスネイティブです。キーバインドをひとつも覚 Goto ピッカー (`prefix+g`) は、各エージェントとターミナルをワークスペースごとに一行ずつ表示します。分割タブのペインも隠さず表示されます。行をクリックするか Enter を押すと、そのペインへ直接移動します。`/` で名前、エージェントの種類、タブ、ワークスペース、ブランチ、パスを検索できます。検索入力中でなければ上下矢印キーまたは `j/k` で行を移動します。左右矢印キーは前後のワークスペースの最初のエージェントまたはターミナルへ移動し、端では折り返しません。検索入力中は左右矢印キーでテキストカーソルを動かします。`b/w/i/d` で blocked、working、idle、done のエージェントに絞り込み、`a` ですべてのターミナルに戻します。選択した移動先の場所とパスは一覧の下に表示されます。一覧が収まらない場合は、マウスホイール、スクロールバーのトラックのクリック、つまみのドラッグで、移動先を開かずにスクロールできます。 +Esc または Ctrl+[ でワークスペースナビゲーションを終了します。Go To では、Shift が必要な配列でも `/` で検索を開けます。 + +ペインへの入力はアプリが要求するキーボードモードに従います。通常のシェルには Ctrl+Shift+letter を制御バイトとして送り、表現できない Super、Hyper、Meta の組み合わせは送りません。Kitty キーボード入力を使うアプリには、要求した修飾キーとキーイベントを送ります。report-all モード以外では、修飾付き Enter、Tab、Backspace の解放レポートは送りません。テンキーと修飾キー単独の押下も転送しません。 + +非ラテン文字の配列では、Ctrl+W など Ctrl 単独の組み合わせに、Kitty 対応ホストが報告する物理的なベースキーを使えます。ラテン文字の配列、Ctrl+Shift、AltGr は配列上の意味を保持します。物理キーを報告しないターミナルでは、同じ配列非依存のショートカットは使えません。 + ## テキスト欄の編集 Herdr の名前入力、worktree のブランチ名、フィルター、コピーモードの検索欄では、カーソル位置で編集できます。以下は Herdr 自身の入力欄の操作であり、ペイン内のシェルやエージェントの操作は変わりません。 diff --git a/docs/preview/website/src/content/docs/ja/persistence-remote.mdx b/docs/preview/website/src/content/docs/ja/persistence-remote.mdx index decc379d5..f4b492589 100644 --- a/docs/preview/website/src/content/docs/ja/persistence-remote.mdx +++ b/docs/preview/website/src/content/docs/ja/persistence-remote.mdx @@ -13,6 +13,8 @@ Herdr はペインをバックグラウンドサーバーで動かし続けま サーバーの完全停止後に Herdr が再起動すると、保存されたセッションの形を復元します。デタッチ、サーバー再起動、画面履歴リプレイ、エージェントネイティブのセッション復元、ライブハンドオフでそれぞれ何が生き残るかは[セッション状態と復元](/ja/docs/session-state/)を参照してください。 +Linux と macOS のサーバーは `SIGHUP` を無視するため、起動元シェルの切断ではペインは停止しません。意図的に停止するには `herdr server stop` または `SIGTERM` を使ってください。以前 `SIGHUP` を使っていたスクリプトは変更が必要です。終了ログには停止理由が記録されます。 + ## 名前付きセッション 独立した Herdr サーバーが欲しいときは名前付きセッションを使います。 diff --git a/docs/preview/website/src/content/docs/ja/plugins.mdx b/docs/preview/website/src/content/docs/ja/plugins.mdx index c10beb3ad..f4da7f46e 100644 --- a/docs/preview/website/src/content/docs/ja/plugins.mdx +++ b/docs/preview/website/src/content/docs/ja/plugins.mdx @@ -174,6 +174,7 @@ process.exit(result.status ?? 1); ```bash herdr plugin install ogulcancelik/herdr-plugin-examples/agent-telegram-notify +herdr plugin update herdr plugin config-dir examples.agent-telegram-notify herdr plugin list herdr plugin action list --plugin examples.agent-telegram-notify @@ -191,10 +192,15 @@ herdr plugin log list --plugin example.layout ``` `plugin install` は `owner/repo/subdir` のような GitHub 省略記法のみを受け付けます。 -`git` でクローンし、対話的なターミナルではプレビューを表示し、サポートされる -ビルドコマンドを実行し、チェックアウトを Herdr 管理のプラグインデータの下に保存して -登録します。非対話的なインストールには `--yes` を使ってください。GitHub 管理の -プラグインを再インストールすると、その管理チェックアウトが置き換えられます。 +`git` でクローンし、対話的なターミナルではプレビューを表示し、新しい Herdr 管理の +インストールディレクトリでビルドして登録します。非対話的なインストールには +`--yes` を使ってください。更新や再インストール後も、実行中のコマンドとペインは +元のファイルを使い続け、新しい呼び出しは設定の再読み込みなしで新しい版を使います。 +既存のプロセスは再起動されず、起動フックは通常どおり次のサーバー起動時に実行されます。 +`plugin update` は対象を省略すると GitHub 管理の全プラグインを更新します。 +プラグイン id または GitHub ソースを指定すれば、その対象だけを更新します。 +インストール時の ref を再取得し、コミットが変わっていなければスキップします。 +一括更新ではローカルにリンクされたプラグインを無視します。非対話的な更新には `--yes` を使います。 インストール済みおよびリンク済みのプラグインと、その有効・無効の状態は現在の ユーザー全体で共有され、すべての Herdr セッションから利用できます。Herdr サーバーが 動作していないときでも `plugin install` と `plugin link` で登録できます。 @@ -206,12 +212,15 @@ Herdr 0.7.3 の名前付きセッションだけにインストールしたプ `plugin config-dir ` はセットアップドキュメントやシェルスクリプト向けに 設定ディレクトリを表示します。 -`plugin uninstall ` はプラグインの登録を解除します。GitHub 管理の -インストールでは管理チェックアウトも削除し、プラグイン id と、install で使うのと -同じ `owner/repo[/subdir...]` 省略記法の両方を受け付けます。`plugin unlink ` は -登録解除のみを行いファイルには触れないため、ローカル開発に便利です。v1 に独立した -`plugin update` はありません。管理プラグインを更新するには GitHub から -再インストールしてください。 +`plugin uninstall ` は登録を解除し、プラグイン id または install と同じ +`owner/repo[/subdir...]` 省略記法を受け付けます。更新、再インストール、アンインストール後も +実行中のプラグインが完了できるようファイルを保持します。使用中のサーバーが終了した後、 +次に成功したインストール/更新、またはサーバー起動時に、不要な管理インストールを削除します。 +設定の再読み込みでは古いインストールを解放しません。サーバー停止前にプラグインの作業を +止めてください。サーバー終了後も残るプロセスは削除から保護されません。プラグインは +親コマンドやペインが終了する前に、切り離したバックグラウンドプロセスを停止する必要があります。 +削除追跡のない旧インストール、設定、状態は保持されます。 +`plugin unlink ` は登録解除のみを行いファイルには触れないため、ローカル開発に便利です。 サンプル集のリポジトリは `ogulcancelik/herdr-plugin-examples` です。 `agent-telegram-notify`、`github-link-preview`、`dev-layout-bootstrap` を含む diff --git a/docs/preview/website/src/content/docs/ja/windows-beta.mdx b/docs/preview/website/src/content/docs/ja/windows-beta.mdx index db708133e..afc6c8235 100644 --- a/docs/preview/website/src/content/docs/ja/windows-beta.mdx +++ b/docs/preview/website/src/content/docs/ja/windows-beta.mdx @@ -49,6 +49,19 @@ Windows ビルドは安定版とプレビューの両方のアップデートチ ローカル永続セッションは、クライアントをデタッチした後やターミナルウィンドウを閉じた後も動作し続けます。Windows OpenSSH から起動したサーバーとペインプロセスもログアウト後に存続します。再接続するには `herdr` をもう一度実行してください。 +管理者権限の Windows サーバーは、既定では管理者クライアントを必要とします。管理者権限の SSH ログインから起動した場合も同じです。通常権限のサーバーには、同じアカウントの通常・管理者クライアントの両方が接続できます。接続してもサーバーの権限は変わりません。 + +管理者セッションを通常クライアントと意図的に共有する場合は、次を設定します: + +```toml +[server] +allow_unelevated_clients = true +``` + +この Windows 専用設定は既定では無効で、自動起動を含む新しいサーバーの起動時に適用されます。設定の再読み込みでは実行中サーバーの接続権限は変わりません。代わりに管理者ターミナルで `herdr server --allow-unelevated-clients`(名前付きセッションでは `herdr --session server --allow-unelevated-clients`)を使うと、そのサーバープロセスだけで共有できます。このフラグは設定が false でも共有を有効にします。 + +どちらも同じアカウントの通常権限プロセスによる管理者ペインの操作を許可します。他のアカウントは引き続き接続できません。設定で有効にしない限り、再起動後もフラグを指定する必要があります。既存サーバーは更新版で停止・再起動するまで以前の接続ポリシーを維持します。停止するとペインも閉じます。設定と復旧ファイルのアカウント単位の権限は変わりません。 + Windows のエージェントプロセス検出は、ペインのシェルの子孫プロセスをスキャンし、npm/Node や Git Bash のプロセスチェーンを含む直接のエージェントと一般的なコマンドラッパーを認識します。Git Bash から起動したエージェントはエミュレートされた `exec` 境界を越えて追跡されますが、Unix のフォアグラウンドプロセスグループ検出と同じものではありません。 Windows でインテグレーションをインストールできるのは、現在 Pi、OMP、Claude Code、Codex、GitHub Copilot CLI、Devin CLI、OpenCode、Kilo Code CLI、Droid、Kimi Code CLI、Qoder CLI、Antigravity CLI です。利用可能な対象は Unix より少なく、インストール形式が Windows で未対応のインテグレーションは表示されないか拒否されます。 @@ -113,6 +126,8 @@ Herdr のペインテキストコピーは Windows で動作します。ペイ テキストの貼り付けには Windows Terminal で `ctrl+shift+v` を使ってください。複数行テキストの貼り付けはブラケット付きなので、シェルやエージェントのプロンプトは各行を個別に送信せず、ひとつの貼り付けとして受け取ります。`shift` を押しながら右クリックすると、クリックを Herdr に送らずに外側ターミナルの貼り付けアクションを使えます。 +Windows クライアントは、WezTerm が完全な Win32 文字の押下・解放ペアを生のペーストマーカーで囲んだ場合にもテキストを復元します。通常のテキストが混在する場合や不完全なレポートは、この互換処理ではデコードしません。同じ形式の完全な Win32 レポートだけを含むクリップボードテキストは区別できず、同様にデコードされます。 + ## Windows で未サポート | 機能 | 状況 | diff --git a/docs/preview/website/src/content/docs/keyboard.mdx b/docs/preview/website/src/content/docs/keyboard.mdx index 9e3a70539..216de5e92 100644 --- a/docs/preview/website/src/content/docs/keyboard.mdx +++ b/docs/preview/website/src/content/docs/keyboard.mdx @@ -64,6 +64,12 @@ The full keymap and the binding syntax live in the [keybinding reference](/docs/ The Goto picker (`prefix+g`) lists each agent or terminal on its own row, grouped by workspace. Split tabs never hide their panes behind another row. Click a row or press Enter to jump directly to it. Press `/` to search names, agent kinds, tabs, workspaces, branches, or paths; use Up/Down or `j/k` to move between rows when not typing a search. Left/Right jumps to the first agent or terminal in the previous/next workspace section, without wrapping. While editing a search, Left/Right moves the text cursor instead. Outside search, `b/w/i/d` filter blocked, working, idle, or done agents, and `a` shows all terminals again. The selected destination's location and path appear below the list. When the list overflows, use the mouse wheel, click the scrollbar track, or drag its thumb to scroll without opening a destination. +Press Esc or Ctrl+[ to leave workspace navigation. In the Go To picker, `/` also opens search on layouts that require Shift to type it. + +Pane input follows the keyboard modes requested by the app. Plain shells receive Ctrl+Shift+letter as its control byte; Super, Hyper, and Meta chords are dropped when the pane cannot represent them. Apps using Kitty keyboard input receive the modifiers and key events they request. Without report-all mode, modified Enter, Tab, and Backspace do not receive release reports. Keypad keys and modifier-only presses are not forwarded. + +On non-Latin layouts, Ctrl-only shortcuts such as Ctrl+W can use the physical base key reported by a Kitty-capable host. Latin layout characters, Ctrl+Shift chords, and AltGr keep their layout meaning. Terminals that do not report physical keys cannot provide the same layout-independent shortcuts. + ## Editing text fields Herdr's naming dialogs, worktree branch fields, filters, and copy-mode search support editing at the cursor. These shortcuts apply to Herdr-owned fields, not to the shell or agent inside a pane. diff --git a/docs/preview/website/src/content/docs/persistence-remote.mdx b/docs/preview/website/src/content/docs/persistence-remote.mdx index aaa1db96c..06e92dd89 100644 --- a/docs/preview/website/src/content/docs/persistence-remote.mdx +++ b/docs/preview/website/src/content/docs/persistence-remote.mdx @@ -13,6 +13,8 @@ Detach the client with `ctrl+b q`; panes and agents keep running. Reattach by ru When Herdr starts again after a full server stop, it restores the saved session shape. For what survives detach, server restart, screen history replay, native agent session restore, and live handoff, see [Session state and restore](/docs/session-state/). +On Linux and macOS, the server ignores `SIGHUP`, so a hangup from its launching shell does not stop the panes. To stop it deliberately, use `herdr server stop` or `SIGTERM`; scripts that previously used `SIGHUP` must change. Shutdown logs record the reason. + ## Named sessions Use named sessions when you want independent Herdr servers. diff --git a/docs/preview/website/src/content/docs/zh-cn/agents.mdx b/docs/preview/website/src/content/docs/zh-cn/agents.mdx index 3be51e529..a94704ac0 100644 --- a/docs/preview/website/src/content/docs/zh-cn/agents.mdx +++ b/docs/preview/website/src/content/docs/zh-cn/agents.mdx @@ -75,7 +75,11 @@ Herdr 能识别这些智能体,并从它们在屏幕上绘制的内容读取状 对屏幕清单类智能体,blocked 检测刻意从严。只有当实时底部缓冲区快照匹配已知可见的审批、提问或权限 UI 时,Herdr 才标记 `blocked`。对已知智能体,如果没有任何清单规则匹配,Herdr 会回退到 `idle`,并在 explain 输出中把该回退标记为 `default_known_agent_idle_fallback`。 -这意味着不常见的新智能体提示可能一开始显示为 `idle` 而不是 `blocked`,直到 Herdr 学会那种屏幕形态。这些交互不会让 Herdr 发送输入或执行破坏性操作;它们只影响可见状态和等待。 +不常见的新智能体提示可能显示为 `idle` 而不是 `blocked`,直到 Herdr 学会那种屏幕形态。检测本身不会发送输入,但信任错误 idle 状态的自动化可能向审批对话框输入内容。遇到意外提示时,请先检查再继续发送输入;idle 状态不代表获准批准操作。 + +Antigravity 和 Grok 回到提示符时即被视为 idle,即使后台任务、监视器或子智能体仍在运行。`agent wait` 和 `agent prompt --wait` 观察的是智能体状态,不是这些任务是否完成。 + +用 Ctrl+Z 挂起智能体后,只要同一个进程仍在 shell 或其他非智能体命令后面存活,其名称、会话引用和钩子权限就会保留。用 `fg` 返回后继续使用该身份。另一个被识别的智能体接管前台的情况不在此范围内。保留身份不代表挂起的智能体能接收输入;发送提示前请检查窗格。 ## 检测清单 diff --git a/docs/preview/website/src/content/docs/zh-cn/cli-reference.mdx b/docs/preview/website/src/content/docs/zh-cn/cli-reference.mdx index 07cf89252..c1898b4f1 100644 --- a/docs/preview/website/src/content/docs/zh-cn/cli-reference.mdx +++ b/docs/preview/website/src/content/docs/zh-cn/cli-reference.mdx @@ -424,13 +424,14 @@ herdr integration status [--outdated-only] ```bash herdr plugin install /[/subdir...] [--ref REF] [--yes] +herdr plugin update [...] [--yes] herdr plugin list [--plugin ID] [--json] herdr plugin uninstall herdr plugin enable herdr plugin disable ``` -`plugin install` 只接受 GitHub 简写,比如 `ogulcancelik/herdr-plugin-examples/worktree-bootstrap`。它使用 `git`,在交互式终端显示信任预览,运行受支持的清单构建命令,并把 GitHub 安装保存在 Herdr 管理的目录中。非交互式安装用 `--yes`。重新安装 GitHub 管理的插件会替换该托管检出。不允许覆盖安装到本地链接的插件之上。插件清单必须声明 `min_herdr_version`;当插件要求更新的 Herdr 二进制时,install 和 link 会失败。`plugin list` 默认是人类可读的;要原始 API 响应就传 `--json`。 +`plugin install` 只接受 GitHub 简写,比如 `ogulcancelik/herdr-plugin-examples/worktree-bootstrap`。它使用 `git`,在交互式终端显示信任预览,运行受支持的清单构建命令,并把 GitHub 安装保存在 Herdr 管理的目录中。非交互式安装用 `--yes`。`plugin update` 不指定目标时更新全部 GitHub 托管插件,指定目标时只更新对应的插件 id 或 GitHub 来源。它保留安装时记录的 ref,跳过未变化的提交,批量更新时忽略本地链接的插件。重新安装会创建新目录;运行中的插件保留原文件,新调用使用新安装。不允许覆盖安装到本地链接的插件之上。插件清单必须声明 `min_herdr_version`;当插件要求更新的 Herdr 二进制时,install 和 link 会失败。`plugin list` 默认是人类可读的;要原始 API 响应就传 `--json`。 本地开发: @@ -439,7 +440,7 @@ herdr plugin link [--disabled] herdr plugin unlink ``` -`plugin link` 接受包含 `herdr-plugin.toml` 的插件目录,或直接指向清单的路径。从本地检出编写或测试插件时,它仍然是正确的命令。`plugin unlink` 注销插件、不动文件。`plugin uninstall` 注销插件,并同时删除 Herdr 管理的 GitHub 检出文件。对 GitHub 安装,uninstall 既接受插件 id,也接受与 install 相同的 `owner/repo[/subdir...]` 简写。动作、事件钩子、窗格和链接处理器在清单中声明;运行时动作注册不在 v1 范围内。 +`plugin link` 接受包含 `herdr-plugin.toml` 的插件目录,或直接指向清单的路径。从本地检出编写或测试插件时,它仍然是正确的命令。`plugin unlink` 和 `plugin uninstall` 注销插件并保留文件,让运行中的插件完成工作。更新和重新安装也会保留旧版本;新调用无需重新加载配置便会使用新安装。使用旧安装的服务器退出后,下一次成功安装、更新或服务器启动会清理过时的托管安装。重新加载配置不会释放旧安装。插件必须在父命令或窗格退出前停止分离的后台进程;服务器退出后仍存活的进程不受清理保护。没有清理跟踪的旧安装和本地链接文件会保留。对 GitHub 安装,uninstall 既接受插件 id,也接受与 install 相同的 `owner/repo[/subdir...]` 简写。动作、事件钩子、窗格和链接处理器在清单中声明;运行时动作注册不在 v1 范围内。 配置目录: @@ -474,7 +475,7 @@ herdr plugin pane close `plugin pane open` 要求插件已链接、已启用并与当前平台兼容。它把清单声明的 `[[panes]]` 命令作为 Herdr 管理的终端窗格启动。清单的默认值是 `overlay`,在活动窗格上方打开一个临时的缩放覆盖层。它也可以作为分割、新标签页、缩放窗格,或不改变标签页布局的会话级模态 `popup` 打开。`--width` 和 `--height` 以终端单元格数或 `80%` 这样的百分比设置弹窗外层尺寸;省略时默认为终端大小的一半,过小的值会限制为弹窗最小尺寸。弹窗不是 Herdr 窗格,不会收到 `HERDR_PANE_ID`,也不参与 pane 或智能体 API。非终端的原生插件窗格是之后的能力面。 -新窗格使用 `TERM_PROGRAM=herdr` 标识自身,并将 `TERM_PROGRAM_VERSION` 设为 Herdr 的版本。它们保留 `TERM=xterm-256color` 和 `COLORTERM=truecolor`。应用显式的启动环境值之前,Herdr 会移除继承的外层终端会话标记(iTerm2、WezTerm、Kitty、Windows Terminal、tmux、screen 和 Zellij)、iTerm2 的 `LC_TERMINAL` 身份,以及已知的 Claude Code、Codex 和 OMP 会话标记。这可防止新窗格冒充最初启动服务器的终端或智能体会话。API 密钥和显示设置等普通环境变量仍会继承,而不会被连接客户端的环境替换。SSH 智能体转发有自己的重连处理。现有窗格进程不受此清理影响。 +新窗格使用 `TERM_PROGRAM=herdr` 标识自身,并将 `TERM_PROGRAM_VERSION` 设为 Herdr 的版本。它们保留 `TERM=xterm-256color` 和 `COLORTERM=truecolor`。由于 Herdr 会在调整大小时重排文本,新窗格还会获得 `fish_handle_reflow=0`;继承或显式指定的 `fish_handle_reflow` 值会保留。应用显式的启动环境值之前,Herdr 会移除继承的外层终端会话标记(iTerm2、WezTerm、Kitty、Windows Terminal、tmux、screen 和 Zellij)、iTerm2 的 `LC_TERMINAL` 身份,以及已知的 Claude Code、Codex 和 OMP 会话标记。这可防止新窗格冒充最初启动服务器的终端或智能体会话。API 密钥和显示设置等普通环境变量仍会继承,而不会被连接客户端的环境替换。SSH 智能体转发有自己的重连处理。现有窗格进程不受此清理影响。 `--env KEY=VALUE` 可以在启动进程的命令上重复使用,只作用于新启动的进程。当与调用方提供的环境变量冲突时,`HERDR_SOCKET_PATH`、`HERDR_BIN_PATH`、`HERDR_ENV`、`HERDR_WORKSPACE_ID`、`HERDR_TAB_ID`、`HERDR_PANE_ID`、`HERDR_PLUGIN_ID`、`HERDR_PLUGIN_ROOT`、`HERDR_PLUGIN_CONFIG_DIR`、`HERDR_PLUGIN_STATE_DIR`、`HERDR_PLUGIN_ENTRYPOINT_ID` 和 `HERDR_PLUGIN_CONTEXT_JSON` 等 Herdr 管理的变量保持权威。 diff --git a/docs/preview/website/src/content/docs/zh-cn/configuration.mdx b/docs/preview/website/src/content/docs/zh-cn/configuration.mdx index 5885a7ffe..7ca7547af 100644 --- a/docs/preview/website/src/content/docs/zh-cn/configuration.mdx +++ b/docs/preview/website/src/content/docs/zh-cn/configuration.mdx @@ -492,6 +492,8 @@ position = "bottom-right" 在 macOS 上,`system` 会先尝试 `terminal-notifier`;如果它不可用或执行失败,则回退到 `/usr/bin/osascript`。该回退方式会在通知中心显示为 Script Editor,并且无法激活承载 Herdr 的终端。可运行 `brew install terminal-notifier` 安装 `terminal-notifier`。如果 Herdr 检测到受支持的终端,点击通知时它可以激活该终端应用。也可以选择 `terminal`,让受支持的外层终端负责发送通知。 +Windows 的 `system` 通知会保留在通知中心。点击通知会在运行中的 Herdr 客户端选择来源窗格,并在 Windows 能识别对应窗口时将终端置于前台。点击不能重新打开已关闭的客户端,也不能选择已重启服务器中的窗格。Windows Terminal 可以将所属窗口置于前台,但无法可靠地切换到另一个外层终端标签页。 + ## 声音 声音通知通过本地 Herdr 客户端播放。自定义声音必须是 mp3 文件;相对路径从配置文件所在目录解析。 diff --git a/docs/preview/website/src/content/docs/zh-cn/integrations.mdx b/docs/preview/website/src/content/docs/zh-cn/integrations.mdx index 20ca0aab0..138dbf124 100644 --- a/docs/preview/website/src/content/docs/zh-cn/integrations.mdx +++ b/docs/preview/website/src/content/docs/zh-cn/integrations.mdx @@ -61,7 +61,7 @@ Herdr 对 Linux/macOS 上的集成配置和所有平台的新文件使用原子 每个集成都会告诉 Herdr 智能体当前所在的会话,这样 Herdr 就能在服务器重启后恢复它。用 `[session] resume_agents_on_restore = false` 可以关闭。 -Pi、OMP、Kimi Code CLI、OpenCode、Kilo Code CLI 和 MastraCode 的集成还会上报智能体的状态。在它们上报期间,Herdr 使用这些上报,而不是读取屏幕。其他集成则把状态交给屏幕检测。 +Pi、OMP、Kimi Code CLI、OpenCode、Kilo Code CLI 和 MastraCode 的集成还会上报智能体的状态。在它们上报期间,Herdr 使用这些上报,而不是读取屏幕。Codex 使用 `--no-daemon` 运行时会上报轮次状态,可见的阻塞提示仍由屏幕检测处理。其他集成则把状态交给屏幕检测。 原生会话恢复需要最新的 Herdr 集成: Pi 集成版本 `2`、OMP 版本 `3`、Claude Code 版本 `6`、Codex 版本 `5`、GitHub Copilot CLI 版本 `2`、Devin CLI 版本 `2`、Droid 版本 `2`、Kimi Code CLI 版本 `3`、Qoder CLI 版本 `2`、Qwen Code 版本 `1`、Letta Code 版本 `1`、Cursor Agent CLI 版本 `1`、Grok CLI 版本 `2`、OpenCode 版本 `5`、Kilo Code CLI 版本 `1`、Hermes Agent 版本 `5`、MastraCode 版本 `1`、Antigravity CLI 版本 `1`。用 `herdr integration status` 查看已安装版本。 @@ -125,7 +125,7 @@ Herdr 默认使用 `~/.claude`,设置了 `CLAUDE_CONFIG_DIR` 时使用后者。C herdr integration install codex ``` -Codex 钩子通过与其他集成相同的本地 socket API 上报会话身份。Codex 的状态来自 Herdr 的屏幕清单检测。 +Codex 使用 `--no-daemon` 运行时,钩子通过本地 socket API 上报会话身份和轮次开始/停止状态。屏幕检测仍处理可见的阻塞提示,并在钩子不可用时补充状态。共享的 Codex 守护进程可能把钩子发到错误的窗格,因此请使用 `--no-daemon` 获得可靠的上报;仅禁用自动启动不会停止已经运行的守护进程。 Herdr 默认使用 `~/.codex`,设置了 `CODEX_HOME` 时使用后者。Codex 配置目录必须已经存在。安装会写入 `herdr-agent-state.sh`、更新 `hooks.json`,并确保 `config.toml` 中有 `[features] hooks = true`。如果存在已弃用的顶层 `codex_hooks` 标志,它也会一并移除。卸载会从 `hooks.json` 中移除 Herdr 条目并删除钩子脚本,但不改动 `config.toml`。 diff --git a/docs/preview/website/src/content/docs/zh-cn/keyboard.mdx b/docs/preview/website/src/content/docs/zh-cn/keyboard.mdx index 486886f93..2a5ed30dd 100644 --- a/docs/preview/website/src/content/docs/zh-cn/keyboard.mdx +++ b/docs/preview/website/src/content/docs/zh-cn/keyboard.mdx @@ -64,6 +64,12 @@ Herdr 是鼠标原生的。你可以点击窗格、标签页、工作区和智 Goto 选择器 (`prefix+g`) 按工作区分组,每个代理或终端各占一行,分割标签页中的窗格也会直接显示。点击一行或按回车即可跳转到对应窗格。按 `/` 搜索名称、代理类型、标签页、工作区、分支或路径;未输入搜索时,用上下方向键或 `j/k` 在各行之间移动,左右方向键跳到上一个或下一个工作区中的第一个代理或终端,到达两端后不会循环。编辑搜索内容时,左右方向键只移动文本光标。用 `b/w/i/d` 筛选 blocked、working、idle 或 done 状态的代理,按 `a` 重新显示所有终端。所选目标的位置和路径显示在列表下方。列表超出可视区域时,可以使用鼠标滚轮、点击滚动条轨道或拖动滑块来滚动,而不会打开目标。 +按 Esc 或 Ctrl+[ 退出工作区导航。在 Go To 中,即使布局需要 Shift 才能输入 `/`,也可以用它打开搜索。 + +窗格输入遵循应用请求的键盘模式。普通 shell 将 Ctrl+Shift+字母作为控制字节接收;窗格无法表示的 Super、Hyper 和 Meta 组合键会被丢弃。使用 Kitty 键盘输入的应用会收到其请求的修饰键和按键事件。非 report-all 模式下,带修饰键的 Enter、Tab 和 Backspace 不接收释放报告。数字小键盘键和单独的修饰键按下也不会转发。 + +非拉丁布局中,Ctrl+W 等仅带 Ctrl 的快捷键可以使用支持 Kitty 的主终端报告的物理基础键。拉丁布局字符、Ctrl+Shift 和 AltGr 保留布局含义。不报告物理键的终端无法提供相同的跨布局快捷键。 + ## 编辑文本输入框 Herdr 的命名对话框、worktree 分支名、筛选框和复制模式搜索框支持在光标处编辑。以下快捷键适用于 Herdr 自己的输入框,不改变窗格内 shell 或智能体的按键行为。 diff --git a/docs/preview/website/src/content/docs/zh-cn/persistence-remote.mdx b/docs/preview/website/src/content/docs/zh-cn/persistence-remote.mdx index c4c09dbbb..26f82c3e5 100644 --- a/docs/preview/website/src/content/docs/zh-cn/persistence-remote.mdx +++ b/docs/preview/website/src/content/docs/zh-cn/persistence-remote.mdx @@ -13,6 +13,8 @@ Herdr 让窗格在后台服务器中持续运行。你的终端客户端可以 在服务器完全停止后再次启动时,Herdr 会恢复保存的会话形态。关于分离、服务器重启、屏幕历史回放、智能体原生会话恢复和实时交接各自能保留什么,参见[会话状态与恢复](/zh-cn/docs/session-state/)。 +在 Linux 和 macOS 上,服务器忽略 `SIGHUP`,因此启动它的 shell 挂断不会停止窗格。要主动停止服务器,请使用 `herdr server stop` 或 `SIGTERM`;原先使用 `SIGHUP` 的脚本需要修改。关闭日志会记录停止原因。 + ## 命名会话 需要相互独立的 Herdr 服务器时,使用命名会话。 diff --git a/docs/preview/website/src/content/docs/zh-cn/plugins.mdx b/docs/preview/website/src/content/docs/zh-cn/plugins.mdx index fa40b4b3a..38cafee7f 100644 --- a/docs/preview/website/src/content/docs/zh-cn/plugins.mdx +++ b/docs/preview/website/src/content/docs/zh-cn/plugins.mdx @@ -158,6 +158,7 @@ PowerShell、Python、Rust、Go、Lua、Bun 或用户机器上可用的任何其 ```bash herdr plugin install ogulcancelik/herdr-plugin-examples/agent-telegram-notify +herdr plugin update herdr plugin config-dir examples.agent-telegram-notify herdr plugin list herdr plugin action list --plugin examples.agent-telegram-notify @@ -175,9 +176,13 @@ herdr plugin log list --plugin example.layout ``` `plugin install` 只接受 GitHub 简写,比如 `owner/repo/subdir`。它用 `git` -克隆,在交互式终端展示预览,运行受支持的构建命令,然后把检出保存到 -Herdr 管理的插件数据下并注册。非交互式安装用 `--yes`。重新安装 GitHub -管理的插件会替换该托管检出。已安装和已链接的插件及其启用状态对当前用户 +克隆,在交互式终端展示预览,在新的 Herdr 托管安装目录中构建并注册。 +非交互式安装用 `--yes`。更新和重新安装会保留旧安装:运行中的命令和窗格继续 +使用原来的文件,新调用无需重新加载配置便会使用新版本。现有进程不会重启, +启动钩子仍在下次服务器启动时运行。 +`plugin update` 不指定目标时更新所有 GitHub 托管插件,也可以指定插件 id 或 GitHub 来源。 +它重新获取安装时记录的 ref,跳过未变化的提交,批量更新时忽略本地链接的插件。 +非交互式更新用 `--yes`。已安装和已链接的插件及其启用状态对当前用户 全局生效,可在所有 Herdr 会话中使用。即使 Herdr 服务器没有运行,也可以通过 `plugin install` 和 `plugin link` 注册插件。仅安装在 Herdr 0.7.3 命名会话中的 插件必须重新 install 或 link;现有的插件配置和状态会保留。 @@ -186,11 +191,14 @@ Herdr 管理的插件数据下并注册。非交互式安装用 `--yes`。重新 插件的配置和状态目录,`plugin config-dir ` 打印配置目录,方便安装 文档和 shell 脚本使用。 -`plugin uninstall ` 注销插件。对 GitHub 管理的安装,它还会 -删除托管检出,并且既接受插件 id,也接受与 install 相同的 -`owner/repo[/subdir...]` 简写。`plugin unlink ` 只注销插件、不动文件, -对本地开发很有用。v1 没有单独的 `plugin update`;要刷新托管插件,请从 -GitHub 重新安装。 +`plugin uninstall ` 注销插件,接受插件 id 或与 install 相同的 +`owner/repo[/subdir...]` 简写。更新、重新安装和卸载后会保留安装文件, +让运行中的插件完成工作。使用旧安装的服务器退出后,下一次成功安装、更新或 +服务器启动会自动清理过时的托管安装。重新加载配置不会释放旧安装。 +关闭服务器前请停止插件工作;服务器退出后仍存活的进程不受清理保护。 +插件必须在其父命令或窗格退出前停止分离的后台进程。 +没有清理跟踪的旧安装会保留,配置和状态也会保留。 +`plugin unlink ` 只注销插件、不动文件,对本地开发很有用。 示例菜谱仓库是 `ogulcancelik/herdr-plugin-examples`。它在子目录中包含 多个独立示例插件,包括 `agent-telegram-notify`、`github-link-preview` 和 diff --git a/docs/preview/website/src/content/docs/zh-cn/windows-beta.mdx b/docs/preview/website/src/content/docs/zh-cn/windows-beta.mdx index 025f0f4d4..71e1f2f95 100644 --- a/docs/preview/website/src/content/docs/zh-cn/windows-beta.mdx +++ b/docs/preview/website/src/content/docs/zh-cn/windows-beta.mdx @@ -49,6 +49,19 @@ Windows 构建同时通过稳定版和预览版更新通道提供。新安装默 本地持久会话会在客户端分离或终端窗口关闭后继续运行。通过 Windows OpenSSH 启动的服务器和窗格进程也会在注销后继续运行;再次运行 `herdr` 即可重新连接。 +提升权限的 Windows 服务器默认要求管理员客户端,包括通过提升权限的 SSH 登录启动的服务器。普通服务器接受同一账户的普通和管理员客户端;连接不会改变服务器权限。 + +若要主动与普通客户端共享管理员会话,请设置: + +```toml +[server] +allow_unelevated_clients = true +``` + +此 Windows 专用设置默认关闭,在新服务器启动时生效,包括自动启动。重新加载配置不会改变运行中服务器的访问策略。也可以在管理员终端运行 `herdr server --allow-unelevated-clients`(命名会话使用 `herdr --session server --allow-unelevated-clients`),只为该服务器进程启用共享。即使配置为 false,此标志仍会启用共享。 + +两种方式都会允许同一账户的普通本地进程控制管理员窗格;其他账户仍被排除。除非配置中已启用共享,否则重启后必须再次指定标志。现有服务器在停止并用更新版本重启前保持原来的访问策略;停止会关闭窗格。配置和恢复文件仍保留基于账户的权限。 + Windows 智能体进程检测会扫描窗格 shell 的后代进程,识别直接运行的智能体和常见的命令包装器,包括 npm/Node 和 Git Bash 进程链。它会跨越模拟的 `exec` 边界跟踪从 Git Bash 启动的智能体,但这和 Unix 前台进程组检测不是一回事。 Windows 目前支持安装 Pi、OMP、Claude Code、Codex、GitHub Copilot CLI、Devin CLI、OpenCode、Kilo Code CLI、Droid、Kimi Code CLI、Qoder CLI 和 Antigravity CLI 集成。可用范围比 Unix 更窄;安装格式不受 Windows 支持的集成会被隐藏或拒绝。 @@ -113,6 +126,8 @@ Herdr 的窗格文本复制在 Windows 上可用。在窗格内拖选文本即 文本粘贴请在 Windows Terminal 中使用 `ctrl+shift+v`。多行文本粘贴是带括号的 (bracketed),因此 shell 和智能体提示符会把它作为一次粘贴接收,而不是逐行提交。按住 `shift` 再右键,可以使用外层终端的粘贴操作,而不把点击发给 Herdr。 +如果 WezTerm 用原始粘贴标记包住完整的 Win32 字符按下/释放记录对,Windows 客户端也能恢复其中的文本。此兼容规则不会解码混合文本或不完整记录。仅包含完整匹配 Win32 记录的字面剪贴板文本无法与这种编码区分,也会被解码。 + ## Windows 不支持 | 能力 | 状态 |