dsh-composer-plus 1.20.0 → 1.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.ja.md CHANGED
@@ -29,7 +29,7 @@ dsh plugin --profile web add dsh-composer-plus
29
29
 
30
30
  その後、dsh を再起動してください。(CLI はデスクトップのプロファイルにはインストールできません。デスクトップのプロファイルはアプリが管理します。)
31
31
 
32
- > dsh の pnpm は、公開から 24 時間たっていないバージョンをスキップします。リリース直後は、バージョンを指定してください:`dsh-composer-plus@1.20.0`。
32
+ > dsh の pnpm は、公開から 24 時間たっていないバージョンをスキップします。リリース直後は、バージョンを指定してください:`dsh-composer-plus@1.21.0`。
33
33
 
34
34
  ## 機能
35
35
 
@@ -71,9 +71,21 @@ dsh plugin --profile web add dsh-composer-plus
71
71
  | **計画済みステップ** | <a id="feature-plannedsteps"></a>既定ではオフです。**設定 → Composer Plus** でオンにしてください。エージェントはツール `plan_next_steps` を使えるようになります。コマンドと同じメッセージで、次に実行するコマンドを正確な引数と条件付きで計画できます(例:「ビルドが通ったら `npm test` を実行」)。結果が条件を満たすと、Composer Plus がモデルを呼び出さずに次のステップを自分で実行するため、長いチャットのトークン消費が減ります。ステップはチャットに「Composer Plus · Planned steps: ran `test` … without a model call」という短い行として表示され、その後にツール呼び出しと結果が続きます。対象は `bash`、`read`、`grep`、`glob` のステップのみで、承認、サンドボックス、保護されたファイルは各ステップにいつもどおり適用されます。条件を満たさないとき、2 つのステップが同時に実行可能なとき、最後のステップの後、そしてあなたがメッセージを送ったときは、モデルが再び応答します。この考え方は HarnessMM(arXiv 2610.32813)に基づきます。 | <a href="assets/features/plannedSteps.webp"><img src="assets/features/plannedSteps.webp" width="160" alt="スクリーンショット: 計画済みステップ"></a> |
72
72
  | **保護されたファイル** | <a id="feature-protectedfiles"></a>既定でオンです。エージェント自身のファイルツールは、指定したパターンに一致するファイルを読むことも変更することもできません。**読み取りと書き込み** のパターンでは、ファイルに対する `read`、`read_image`、`grep` が拒否され、どちらの種類でも `write`、`edit`、`str_replace_editor` が拒否されます。エージェントは理由を読み、あなたに確認するよう指示されます。既定のパターンは `.env*`、`*.pem`、`*.key` です。設定 → Composer Plus → **保護されたファイル**:パターンを追加し(例:`published/**` または `config/*.yml`)、種類をクリックして **読み取りと書き込み** と **書き込みのみ** を切り替え、✕ で削除するか、**既定値を使う** をクリックします。`/` を含まないパターンは、どのフォルダーのファイル名にも一致します。これはガードレールであり、サンドボックスではありません。シェルコマンド(`cat .env`)、スクリプト、MCP ツールからはファイルに届くことがあります(「制限事項」を参照)。 | <a href="assets/features/protectedFiles.webp"><img src="assets/features/protectedFiles.webp" width="160" alt="スクリーンショット: 保護されたファイル"></a> |
73
73
  | **ブロックされたコマンド** | <a id="feature-blockedcommands"></a>既定でオンで、リストは空です。エージェントのシェルコマンド(`bash`、`pwsh`)は、指定したルールに一致するコマンドを実行できません。**ブロック** のルールは呼び出しを拒否し(エージェントは理由を読み、あなたに確認するよう指示されます)、**先に確認** のルールは dsh の承認カードを表示します。コマンドは、あなたが許可したときだけ実行されます。設定 → Composer Plus → **ブロックされたコマンド**:ルールを入力し(例:`npm publish`、`git push --force` または `ssh *192.168.2.19`)、種類をクリックして **ブロック** と **先に確認** を切り替えてから、**追加** をクリックします。ルールの種類をクリックすると変更でき、✕ で削除できます。ルールは、コマンド名と、その後にこの順で続く必要がある単語です。`*` は任意のテキストに一致します。`&&`、`;`、`\|` の後、`$(…)`、`bash -c "…"`、`eval` の中、`sudo` や `env` の後にあるコマンドも見つけます。これはガードレールであり、サンドボックスではありません。変数(`$CMD`)、スクリプトファイル、ほかのプログラムからはコマンドを実行できることがあります(「制限事項」を参照)。 | <a href="assets/features/blockedCommands.webp"><img src="assets/features/blockedCommands.webp" width="160" alt="スクリーンショット: ブロックされたコマンド"></a> |
74
- | **タスクボード** | <a id="feature-taskboard"></a>左サイドバー → **タスクボード**。サイドバーと同じライブの状態を表示する、dsh のチャットのカンバンボードです。承認、回答、計画のレビューを待っているチャットはオレンジの点付きで **レビュー** に、実行中のチャットは **作業中** に、終わったチャットは **完了**(開くまで緑)に入ります。左でプロジェクトか **すべてのプロジェクト** を選びます。チャットごとのブランチのフォルダーは、そのプロジェクトとして扱われます。一覧の上の **プロジェクトを検索** に入力すると、名前でプロジェクトを探せます(大文字と小文字、アクセント記号は区別しません。`Esc` で入力欄を空にします)。**過去 2 時間以内にアクティブ** をクリックすると、待機中、実行中、未確認のまま完了、または過去 2 時間以内に変更されたチャットがあるプロジェクトだけを表示します(この設定はこのデバイスに保存されます)。**新しいタスク**(または `n`)は、ボードが表示しているプロジェクトで dsh 自身の新しいチャットを開きます(**すべてのプロジェクト** のときは、dsh の新しいセッションが選ぶプロジェクトです)。そのため、ほかのチャットと同じように、ファイルを追加し、コマンドを使い、モデルを選べます。最初のメッセージを送ると、自動でボードに戻ります。それまで、そのチャットは **未着手** で **新しいタスク** として待ちます。クリックすると、最初のメッセージを書けます。**未着手** の列は、このときだけ表示されます。あなたを待っているチャットがあるプロジェクトには、プロジェクト一覧でオレンジの点が付きます。dsh がチャットに名前を付け、チャットのモデルがそのメッセージから最大 3 個のタグを付けます。カードをクリックすると、そのチャットが開きます。オレンジのカードで **回答** をクリックすると、ボード上で回答できます。承認のリクエストには **拒否** か **1回だけ許可**、計画には **承認** か **変更をリクエスト**、質問には選択肢か自分のテキストで答えます。**完了を非表示** は、このデバイスで **完了** を隠します。**作業中** のカードにポインターを合わせる(またはキーボードのフォーカスを移す)と、その進行状況が表示されます。実行時間、ToDo リストのステップ、いま実行中のツール、エージェントの最後の行です。設定 → Composer Plus → タスクボード の **ホバーで進行状況を表示** で、**高速(AI なし)**(既定:チャットを読むだけです)か **AI の要約**(チャットのモデルを短く 1 回呼び出し、1〜2 文も書きます)を選びます。 | <a href="assets/features/taskBoard.webp"><img src="assets/features/taskBoard.webp" width="160" alt="スクリーンショット: タスクボード"></a> |
74
+ | **タスクボード** | <a id="feature-taskboard"></a>左サイドバー → **タスクボード**。dsh のどこでも `Cmd+Shift+K`(Windows と Linux では `Ctrl+Shift+K`)でも開けます。サイドバーと同じライブの状態を表示する、dsh のチャットのカンバンボードです。承認、回答、計画のレビューを待っているチャットはオレンジの点付きで **レビュー** に、実行中のチャットは **作業中** に、まだ開いていない終わったチャットは **完了**(緑)に入ります。チャットを開くと、そのカードは **完了** から自動で外れます。緑のカードの下にある **最近完了 (N)** をクリックすると、読んだ終わったチャットを表示できます(新しい 10 件、続きは **古いタスクを N 件表示**。開閉の状態はこのデバイスに保存されます)。ボードの裏で開いたまま終わったチャット(**新しいタスク**)は、開くまで緑のままです。ボード上部のプロジェクト名をクリックするとプロジェクト一覧が開きます。そこでプロジェクトか **すべてのプロジェクト** を選びます。チャットごとのブランチのフォルダーは、そのプロジェクトとして扱われます。一覧は、選んだとき、`Esc` を押したとき、一覧の外をクリックしたときに閉じます。一覧の上部の **プロジェクトを検索** に入力すると、名前でプロジェクトを探せます(大文字と小文字、アクセント記号は区別しません。`Esc` で入力欄を空にします)。`Enter` を押すと、最初に一致したプロジェクトを選びます。**過去 2 時間以内にアクティブ** をクリックすると、待機中、実行中、未確認のまま完了、または過去 2 時間以内に変更されたチャットがあるプロジェクトだけを表示します(この設定はこのデバイスに保存されます)。**新しいタスク**(または `n`)は、ボードが表示しているプロジェクトで dsh 自身の新しいチャットを開きます(**すべてのプロジェクト** のときは、dsh の新しいセッションが選ぶプロジェクトです)。そのため、ほかのチャットと同じように、ファイルを追加し、コマンドを使い、モデルを選べます。最初のメッセージを送ると、自動でボードに戻ります。それまで、そのチャットは **作業中** の一番上で **新しいタスク** として待ちます。クリックすると、最初のメッセージを書けます。あなたを待っているチャットがあるプロジェクトには、プロジェクト一覧でオレンジの点が付きます(どれかのチャットが待っている間は、上部のプロジェクト名にも付きます)。dsh がチャットに名前を付け、チャットのモデルがそのメッセージから最大 3 個のタグを付けます。カードをクリックすると、そのチャットが開きます。オレンジのカード(またはその **回答**)をクリックすると、ボード上で回答できます。チャット全体はパネルの **チャットを開く** で開けます。承認のリクエストには **拒否** か **1回だけ許可**、計画には **承認** か **変更をリクエスト**、質問には選択肢か自分のテキストで答えます。終わったカードで **×** をクリックすると、そのカードをボードから外せます。**最近完了** を開いて **完了** の上部にある **すべてクリア** をクリックすると、それらのカードをボードから外せます。先に、どのプロジェクトのカードが何枚外れるかが表示され、未読(緑)のカードは残ります。その後 8 秒間は、**元に戻す** でカードを戻せます。**完了** の下の **外したカード (N)** には、ボードから外したカードが一覧表示され、**ボードに戻す** で 1 枚を再び **完了** に表示できます。チャットは削除されません。チャットは dsh のサイドバーに残り、ボードは再起動の後もこれを覚えています(Tether にも同じボードが表示されます)。再び実行されたチャットは、ボードに戻ります。**作業中** のカードにポインターを合わせる(またはキーボードのフォーカスを移す)と、その進行状況が表示されます。実行時間、ToDo リストのステップ、いま実行中のツール、エージェントの最後の行です。設定 → Composer Plus → タスクボード の **ホバーで進行状況を表示** で、**高速(AI なし)**(既定:チャットを読むだけです)か **AI の要約**(チャットのモデルを短く 1 回呼び出し、1〜2 文も書きます)を選びます。 | <a href="assets/features/taskBoard.webp"><img src="assets/features/taskBoard.webp" width="160" alt="スクリーンショット: タスクボード"></a> |
75
75
  | **プロジェクトメモリー** | <a id="feature-projectmemory"></a>既定ではオフです。**設定 → Composer Plus** でオンにしてください。プロジェクトのフォルダーごとに専用のメモリーがあり、そのプロジェクトの後のチャットが読みます。DS Bot が Bot ごとにメモリーを持つのと同じです。ターンが終わるたびに、チャットのモデルを 1 回呼び出して新しいメッセージ(ロールバックしたものは除きます)を読み、長く続く好み、決定、事実を短いメモとして保存し、古いメモを変更または削除します。エージェントも自分でメモを保存、削除、検索できます(`memory_remember`、`memory_forget`、`memory_recall`)。メモはグローバルにもでき、その場合はすべてのプロジェクトが読みます。新しいチャットはシステムプロンプトでメモを受け取ります。後で保存したメモは次のチャットから表示されます。ファイルは dsh のホームフォルダーにある Markdown(`storages/dsh-composer-plus/memory/`)で、プロジェクトのフォルダーには保存されません。 同じ行の **メモリーを開く** は、保存されたすべてのメモをプロジェクトごと(とグローバルメモリー)にまとめて表示し、絞り込みもできます。変更する内容を自分の言葉で書き(例:「yarn から pnpm に変えた」)、**変更をプレビュー** を押します。dsh の既定のモデルが変更を提案し、**適用** を押したときだけ保存されます。Tether では: チャットのタイトルメニュー → Project memory。 | <a href="assets/features/projectMemory.webp"><img src="assets/features/projectMemory.webp" width="160" alt="スクリーンショット: プロジェクトメモリー"></a> |
76
+ | **メモリーのバージョン履歴** | <a id="feature-memoryhistory"></a>**プロジェクトメモリー** がオンの間、既定でオンです。メモリーを保存するたびに(エージェント、ターン後のレビュー、**メモリーを開く**)、保存前のメモのコピーが残ります。**メモリーを開く** でプロジェクトまたは **グローバルメモリー** を選び、**履歴** を押すと、日付順のバージョンと、それぞれの後にメモリーを変更したものが表示されます。バージョンを選ぶと復元で変わる内容が差分で表示され、**復元** できます。復元前のメモも残るので、復元は元に戻せます。各メモリーの最新 50 バージョンが残ります。Tether では:チャットのタイトルメニュー → Project memory → History。 | <a href="assets/features/memoryHistory.webp"><img src="assets/features/memoryHistory.webp" width="160" alt="スクリーンショット: メモリーのバージョン履歴"></a> |
77
+ | **メモリーを AGENTS.md に書き出す** | <a id="feature-memoryexport"></a>**メモリーを開く** でプロジェクトを選び、**AGENTS.md に書き出す** を押すと、そのプロジェクトのメモがフォルダー内の `AGENTS.md` の目印付きセクションに書かれます。コミットしてチームや他のエージェントツールと共有できます。まず変更が差分で表示され、**AGENTS.md に書き込む** を押したときだけ保存されます。次の書き出しはこのセクションだけを置き換えます。グローバルメモリー、出典、日付は書かれません。Tether では:チャットのタイトルメニュー → Project memory → Export to AGENTS.md。 | <a href="assets/features/memoryExport.webp"><img src="assets/features/memoryExport.webp" width="160" alt="スクリーンショット: メモリーを AGENTS.md に書き出す"></a> |
78
+ | **メモリーのメモの出典リンク** | <a id="feature-memorysource"></a>**メモリーを開く** では、チャットから来たメモ(エージェントが保存したもの、ターン後のレビューが残したもの、受け入れた提案)の横に **出典** があります。押すとそのチャットがそのメッセージの位置で開くので、メモを変更・削除する前に、なぜそのメモがあるのかを確認できます。以前のバージョンのメモはチャットだけを開きます。Tether では:チャットのタイトルメニュー → Project memory → Source。 | <a href="assets/features/memorySource.webp"><img src="assets/features/memorySource.webp" width="160" alt="スクリーンショット: メモリーのメモの出典リンク"></a> |
79
+ | **メモリーを別のプロジェクトにコピー** | <a id="feature-memorycopy"></a>**メモリーを開く** でプロジェクトまたは **グローバルメモリー** を選び、**プロジェクトにコピー** を押します。メモにチェックを付け、dsh のプロジェクトを検索して 1 つをクリックすると、チェックしたメモがすべて(トピックと出典ごと)そのプロジェクトのメモリーにコピーされます。1 件でも入らなければ何もコピーされず、理由が表示されます。プロジェクトにすでにあるメモはスキップされます。Tether では:チャットのタイトルメニュー → Project memory → Copy to project。 | <a href="assets/features/memoryCopy.webp"><img src="assets/features/memoryCopy.webp" width="160" alt="スクリーンショット: メモリーを別のプロジェクトにコピー"></a> |
80
+ | **古くなったメモリーのメモを探す** | <a id="feature-memorystale"></a>**メモリーを開く** でプロジェクトを選ぶと、そのメモにあるファイルパス(`コード` 内)、npm スクリプト、ブランチ名が現在のプロジェクトと照合されます。プロジェクトにもうないものを書いたメモには ⚠ と不足しているものが表示されるので、モデルがそれを使う前に直したり削除したりできます。プロジェクトフォルダー内の通常のファイルと git のブランチ一覧 1 つだけを読み、何も変更せず、モデルも呼びません。Tether では:チャットのタイトルメニュー → Project memory。 | <a href="assets/features/memoryStale.webp"><img src="assets/features/memoryStale.webp" width="160" alt="スクリーンショット: 古くなったメモリーのメモを探す"></a> |
81
+ | **このチャットではメモリーを使わない** | <a id="feature-memoryperchat"></a>**プロジェクトメモリー** がオンの間、チャットのヘッダーに **メモリー オン** が表示されます。クリックすると、そのチャットだけメモリーがオフになります(**メモリー オフ**)。そのチャットのモデルにはメモリーのセクションもメモリーツールも渡されず、ターン後のレビューもそのチャットを読みません。dsh 0.2.1 以降では新しいチャット画面にも同じボタンがあるので、テスト用のチャットをメモリーなしで始められます。他のチャットは変わりません。Tether では:チャットのタイトルメニュー → Use project memory。 | <a href="assets/features/memoryPerChat.webp"><img src="assets/features/memoryPerChat.webp" width="160" alt="スクリーンショット: このチャットではメモリーを使わない"></a> |
82
+ | **チャットからメモリーのメモを提案** | <a id="feature-memorysuggest"></a>**プロジェクトメモリー** がオンの間、チャットのヘッダーに **メモリーに提案** があります。クリックすると、このチャットのうち後のチャットのために残す価値のあるルールや決定を、チャットのモデルにたずねます。提案にはそれぞれ理由が表示され、**受け入れる** を押すと元のチャットとメッセージへのリンク付きで保存され、**拒否** を押すと捨てられます。受け入れる前は何も保存されず、モデルはクリックしたときだけ呼ばれます。ロールバックで取り消されたメッセージは送られません。Tether では:チャットのタイトルメニュー → Suggest for memory。 | <a href="assets/features/memorySuggest.webp"><img src="assets/features/memorySuggest.webp" width="160" alt="スクリーンショット: チャットからメモリーのメモを提案"></a> |
76
83
  | **このチャットで許可** | <a id="feature-allowforchat"></a>自動レビューで確認を求められると、承認カードに **このチャットで許可** が表示されます。これを選ぶと、同じチャットの同じツールが、引数にかかわらず、時間制限が終わるまで許可されます(既定は 1 時間。**設定 → Composer Plus → このチャットで許可** で選べます)。その後、エージェントが再び確認します。ヘッダーのチップに許可の一覧が終了時刻とともに表示され、そこから取り消せます。許可は再起動後も有効です。 | <a href="assets/features/allowForChat.webp"><img src="assets/features/allowForChat.webp" width="160" alt="スクリーンショット: このチャットで許可"></a> |
84
+ | **メモを付けて拒否** | <a id="feature-rejectnote"></a>承認カードの **拒否** の横に **メモを付けて拒否…** が表示されます。クリックして理由や代わりにすることを書き、**拒否** をクリックします(または `Enter`。`Shift+Enter` で改行、`Esc` で入力欄を閉じます)。メモはまず待機中のターンへのメッセージとしてエージェントに届き、その後リクエストが拒否されます。モデルは同じターンで拒否とメモを読むので、追加のメッセージは不要です。メモを送信できなかった場合は何も拒否されず、入力欄は開いたままです。Tether では:承認シート → Reject with note。 | <a href="assets/features/rejectNote.webp"><img src="assets/features/rejectNote.webp" width="160" alt="スクリーンショット: メモを付けて拒否"></a> |
85
+ | **シークレット入力** | <a id="feature-secretinput"></a>エージェントはツール `request_secret` を使えるようになります。パスワード、トークン、API キーが必要なとき、チャットで尋ねる代わりにこのツールで求めます。ツールの行にカードが表示され、名前、値が必要な理由、パスワード欄、**保存** と **拒否** が並びます。**保存** を押すと、値はこの Mac 上のあなただけが読めるファイルに書き込まれ、エージェントはファイルのパスだけを受け取って、コマンドの入力として使います(例:`"$(cat <path>)"`)。後のツール結果に値が含まれる場合は、モデルに届く前に `[secret]` に置き換えられます。ファイルはターンの終了時に削除されます。**拒否** はエージェントに値を渡さなかったことを伝えます。ツールを外すには **設定 → Composer Plus** でオフにします。Tether では:入力欄の上の「Secret: …」バー → Enter。 | <a href="assets/features/secretInput.webp"><img src="assets/features/secretInput.webp" width="160" alt="スクリーンショット: シークレット入力"></a> |
86
+ | **返信で引用** | <a id="feature-quotereply"></a>回答の一部を選択すると、選択範囲の上に **引用** ボタンが表示されます。クリックすると、その部分が Markdown の引用(`> …`)として入力欄のカーソル位置に入り、後ろに空行が入ります。入力欄にフォーカスが移るので、その下に返信を書けます。対象は回答の本文だけで、思考過程、ツールの行、自分のメッセージは対象外です。引用は最大 2,000 文字です。`Cmd+Z`(`Ctrl+Z`)で取り消せます。Tether では:回答を長押し → Quote(回答全体)。 | <a href="assets/features/quoteReply.webp"><img src="assets/features/quoteReply.webp" width="160" alt="スクリーンショット: 返信で引用"></a> |
87
+ | **サイドチャット** | <a id="feature-sidechat"></a>入力欄にサイドの質問を入力し、吹き出しボタン(**サイドチャットで質問**)をクリックします。チャットのコピーが開き、dsh の読み取り専用モードで答えます。その間も元のチャットは作業を続けます。コピーはこれまでのチャットを知っていますが、キューでまだ待っているメッセージは含みません。モデルは元のチャットと同じです。コピーの入力欄の上のバーに **持ち帰る** があり、押すと元のチャットが開き、その入力欄に質問(`> ` の引用)と回答が入ります。**チャットに戻る** は元のチャットを開くだけです。サイドチャットは「↳ <質問>」としてサイドバーに残るので、そこでアーカイブします。Tether では:チャットのタイトルメニュー → Side chat…。 | <a href="assets/features/sideChat.webp"><img src="assets/features/sideChat.webp" width="160" alt="スクリーンショット: サイドチャット"></a> |
88
+ | **差分メモ** | <a id="feature-diffcomments"></a>**変更パネル** でファイルの差分を開き、行の **+** をクリックします(範囲にするには同じブロックの 2 行目を Shift+クリック)。メモを書いて **メモを保存** をクリックします。チャットのメモはパネル上部のバーで待機し、**入力欄に送る** で入力欄のカーソル位置に Markdown として入ります:`path:12-14`、`diff` ブロックとしての行、メモ。**消去** で破棄します。メモは送るか消去するまでこのブラウザーに残ります。**変更パネル** が必要です。Tether では:ファイルの差分 → 行を長押し → Add note…。 | <a href="assets/features/diffComments.webp"><img src="assets/features/diffComments.webp" width="160" alt="スクリーンショット: 差分メモ"></a> |
77
89
  | **プロジェクトの状態** | <a id="feature-projectstatus"></a>サイドバーのプロジェクトの行に、そのチャットと同じ実行中/待機中/完了のマーカーが表示されます。そのため、折りたたんだプロジェクトでも、中のチャットが作業中か、あなたの操作を待っているかがわかります。最初に表示されるのはあなたの操作を待っているチャットで、次がまだ開いていない完了済みのチャット(緑色の点。別のチャットがまだ実行中でも表示されます)、その次が実行中のマーカーです。ポインターを合わせると詳細が表示されます。**ワークスペースのツリー** では、親フォルダーの行にも、中にある各プロジェクト(たとえば `.worktrees/` 内の各ブランチのフォルダー)のチャットの状態が表示されます。フォルダーを折りたたんでいるときも同じです。 | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="スクリーンショット: プロジェクトの状態"></a> |
78
90
  | **チャット行の Git ブランチ** | <a id="feature-sessionbranch"></a>サイドバーの「1つのリスト」表示では、各チャット行に、チャットの最後のターンの時点でチャットのプロジェクトフォルダーがあった git ブランチが、小さな灰色のラベルで表示されます(例:`main` や `feature/login`。detached HEAD の場合はブランチがないため、ラベルは表示されません)。同じプロジェクトで別のブランチにある 2 つのチャットが同じに見えることはなくなり、間違ったブランチでチャットを続けようとしているときにすぐ気づけます。ラベルにポインターを合わせると完全な名前が表示されます。ホスト側は、ターンの開始時と終了時にブランチを読み取ります(`git branch --show-current`、読み取り専用)。この機能をインストールしてからターンのないチャットや、git リポジトリではないフォルダーには、ラベルは表示されません。「ワークスペース」と「ワークスペースのツリー」では、チャットがすでにプロジェクト行の下にあるため、どのチャット行にもラベルは表示されません。 | <a href="assets/features/sessionBranch.webp"><img src="assets/features/sessionBranch.webp" width="160" alt="スクリーンショット: チャット行の Git ブランチ"></a> |
79
91
  | **すべて既読にする** | <a id="feature-markprojectread"></a>サイドバーで、プロジェクトの **…** ボタン → **すべて既読にする** をクリックします。そのプロジェクトのすべてのチャットから、緑色の未読の点が一度に消えます。ほかのプロジェクトの点はそのまま残ります。プロジェクトに未読のチャットがない場合、この項目はグレー表示になります(**未読のチャットはありません**)。 | <a href="assets/features/markProjectRead.webp"><img src="assets/features/markProjectRead.webp" width="160" alt="スクリーンショット: すべて既読にする"></a> |
@@ -83,8 +95,11 @@ dsh plugin --profile web add dsh-composer-plus
83
95
  | **状態で並べ替え** | <a id="feature-statusorder"></a>サイドバー → 表示オプション → **並べ替え** → **状態別**(**1つのリスト** と組み合わせます)。完了したチャットが先頭に来ます(dsh の「完了」の点。エラーで終わったターンにもこの点が付きます)。その次に実行中または待機中のチャット、有効なオートメーション(Schedule)があるチャットが続き、残りのチャットは dsh の順序で並びます。完了したチャットを開くと、そのチャットは下に移動します。変わるのは表示だけです。元に戻すには、**手動** または **最終更新日時** を選択します。 | <a href="assets/features/statusOrder.webp"><img src="assets/features/statusOrder.webp" width="160" alt="スクリーンショット: 状態で並べ替え"></a> |
84
96
  | **バックグラウンド通知** | <a id="feature-notifications"></a>dsh がバックグラウンドにあるとき、ターンが完了すると通知が届きます(返信の 1 行目を表示します)。チャットが本当にあなたを待っているときにも通知が届きます。対象は、承認(ツール名)、回答(質問)、計画のレビューです。通知されるのは、1.5 秒後もリクエストが開いたままの場合だけです。そのため、自動で承認されたもの(自動レビューの許可、ほかのプラグイン)は通知されません。また、リクエストに応答すると、その通知はすぐに取り消されます。Dock/タスクバーのバッジは、待機中のチャットの数を示します。通知をクリックすると、そのチャットが開きます。 | <a href="assets/features/notifications.webp"><img src="assets/features/notifications.webp" width="160" alt="スクリーンショット: バックグラウンド通知"></a> |
85
97
  | **操作がないときに待機中のチャットを開く** | <a id="feature-idleswitch"></a>チャットが質問をしたり、承認や計画のレビューを待っていたり(オレンジ色の点)、まだ読んでいないターンを完了したり(緑色の点)するときに、dsh を 30 秒間操作しないと、dsh はそのチャットを開きます。オレンジ色のチャットは緑色のチャットより先に開きます。それぞれの中では、最も長く待っているチャットから開き、次のチャットはさらに 30 秒操作がないと開きます。キー入力、クリック、マウスの移動、スクロールホイール、タッチがあると 30 秒を数え直します。フォーカスのある入力欄にテキストがあるとき、テキストを選択しているとき、メニューやダイアログが開いているときも切り替えません。待機中のチャットが画面に表示されている間は何も変わりません。回答せずに待機中のチャットから離れると、次に 30 秒間操作がないときに、そのチャットが再び開くことがあります。緑色のチャットが開くと、その点は消えます。次の緑色のチャットは、もう一度 dsh を操作し、その後 30 秒間操作がないときに開きます。dsh がバックグラウンドにあるときも動作しますが、dsh は前面に出ません。 | <a href="assets/features/idleSwitch.webp"><img src="assets/features/idleSwitch.webp" width="160" alt="スクリーンショット: 操作がないときに待機中のチャットを開く"></a> |
98
+ | **次の待機中のチャット** | <a id="feature-nextwaiting"></a>サイドバーのヘッダーにあるボタンに、あなたを待っているほかのチャットの数と、次のチャットの色の点が表示されます。質問をしたり、承認や計画のレビューを待っていたりするときはオレンジ色、まだ読んでいないターンを完了したときは緑色です。ボタンをクリックするか Cmd+Shift+E(Windows と Linux では Ctrl+Shift+E)を押すと、そのチャットを開きます。オレンジ色のチャットが緑色のチャットより先で、それぞれの中では最も長く待っているチャットが先です。画面に表示中のチャットは数えません。ほかに待っているチャットがないときは、ボタンは表示されず、キーも何もしません。キーは dsh のキーボードショートカットのページ(次の待機中のチャット)で変更できます。 | <a href="assets/features/nextWaiting.webp"><img src="assets/features/nextWaiting.webp" width="160" alt="スクリーンショット: 次の待機中のチャット"></a> |
99
+ | **選択肢ボタン** | <a id="feature-optionpicks"></a>回答が選択肢のリスト(「選択肢」見出しまたは太字の「選択肢」行の下にある 1~9 項目の番号付きリスト。「次のステップ」やアプリの各言語の同じ語も対象)で終わると、回答の下に選択肢ごとのボタンが表示されます。クリックすると、選択肢全体を含む「Option N: …」が、入力したのと同じようにあなたのメッセージとして送信されます。「(推奨)」の付いた選択肢は強調されます。ボタンは最新の回答の下にだけ、チャットが待機中で入力欄が空のときに表示されます。選択済みの回答と、ロールバックで取り消された回答には表示されません。ボタンの表示中は、次のメッセージの予測は候補を出しません。エージェントの質問カードでは、1~9 キーでクリックと同じくその選択肢を選べます(回答欄の中と、質問が表示されてから最初の 0.8 秒間は除く)。 | <a href="assets/features/optionPicks.webp"><img src="assets/features/optionPicks.webp" width="160" alt="スクリーンショット: 選択肢ボタン"></a> |
86
100
  | **アプリケーションの言語** | <a id="feature-language"></a>設定 → Composer Plus → **アプリケーションの言語** で、dsh のインターフェース全体を Türkçe、Español、Português (Brasil)、Français、Deutsch、Русский、日本語、한국어、Bahasa Indonesia、Tiếng Việt、हिन्दी のいずれかに切り替えます(下記を参照)。 | <a href="assets/features/language.webp"><img src="assets/features/language.webp" width="160" alt="スクリーンショット: アプリケーションの言語"></a> |
87
101
  | **モバイル接続(iPhone)** | <a id="feature-mobileconnect"></a>[Tether](tether/) アプリを使うと、同じ Wi-Fi で、または [Tailscale](https://tailscale.com) 経由で、iPhone から dsh を使えます。**設定 → Composer Plus** でオンにしてください(この Mac でネットワークポートを開くため、既定ではオフです)。次に、サイドバーの左下にある **モバイル接続** をクリックします。iPhone のカメラ(**Open in Tether** をタップ)または Tether の **Scan code** で QR コードを読み取り、**Connect** をタップして、**Approve** をクリックします。先に Tether をインストールしてください。Tether がないと、カメラはこのコードを開けません。スマートフォンでは、チャットの表示、メッセージの送信(写真付き:入力欄の **+** → Camera、Photos、Paste image)、承認と質問への回答、モデルとエージェントの切り替えができます。ペアリングできる Mac の数に制限はありません。アプリの左上にある Mac の名前で、Mac を切り替えます。**モバイル接続** パネルには、ペアリング済みの iPhone が最後の接続日時とともに表示され、**Remove** でその iPhone をすぐに切断できます。「Tailscale only」はローカルネットワークからの接続を拒否し(共有の Wi-Fi 向け)、アクセスログには接続を試みた相手が表示されます。Tether では、「Settings → Privacy」で Face ID によるアプリのロックを設定できます。 | <a href="assets/features/mobileConnect.webp"><img src="assets/features/mobileConnect.webp" width="160" alt="スクリーンショット: モバイル接続(iPhone)"></a> |
102
+ | **リモートコンピュータ** | <a id="feature-remotecomputers"></a>[Tailscale](https://tailscale.com) 経由でほかの Mac の dsh を開き、そのチャットをここで続けられます。各 Mac の **設定 → Composer Plus** でオンにしてください(ネットワークポートを開くため、既定ではオフです)。開きたい Mac で **ほかのコンピュータからこの Mac を開けるようにする** をオンにし、**ペアリングリンクを作成** をクリックして、リンクをコピーします。この Mac では、チャットのタイトルの左にあるコンピュータの選択メニューで **コンピュータを追加…** を選び、リンクを貼り付けて **接続** をクリックします。次に、もう一方の Mac で **承認** をクリックします。以後、選択メニューには **この Mac** とあなたのコンピュータが表示されます。1 台を選ぶと、その dsh が右サイドバーのブラウザタブ(またはブラウザのウインドウ)で開き、そのコンピュータ自身のチャット、ツール、ファイルを使えます。設定パネルでは、コンピュータの名前の変更と削除ができ、この Mac を開けるコンピュータの一覧も表示されます(**削除** でその 1 台をすぐに切断できます)。 | <a href="assets/features/remoteComputers.webp"><img src="assets/features/remoteComputers.webp" width="160" alt="スクリーンショット: リモートコンピュータ"></a> |
88
103
  | **自動アップデート** | <a id="feature-autoupdate"></a>dsh の起動時に、プラグインは [GitHub の最新リリース](https://github.com/furkancak1r/dsh-composer-plus/releases/latest) を確認します。そのリリースのほうが新しく、すでに npm にある場合は、dsh 標準のプラグインマネージャー(設定 → プラグインと同じ経路)でそのバージョンをインストールし、通知します。読み込むには、dsh を再起動してください。**設定 → Composer Plus → Composer Plus のアップデート** にはバージョンが表示され、**アップデートを確認** / **今すぐアップデート** のボタンがあります。新しいバージョンで dsh を初めて起動すると、**Composer Plus N の新機能** ウィンドウにそのバージョンのリリースノートが **アプリケーションの言語** で選んだ言語で 1 回だけ表示されます(ノートは新しいバージョンに含まれていて、追加の通信はありません。その言語のノートがない場合は英語のノートが表示されます)。**閉じる** または `Esc` で閉じます。 | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.webp" width="160" alt="スクリーンショット: 自動アップデート"></a> |
89
104
  | **バックアップ** | <a id="feature-backup"></a>設定 → Composer Plus → **バックアップ** → **今すぐバックアップ** で、dsh のホーム全体(チャット、設定、プラグイン、MCP、スキル)を、チェックサム付きで `~/Desktop/dsh-backups` 内の 1 つのアーカイブに書き込みます。アーカイブ内のシークレットはマスクされます。認証情報ファイル、鍵ファイル(`.pem`、`.key`)、yml 設定の token、secret、password の値は、このコンピュータ上のフォルダーの `vault` にだけ残ります。`cache/`、`dsh-runtimes/`、`node_modules` はアーカイブに入りません(dsh が作り直します)。一覧の各バックアップには、**チェック**(全体を読み取ります)、**別のコンピュータ用**(新しいコンピュータにコピーするフォルダーで、レスキューコンソールを含みます)、**削除** があります。同じフォルダーにある dsh-backup のアーカイブも表示され、使えます。復元するには、dsh を終了してレスキューコンソールを使います。 | <a href="assets/features/backup.webp"><img src="assets/features/backup.webp" width="160" alt="スクリーンショット: バックアップ"></a> |
90
105
  | **自動バックアップ** | <a id="feature-autobackup"></a>**自動バックアップ** をオンにします(既定ではオフです。各コピーは、キャッシュを除いた dsh のホームとほぼ同じ大きさになります)。頻度(**間隔**:6 時間から 7 日、既定は 24 時間)と、残すバックアップの数(**保持**:3 から 14、既定は 7)を選びます。次回の時刻はスイッチの下に表示されます。失敗したバックアップもそこに表示され、30 分後に再試行されます。dsh または Composer Plus が新しいバージョンで起動すると、起動後まもなく、新しいバージョンがデータを長く使う前にスナップショットを作成します(最新の 2 つが残り、**アップグレード前** と表示されます)。 | <a href="assets/features/autoBackup.webp"><img src="assets/features/autoBackup.webp" width="160" alt="スクリーンショット: 自動バックアップ"></a> |
@@ -137,6 +152,9 @@ English · 中文 · Türkçe · Español · Português (Brasil) · Français ·
137
152
  | Mac では `Cmd+F`、Windows と Linux では `Ctrl+F` | 開いているチャット | **チャット内を検索** を開く |
138
153
  | `Enter` / `Shift+Enter`、`↓` / `↑` | **チャット内を検索** のボックス | 次 / 前の一致 |
139
154
  | `Esc` | **チャット内を検索** のボックス | ボックスを閉じる |
155
+ | Mac では `Cmd+Shift+E`、Windows と Linux では `Ctrl+Shift+E` | dsh のどこでも | **次の待機中のチャット** を開く(dsh のキーボードショートカットのページで変更可能) |
156
+ | Mac では `Cmd+Shift+K`、Windows と Linux では `Ctrl+Shift+K` | dsh のどこでも | **タスクボード** を開く(dsh のキーボードショートカットのページで変更可能) |
157
+ | `1`–`9` | dsh の質問カード(回答欄の中を除く) | その選択肢を選ぶ(**選択肢ボタン**) |
140
158
 
141
159
  `/` または `@` のメニューが開いているときは、これらのキーはメニューが使います。
142
160
 
@@ -162,17 +180,20 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
162
180
  - **このチャットで許可:** 許可は、許可した時刻とともに `$DSH_HOME/storages/dsh-composer-plus/chat-grants.json`(所有者のみのアクセス権)に保存されます。1 つの許可の対象は、1 つのチャットの 1 つの特定のツールで、時間制限が終わるまで有効です(既定は 1 時間)。そのツールが書き込みできる場合は、あらゆる書き込みも許可の対象になります。許可は、ヘッダーのチップから取り消します。
163
181
  - 自動レビューは、引き続きすべての呼び出しで実行されます。レビューの失敗が自動で許可されることはありません。
164
182
  - **モバイル接続:** オンにするまではオフです。オンの間、ホスト側は Tether ゲートウェイを実行します。ゲートウェイは、ポート 19390 の HTTPS(Wi-Fi のサブネットと tailnet(100.64.0.0/10)からの接続だけを受け付けます)と、`127.0.0.1:19391` のペアリングページ(この Mac からのみ)で構成されます。スマートフォンを接続するには、QR コードに含まれる 1 回限りのコード(5 分間有効)と、Mac での **Approve** が必要です。スマートフォンは、ゲートウェイの証明書を固定(ピン留め)します。Mac が保存するのは、各スマートフォンのトークンのハッシュだけです(30 日間有効で、使用中は更新されます)。**Remove** をクリックすると、そのスマートフォンの接続をすぐに切断します。スマートフォンから呼び出せるのは、許可リストにある dsh のメソッド(チャット、プロンプト、添付ファイル、スラッシュコマンド、承認、質問、モデル、エージェント、目標)だけです。設定、認証情報、ファイルブラウザー、ターミナルは呼び出せません。「Tailscale only」は、ローカルネットワークからのすべての接続を拒否し、すでに開いている接続も切断します。アクセスログは、最新 200 件の接続の試み(時刻、IP アドレス、デバイス名、許可か拒否か、その理由)を `access.json` に保存します。トークンやペアリングコードは保存しません。データ:`$DSH_HOME/storages/dsh-composer-plus/mobile/`(所有者のみのファイル)。詳細:[tether/README.md](tether/README.md)。
183
+ - **リモートコンピュータ:** 各 Mac でオンにするまではオフです。**ほかのコンピュータからこの Mac を開けるようにする** は、2 つ目の HTTPS ポート(19392)を、この Mac の Tailscale アドレスだけで開きます(Wi-Fi では開かず、Bonjour でも知らせません)。別の Mac が接続するには、1 回限りのペアリングリンク(5 分間有効)、対応する証明書(固定)、あなたの **承認** が必要です。この Mac が保存するのは、そのトークンのハッシュだけです。ペアリングしたコンピュータは、ここで使うのと同じように、この Mac の dsh を完全に操作できます。チャット、モデル、ツール、ファイル、ターミナルも操作できます。設定パネルで削除すると、その接続はすぐに切れます。別の Mac を開く側の Mac は、そのコンピュータのトークンを `$DSH_HOME/storages/dsh-composer-plus/computers.json`(所有者のみのファイル)に保存します。選んだコンピュータごとに、`127.0.0.1` でリレーを開きます。ページは 1 回限りのリンク(60 秒間有効)を受け取ります。リレーが受け付けるのは自分のページ(自分のアドレス)だけで、ほかのサイトは受け付けません。別の Mac が開いたページには、コンピュータの選択メニューが表示されず、この Mac のコンピュータを変更することもできません。
165
184
  - **アップデート:** ホスト側は、`api.github.com` に最新のリリースを問い合わせ、`registry.npmjs.org` にそのバージョンを問い合わせます。あなたやあなたのチャットに関する情報は送信しません。インストールには dsh のプラグインマネージャー(`pnpm add dsh-composer-plus@<version>`。インストール済みのプラグインに対して dsh 0.2.1 がこれを拒否する場合は `pnpm add https://registry.npmjs.org/dsh-composer-plus/-/dsh-composer-plus-<version>.tgz`。その場合、プロファイルにはその URL がプラグインのソースとして記載されます)を使うため、dsh 標準のレジストリ、スクリプト、バージョン互換性のチェックが適用されます。プレリリースのタグや古いバージョンがインストールされることはありません。
185
+ - **利用数のカウント:** ホスト側は 1 日 1 回、インストールしたバージョンのリリースにある小さなファイル `active.txt`(`github.com/furkancak1r/dsh-composer-plus/releases/download/v<version>/active.txt`)を GitHub に要求します。GitHub はこの要求をファイルごとに数えるため、作者に見えるのは、その日に各バージョンの何個のコピーが要求したかという数だけです。要求には ID、Cookie、あなたやあなたのチャットに関するデータは含まれません。アップデートの確認と同じく、GitHub にはあなたの IP アドレスが見えます。最後に要求した日は `$DSH_HOME/storages/dsh-composer-plus/active.json` に保存されます。このリポジトリの git チェックアウトと名前を変えたコピーは何も送信しません。この機能のスイッチはありません。
166
186
  - **次のメッセージの予測:** 既定ではオンです。このモデル呼び出しを止めるには、**設定 → Composer Plus** でオフにしてください。ターンが終わるたびに、ホスト側は、そのチャットでのあなた自身のメッセージと、エージェントのテキストの返信(ツールの出力、隠れたコンテキスト、推論は含みません)を、最大で約 6,000 文字(最新の部分)、選んだモデル(別のモデルを選ばない限り dsh の既定のモデル)に送ります。送信は、dsh 標準のプロバイダー設定を通じた 1 回のリクエストです。チャットには何も保存しません。予測がチャットの履歴に追加されることはありません。スイッチと選んだモデルは `$DSH_HOME/storages/dsh-composer-plus/predict.json`(所有者のみのファイル)に保存されます。
167
187
  - **入力中に補完:** オンにするまではオフです。オンの間は、入力が止まるたびに、ホスト側が、それまでに入力したテキストと、そのチャットでのあなた自身のメッセージ、エージェントのテキストの返信(ツールの出力、隠れたコンテキスト、推論は含みません)を、**入力中に補完** で選んだモデル(既定では **次のメッセージの予測** のモデル)に送ります。チャットの部分は最大で約 3,000 文字です。次に入力が止まると、前のリクエストは止まります。チャットには何も保存しません。スイッチは `$DSH_HOME/storages/dsh-composer-plus/complete.json`(所有者のみのファイル)に保存されます。
168
188
  - **プロンプトを改善:** 魔法の杖をクリックするまで、何も実行されません。クリックすると、ホスト側は次の内容を、**プロンプトを改善** で選んだモデル(既定ではチャット自身のモデル)に 1 回のリクエストとして送ります。下書き、そのチャットでのあなた自身のメッセージとエージェントのテキストの返信(ツールの出力、隠れたコンテキスト、推論、ロールバックで取り消したメッセージは含みません。最大で約 6,000 文字、最新の部分)、**機能のアイデア** と同じプロジェクトの概要(ファイルのルールも同じです。`.env*` や鍵ファイルは読まず、フォルダーの外を指すシンボリックリンクや FIFO はスキップします)、`git status` が変更ありとして示すパス、名前に下書きと共通の言葉を含む、追跡済みまたは未追跡(無視されていない)のパス最大 30 件です。この概要以外のファイルの内容は送りません。チャットにもプロジェクトにも何も書き込みません。回答は入力欄の下書きを置き換えるだけで、送信するかどうかはあなたが決めます。モデルの選択は `$DSH_HOME/storages/dsh-composer-plus/improve.json`(所有者のみのファイル)に保存されます。
169
189
  - **目標チェック:** 自動ラウンドでエージェントが `/goal` を完了にしたとき(または **今すぐ実行** をクリックしたとき)だけ実行されます。ホスト側は、テストコマンドをチャットのフォルダーで、チャットのサンドボックスモードのもとで実行します(dsh 自身の `bash` ツールと同じで、ファイルアクセスのポリシーも同じです。そのサンドボックスを開始できないときは、テストを実行せず、チェックは失敗します)。コマンドを見つけるために読むのは `package.json`、`Makefile`、`Cargo.toml`、`go.mod`、`pyproject.toml`、`pytest.ini` だけで、フォルダー内の通常のファイルとしてだけ読みます(フォルダーの外を指すシンボリックリンクや FIFO は読みません)。次に、ツールなしの 1 回のリクエストとして、**目標チェック** で選んだモデル(既定ではチャット自身のモデル)に次の内容を送ります。目標、目標の開始以降のチャット(あなたのメッセージ、エージェントの返信、1,000 文字に切り詰めたツール呼び出し、各ツール結果の最後の 2,000 文字。推論とロールバックで取り消したステップは含みません。最大で約 60,000 文字、最新の部分)、`git status --short`、テスト出力の末尾です。ツールの出力にはエージェントが読んだ内容が含まれることがあるため、このリクエストには、チャットそのものと同じように、あなたのファイルの一部が含まれることがあります。チャットにもプロジェクトにも何も書き込みません。テストコマンド、制限、最後の結果(出力の末尾を含む)、モデルの選択は `$DSH_HOME/storages/dsh-composer-plus/goal-check.json`(所有者のみのファイル、最新の 500 チャット)に保存されます。
170
190
  - **新しいチャットで続ける:** クリックするまで、何も実行されません。クリックすると、ホスト側はチャット(目標チェックと同じ読み方です。推論とロールバックで取り消したステップは含みません)をチャット自身のモデルに送り、引き継ぎメモを表示します。新しいチャットを作るのは **新しいチャットを開始** だけです。プロジェクトには何も書き込みません。
171
191
  - **コンテキストの内訳:** ホスト側でチャットのログだけを読みます。モデル呼び出しはせず、プロジェクトのファイルも読みません。
172
- - **タスクボード:** ボードは、このウィンドウにある dsh 自身の一覧から、dsh 自身のチャットを表示します。独自のチャットデータは追加しません。**新しいタスク** は dsh 自身の新しいチャットを開き、最初のメッセージはあなたが dsh の入力欄で書きます。そのため、承認、サンドボックス、チャットのモデルはいつもどおり適用されます。ホスト側は、そのチャットの最初のメッセージをカードのプロンプトとして保存し、最大 3 個のタグを得るために、それ(最初の 4,000 文字だけで、ほかには何も送りません)を、ツールなしのもう 1 回のリクエストでそのチャットのモデルに送ります。各タスクのプロンプト、タグ、開始時刻は `$DSH_HOME/storages/dsh-composer-plus/board-chats.json`(所有者のみのファイル、最新の 2,000 件)に保存されます。スイッチはその隣の `board-switch.json` にあります。プロジェクトのフォルダーには何も書き込みません。**回答** は、チャット自身のカードと同じ方法で、dsh 自身の保留中のリクエストに回答を送ります。以前のバージョンの古いタスク一覧(`board.json`)はディスク上にそのまま残り、読み込まれません。**ホバーで進行状況を表示** は、この Mac 上でチャットのログを読みます。**高速(AI なし)**(既定)では何も送りません。**AI の要約** では、実行中のカードの進行状況ボックスが表示されている間(または Tether のボードが開いている間、実行中のカード最大 8 枚について)、ホスト側がそのチャットの最新の部分(最大で約 6,000 文字。あなたのメッセージ、エージェントのテキストの返信、そのツール呼び出しと結果の末尾。推論とロールバックで取り消したメッセージは含みません)を、ツールなしの 1 回のリクエストでチャットのモデルに送ります。再び送るのはチャットが進んだ後だけで、チャットごとに最大 20 秒に 1 回です。メモはメモリーにだけ保持されます。設定は `$DSH_HOME/storages/dsh-composer-plus/board-progress.json`(所有者のみのファイル)にあります。
192
+ - **タスクボード:** ボードは、このウィンドウにある dsh 自身の一覧から、dsh 自身のチャットを表示します。独自のチャットデータは追加しません。**新しいタスク** は dsh 自身の新しいチャットを開き、最初のメッセージはあなたが dsh の入力欄で書きます。そのため、承認、サンドボックス、チャットのモデルはいつもどおり適用されます。ホスト側は、そのチャットの最初のメッセージをカードのプロンプトとして保存し、最大 3 個のタグを得るために、それ(最初の 4,000 文字だけで、ほかには何も送りません)を、ツールなしのもう 1 回のリクエストでそのチャットのモデルに送ります。各タスクのプロンプト、タグ、開始時刻は `$DSH_HOME/storages/dsh-composer-plus/board-chats.json`(所有者のみのファイル、最新の 2,000 件)に保存されます。**×** または **すべてクリア** でボードから外したチャットの ID(最新の 5,000 件)も、このファイルに保存されます。スイッチはその隣の `board-switch.json` にあります。プロジェクトのフォルダーには何も書き込みません。**回答** は、チャット自身のカードと同じ方法で、dsh 自身の保留中のリクエストに回答を送ります。以前のバージョンの古いタスク一覧(`board.json`)はディスク上にそのまま残り、読み込まれません。**ホバーで進行状況を表示** は、この Mac 上でチャットのログを読みます。**高速(AI なし)**(既定)では何も送りません。**AI の要約** では、実行中のカードの進行状況ボックスが表示されている間(または Tether のボードが開いている間、実行中のカード最大 8 枚について)、ホスト側がそのチャットの最新の部分(最大で約 6,000 文字。あなたのメッセージ、エージェントのテキストの返信、そのツール呼び出しと結果の末尾。推論とロールバックで取り消したメッセージは含みません)を、ツールなしの 1 回のリクエストでチャットのモデルに送ります。再び送るのはチャットが進んだ後だけで、チャットごとに最大 20 秒に 1 回です。メモはメモリーにだけ保持されます。設定は `$DSH_HOME/storages/dsh-composer-plus/board-progress.json`(所有者のみのファイル)にあります。
173
193
  - **保護されたファイル:** リストとスイッチは `$DSH_HOME/storages/dsh-composer-plus/protected-files.json`(所有者のみのファイル)にあります。チェックが読むのは、各ファイルツール呼び出しのパス(とその実際のパス)だけで、ファイルそのものは読みません。
174
194
  - **ブロックされたコマンド:** ルールとスイッチは `$DSH_HOME/storages/dsh-composer-plus/blocked-commands.json`(所有者のみのファイル)にあります。チェックが読むのは、各 `bash` と `pwsh` 呼び出しのコマンドテキストだけです。何も実行せず、何も送信しません。
175
- - **プロジェクトメモリー:** オンにするまではオフです。オンの間は、最上位のチャットのターンが終わるたびに、Host 側が、前回の確認以降のそのチャット自身の新しいメッセージ(あなたのメッセージとエージェントのテキスト返信。ツールの出力、推論、隠しコンテキスト、ロールバックしたメッセージは含みません。分岐したチャットでは、親チャットからのコピーは除きます。最大約 16,000 文字)と保存済みのメモを、ツールなしの 1 回のリクエストとしてチャット自身のモデルに送ります。メモは `$DSH_HOME/storages/dsh-composer-plus/memory/` にある Markdown ファイル(所有者だけが読み書きできます)です。プロジェクトのフォルダーごとの `projects/<id>/`(`<id>` はフォルダーの実際のパスのハッシュで、`project.json` にフォルダーを記録します)、`global/`、`journal.jsonl`(各変更と、変更前後の行)、`reviewed.json`(各チャットをどこまで読んだか)があります。プロジェクトのフォルダーには何も書き込みません。キー、トークン、パスワード、ID 番号のように見えるメモは拒否します。プロジェクトのメモはそのフォルダーの新しいチャットのシステムプロンプトに入るので、そのチャットのリクエストごとにモデルに送られます。スイッチは同じ場所の `memory.json` にあります。**メモリーを開く** は、**変更をプレビュー** を押すまで何も送りません。押すと、表示しているメモとあなたの文章を、ツールなしの 1 回のリクエストとして dsh の既定のモデルに送ります。変更は **適用** を押したときだけ書き込まれ、ジャーナルには `editor` と記録されます。Tether も同じルートでメモを読み、変更します。
195
+ - **シークレット入力:** 値は回答リクエストの中だけで、カードから(または Tether から、リクエスト本文を記録しないゲートウェイ経由で)Host に送られます。Host は値を `$DSH_HOME/storages/dsh-composer-plus/secrets/<ランダムな名前>` に書き込みます(フォルダ 0700、ファイル 0600)。プロジェクト、チャットの記録、ツール結果には何も書き込まれません。Host はそのチャットの後のツール結果で値を `[secret]` に置き換えるため、値をメモリに保持します。ファイルとこのコピーは、そのチャットのターンが終わったときと dsh の起動時に削除されます。スイッチは同じ場所の `secrets.json` にあります。エージェントがこのファイルを使って実行するコマンドは、そのコマンドの送信先に値を送れます。それがこの機能の目的です。
196
+ - **プロジェクトメモリー:** オンにするまではオフです。オンの間は、最上位のチャットのターンが終わるたびに、Host 側が、前回の確認以降のそのチャット自身の新しいメッセージ(あなたのメッセージとエージェントのテキスト返信。ツールの出力、推論、隠しコンテキスト、ロールバックしたメッセージは含みません。分岐したチャットでは、親チャットからのコピーは除きます。最大約 16,000 文字)と保存済みのメモを、ツールなしの 1 回のリクエストとしてチャット自身のモデルに送ります。メモは `$DSH_HOME/storages/dsh-composer-plus/memory/` にある Markdown ファイル(所有者だけが読み書きできます)です。プロジェクトのフォルダーごとの `projects/<id>/`(`<id>` はフォルダーの実際のパスのハッシュで、`project.json` にフォルダーを記録します)、`global/`、`journal.jsonl`(各変更と、変更前後の行)、`reviewed.json`(各チャットをどこまで読んだか)があります。プロジェクトのフォルダーには何も書き込みません。キー、トークン、パスワード、ID 番号のように見えるメモは拒否します。プロジェクトのメモはそのフォルダーの新しいチャットのシステムプロンプトに入るので、そのチャットのリクエストごとにモデルに送られます。スイッチは同じ場所の `memory.json` にあります。**メモリーを開く** は、**変更をプレビュー** を押すまで何も送りません。押すと、表示しているメモとあなたの文章を、ツールなしの 1 回のリクエストとして dsh の既定のモデルに送ります。変更は **適用** を押したときだけ書き込まれ、ジャーナルには `editor` と記録されます。Tether も同じルートでメモを読み、変更します。 **メモリーのバージョン履歴**(既定でオン)は、保存のたびにその前のメモリーファイルのコピーを隣の `memory/history/` に残します(所有者のみのファイル、メモリーごとに最新 50 件)。モデルには何も送りません。 **メモリーを AGENTS.md に書き出す** はモデルに何も送らず、**AGENTS.md に書き込む** を押したときだけ書き込みます。そのメモリーのプロジェクトフォルダー内の `AGENTS.md` だけを読み書きし(フォルダー内の通常のファイルのみ。フォルダーの外へ出るシンボリックリンクは通しません)、目印付きセクションだけを変更します。 **古くなったメモリーのメモを探す** はモデルに何も送らず、何も書きません。プロジェクトフォルダー内のパスを realpath で確かめ(ファイルの中身は読みません)、`package.json` はフォルダー内の通常のファイルとしてだけ読み、そこで `git for-each-ref` を 1 回実行します。 **このチャットではメモリーを使わない** は、オフにした各チャットを隣の `memory-chats.json` に保存します(所有者のみのファイル、最新 500 件)。そうしたチャットはモデルにメモリーを送りません。 **チャットからメモリーのメモを提案** は、**メモリーに提案** を押すまで何も送りません。押すと、チャットのプロジェクトの保存済みメモとグローバルメモ、そしてチャット自身のメッセージとテキストの返答(ツール出力とロールバックしたメッセージは含みません。フォークの親からのコピーは送りません。最大約 24,000 文字)を、ツールなしの 1 回のリクエストとしてチャット自身のモデルに送ります。提案は **受け入れる** を押したときだけ保存されます。
176
197
  - **バックアップ:** データがマシンの外に出ることはありません。アーカイブは `~/Desktop/dsh-backups` に保存されます(所有者のみのファイル)。シークレットはアーカイブに含まれません。認証情報ファイル(`.credentials.yaml`、`.env`)、鍵ファイル(`.pem`、`.key`、`.p12`、`.pfx`)、yml ファイル内の token、secret、password、API キーの設定の値はマスクされます。それらの実際のコピーは、同じフォルダーの `composer-plus-vault/<archive>/`(所有者のみ)に、このコンピュータ上にだけ残ります。**別のコンピュータ用** は vault をコピーしません。それらのシークレットは、移行先でもう一度入力してください。チャットのログ、設定、dsh のホームのその他の内容は、そのままアーカイブに入ります。`$DSH_HOME` そのものと同じように、フォルダーを非公開にしておいてください。バックアップは `O_NOFOLLOW | O_NONBLOCK` でファイルを読み取ります。シンボリックリンクはリンクとして保存し(リンク先はたどりません)、FIFO やデバイスはスキップします。自動バックアップのスイッチと設定は `$DSH_HOME/storages/dsh-composer-plus/auto-backup.json` に、レスキューコンソールのスイッチは `rescue-console.json` に保存されます。dsh の実行中は、`running/host-<pid>.json` が各 dsh プロセスを示します(レスキューコンソールはこれらを読み取り、復元を拒否します)。
177
198
  - **レスキューコンソール:** ターミナルのメニューです。ネットワークポートは開きません。復元は、dsh のホームの隣にある新しいフォルダーにだけ書き込みます(ファイルは `O_EXCL | O_NOFOLLOW` で書き込み、シンボリックリンクは最後に作成し、たどりません)。安全でない名前(`..`、絶対パス)、デバイスや FIFO、複数の最上位フォルダー、リンクの下のエントリーを含むアーカイブは拒否します。
178
199
 
@@ -194,7 +215,7 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
194
215
  - **チャット行にブランチのラベルがない:** 原因は次のいずれかです。サイドバーが「1つのリスト」表示ではない(「ワークスペース」と「ワークスペースのツリー」では、どのチャット行にもラベルは表示されません)。このバージョンをインストールしてから、そのチャットにターンがない。フォルダーが git リポジトリではない。**チャット行の Git ブランチ** がオフになっている。アップデートの後は、dsh を再起動してください(ブランチはホスト側が記録します)。
195
216
  - **目標チェックで、テストが終了コード 127 または「not found」で終了したと表示される:** Finder や Dock から起動した dsh は、ターミナルより PATH が短いことがあるため、`npm`、`pnpm`、`cargo` が見つかりません。ターミナルから dsh を起動するか、**目標チェック** → **編集** で、フルパスを使った独自のテストコマンドを設定してください。**今すぐ実行** を使うと、すぐに結果が表示されます。
196
217
  - **目標が閉じず、エージェントが作業を続ける:** **目標チェック** が、失敗したテストまたは足りない作業を見つけました。目標の下の行に理由が表示されます(詳細は、結果にポインターを合わせると表示されます)。原因またはテストコマンドを直すか、`/goal` または目標バーで目標を自分で完了してください(その完了はチェックされません)。
197
- - **リリース直後にインストールが失敗する:** バージョンを指定してください(`dsh-composer-plus@1.20.0`)。上のインストールの注記を参照してください。
218
+ - **リリース直後にインストールが失敗する:** バージョンを指定してください(`dsh-composer-plus@1.21.0`)。上のインストールの注記を参照してください。
198
219
  - **今すぐバックアップ で「別のバックアップ操作を実行中です」と表示される:** 別の dsh のウィンドウ、またはレスキューコンソールで操作が実行中です(どちらも、バックアップフォルダーのロックファイル `.composer-plus.lock` を共有します)。完了するまで待ってください。実行中の操作がない場合は、次のクリックで、終了したプロセスのロックを引き継ぎます。
199
220
  - **レスキューコンソールで「dsh is running」と表示される:** まず dsh を終了してください。dsh が本当に閉じている場合、メッセージに示されたファイルはクラッシュで残ったものです。そのファイルを削除して、もう一度試してください。
200
221
  - **復元の後に dsh が起動しない、またはプラグインが見つからない:** プロファイルのプラグインパッケージを、もう一度インストールする必要があります。レスキューコンソールが、復元の後にこれを提案します。または、コンソールが一覧表示する `$DSH_HOME/profiles/` の下の各フォルダーで `pnpm install` を実行してください。vault に入っていなかったシークレット(別のコンピュータ)は、もう一度入力する必要があります。コンソールがそれらを一覧表示します。
@@ -215,11 +236,17 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
215
236
  - dsh のキューには `move` 操作がないため、プラグインのホスト側が、dsh のキューの中でメッセージそのものを移動します(1 回の変更で、同じメッセージのままです)。画像やファイルを含むメッセージも移動できます。移動できるのは自分のメッセージだけです。キュー内の目標のラウンドや質問への回答は、その位置から動きません。ドラッグ中にメッセージの送信が始まった場合は、何も移動せず、そのことを知らせる通知が表示されます。
216
237
  - 新しいバージョンが dsh の設定を何も変更しない場合、dsh 0.2.1 はアップデートをすぐに読み込みます。それ以外の場合と dsh 0.2.0 では、読み込むには dsh を再起動してください。プラグインが dsh を自動で再起動することはありません。dsh のプラグインマネージャーがない Web/CLI プロファイルでは、新しいバージョンがあることを知らせるだけです。
217
238
  - **Composer Plus N の新機能** は、**アプリケーションの言語** の言語でノートを表示します。別の地域を指定した UI 言語には、その基本言語のノートが表示されます(`en-GB` には英語のノート、`zh-TW` には `zh` の中国語のノート)。ノートがない言語(別の言語パックが追加した言語や、`pt-BR` ではない `pt-PT`)では、英語のノートが表示されます。ノートは新しいバージョンに含まれています。実行中のコピーに読み取れるノートファイル(`release-notes.json`)がない場合は、GitHub の英語のノートが表示されます。
239
+ - **メモを付けて拒否** は、メモを待機中のターンへのメッセージとして送ってから、リクエストを拒否します。dsh はメモをチャットにあなたのメッセージとして表示します。メモの入力欄が開いている間、カードには **キャンセル** と **拒否** だけが表示されるため、誤ってクリックしてリクエストを許可することはありません。`Esc` または **キャンセル** で dsh のボタンが戻ります。空のメモは何も送信しません(dsh 自身の **拒否** を使ってください)。メモを送った後で拒否が失敗した場合(たとえば、その間にリクエストが別の場所で回答された場合)、メモはチャットに残り、モデルは次のステップでそのメモを読みます。dsh にはカードの操作用のスロットがないため、ボタンは dsh の承認カードのマークアップ(`data-approval-key`)に入れています。dsh のアップデートでそのマークアップが変わった場合、ボタンは表示されませんが、dsh 自身の **拒否** はこれまでどおり使えます。メモは最大 4,000 文字です。
240
+ - **シークレット入力** が隠すのは値の正確な文字列だけです。同じチャットの後のツール結果では、値が `[secret]` に置き換えられます。ただし、エージェントはシェルコマンドでファイルを読み、値を別の形(base64、一部分、空白を入れたもの)で出力できます。その形はモデルに届きます。エージェント自身のファイルツール(read、grep、write、edit)はシークレットのフォルダを開けません。値がよく使われる単語でもある場合、そのチャットの他の結果にも `[secret]` が表示されます。ファイルはターンが終わるまで残ります。ターン中に dsh が終了した場合は、次の起動時に削除されます。1 つのチャットで同時に開けるリクエストは 1 つです。このツールは各モデルリクエストに約 870 文字(推定約 220 トークン)を追加します。使わないときはオフにしてください。
241
+ - **返信で引用** は、ページに表示されているとおりの文字列を引用します。コードブロック、表、リストは Markdown の記号なしの普通の行になります。選択範囲がある回答で始まって別の回答で終わる場合や、思考過程、ツールの行、自分のメッセージにかかる場合は、ボタンが表示されません。1 つの回答の中で選択してください。dsh には文字選択用のスロットがないため、ボタンは dsh のチャット構造から回答を探します。dsh の更新でこの構造が変わると、ボタンは表示されません。引用が入力欄の末尾に入る場合は、次に入力する行が引用の下から始まるように空行がもう 1 つ入ります。dsh は送信時に末尾の空行を削除します。
242
+ - **サイドチャット** の読み取り専用は dsh 自身の読み取り専用モードによるものです。ファイルツールは書き込めず、シェルコマンドは書き込みのない dsh のサンドボックスで実行されます(サンドボックスを開始できないときは実行されません)。それでもエージェントは dsh の承認カードでより多くのアクセスを求めることができ、ネットワーク呼び出し(API リクエストなど)はコンピューターの外の何かを変えることがあります。コピーは、キューで待っているメッセージがない最新の時点で作られます。そのため、キューにメッセージが待っている間にした質問には、その後に起きたことは見えません。チャットで実行中のステップはコピーの中で閉じられるため、サイドチャットはそのステップの始まりは知っていますが、結果は知りません。サイドチャットは通常のチャットです。サイドバーに残り、モデルの使用量に含まれます。そこでアーカイブしてください。持ち帰るは、サイドチャット自身のメッセージだけ(最大 12,000 文字)を、各質問の最後の回答だけ取ります。ツール呼び出しの間のエージェントのメモは含まれません。dsh にはプラグインが右サイドバーにチャットを表示するスロットがないため、サイドチャットはメインビューで開きます。
243
+ - **差分メモ** は変更パネルでのみ使え、dsh 自身の「前回のターン」ビューでは使えません。範囲は差分の 1 つのブロック(1 つの `@@` 部分)の中に収める必要があります。メモはこのブラウザーのストレージに保存されるため、別のブラウザーや別のコンピューターの dsh からは見えません。Tether は自分のメモをメモリに保持します。メモはクリックしたときの行を保持します。エージェントが後でファイルを変更しても、メモは古い行と行番号を表示します。チャットごとに最大 50 件、1 件あたり最大 2,000 文字・40 行です(超えた分は `…` の行になります)。
218
244
  - **このチャットで許可** は、許可した時点から時間制限を数えます。新しい時間制限は、有効な許可にすぐに適用されます。そのため、短い時間制限にすると、許可がすぐに終わることがあります。バージョン 1.12 以前の許可には時刻がありません。更新後、エージェントはそのツールについてもう一度だけ確認します。
219
245
  - **入力欄のフォーカスを維持** がフォーカスを戻すのは、`/` コマンドまたはスキルの後だけです。dsh がコマンドを処理する間、入力欄は数ミリ秒だけ読み取り専用になります。そのため、その間に押したキーは失われます。dsh の `/` メニューがまだ開いている場合、`Enter` は強調表示された行を選び、送信はしません。
220
246
  - **質問カードをウィンドウに合わせる**は dsh の質問カードだけを変更し、計画レビューのカードは変更しません。カードは dsh のマークアップ(`data-question-key`、`data-question-scroll`)で見つけます。dsh の更新でこのマークアップが変わると、カードは dsh が描くとおりに表示されます。カードの高さはチャットではなくウィンドウに従います。狭いサイドパネル内のチャットでは、高いカードがチャットの上にはみ出すことがあります。
221
247
  - **チャットのヘッダーをウィンドウに合わせる**は、dsh が生成したクラス名(`_titleRow`、`_titleCluster`、`_crumbs`、`_headerActions`、`_headerUtilities`)でチャットのヘッダーを見つけます。dsh にはヘッダーのレイアウト用のフックがないためです。dsh の更新でこれらの名前が変わると、ヘッダーは dsh の表示のままになります。とても狭いチャット列ではヘッダーが 2〜3 行になり、メッセージの上の領域が低くなります。
222
- - **モバイル接続** は macOS でのみ動作します(`en0`、`openssl`、`swift`、`dns-sd` を使います)。固定のポート 19390 と 19391 を使うため、各 Mac でこれを実行できる dsh は、一度に 1 つだけです(スマートフォンの Mac の一覧では、各 Mac が 1 項目になります)。スマートフォンが通知を受け取るのは、Tether が開いているとき、またはバックグラウンドに移った直後だけです(プッシュサービスはありません)。Tether で「Settings → Notifications → Send notifications」をオンにするまで、Tether は通知を送りません。この設定は初期状態でオフで、オンにしたときに iOS が許可を求めます。iOS アプリは、まだ App Store にありません。Xcode で `tether/ios` からビルドしてください。「Tailscale only」でも、Mac に Wi-Fi または Ethernet のアドレスが必要です(ゲートウェイは、そのアドレスがある場合だけ起動します)。アクセスログは Mac ごとに保存され、最新 200 件の試行だけを残します。1 分以内に繰り返された試行は、新しい行を作らず、同じ行の回数を 1 つ増やします。Tether のアプリのロックは、iPhone のロック画面に表示される通知のプレビューを隠しません。iOS の設定でオフにしてください。Tether の緑の点は Mac に従います。dsh で開いたチャットは、スマートフォンでも点が消えます。Tether で開いたチャットは、スマートフォンでだけ点が消えます。Mac 上の dsh 自身の点は、Mac でそのチャットを開くまで残ります。
248
+ - **モバイル接続** は macOS でのみ動作します(`en0`、`openssl`、`swift`、`dns-sd` を使います)。固定のポート 19390 と 19391 を使うため、各 Mac でこれを実行できる dsh は、一度に 1 つだけです(スマートフォンの Mac の一覧では、各 Mac が 1 項目になります)。スマートフォンが通知を受け取るのは、Tether が開いているとき、またはバックグラウンドに移った直後だけです(プッシュサービスはありません)。Tether で「Settings → Notifications → Send notifications」をオンにするまで、Tether は通知を送りません。Tether は、この設定と時間帯をペアリング済みの Mac ごとに別々に保存します。この設定はどの Mac でも初期状態でオフで、オンにしたときに iOS が許可を求めます。iOS アプリは、まだ App Store にありません。Xcode で `tether/ios` からビルドしてください。「Tailscale only」でも、Mac に Wi-Fi または Ethernet のアドレスが必要です(ゲートウェイは、そのアドレスがある場合だけ起動します)。アクセスログは Mac ごとに保存され、最新 200 件の試行だけを残します。1 分以内に繰り返された試行は、新しい行を作らず、同じ行の回数を 1 つ増やします。Tether のアプリのロックは、iPhone のロック画面に表示される通知のプレビューを隠しません。iOS の設定でオフにしてください。Tether の緑の点は Mac に従います。dsh で開いたチャットは、スマートフォンでも点が消えます。Tether で開いたチャットは、スマートフォンでだけ点が消えます。Mac 上の dsh 自身の点は、Mac でそのチャットを開くまで残ります。
249
+ - **リモートコンピュータ** を使うには、両方の Mac に Tailscale が必要です。また、開く対象の Mac に、この機能をオンにした Composer Plus が必要です。その Mac はスリープしておらず、dsh が動作している必要があります。もう一方のコンピュータは、画面に表示中のチャットの右サイドバーにあるブラウザタブで開きます。このタブはそのチャットに属するため、別のチャットでは、そのチャット自身のサイドバーが表示されます。チャットがない場合(またはブラウザタブのない dsh web の場合)、コンピュータはブラウザのウインドウで開きます。選択メニューが表示されるのは、メイン領域にチャットまたは新しいチャットの画面があるときだけです。タスクボードでは表示されません。ポート 19392 を使います(ほかのコンピュータを受け入れられる dsh は、各 Mac で 1 つだけです)。別のコンピュータのページの中で開いたコンピュータには選択メニューがないため、そこから 3 台目の Mac は開けません。
223
250
  - セッションリンクは、チャットの中で機能します。クリックしても、そのチャットは開きません。**メッセージリンクをコピー** で作ったリンクでメッセージを開けるのは、dsh 0.2.1 以降で、チャットの中のメッセージから開いた場合だけです(dsh 0.2.0 にはユーザーテキストのルールがないため、リンクはコピーされますが、プレーンテキストとして表示されます)。ロールバックで取り除かれたメッセージや、圧縮によって dsh が読み込む履歴から削除されたメッセージは表示できません。その場合、リンクがそのことを表示します。🔗 ボタンは、dsh のメッセージ行に取り付けています。dsh のアップデートでそのマークアップが変わった場合、ボタンは表示されません。
224
251
  - **すべて既読にする** は、公開 API ではない dsh の一部(dsh のセッション状態の `completionUnread` 一覧)を通じて、dsh 自身の未読の点を変更します。dsh のアップデートでこの名前が変わった場合、この項目は表示されません。この項目は dsh のプロジェクトの「…」メニューに入りますが、このメニューにはプラグイン用のスロットがありません。dsh がこのメニューを変更した場合も、この項目は表示されません。
225
252
  - **キュー内のメッセージをその場で編集** は、その間に送信が始まったメッセージを変更せず、その間に変更されたメッセージ(たとえば iPhone の Tether で変更したもの)も上書きせず、そのことを通知で知らせます。新しい画像には画像を受け付けるモデルが必要で(dsh 標準の画像の制限も適用されます)、新しいファイルはアップロードが終わるまで保存できません。編集できるのは自分のキュー内のメッセージだけで、キュー内の目標のラウンドや質問への回答は編集できません。プラグインの更新後すぐに使えるのはテキストだけの編集で、画像やファイルを含むメッセージを保存する前には dsh を再起動してください(ホスト側は起動時に読み込まれます)。
@@ -234,6 +261,8 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
234
261
  - **ワークスペースのツリー内のブランチ** はクリックなしで git に書き込みます。チャットを移すとき、プロジェクトフォルダーを元のブランチに戻し(`git switch`)、worktree を追加します(`git worktree add`)。ブランチ、worktree、ファイルを削除することはありません。dsh はチャットのフォルダーを変更できないため、移されたチャットはコピー(新しい id を持つ dsh 自身のフォーク)で、元のチャットはアーカイブされます。コピーは止まった作業を続けます。ブランチが現れたときに実行中だったツール呼び出しは拒否で終わり、エージェントは新しいフォルダーで再実行します。元のチャットの目標は移りません。移るのは、フォルダーがリポジトリのメインフォルダーであるチャットだけで、そのターンで作成して切り替えたブランチ(`git switch -c`、`git checkout -b`)の場合だけです。`git branch` だけで作ったブランチ、未コミットの変更があるフォルダー、リンクされた worktree、サブフォルダーでは何も移りません。ツリーに表示されるのは、`<project>/.worktrees/` の直下にありブランチを持つ worktree だけです。デタッチされた worktree や別の場所の worktree は表示されません。コピーが自動で開くのは、元のチャットが開いていたチャットだった場合だけです(プラグインは dsh のサイドバーの行からそれを読み取ります)。それ以外の場合、コピーはブランチのプロジェクトにあります。
235
262
  - **チャット内を検索** が検索するのは、ページに表示されている内容だけです。対象は読み込まれたメッセージと返信です(古いものは、上にスクロールするか、**以前の履歴を読み込む** をクリックします)。閉じているツールのステップや、ツールの出力の中で折りたたまれているテキストは対象外です。数える一致は最大 2,000 件です(それを超えると「2000+」)。ブラウザーのハイライト API を使います(Chromium 105 以降。デスクトップアプリには搭載されています)。古いブラウザーでは、件数と移動は動作しますが、色は付きません。Mac では `Cmd+F`(Windows と Linux では `Ctrl+F`)でこれが開くのは、画面にチャットがあるときだけです。それ以外の場所では、ブラウザー自体の検索がこれまでどおり動作します。Mac の `Ctrl+F` は、テキスト欄での macOS の動作(カーソルを 1 文字進める)のままです。
236
263
  - **操作がないときに待機中のチャットを開く** が分かるのは、dsh のウィンドウで見える操作だけです。ほかのアプリでの作業は数えないため、dsh がバックグラウンドにあると、30 秒後に待機中のチャットを開くことがあります。dsh は前面に出ません。キー入力、クリック、マウスの移動をせずに読んでいるだけの状態は、操作なしと見なします。対象は dsh のオレンジ色の点(質問、承認、計画のレビュー)または緑色の点(まだ開いていない完了したターン)が付いたチャットだけです。オレンジ色のチャットを先に開きます。緑色のチャットを開くとその点が消えるため、次の緑色のチャットの 30 秒は、次のキー入力、クリック、マウスの移動、スクロールホイール、タッチの後に始まります。戻ったときも、ほかの緑色の点は残っています。サブエージェントのリクエストは親のチャットに表示されます。待機中のチャットが画面にある間は、ほかのチャットを開きません。回答せずに離れたチャットは、次に 30 秒間操作がないときに再び開くことがあります。30 秒は変更できません。
264
+ - **次の待機中のチャット** が数えるチャットは **操作がないときに待機中のチャットを開く** と同じです。dsh のオレンジ色の点(ここで回答できる質問、承認、計画のレビュー)と緑色の点(まだ開いていない完了済みのターン)です。サブエージェントのリクエストは親チャットに表示されます。dsh はチャットが待ち始めた時刻を記録しないため、順番はこのウィンドウがそのチャットを見た時点から数えます。再読み込みの後は、すでに待っていたチャットは dsh の順番のままです。キーは dsh のショートカットです。Linux のブラウザでは、dsh のキーボードショートカットのページで設定するまでキーがありません。また、ブラウザ拡張機能やほかのアプリが先に `Cmd+Shift+E` を使うことがあります。dsh のサイドバーのヘッダーには拡張用の場所がないため、ボタンはヘッダーの構造に入れています。dsh の更新でその構造が変わると、ボタンは表示されませんが、キーは引き続き使えます。幅の狭いサイドバーにはボタンがありません。
265
+ - **選択肢ボタン** が読むのは、選択肢のリストで終わる回答だけです。このリストは 1 から始まる 1~9 項目の番号付きリストで、回答の最後の部分にあり、「選択肢」または「次のステップ」という見出しか太字の行のすぐ下にあります(英語の「Options」「Choices」「Next steps」と、アプリのほかの言語の同じ語も対象です)。回答の途中のリスト、コードブロック内のリスト、ほかの見出しの下のリストにはボタンが付きません。Composer Plus はエージェントにこのようなリストを書くよう求めません。ボタンは最新の回答の下にだけ、チャットが待機中で入力欄が空のときに表示されます。また、ロールバックで取り消された回答を Composer Plus が知るまでは表示されません。dsh の質問カードでは、質問が表示されてから最初の 0.8 秒間は 1~9 キーが何もしません。別の操作のつもりで押したキーが、まだ読んでいない選択肢を選ばないようにするためです。dsh の質問カードにはキー用の API がないため、キーは dsh のマークアップからカードのボタンを見つけます。dsh の更新でこのマークアップが変わると、キーは何もしません。
237
266
  - 再起動の前に送られた通知をクリックしても、dsh が前面に表示されるだけです。
238
267
  - アクティブなプロジェクトは、dsh に保存されたプロジェクトの順序を使って移動します。そのため、新しい順序は再起動後も維持されます。どのプロジェクトにも属さないチャット(「グループなし」)は移動できません。dsh は、これらのチャットを常に最後に表示します。
239
268
  - dsh には、サイドバーの表示オプションのメニューに拡張ポイントがありません。そのため、最近のプロジェクトのオプションは、dsh 標準のメニューに追加しています。dsh のアップデートでこのメニューが変わった場合、オプションは表示されず、すべてのプロジェクトが表示されたままになります。フィルターはプロジェクトの行に対して動作するため、**1つのリスト** は絞り込まれません。**ワークスペースのツリー** では、中のプロジェクトがアクティブな間は親フォルダーも表示されたままになり、過去 2 時間にアクティブでなかったチャットの行も非表示になります。**ワークスペース** では、プロジェクトの行だけを絞り込みます。フィルターは、dsh が保存している表示設定(公開 API ではありません)から、dsh が今どの表示かを読み取ります。dsh の更新でその名前が変わった場合、**ワークスペースのツリー** は **ワークスペース** と同じように絞り込まれます。プロジェクトの状態も同じ設定を読み取ります。**ワークスペースのツリー** では、親フォルダーの行は、中にあるプロジェクトのチャットも数に入れます。dsh がこの設定の名前を変えた場合、各行には自分のチャットだけが表示されます。**状態別** にも、同じ種類の制限があります。dsh には並べ替えのスロットがないため、この項目と行の並び順は、dsh のメニューとリストのマークアップに取り付けています。
@@ -249,9 +278,16 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
249
278
  - **新しいチャットで続ける** は、チャット(メッセージ、ツール呼び出し、各ツール結果の末尾。最大で約 60,000 文字、最新の部分)をチャット自身のモデルに送ります。引き継ぎメモには、決定やファイルが抜けることがあります。開始する前に読んでください。新しいチャットが知っているのは、メモとリンクしたチャットだけです(dsh は元のチャットを読み取り専用のコンテキストとして添付します)。モデルのコンテキストは小さい状態から始まり、元のチャットはそのまま残ります。1 つのチャットで同時に実行できるメモの作成または開始は 1 つだけです。
250
279
  - **コンテキストの内訳** は、dsh 自身のルール(1 トークンあたり約 4 文字)で推定値を表示します。これは dsh のコンテキストリングと同じルールで、モデル自身の数え方とは異なることがあります。ツールの定義は、最新のリクエストのものです。コンテキストはチャットのログにあるとおりに表示します。実行中のターンは、次のステップの後に表示されます。
251
280
  - **計画済みステップ** でトークンが減るのは、モデルが実際に計画したときだけです。オンの間は、モデルが計画しないチャットでも、各リクエストに `plan_next_steps` ツールと短い指示(約 500 トークン)が含まれます。条件が証明するのは書かれた内容だけです(例:ビルドの終了コードが 0 だった)。作業が正しいことは証明しません。`ok` は dsh 自身の結果マーク(`[exit code: N]`、タイムアウト、サンドボックスの拒否)を読みます。0 以外の終了コードを返さずに失敗したコマンドは成功とみなされます。ステップは 1 つずつ実行され、同時に実行可能な 2 つのステップはモデルに戻されます。ステップのメッセージはチャットのモデルのアシスタントメッセージとして保存されます(dsh にはプラグインが書いたメッセージを示す印がありません)。そのため、その文面に Composer Plus が実行したことが書かれています。Tether にはありません。
252
- - **タスクボード** は、このウィンドウで dsh が一覧に表示するチャットを表示します。プロジェクトの外にあるチャットは **すべてのプロジェクト** にだけ表示され、チャットごとのブランチのフォルダー(`<project>/.worktrees/<name>`)はそのプロジェクトとして扱われます。カードの列はチャットのライブの状態なので、カードはドラッグできません。チャットはターンが終わると **完了** に移り(エラーや停止の後も同じです)、再び実行されると **作業中** に戻ります。緑の点は dsh 自身の完了の点で、dsh はこのウィンドウでだけこれを保持します。再読み込みの後、終わったチャットは緑の点なしで表示されます。**完了** には最新の 50 件のチャットが表示されます(**古いタスクを N 件表示** で残りを表示します)。**プロジェクトを検索** はプロジェクトを名前だけで探し、フォルダーのパスでは探しません。**過去 2 時間以内にアクティブ** は、プロジェクトのチャットがすべて 2 時間より古く、アイドル状態で既読のとき、そのプロジェクトを隠します。選んだプロジェクトは、ボードに表示されたままです。**新しいタスク** が覚えているのは、このウィンドウで最も新しい新規チャットだけです。最初のメッセージの前に別のチャットを開くと、そのチャットはあなたが書き込むまで **未着手** に **新しいタスク** として残りますが、自動でボードに戻るのは最も新しいチャットだけです。再読み込みの後、メッセージのない新しいチャットはボードに表示されません(dsh はそれを空の新しいセッションとして保持します)。タグは、タスクごとに、その最初のメッセージから 1 回のモデル呼び出しで作られます。タグが正しくないこともあり、ボードで開始しなかったチャットにはタグがありません。タイトルは dsh 自身のチャットのタイトルです(dsh のタイトルサービスが、チャットのモデルで作ります)。タイトルができるまで、カードには最初のメッセージの最初の行が表示されます。**回答** が答えるのは、チャットの最新のリクエストだけです。そのリクエストに別の場所(別のウィンドウ、Tether、自動レビュー)で回答済みのとき、またはチャットが新しいことを尋ねているときは、パネルにそのことが表示され、何も送信しません。以前のバージョンには、コメントとエージェントのツールがあるタスク一覧がありました。これらはなくなり、古い `board.json` は表示されません。考え方と見た目は emanuele-em の [Kanzo](https://github.com/emanuele-em/kanzo)(AGPL-3.0)から来ています。Composer Plus はそのコードを使っていません。
281
+ - **タスクボード** は、このウィンドウで dsh が一覧に表示するチャットを表示します。プロジェクトの外にあるチャットは **すべてのプロジェクト** にだけ表示され、チャットごとのブランチのフォルダー(`<project>/.worktrees/<name>`)はそのプロジェクトとして扱われます。カードの列はチャットのライブの状態なので、カードはドラッグできません。チャットはターンが終わると **完了** に移り(エラーや停止の後も同じです)、再び実行されると **作業中** に戻ります。緑の点は dsh 自身の完了の点で、dsh はこのウィンドウでだけこれを保持します。再読み込みの後、終わったチャットは緑の点なしで表示されます。**完了** には最新の 50 件のチャットが表示されます(**古いタスクを N 件表示** で残りを表示します)。**プロジェクトを検索** はプロジェクトを名前だけで探し、フォルダーのパスでは探しません。**過去 2 時間以内にアクティブ** は、プロジェクトのチャットがすべて 2 時間より古く、アイドル状態で既読のとき、そのプロジェクトを隠します。選んだプロジェクトは、ボードに表示されたままです。**新しいタスク** が覚えているのは、このウィンドウで最も新しい新規チャットだけです。最初のメッセージの前に別のチャットを開くと、そのチャットはあなたが書き込むまで **作業中** の一番上に **新しいタスク** として残りますが、自動でボードに戻るのは最も新しいチャットだけです。再読み込みの後、メッセージのない新しいチャットはボードに表示されません(dsh はそれを空の新しいセッションとして保持します)。タグは、タスクごとに、その最初のメッセージから 1 回のモデル呼び出しで作られます。タグが正しくないこともあり、ボードで開始しなかったチャットにはタグがありません。タイトルは dsh 自身のチャットのタイトルです(dsh のタイトルサービスが、チャットのモデルで作ります)。タイトルができるまで、カードには最初のメッセージの最初の行が表示されます。**×** と **すべてクリア** は、カードをボードから外すだけです。チャットは削除されません。**元に戻す** は、このウィンドウで 8 秒間だけ表示されます。その後は、**外したカード (N)** → **ボードに戻す** でカードを戻せます。再び実行されたチャットは、自動で戻ります。**すべてクリア** は、先に確認してから、表示しているプロジェクトの既読の終わったカードを外します(**すべてのプロジェクト** のときは、すべてのプロジェクトのカードです)。**古いタスクを N 件表示** の後ろにあるカードも外します。未読(緑)のカードは残ります。dsh は緑の点をこのウィンドウでだけ保持するので、再読み込みの後は、すべてクリアが、回答をまだ読んでいないカードを外すことがあります。この一覧はこの Mac に保存され、すべてのウィンドウと Tether で使われます。一覧が 5,000 件のチャットになると、最も古いチャットがボードに戻ります。**回答** が答えるのは、チャットの最新のリクエストだけです。そのリクエストに別の場所(別のウィンドウ、Tether、自動レビュー)で回答済みのとき、またはチャットが新しいことを尋ねているときは、パネルにそのことが表示され、何も送信しません。以前のバージョンには、コメントとエージェントのツールがあるタスク一覧がありました。これらはなくなり、古い `board.json` は表示されません。考え方と見た目は emanuele-em の [Kanzo](https://github.com/emanuele-em/kanzo)(AGPL-3.0)から来ています。Composer Plus はそのコードを使っていません。 `Cmd+Shift+K` は dsh のショートカットです。Linux のブラウザーでは既定のキーがありません(dsh のキーボードショートカットのページで設定してください)。また、ブラウザー拡張機能や別のアプリが先にこのキーを使う場合があります。カードが **完了** から外れるのは、dsh 自身の緑の点が消えたとき(チャットを開いたとき)です。ボードの裏で開いているチャットとして終わったチャットは、そのチャットが上にパネルのない状態で表示されたときに外れます。この既読の状態は dsh 自身の点と同じく、この dsh のウィンドウの中だけにあります。再読み込みの後や別のウィンドウでは、終わったチャットはすべて既読になり、**最近完了** に入ります。
253
282
  - **停止後の新規メッセージ優先** は、チャットを停止した後(または失敗したターンの後、まだキューがあるチャットを開いたとき)にだけ働きます。ターンの実行中に送信したメッセージは、これまでどおりキューの末尾で待ちます。追い越すのは自分がキューに入れたメッセージだけです。キューに目標のラウンドや質問への回答が待っている場合は、dsh 自身の順序のままです。公開 API ではない dsh の一部(停止したターンがまだ終了処理中かどうか)を読み取ります。dsh の更新でその名前が変わった場合、メッセージはそのターンが終わった後にだけ先頭に移ります。サブエージェントのチャットは dsh 自身の順序のままです。
254
283
  - **プロジェクトメモリー** はチャットの最初のフォルダー(dsh のプロジェクトのフォルダー)に属します。`cd` でフォルダーを変えたチャットは最初のプロジェクトのメモリーを使い続けます。同じファイルへの別のパスで開いた同じフォルダーは、同じメモリーを共有します。チャットは開始時にメモリーのセクションを固定するため、後で保存したメモは次のチャットから表示されます(`memory_recall` ならすぐに見つかります)。確認では、モデルが残すと決めたものだけを残します。事実を見落としたり、誤った内容を残したりすることがあります。**メモリーを開く** で確認してそこで変更するか、dsh を閉じている間にファイルを手で編集してください。**メモリーを開く** は、選んだプロジェクトのメモとグローバルなメモ(「すべてのメモ」を選んだときはすべてのプロジェクト。最大で約 60,000 文字で、残りは数だけ示され、そのリクエストでは変更できません)とあなたの文章を、チャットのモデルではなく dsh の既定のモデルに送ります。プレビューは Mac に 30 分間、dsh を再起動するまで保持されます。その間に確認やエージェントがメモを変更すると **適用** は拒否されるので、もう一度プレビューしてください。**適用** はプレビューの変更をすべて保存するか、1 つも保存しないかのどちらかです。保存できない変更が 1 つでもあると(たとえば MEMORY.md がいっぱいのとき)、メモは元のままで、理由が表示されます。あなたのメッセージを含むターンが終わるたびに、モデルを 1 回呼び出します。呼び出しが失敗すると、次のターンの後に同じメッセージをもう一度読みます。サブエージェントのチャットは確認しません。考え方とファイル形式は [DS Bot](https://github.com/Fei2411/DS-Bot)(Apache-2.0)から来ています。Composer Plus はそのコードを使っておらず、DS Bot 自身のメモリーを読み書きすることもありません。
284
+ - **メモリーのバージョン履歴** は各メモリー(各プロジェクトとグローバルメモリー)の最新 50 バージョンを残し、それより古いものは削除します。1 つのバージョンは 1 件のメモではなく、そのプロジェクトのメモリー全体です。**復元** はそのバージョンのすべてのファイル(トピックを含む)を戻し、バージョンを開いた後にメモリーが変わっていれば拒否します。復元前のメモリーは新しいバージョンになるので、復元は元に戻せます。スイッチがオフの間は新しいバージョンを残さず、**復元** は拒否されます。残したバージョンは消えません。この機能より前のバージョンはありません。履歴はインストール後の最初の保存から始まります。
285
+ - **メモリーを AGENTS.md に書き出す** は 1 つのプロジェクトメモリーのメモだけを書き、グローバルメモ、出典、日付は書きません。次の書き出しは目印付きセクション全体を置き換えるので、セクション内を手で変更した内容は失われます(先に差分で表示されます)。目印の外の文章は残ります。目印が壊れている(片方がない、または 2 つある)ときは、直すまで書き出しを拒否します。512 kB を超える AGENTS.md、プロジェクトフォルダーの外へ出るシンボリックリンク、通常のファイル以外は拒否されます。プレビューの後に AGENTS.md やメモが変わると、**AGENTS.md に書き込む** は拒否されるので、もう一度書き出してください。
286
+ - **メモリーのメモの出典リンク** は、このバージョンをインストールした後に保存したメモで使えます。それより古いメモはチャットだけを示す(または何も示さない)ので、**出典** はチャットだけを開くか、表示されません。メッセージがない場合(ロールバックで取り消された、またはチャットが削除された)は、チャットが開き、メッセージがないことを知らせる通知が出ます。
287
+ - **メモリーを別のプロジェクトにコピー** は一度に最大 100 件のメモを、dsh が一覧に出しているプロジェクトにだけコピーします(dsh 自身のプロジェクト一覧を読みます。ウィンドウからパスは渡りません)。コピーはそれぞれ独立していて、後で一方のプロジェクトのメモを変えてもコピーは変わりません。チェックしたメモが 1 件でも入らない(コピー先の MEMORY.md やトピックがいっぱい、またはトピックが 40 個ある)ときは何もコピーしません。コピー先に同じ文とトピックのメモがあればスキップし、その件数を表示します。
288
+ - **古くなったメモリーのメモを探す** が見つけるのは、知っている形で書かれたものだけです。コードスパン内のパス(`src/cart.ts`)、`npm run` の後の npm スクリプト(または `npm test`、`pnpm lint`)、「ブランチ」という語の近くのコードスパン内のブランチ名です。プロジェクトフォルダーの外へ出るパスは報告しません。スクリプトはプロジェクトに `package.json` があるときだけ、ブランチは git リポジトリでだけチェックします。一度にチェックするのは最大 200 項目です。警告は「間違い」ではなく「今は見つからない」という意味です。後でビルドが作るファイルも報告されます。
289
+ - **このチャットではメモリーを使わない** は、そのチャットの次のモデルリクエストから有効になります。すでに実行中のリクエストはそのままです。実行中のチャットで切り替えるとシステムプロンプトが 1 回変わるので、その 1 回のリクエストではモデル提供元のキャッシュを使えません。サブエージェントはルートのチャットに従います。メモリーがオフの間にチャットが受け取ったメッセージは、後でオンに戻してもレビューは読みません。dsh 0.2.0 では新しいチャット画面にボタンを置く場所がないため、最初のメッセージの後にチャットのヘッダーに表示されます。
290
+ - **チャットからメモリーのメモを提案** は最大 10 件の提案を表示し、30 分間と dsh の再起動までそれを保持します。その後に受け入れようとすると、もう一度提案を求めるよう案内されます。長いチャットは新しいメッセージから送り、古いエージェントの返答から先に省きます。提案は間違っていることもあるので、受け入れる前に読み、後でメモを変えるには **メモリーを開く** を使ってください。拒否した提案は次のクリックで再び出ることがあります。
255
291
  - **バックアップ** が使うのは、固定の 1 つのフォルダー `~/Desktop/dsh-backups` だけです(dsh-backup の既定のフォルダーなので、dsh-backup のアーカイブも引き続き使えます)。別のフォルダーを選ぶ設定はありません。アーカイブの大きさは、`cache/` と `dsh-runtimes/` を除いた dsh のホームとほぼ同じです(測定:Apple Silicon で、1.6 GB のファイルから約 30 秒で 830 MB のアーカイブができました。その間も dsh は応答し続けました)。読み取り中に変わったファイルは、バックアップがそのファイルを開いた時点の状態で保存されます。そのため、開いているチャットのログが、途切れたレコードで終わることがあります。これは、dsh が次の書き込みで修復します。マスクでは、yml ファイル内のシークレットを、1 行にあるキーの名前(`token:`、`apiKey:`、…)で見つけます。フローマップ内(`{token: x}`)、そのようなキーの下のリスト内、JSON ファイル内(たとえば、`.json` ファイル内にある MCP サーバーの `apiKey`)、または別の名前のシークレットは、アーカイブに残ります。dsh-backup の種類別アーカイブ(`dsh-t-…`)は一覧に表示されません。**別のコンピュータ用** はアーカイブをコピーします(APFS ではクローンなので、追加の容量は使いません)。vault は一緒にコピーされません。**今すぐバックアップ** はバックアップを削除しません。自動バックアップは、Composer Plus が作成したバックアップのうち最新のものを保持し(**自動バックアップ** の **保持** の設定)、それより古い自身のバックアップを削除します。アップグレード前のスナップショットは別に数えます(最新の 2 件が残ります)。dsh-backup のアーカイブが削除されることはありません。**削除** で取り除いてください。dsh-backup がまだインストールされている間は、dsh-backup が自身の保持件数に Composer Plus のアーカイブを数え、それらを削除することがあります。
256
292
  - **復元** は、dsh を閉じている間に、レスキューコンソールでだけ実行できます。復元は dsh のホーム全体を置き換えます。古いホームは、あなたが削除するまで、隣に `.dsh.pre-restore-<time>` として残ります。そのため、ディスクには両方の分の空きが必要です。チャットはプロジェクトのパスを保ちます。別のコンピュータでは、別のパスにあるプロジェクトは、もう一度追加するまで見つからないものとして表示されます。dsh のホームの外を指すシンボリックリンク(たとえば、別のフォルダーからリンクしたスキル)は、リンクとして戻ります。リンク先は、そのコンピュータ上に存在する必要があります。
257
293
  - **セッションログのチェック** は、各チャットの最新のログを、何が開けるかについての dsh 自身のルールで読み取ります。JSON ではない行や順序の乱れた行は、その後にターンの終わりがある場合にだけ損傷と数えます(そうでなければ、dsh はその行以降を除いてチャットを開くため、一覧には表示されません)。ログのイベントを、dsh 自身のイベントのルールと照らし合わせることはしません。そのため、正常と判定されたログでも、dsh のアップグレード後に開けないことがあります。修復では、バックアップからコピーを取り出します。そのバックアップ以降のメッセージは、そのチャットから失われます(損傷したファイルは隣に残ります)。この dsh で開いているチャットは、設定では修復されません。dsh がそのチャットを保持しているためです。
@@ -286,7 +322,13 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
286
322
 
287
323
  **DS Bot のメモリーのように、エージェントがチャットをまたいで好みを覚えておけますか?** はい、**プロジェクトメモリー**(既定ではオフ)で可能です。**設定 → Composer Plus** でオンにしてください。ターンが終わるたびに、長く続く好みや決定がチャットのプロジェクトの短いメモとして保存され、そのプロジェクトの新しいチャットがそれを読みます。エージェントに何かを覚えるように頼むと、すぐに保存します。メモを見たり変えたりするには、同じ行の **メモリーを開く** を押して、変更する内容を書いてください。
288
324
 
289
- **すべてのチャットをカンバンボードで見て、そこから新しいチャットを開始できますか?** はい、**タスクボード**(既定でオン)で可能です。左サイドバーで開きます。各チャットは、**作業中**、**レビュー**(あなたを待っています)、**完了** のいずれかの列のカードになります。**新しいタスク** はプロジェクトで dsh の新しいチャットを開き、最初のメッセージを送るとボードに戻ります。オレンジのカードで **回答** をクリックすると、チャットを開かずに回答できます。
325
+ **自分や AI がメモリーを間違って変更しました。前のメモを戻せますか?** はい、**メモリーのバージョン履歴**(既定でオン)で戻せます。**メモリーを開く** でプロジェクトを選び、**履歴** を押します。変更前のバージョンを選ぶと戻る内容が表示されるので、**復元** を押します。
326
+
327
+ **プロジェクトメモリーをチームや他のエージェントツールと共有できますか?** はい、**メモリーを AGENTS.md に書き出す**(既定でオン)でできます。**メモリーを開く** でプロジェクトを選び、**AGENTS.md に書き出す** を押します。差分を確認して **AGENTS.md に書き込む** を押し、ファイルをコミットします。
328
+
329
+ **長いチャットから何を残すかを AI に提案してもらえますか?** はい、**チャットからメモリーのメモを提案**(**プロジェクトメモリー** がオンの間は既定でオン)でできます。チャットのヘッダーの **メモリーに提案** を押し、残す価値のあるメモを **受け入れる** でください。
330
+
331
+ **すべてのチャットをカンバンボードで見て、そこから新しいチャットを開始できますか?** はい、**タスクボード**(既定でオン)で可能です。左サイドバーで開きます。各チャットは、**作業中**、**レビュー**(あなたを待っています)、**完了** のいずれかの列のカードになります。**新しいタスク** はプロジェクトで dsh の新しいチャットを開き、最初のメッセージを送るとボードに戻ります。オレンジのカードで **回答** をクリックすると、チャットを開かずに回答できます。**完了** の **すべてクリア** は、先に確認してから、読んだ終わったカードをボードから外します。**元に戻す** と **外したカード (N)** でカードを戻せます。チャットは dsh に残ります。
290
332
 
291
333
  **dsh-backup のように、dsh でチャットや設定をバックアップできますか?** はい。**設定 → Composer Plus → バックアップ → 今すぐバックアップ** を使います。同じ形式のアーカイブを同じフォルダー(`~/Desktop/dsh-backups`)に書き込むため、dsh-backup のアーカイブも表示され、復元できます。dsh-backup は削除してかまいません。定期的にバックアップするには、**自動バックアップ** をオンにしてください。
292
334
 
@@ -314,10 +356,22 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
314
356
 
315
357
  **エージェントが `npm publish` や `git push --force` を実行しないようにするには?** **設定 → Composer Plus → ブロックされたコマンド** で `npm publish` を入力し、**ブロック** または **先に確認** を選んでから、**追加** をクリックします。**ブロック** はコマンドを拒否し、エージェントはあなたに確認します。**先に確認** は毎回承認カードを表示します。「保護されたファイル」はエージェントのファイルツールを、「ブロックされたコマンド」はシェルコマンドを対象にします。
316
358
 
359
+ **ツール呼び出しを拒否した理由をエージェントに伝えられますか?** はい、**メモを付けて拒否**(既定でオン)で伝えられます。承認カードの **メモを付けて拒否…** をクリックし、理由や代わりにすることを書いて、**拒否** をクリックします。エージェントは同じターンで拒否とメモを読みます。
360
+
361
+ **チャットに書かずにパスワードやトークンをエージェントに渡すには?** **シークレット入力**(既定でオン)を使います。エージェントに `request_secret` を使うよう頼むか、エージェントが求めるのを待ちます。ツールの行のカードに値を入力し、**保存** をクリックします。エージェントが受け取るのは値を保存したファイルのパスだけで、ファイルはターンの終了時に削除されます。
362
+
363
+ **長い回答の一部だけに返信するには?** その部分を選択し、選択範囲の上の **引用** をクリックします(**返信で引用**、既定でオン)。その部分が `> …` の引用として入力欄に入るので、その下に返信を書きます。
364
+
365
+ **エージェントの作業を止めずに何か質問できますか?** 質問を入力し、入力欄の **サイドチャットで質問** をクリックします(**サイドチャット**、既定でオン)。チャットの読み取り専用コピーが答え、その間もチャットは作業を続けます。サイドチャットで **持ち帰る** を押すと、回答がチャットの入力欄に入ります。
366
+
367
+ **エージェントの差分で何を変えるべきか伝えるには?** **変更パネル** でファイルの差分を開き、行の **+** をクリックしてメモを書きます(**差分メモ**、既定でオン)。次に **入力欄に送る** をクリックすると、ファイル、行番号、行と一緒にメモが入力欄に入ります。
368
+
317
369
  **1 つのチャットで、自動レビューが同じツールについて何度も確認しないようにするには?** 承認カードの **このチャットで許可** をクリックします。対象は、そのチャットのその特定のツールだけで、既定では 1 時間有効です。許可は、ヘッダーのチップから取り消せます。時間は **設定 → Composer Plus → このチャットで許可** で変更できます。
318
370
 
319
371
  **iPhone をなくしました。その iPhone が Mac に接続できないようにするには?** サイドバーの左下にある **モバイル接続** をクリックし、その iPhone の横にある **Remove** をクリックします。その iPhone の鍵はすぐに使えなくなります。再び接続するには、Mac で承認する新しいペアリングが必要です。
320
372
 
373
+ **もう一方の Mac のチャットを、この Mac で続けるには?** もう一方の Mac で **設定 → Composer Plus → リモートコンピュータ** と **ほかのコンピュータからこの Mac を開けるようにする** をオンにし、**ペアリングリンクを作成** をクリックして、リンクをコピーします(たとえば AirDrop やメモで、自分に送ります)。この Mac でも **リモートコンピュータ** をオンにし、チャットのタイトルの左で **コンピュータを追加…** を選び、リンクを貼り付けて **接続** をクリックします。次に、もう一方の Mac で **承認** をクリックします。以後は、同じメニューでそのコンピュータを選びます。
374
+
321
375
  **Face ID で Tether をロックできますか?** はい。Tether で「Settings → Privacy → Lock with Face ID」をオンにします。すると Tether は、開いたときと、アプリに戻ったときに Face ID(またはパスコード)を求めます。
322
376
 
323
377
  **dsh のサイドバーに、今日使ったプロジェクトだけを表示するには?** サイドバー → 表示オプション(スライダーのアイコン)→ **過去 2 時間以内にアクティブ** を選びます。もう一度選択すると、すべてのプロジェクトを表示します。
@@ -330,6 +384,10 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
330
384
 
331
385
  **質問をしているチャットを dsh が自動で開くことはできますか?** はい、**操作がないときに待機中のチャットを開く**(既定でオン)を使います。チャットが回答、承認、計画のレビューを待っていて、dsh を 30 秒間操作しないと、dsh がそのチャットを開きます。まだ読んでいないターンを完了したチャット(緑色の点)も、オレンジ色のチャットの後に同じように開きます。入力中、スクロール中、マウスを動かしている間は待ちます。
332
386
 
387
+ **自分を待っている次のチャットにすぐ移動できますか?** はい、**次の待機中のチャット**(既定でオン)を使います。`Cmd+Shift+E`(Windows と Linux では `Ctrl+Shift+E`)を押すか、サイドバーのヘッダーにある数字付きのボタンをクリックします。質問や承認を待っているチャットが先で、その後にまだ読んでいないターンを完了したチャットが続きます。
388
+
389
+ **エージェントの選択肢に 1 回のクリックで答えられますか?** はい、**選択肢ボタン**(既定でオン)を使います。回答が「選択肢」のリストで終わるとき、その下のボタンをクリックします。ボタンは「Option N: …」をあなたのメッセージとして送信します。エージェントの質問カードでは、1~9 キーを押します。
390
+
333
391
  **DeepSeek Harness のインターフェースを、トルコ語、スペイン語、日本語などに切り替えるには?** 設定 → Composer Plus → **アプリケーションの言語** で切り替えます。
334
392
 
335
393
  **iPhone から dsh を使うには?** `tether/ios` から Tether アプリをビルドし(Xcode)、**設定 → Composer Plus → モバイル接続(iPhone)** をオンにします。左下の **モバイル接続** をクリックし、QR コードを読み取って(iPhone のカメラまたは Tether の **Scan code**)、**Connect** をタップし、**Approve** をクリックします。外出先では、両方のデバイスで Tailscale を使ってください。
@@ -359,6 +417,10 @@ PLAYWRIGHT=/path/to/playwright node test/browser-recent-finished.mjs /path/to/ds
359
417
  PLAYWRIGHT=/path/to/playwright node test/browser-recent-tree.mjs /path/to/dsh/lib/bin.js
360
418
  # Order by status (fake model + Schedule): real-app test + its thumbnail
361
419
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-status-order.mjs /path/to/dsh/lib/bin.js
420
+ # Next waiting chat and Option buttons (fake model): the sidebar button and Cmd+Shift+E open the waiting chats in order, the Keyboard shortcuts row, the option buttons and the question card keys, switch off + their thumbnails
421
+ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-agentbox-ideas.mjs /path/to/dsh/lib/bin.js
422
+ # Reject with note, Secret input, Quote in reply, Side chat and Diff notes (fake model + a test-only approval gate): the button on dsh's card, the note after the rejection in the next request, Esc; the secret card, Save, the value in no request, file or page, Decline, Stop; a selected part of an answer → Quote → the sent message; a side question while the chat waits on a card (read-only, no queued message in it), Bring back; notes on a diff line and range → Send to composer → the sent message; switch off + their thumbnails
423
+ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-t3code-ideas.mjs /path/to/dsh/lib/bin.js
362
424
  # every Settings feature row shows a loading screenshot and a ? link to its README row
363
425
  PLAYWRIGHT=/path/to/playwright node test/browser-settings-shots.mjs /path/to/dsh/lib/bin.js
364
426
  # What's new after an update: the release notes show once, Esc and Close close them
@@ -408,7 +470,7 @@ PLAYWRIGHT=/path/to/playwright node test/browser-continue-queue.mjs /path/to/dsh
408
470
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-stop-send.mjs /path/to/dsh/lib/bin.js
409
471
  # Edit queued message in place with images and files (slow fake model) + its thumbnail
410
472
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-edit.mjs /path/to/dsh/lib/bin.js
411
- # Task board: New task opens dsh's new chat and comes back after the first message, AI tags, live columns, Answer on the board, Hide finished, the switch
473
+ # Task board: New task opens dsh's new chat and comes back after the first message, AI tags, live columns, Answer on the board, × with Undo, Clear all with its question (unread cards stay), Removed and Put back (kept after a restart), the switch
412
474
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-task-board.mjs /path/to/dsh/lib/bin.js
413
475
  ```
414
476