dsh-composer-plus 1.16.1 → 1.17.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.16.1`。
32
+ > dsh の pnpm は、公開から 24 時間たっていないバージョンをスキップします。リリース直後は、バージョンを指定してください:`dsh-composer-plus@1.17.0`。
33
33
 
34
34
  ## 機能
35
35
 
@@ -47,6 +47,7 @@ dsh plugin --profile web add dsh-composer-plus
47
47
  | **Shift+Tab で計画モード** | <a id="feature-plantoggle"></a>`Shift+Tab` で、下書きの先頭に `/plan ` を追加します(もう一度押すと削除します)。チャットがすでに計画モードの場合は、`Shift+Tab` で計画モードを終了します。 | <a href="assets/features/planToggle.webp"><img src="assets/features/planToggle.webp" width="160" alt="スクリーンショット: Shift+Tab で計画モード"></a> |
48
48
  | **入力欄のフォーカスを維持** | <a id="feature-keepfocus"></a>`/` コマンドやスキルを送信した後もカーソルが入力欄に残るため、すぐに続けて入力できます。コマンドを入力して `Enter` を押すキーボードマクロでも動作します。dsh はコマンドを処理する間、入力欄を読み取り専用にするため、ブラウザーがフォーカスを外してしまいます。この機能はフォーカスを入力欄に戻します。ただし、メニュー、ダイアログ、ほかの入力欄にフォーカスがある場合は戻しません。 | <a href="assets/features/keepFocus.webp"><img src="assets/features/keepFocus.webp" width="160" alt="スクリーンショット: 入力欄のフォーカスを維持"></a> |
49
49
  | **質問カードをウィンドウに合わせる** | <a id="feature-questionfit"></a>エージェントが質問すると、質問と回答がカード内で一緒にスクロールし、**スキップ**と**送信**は下部に表示されたままになります。カードはウィンドウの高さ(チャットのヘッダーとチャットの一部のために 200 px を引いた高さ)を使うので、ウィンドウに合わせて大きくも小さくもなります。この機能がない場合、dsh はカードをウィンドウの 60%(最大 520 px)に制限し、回答だけをスクロールします。長い質問では、質問の末尾、回答、ボタンがカードの外に押し出されることがあります。 | <a href="assets/features/questionFit.webp"><img src="assets/features/questionFit.webp" width="160" alt="スクリーンショット: 質問カードをウィンドウに合わせる"></a> |
50
+ | **チャットのヘッダーをウィンドウに合わせる** | <a id="feature-headerfit"></a>狭いウィンドウでは、dsh のチャットのヘッダーにあるボタン(モード、サブエージェント、バックグラウンドジョブ、次で開く、ブランチ表示、許可表示)が重ならなくなります。チャットのタイトルは少なくとも 120 px を保ち、入りきらないボタンは右側の 2 行目へ移り、どのボタンもクリックできます。すべてが 1 行に収まるとき(広いウィンドウ)は、ヘッダーは dsh のままです。この機能がない場合、dsh はタイトルだけを縮めます。サブエージェントとバックグラウンドジョブがあると、狭いチャット列でボタンが重なります。ブランチ表示(**チャットごとのブランチ**)と許可表示(**このチャットで許可**)は、このスイッチがオフでもヘッダーに収まります。 | <a href="assets/features/headerFit.webp"><img src="assets/features/headerFit.webp" width="160" alt="スクリーンショット: チャットのヘッダーをウィンドウに合わせる"></a> |
50
51
  | **ワンクリックで続行** | <a id="feature-continuebutton"></a>停止、失敗、または途中で切れたターンの後、空の入力欄に **▶** が表示されます。1 回クリックすると、入力欄に何も書かず、チャットに見えるメッセージも追加せずに、既存の会話から再開します(モデルには「止まったところから続ける」という短い隠しメモが届きます。Claude など一部のプロバイダーは、アシスタントの返信で終わるリクエストを拒否するためです)。キューで待っているメッセージはそのまま残ります。▶ は止まったタスクだけを続行し、その後でキューが実行されます。完了したターンの後は、通常の送信ボタンのままです。 | <a href="assets/features/continueButton.webp"><img src="assets/features/continueButton.webp" width="160" alt="スクリーンショット: ワンクリックで続行"></a> |
51
52
  | **再起動後に再開** | <a id="feature-resumeafterrestart"></a>既定ではオフです。**設定 → Composer Plus** でオンにしてください。チャットの実行中に dsh を終了した(または dsh が閉じた)場合、次に dsh を開くと、そのチャットが自動で続行します。このとき、ワンクリックで続行と同じ隠しメモを使います。目標のラウンド(`/goal`)が実行中だった場合は、目標が次のラウンドに進みます(dsh は起動のたびに目標を一時停止し、再開されるまで待ちます)。自分で停止したチャット、完了したチャット、失敗したチャットは続行しません。dsh 自体にはこの設定がなく、そのようなターンを中断済みとして記録するだけです。 | <a href="assets/features/resumeAfterRestart.webp"><img src="assets/features/resumeAfterRestart.webp" width="160" alt="スクリーンショット: 再起動後に再開"></a> |
52
53
  | **キューのドラッグ&ドロップ** | <a id="feature-queuereorder"></a>キュー内のメッセージにハンドル(⠿)が付きます。ドラッグして並べ替えるか、ハンドルにフォーカスを置いて `↑` / `↓` を押します。`Esc` でキャンセルします。 | <a href="assets/features/queueReorder.webp"><img src="assets/features/queueReorder.webp" width="160" alt="スクリーンショット: キューのドラッグ&ドロップ"></a> |
@@ -63,19 +64,22 @@ dsh plugin --profile web add dsh-composer-plus
63
64
  | **ワークスペースのツリー内のブランチ** | <a id="feature-branchtree"></a>設定 → Composer Plus → **ワークスペースのツリー内のブランチ**(既定ではオフ)。オンにすると、`<project>/.worktrees/` に worktree フォルダーがある各ブランチが、そのプロジェクト内のプロジェクトとして表示されます。入れ子で見るには、dsh の **表示オプション** → **ワークスペースのツリー** を選びます。フォルダーが削除されたブランチは一覧から消え、dsh はそのチャットを **グループなし** に表示します。プロジェクトフォルダーのチャットのエージェントがブランチを作成して切り替え(`git switch -c`、`git checkout -b`)、フォルダーに未コミットの変更がないとき、プロジェクトフォルダーは元のブランチに戻り、ブランチは専用のフォルダーを持ち、チャットはそこへ移ります。コピーがブランチのプロジェクトで開いて作業を続け、元のチャットはアーカイブされます。一覧は起動時、30 秒ごと、各ターンの後、ウィンドウに戻ったときに確認されます。 | <a href="assets/features/branchTree.webp"><img src="assets/features/branchTree.webp" width="160" alt="スクリーンショット: ワークスペースのツリー内のブランチ"></a> |
64
65
  | **次のメッセージの予測** | <a id="feature-nextprediction"></a>既定ではオンです。**設定 → Composer Plus** でオフにできます。エージェントがターンを終えると(停止または失敗したターンを除く)、空の入力欄に、あなたが次に送りそうなメッセージの予測がグレーで表示され、**Tab で受け入れ** というヒントが付きます。`Tab` を押すとテキストが入力欄に入りますが、送信はされません。`Esc` を押すと、そのターンの間は予測を非表示にします。入力を始めたときも非表示になり、新しいターンでは新しい予測に置き換わります。スイッチの下の **モデル** メニューには、dsh のモデルが一覧で表示されます(dsh のモデルメニューと同じ一覧です)。既定では **dsh の既定** が選ばれていて、dsh の既定のモデルに従います。ターンが終わるたびに、短いモデル呼び出しが 1 回行われます。Tether では、予測が空の入力欄の上に表示されます。タップすると入力欄に入ります。 | <a href="assets/features/nextPrediction.webp"><img src="assets/features/nextPrediction.webp" width="160" alt="スクリーンショット: 次のメッセージの予測"></a> |
65
66
  | **入力中に補完** | <a id="feature-typingcompletion"></a>既定ではオフです。**設定 → Composer Plus** でオンにできます。入力中、カーソルのすぐ後ろに、メッセージの続きの候補がグレーで表示されます。`Tab` を押すと候補がメッセージに追加されますが、送信はされません。`Esc` を押すと非表示になります。候補は、あなた自身が次に書く言葉だけです。あなたへの返答や、作り話のエラー文・名前は出しません。メッセージが完結しているように見えるときや、モデルに確信がないときは、何も表示されません。グレーの文字の続きを入力すると、候補はそのまま残り、新しいモデル呼び出しは行われません。スイッチの下に、この機能専用の **モデル** メニューがあります。最初の項目 **次のメッセージの予測と同じ** は、**次のメッセージの予測** のモデルを使います(既定)。機能ごとに別のモデルを使うには、ほかのモデルを選んでください。たとえば、補完には速いモデルを選べます。入力が止まるたびにモデル呼び出しを 1 回行うため、予測よりトークンをかなり多く消費します。速くて低コストのモデルを選んでください。スラッシュコマンド、ファイルのチップを含むメッセージ、カーソルが末尾にないときは動作しません。Tether では、入力中に残りの部分が入力欄の上に表示されます。タップすると追加されます。 | <a href="assets/features/typingCompletion.webp"><img src="assets/features/typingCompletion.webp" width="160" alt="スクリーンショット: 入力中に補完"></a> |
66
- | **プロンプトを改善** | <a id="feature-promptimprove"></a>大まかな依頼を入力し、モデルメニューの横にある魔法の杖(**プロンプトを改善**)をクリックします。1 回のモデル呼び出しで、より明確なプロンプトに書き直します。最初に目標、複数の部分があるときは短い番号付きの手順、最後に実行するチェックを書きます。このチャット(ロールバックで取り消したメッセージは除きます)、プロジェクトの README・AGENTS.md・マニフェスト、変更されたファイル、名前があなたの言葉と一致するファイルを読み、あなたの言語を保ちます。ファイル名を作り出すことはありません。新しいテキストは下書きと置き換わりますが、送信はされません。読んで編集してから `Enter` を押してください。`Cmd/Ctrl+Z` を押すと 1 ステップで元のテキストに戻ります。ボタン(**改善を元に戻す**)でも戻せます。処理中に入力すると、新しく入力したテキストが残ります。`Esc` を押すか、もう一度クリックするとキャンセルします。設定に専用の **モデル** メニューがあります(既定は **チャットのモデルと同じ**)。スラッシュコマンドや、ファイルのチップを含むメッセージには使えません。Tether では、魔法の杖は入力欄の横にあります。 | <a href="assets/features/promptImprove.webp"><img src="assets/features/promptImprove.webp" width="160" alt="スクリーンショット: プロンプトを改善"></a> |
67
- | **目標チェック** | <a id="feature-goalcheck"></a>`/goal` で目標を開始します。自動ラウンドでエージェントが目標を完了にすると、目標は 2 つのチェックを通ったときだけ閉じます。まず、プロジェクトのテストコマンドが、チャットのフォルダーで、チャットのサンドボックスモードのもとで実行されます。コマンドは、あなた自身のコマンドか、`package.json`、`Makefile`、`Cargo.toml`、`go.mod` または pytest から見つけたコマンドです。エージェント自身の最新のステップがそのテストの成功した実行だった場合は、もう一度は実行しません。次に、ツールを持たない独立したモデル呼び出しが、目標、このチャット、`git status`、テスト結果を読みます。チェックが失敗すると、目標は進行中のままになり、エージェントが理由を読んで、次のラウンドが続きます。目標バーの下の行(**目標チェック**)に、テストと最後の結果が表示されます。**編集** で、独自のテストコマンドと、時間またはトークンの制限を設定します。制限を超えると、目標はブロック中になります。**今すぐ実行** は、目標を閉じずにチェックを実行します。設定に専用の **モデル** メニューがあります(既定は **チャットのモデルと同じ**)。目標を自分で完了したときは、何もチェックしません。 | <a href="assets/features/goalCheck.webp"><img src="assets/features/goalCheck.webp" width="160" alt="スクリーンショット: 目標チェック"></a> |
68
- | **プロジェクトメモリー** | <a id="feature-projectmemory"></a>既定ではオフです。**設定 → Composer Plus** でオンにしてください。プロジェクトのフォルダーごとに専用のメモリーがあり、そのプロジェクトの後のチャットが読みます。DS Bot が Bot ごとにメモリーを持つのと同じです。ターンが終わるたびに、チャットのモデルを 1 回呼び出して新しいメッセージ(ロールバックしたものは除きます)を読み、長く続く好み、決定、事実を短いメモとして保存し、古いメモを変更または削除します。エージェントも自分でメモを保存、削除、検索できます(`memory_remember`、`memory_forget`、`memory_recall`)。メモはグローバルにもでき、その場合はすべてのプロジェクトが読みます。新しいチャットはシステムプロンプトでメモを受け取ります。後で保存したメモは次のチャットから表示されます。ファイルは dsh のホームフォルダーにある Markdown(`storages/dsh-composer-plus/memory/`)で、プロジェクトのフォルダーには保存されません。 | <a href="assets/features/projectMemory.webp"><img src="assets/features/projectMemory.webp" width="160" alt="スクリーンショット: プロジェクトメモリー"></a> |
67
+ | **プロンプトを改善** | <a id="feature-promptimprove"></a>大まかな依頼を入力し、モデルメニューの横にある魔法の杖(**プロンプトを改善**)をクリックします。1 回のモデル呼び出しで、より明確なプロンプトに書き直します。最初に目標、複数の部分があるときは短い番号付きの手順、最後に実行するチェックを書きます。このチャット(ロールバックで取り消したメッセージは除きます)、プロジェクトの README・AGENTS.md・マニフェスト、変更されたファイル、名前があなたの言葉と一致するファイルを読み、あなたの言語を保ちます。ファイル名を作り出すことはありません。新しいテキストは下書きと置き換わりますが、送信はされません。読んで編集してから `Enter` を押してください。`Cmd/Ctrl+Z` を押すと 1 ステップで元のテキストに戻ります。ボタン(**改善を元に戻す**)でも戻せます。処理中に入力すると、新しく入力したテキストが残ります。`Esc` を押すか、もう一度クリックするとキャンセルします。設定に専用の **モデル** メニューがあります(既定は **チャットのモデルと同じ**)。`/goal <objective>` のメッセージでは目標の部分だけを、**目標チェック** が検証できる完了条件として書き直します。内容は、成果物、通る必要のあるチェック、チャットで示す証拠、できない部分を未解決とする印、同じ障害が続いたときの停止です。`/goal` コマンドはそのまま残ります。ほかのスラッシュコマンド、`/goal` の制御語(`clear`、`pause`、`resume`)、ファイルのチップを含むメッセージには使えません。Tether では、魔法の杖は入力欄の横にあります。 | <a href="assets/features/promptImprove.webp"><img src="assets/features/promptImprove.webp" width="160" alt="スクリーンショット: プロンプトを改善"></a> |
68
+ | **目標チェック** | <a id="feature-goalcheck"></a>`/goal` で目標を開始します。自動ラウンドでエージェントが目標を完了にすると、目標は 2 つのチェックを通ったときだけ閉じます。まず、プロジェクトのテストコマンドが、チャットのフォルダーで、チャットのサンドボックスモードのもとで実行されます。コマンドは、あなた自身のコマンドか、`package.json`、`Makefile`、`Cargo.toml`、`go.mod` または pytest から見つけたコマンドです。エージェント自身の最新のステップがそのテストの成功した実行だった場合は、もう一度は実行しません。次に、ツールを持たない独立したモデル呼び出しが、目標、このチャット、`git status`、テスト結果を読みます。モデルは証拠の表で答えます。目標の各部分を、証拠と修正方法とともに、検証済み、不正確、未解決のいずれかにします。すべての部分が検証済みのときだけ、目標は閉じます。チェックが失敗すると、目標は進行中のままになり、エージェントが未完了の各部分を証拠と修正方法とともに読んで、次のラウンドが続きます。目標バーの下の行(**目標チェック**)に、テスト、最後の結果、検証済みの部分の数が表示されます(ポインターを合わせると表が表示されます)。**編集** で、独自のテストコマンドと、時間またはトークンの制限を設定します。制限を超えると、目標はブロック中になります。トークンの制限には、チャットのサブエージェントの分も含まれます。**今すぐ実行** は、目標を閉じずにチェックを実行します。設定に専用の **モデル** メニューがあります(既定は **チャットのモデルと同じ**)。目標を自分で完了したときは、何もチェックしません。 | <a href="assets/features/goalCheck.webp"><img src="assets/features/goalCheck.webp" width="160" alt="スクリーンショット: 目標チェック"></a> |
69
+ | **新しいチャットで続ける** | <a id="feature-handoffchat"></a>サイドバーのチャットを右クリック(またはチャットの **…** メニューを開く)→ **新しいチャットで続ける…**。チャット自身のモデルを 1 回呼び出し、チャットに表示されている内容から引き継ぎメモを書きます。項目は、タスク、成果物、完了したこと、決定事項、未解決の問題、次のアクションです(ツール呼び出しとその結果が証拠になります。ロールバックしたステップは含まれません)。メモはダイアログで開きます。読んで編集してください。**もう一度書く** で新しいメモを書きます。**新しいチャットを開始**(または `Cmd/Ctrl+Enter`)は、同じプロジェクトで新しいチャットを開き、メモと元のチャットへのリンクを最初のメッセージにします。元のチャットはそのまま残ります。長いチャットがいっぱいになったときや遅くなったとき、または翌日に続けるときに使います。プロジェクトには何も書き込みません。 | <a href="assets/features/handoffChat.webp"><img src="assets/features/handoffChat.webp" width="160" alt="スクリーンショット: 新しいチャットで続ける"></a> |
70
+ | **コンテキストの内訳** | <a id="feature-contextbreakdown"></a>右サイドバー → `+` → **コンテキスト**。開いているチャットのモデルのコンテキストを、いま何が占めているか、コンテキストウィンドウのどれだけを使っているかを表示します。システムプロンプト、プロジェクトの指示(AGENTS.md)、スキル、自分のメッセージ、エージェントの返信とツール呼び出し、ツールの結果(ツールごと)、MCP の結果(サーバーごと)、ツールの定義、圧縮の概要、その他のコンテキストのメモを、それぞれのトークン数と割合とともに示します。項目をクリックすると、そのツールやサーバーを表示します。`/compact` とロールバックの後のチャットのログだけを読み、モデルは呼び出しません。各ターンの後と **更新** で読み直します。チャットが遅い理由やいっぱいになった理由を調べるときに使います。たとえば、大きな MCP ツールの結果や多数のツール定義が原因のことがあります。 | <a href="assets/features/contextBreakdown.webp"><img src="assets/features/contextBreakdown.webp" width="160" alt="スクリーンショット: コンテキストの内訳"></a> |
71
+ | **保護されたファイル** | <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> |
72
+ | **プロジェクトメモリー** | <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> |
69
73
  | **このチャットで許可** | <a id="feature-allowforchat"></a>自動レビューで確認を求められると、承認カードに **このチャットで許可** が表示されます。これを選ぶと、同じチャットの同じツールが、引数にかかわらず、時間制限が終わるまで許可されます(既定は 1 時間。**設定 → Composer Plus → このチャットで許可** で選べます)。その後、エージェントが再び確認します。ヘッダーのチップに許可の一覧が終了時刻とともに表示され、そこから取り消せます。許可は再起動後も有効です。 | <a href="assets/features/allowForChat.webp"><img src="assets/features/allowForChat.webp" width="160" alt="スクリーンショット: このチャットで許可"></a> |
70
74
  | **プロジェクトの状態** | <a id="feature-projectstatus"></a>サイドバーのプロジェクトの行に、そのチャットと同じ実行中/待機中/完了のマーカーが表示されます。そのため、折りたたんだプロジェクトでも、中のチャットが作業中か、あなたの操作を待っているかがわかります。最初に表示されるのはあなたの操作を待っているチャットで、次がまだ開いていない完了済みのチャット(緑色の点。別のチャットがまだ実行中でも表示されます)、その次が実行中のマーカーです。ポインターを合わせると詳細が表示されます。**ワークスペースのツリー** では、親フォルダーの行にも、中にある各プロジェクト(たとえば `.worktrees/` 内の各ブランチのフォルダー)のチャットの状態が表示されます。フォルダーを折りたたんでいるときも同じです。 | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="スクリーンショット: プロジェクトの状態"></a> |
71
- | **チャット行の Git ブランチ** | <a id="feature-sessionbranch"></a>サイドバーの各チャット行に、チャットの最後のターンの時点でチャットのプロジェクトフォルダーがあった git ブランチが、小さな灰色のラベルで表示されます(例:`main` や `feature/login`。detached HEAD の場合は短いコミット ID を括弧内に表示します)。同じプロジェクトで別のブランチにある 2 つのチャットが同じに見えることはなくなり、間違ったブランチでチャットを続けようとしているときにすぐ気づけます。ラベルにポインターを合わせると完全な名前が表示されます。ホスト側は、ターンの開始時と終了時にブランチを読み取ります(`git branch --show-current`、読み取り専用)。この機能をインストールしてからターンのないチャットや、git リポジトリではないフォルダーには、ラベルは表示されません。チャットの上のプロジェクト行の名前がブランチと同じ場合(「チャットごとのブランチ」のフォルダーなど)、チャット行にラベルは表示されませんが、「1つのリスト」では表示されます。 | <a href="assets/features/sessionBranch.webp"><img src="assets/features/sessionBranch.webp" width="160" alt="スクリーンショット: チャット行の Git ブランチ"></a> |
75
+ | **チャット行の Git ブランチ** | <a id="feature-sessionbranch"></a>サイドバーの各チャット行に、チャットの最後のターンの時点でチャットのプロジェクトフォルダーがあった git ブランチが、小さな灰色のラベルで表示されます(例:`main` や `feature/login`。detached HEAD の場合はブランチがないため、ラベルは表示されません)。同じプロジェクトで別のブランチにある 2 つのチャットが同じに見えることはなくなり、間違ったブランチでチャットを続けようとしているときにすぐ気づけます。ラベルにポインターを合わせると完全な名前が表示されます。ホスト側は、ターンの開始時と終了時にブランチを読み取ります(`git branch --show-current`、読み取り専用)。この機能をインストールしてからターンのないチャットや、git リポジトリではないフォルダーには、ラベルは表示されません。チャットの上のプロジェクト行の名前がブランチと同じ場合(「チャットごとのブランチ」のフォルダーなど)、チャット行にラベルは表示されませんが、「1つのリスト」では表示されます。 | <a href="assets/features/sessionBranch.webp"><img src="assets/features/sessionBranch.webp" width="160" alt="スクリーンショット: チャット行の Git ブランチ"></a> |
72
76
  | **すべて既読にする** | <a id="feature-markprojectread"></a>サイドバーで、プロジェクトの **…** ボタン → **すべて既読にする** をクリックします。そのプロジェクトのすべてのチャットから、緑色の未読の点が一度に消えます。ほかのプロジェクトの点はそのまま残ります。プロジェクトに未読のチャットがない場合、この項目はグレー表示になります(**未読のチャットはありません**)。 | <a href="assets/features/markProjectRead.webp"><img src="assets/features/markProjectRead.webp" width="160" alt="スクリーンショット: すべて既読にする"></a> |
73
77
  | **アクティブなプロジェクトを先頭に表示** | <a id="feature-activeprojectsfirst"></a>チャットが実行を始めたり、あなたの操作が必要になったりすると、そのプロジェクトがサイドバーの先頭に移動します。移動には dsh 標準の行のアニメーション(ドラッグして移動したときと同じ動き)を使います。完了したプロジェクトはその場所に残ります。いつもどおり、ドラッグして好きな場所に移動できます。移動は dsh のプロジェクトの順序に保存されるため、この機能をオフにしても現在の順序は維持されます。 | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="スクリーンショット: アクティブなプロジェクトを先頭に表示"></a> |
74
78
  | **最近のプロジェクトのフィルター** | <a id="feature-recentprojects"></a>サイドバー → 表示オプション(スライダーのアイコン)→ **過去 2 時間以内にアクティブ**。選択中は、過去 2 時間以内にアクティブなチャットがあるプロジェクトだけがサイドバーに表示されます。対象となるチャットは、その間に更新されたチャット、実行中または待機中のチャット、開いているチャット、まだ開いていない完了済みのチャット(dsh の緑色の「完了」の点)です。完了済みのチャットは、2 時間を過ぎても対象のままです。このようなチャットがないプロジェクトは、新しい空のプロジェクトも含めて非表示になります。**ワークスペースのツリー** では、中のプロジェクトがアクティブな間は親フォルダーも表示されたままになり、過去 2 時間以内にアクティブでなかったチャットも非表示になるため、最近のチャットだけが表示されます。もう一度選択すると、すべてのプロジェクトを表示します。選択はこのデバイスに保存されます。 | <a href="assets/features/recentProjects.webp"><img src="assets/features/recentProjects.webp" width="160" alt="スクリーンショット: 最近のプロジェクトのフィルター"></a> |
75
79
  | **すべてのプロジェクトを折りたたむ** | <a id="feature-collapseprojects"></a>サイドバーでプロジェクトが開いているとき、表示オプション(スライダーのアイコン)の横にボタンが表示されます。クリックすると、開いているすべてのプロジェクトを一度に閉じます(たとえば、5 件中 3 件が開いている場合)。開いているプロジェクトがなくなると、ボタンは再び非表示になります。 | <a href="assets/features/collapseProjects.webp"><img src="assets/features/collapseProjects.webp" width="160" alt="スクリーンショット: すべてのプロジェクトを折りたたむ"></a> |
76
80
  | **状態で並べ替え** | <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> |
77
81
  | **バックグラウンド通知** | <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> |
78
- | **操作がないときに待機中のチャットを開く** | <a id="feature-idleswitch"></a>チャットが質問をしたり、承認や計画のレビューを待っていたり(オレンジ色の点)するときに、dsh を 30 秒間操作しないと、dsh はそのチャットを開きます。複数のチャットが待っている場合は、最も長く待っているチャットから開き、次のチャットはさらに 30 秒操作がないと開きます。キー入力、クリック、マウスの移動、スクロールホイール、タッチがあると 30 秒を数え直します。フォーカスのある入力欄にテキストがあるとき、テキストを選択しているとき、メニューやダイアログが開いているときも切り替えません。待機中のチャットが画面に表示されている間は何も変わりません。回答せずに待機中のチャットから離れると、次に 30 秒間操作がないときに、そのチャットが再び開くことがあります。dsh がバックグラウンドにあるときも動作しますが、dsh は前面に出ません。 | <a href="assets/features/idleSwitch.webp"><img src="assets/features/idleSwitch.webp" width="160" alt="スクリーンショット: 操作がないときに待機中のチャットを開く"></a> |
82
+ | **操作がないときに待機中のチャットを開く** | <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> |
79
83
  | **アプリケーションの言語** | <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> |
80
84
  | **モバイル接続(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> |
81
85
  | **自動アップデート** | <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> |
@@ -160,7 +164,10 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
160
164
  - **入力中に補完:** オンにするまではオフです。オンの間は、入力が止まるたびに、ホスト側が、それまでに入力したテキストと、そのチャットでのあなた自身のメッセージ、エージェントのテキストの返信(ツールの出力、隠れたコンテキスト、推論は含みません)を、**入力中に補完** で選んだモデル(既定では **次のメッセージの予測** のモデル)に送ります。チャットの部分は最大で約 3,000 文字です。次に入力が止まると、前のリクエストは止まります。チャットには何も保存しません。スイッチは `$DSH_HOME/storages/dsh-composer-plus/complete.json`(所有者のみのファイル)に保存されます。
161
165
  - **プロンプトを改善:** 魔法の杖をクリックするまで、何も実行されません。クリックすると、ホスト側は次の内容を、**プロンプトを改善** で選んだモデル(既定ではチャット自身のモデル)に 1 回のリクエストとして送ります。下書き、そのチャットでのあなた自身のメッセージとエージェントのテキストの返信(ツールの出力、隠れたコンテキスト、推論、ロールバックで取り消したメッセージは含みません。最大で約 6,000 文字、最新の部分)、**機能のアイデア** と同じプロジェクトの概要(ファイルのルールも同じです。`.env*` や鍵ファイルは読まず、フォルダーの外を指すシンボリックリンクや FIFO はスキップします)、`git status` が変更ありとして示すパス、名前に下書きと共通の言葉を含む、追跡済みまたは未追跡(無視されていない)のパス最大 30 件です。この概要以外のファイルの内容は送りません。チャットにもプロジェクトにも何も書き込みません。回答は入力欄の下書きを置き換えるだけで、送信するかどうかはあなたが決めます。モデルの選択は `$DSH_HOME/storages/dsh-composer-plus/improve.json`(所有者のみのファイル)に保存されます。
162
166
  - **目標チェック:** 自動ラウンドでエージェントが `/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 チャット)に保存されます。
163
- - **プロジェクトメモリー:** オンにするまではオフです。オンの間は、最上位のチャットのターンが終わるたびに、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` にあります。
167
+ - **新しいチャットで続ける:** クリックするまで、何も実行されません。クリックすると、ホスト側はチャット(目標チェックと同じ読み方です。推論とロールバックで取り消したステップは含みません)をチャット自身のモデルに送り、引き継ぎメモを表示します。新しいチャットを作るのは **新しいチャットを開始** だけです。プロジェクトには何も書き込みません。
168
+ - **コンテキストの内訳:** ホスト側でチャットのログだけを読みます。モデル呼び出しはせず、プロジェクトのファイルも読みません。
169
+ - **保護されたファイル:** リストとスイッチは `$DSH_HOME/storages/dsh-composer-plus/protected-files.json`(所有者のみのファイル)にあります。チェックが読むのは、各ファイルツール呼び出しのパス(とその実際のパス)だけで、ファイルそのものは読みません。
170
+ - **プロジェクトメモリー:** オンにするまではオフです。オンの間は、最上位のチャットのターンが終わるたびに、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 も同じルートでメモを読み、変更します。
164
171
  - **バックアップ:** データがマシンの外に出ることはありません。アーカイブは `~/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 プロセスを示します(レスキューコンソールはこれらを読み取り、復元を拒否します)。
165
172
  - **レスキューコンソール:** ターミナルのメニューです。ネットワークポートは開きません。復元は、dsh のホームの隣にある新しいフォルダーにだけ書き込みます(ファイルは `O_EXCL | O_NOFOLLOW` で書き込み、シンボリックリンクは最後に作成し、たどりません)。安全でない名前(`..`、絶対パス)、デバイスや FIFO、複数の最上位フォルダー、リンクの下のエントリーを含むアーカイブは拒否します。
166
173
 
@@ -182,7 +189,7 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
182
189
  - **チャット行にブランチのラベルがない:** 原因は次のいずれかです。このバージョンをインストールしてから、そのチャットにターンがない。フォルダーが git リポジトリではない。**チャット行の Git ブランチ** がオフになっている。アップデートの後は、dsh を再起動してください(ブランチはホスト側が記録します)。
183
190
  - **目標チェックで、テストが終了コード 127 または「not found」で終了したと表示される:** Finder や Dock から起動した dsh は、ターミナルより PATH が短いことがあるため、`npm`、`pnpm`、`cargo` が見つかりません。ターミナルから dsh を起動するか、**目標チェック** → **編集** で、フルパスを使った独自のテストコマンドを設定してください。**今すぐ実行** を使うと、すぐに結果が表示されます。
184
191
  - **目標が閉じず、エージェントが作業を続ける:** **目標チェック** が、失敗したテストまたは足りない作業を見つけました。目標の下の行に理由が表示されます(詳細は、結果にポインターを合わせると表示されます)。原因またはテストコマンドを直すか、`/goal` または目標バーで目標を自分で完了してください(その完了はチェックされません)。
185
- - **リリース直後にインストールが失敗する:** バージョンを指定してください(`dsh-composer-plus@1.16.1`)。上のインストールの注記を参照してください。
192
+ - **リリース直後にインストールが失敗する:** バージョンを指定してください(`dsh-composer-plus@1.17.0`)。上のインストールの注記を参照してください。
186
193
  - **今すぐバックアップ で「別のバックアップ操作を実行中です」と表示される:** 別の dsh のウィンドウ、またはレスキューコンソールで操作が実行中です(どちらも、バックアップフォルダーのロックファイル `.composer-plus.lock` を共有します)。完了するまで待ってください。実行中の操作がない場合は、次のクリックで、終了したプロセスのロックを引き継ぎます。
187
194
  - **レスキューコンソールで「dsh is running」と表示される:** まず dsh を終了してください。dsh が本当に閉じている場合、メッセージに示されたファイルはクラッシュで残ったものです。そのファイルを削除して、もう一度試してください。
188
195
  - **復元の後に dsh が起動しない、またはプラグインが見つからない:** プロファイルのプラグインパッケージを、もう一度インストールする必要があります。レスキューコンソールが、復元の後にこれを提案します。または、コンソールが一覧表示する `$DSH_HOME/profiles/` の下の各フォルダーで `pnpm install` を実行してください。vault に入っていなかったシークレット(別のコンピュータ)は、もう一度入力する必要があります。コンソールがそれらを一覧表示します。
@@ -205,6 +212,7 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
205
212
  - **このチャットで許可** は、許可した時点から時間制限を数えます。新しい時間制限は、有効な許可にすぐに適用されます。そのため、短い時間制限にすると、許可がすぐに終わることがあります。バージョン 1.12 以前の許可には時刻がありません。更新後、エージェントはそのツールについてもう一度だけ確認します。
206
213
  - **入力欄のフォーカスを維持** がフォーカスを戻すのは、`/` コマンドまたはスキルの後だけです。dsh がコマンドを処理する間、入力欄は数ミリ秒だけ読み取り専用になります。そのため、その間に押したキーは失われます。dsh の `/` メニューがまだ開いている場合、`Enter` は強調表示された行を選び、送信はしません。
207
214
  - **質問カードをウィンドウに合わせる**は dsh の質問カードだけを変更し、計画レビューのカードは変更しません。カードは dsh のマークアップ(`data-question-key`、`data-question-scroll`)で見つけます。dsh の更新でこのマークアップが変わると、カードは dsh が描くとおりに表示されます。カードの高さはチャットではなくウィンドウに従います。狭いサイドパネル内のチャットでは、高いカードがチャットの上にはみ出すことがあります。
215
+ - **チャットのヘッダーをウィンドウに合わせる**は、dsh が生成したクラス名(`_titleRow`、`_titleCluster`、`_crumbs`、`_headerActions`、`_headerUtilities`)でチャットのヘッダーを見つけます。dsh にはヘッダーのレイアウト用のフックがないためです。dsh の更新でこれらの名前が変わると、ヘッダーは dsh の表示のままになります。とても狭いチャット列ではヘッダーが 2〜3 行になり、メッセージの上の領域が低くなります。
208
216
  - **モバイル接続** は 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 でそのチャットを開くまで残ります。
209
217
  - セッションリンクは、チャットの中で機能します。クリックしても、そのチャットは開きません。**メッセージリンクをコピー** で作ったリンクでメッセージを開けるのは、dsh 0.2.1 以降で、チャットの中のメッセージから開いた場合だけです(dsh 0.2.0 にはユーザーテキストのルールがないため、リンクはコピーされますが、プレーンテキストとして表示されます)。ロールバックで取り除かれたメッセージや、圧縮によって dsh が読み込む履歴から削除されたメッセージは表示できません。その場合、リンクがそのことを表示します。🔗 ボタンは、dsh のメッセージ行に取り付けています。dsh のアップデートでそのマークアップが変わった場合、ボタンは表示されません。
210
218
  - **すべて既読にする** は、公開 API ではない dsh の一部(dsh のセッション状態の `completionUnread` 一覧)を通じて、dsh 自身の未読の点を変更します。dsh のアップデートでこの名前が変わった場合、この項目は表示されません。この項目は dsh のプロジェクトの「…」メニューに入りますが、このメニューにはプラグイン用のスロットがありません。dsh がこのメニューを変更した場合も、この項目は表示されません。
@@ -219,7 +227,7 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
219
227
  - **チャットごとのブランチ**:チャットのブランチフォルダー(`<project>/.worktrees/<name>`)が削除されると(たとえばチャット自身のエージェントが worktree を取り除いてブランチを削除したとき)、チャットの次のステップでチャットはそのフォルダーから移ります。ブランチフォルダーのプロジェクトはサイドバーから消え、チャットは「グループなし」の下に表示され、開いたままです。dsh 0.2.1 以降では、チャットはプロジェクトのメインフォルダーで続き、モデルには新しいフォルダーについての通知が届きます。dsh 0.2.0 では、チャットは削除されたフォルダーのままです。そこでのコマンドは、新しいチャットを始めるまで失敗します。どのチャットも使っていない削除済みブランチのプロジェクトもサイドバーから消えます。Composer Plus は起動時と 30 秒ごとにブランチフォルダーを確認します。サイドバーのフィルターは必要ありません。チャットの移動中は、同じリポジトリの **新しいブランチ** が「もう一度試してください」と答えます。スイッチをオフにすると、dsh 自身のエラー(「working-directory: directory does not exist」)が再び表示されます。
220
228
  - **ワークスペースのツリー内のブランチ** はクリックなしで 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 のサイドバーの行からそれを読み取ります)。それ以外の場合、コピーはブランチのプロジェクトにあります。
221
229
  - **チャット内を検索** が検索するのは、ページに表示されている内容だけです。対象は読み込まれたメッセージと返信です(古いものは、上にスクロールするか、**以前の履歴を読み込む** をクリックします)。閉じているツールのステップや、ツールの出力の中で折りたたまれているテキストは対象外です。数える一致は最大 2,000 件です(それを超えると「2000+」)。ブラウザーのハイライト API を使います(Chromium 105 以降。デスクトップアプリには搭載されています)。古いブラウザーでは、件数と移動は動作しますが、色は付きません。Mac では `Cmd+F`(Windows と Linux では `Ctrl+F`)でこれが開くのは、画面にチャットがあるときだけです。それ以外の場所では、ブラウザー自体の検索がこれまでどおり動作します。Mac の `Ctrl+F` は、テキスト欄での macOS の動作(カーソルを 1 文字進める)のままです。
222
- - **操作がないときに待機中のチャットを開く** が分かるのは、dsh のウィンドウで見える操作だけです。ほかのアプリでの作業は数えないため、dsh がバックグラウンドにあると、30 秒後に待機中のチャットを開くことがあります。dsh は前面に出ません。キー入力、クリック、マウスの移動をせずに読んでいるだけの状態は、操作なしと見なします。対象は dsh のオレンジ色の点が付いたチャット(質問、承認、計画のレビュー)だけです。サブエージェントのリクエストは親のチャットに表示されます。待機中のチャットが画面にある間は、ほかのチャットを開きません。回答せずに離れたチャットは、次に 30 秒間操作がないときに再び開くことがあります。30 秒は変更できません。
230
+ - **操作がないときに待機中のチャットを開く** が分かるのは、dsh のウィンドウで見える操作だけです。ほかのアプリでの作業は数えないため、dsh がバックグラウンドにあると、30 秒後に待機中のチャットを開くことがあります。dsh は前面に出ません。キー入力、クリック、マウスの移動をせずに読んでいるだけの状態は、操作なしと見なします。対象は dsh のオレンジ色の点(質問、承認、計画のレビュー)または緑色の点(まだ開いていない完了したターン)が付いたチャットだけです。オレンジ色のチャットを先に開きます。緑色のチャットを開くとその点が消えるため、次の緑色のチャットの 30 秒は、次のキー入力、クリック、マウスの移動、スクロールホイール、タッチの後に始まります。戻ったときも、ほかの緑色の点は残っています。サブエージェントのリクエストは親のチャットに表示されます。待機中のチャットが画面にある間は、ほかのチャットを開きません。回答せずに離れたチャットは、次に 30 秒間操作がないときに再び開くことがあります。30 秒は変更できません。
223
231
  - 再起動の前に送られた通知をクリックしても、dsh が前面に表示されるだけです。
224
232
  - アクティブなプロジェクトは、dsh に保存されたプロジェクトの順序を使って移動します。そのため、新しい順序は再起動後も維持されます。どのプロジェクトにも属さないチャット(「グループなし」)は移動できません。dsh は、これらのチャットを常に最後に表示します。
225
233
  - dsh には、サイドバーの表示オプションのメニューに拡張ポイントがありません。そのため、最近のプロジェクトのオプションは、dsh 標準のメニューに追加しています。dsh のアップデートでこのメニューが変わった場合、オプションは表示されず、すべてのプロジェクトが表示されたままになります。フィルターはプロジェクトの行に対して動作するため、**1つのリスト** は絞り込まれません。**ワークスペースのツリー** では、中のプロジェクトがアクティブな間は親フォルダーも表示されたままになり、過去 2 時間にアクティブでなかったチャットの行も非表示になります。**ワークスペース** では、プロジェクトの行だけを絞り込みます。フィルターは、dsh が保存している表示設定(公開 API ではありません)から、dsh が今どの表示かを読み取ります。dsh の更新でその名前が変わった場合、**ワークスペースのツリー** は **ワークスペース** と同じように絞り込まれます。プロジェクトの状態も同じ設定を読み取ります。**ワークスペースのツリー** では、親フォルダーの行は、中にあるプロジェクトのチャットも数に入れます。dsh がこの設定の名前を変えた場合、各行には自分のチャットだけが表示されます。**状態別** にも、同じ種類の制限があります。dsh には並べ替えのスロットがないため、この項目と行の並び順は、dsh のメニューとリストのマークアップに取り付けています。
@@ -228,10 +236,13 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
228
236
  - dsh には **新しいセッション** を開く場所を選ぶ拡張ポイントもありません。**新しいセッションの既定のワークスペース** は、公開 API ではない dsh のメソッド(dsh のワークスペースサービスの `startSession`)をラップします。dsh の更新でこの名前が変わると、**新しいセッション** は dsh が選ぶ場所(開いているプロジェクトまたは最新のプロジェクト)で開きます。プロジェクトを指定しない呼び出しはすべて既定を使います:サイドバーのボタン、そのショートカット、ロゴ、そして **自動化タスク** ページの **新規** も同じです。dsh は起動時に引き続き最後のチャットを開きます。汎用フォルダーは初回使用時に作成され、プロジェクトに追加されます。Windows や Linux で Documents フォルダーを移動している場合、dsh 自身のフォルダーと異なることがあります。
229
237
  - dsh には、入力欄のヒントのための拡張ポイントもありません。そのため、**次のメッセージの予測** のテキストは、dsh 標準のプレースホルダー(`[data-composer-placeholder]`)の上に重ねて表示します。dsh のアップデートでこのマークアップが変わった場合、予測は表示されません。オンの間は、ターンが終わるたびに短いモデル呼び出しが 1 回行われます。
230
238
  - **入力中に補完** は、dsh 標準の入力欄のヒント(dsh がスラッシュコマンドの引数のヒントに使う `--dsh-composer-hint` スタイル)を通じてテキストを表示します。スラッシュコマンド、ファイルやシンボルのチップを含むメッセージ、カーソルがメッセージの末尾にないときは動作しません。dsh のアップデートでこのスタイルが変わった場合、補完は表示されません。入力が止まるたびに、モデル呼び出しが 1 回行われます。
231
- - **プロンプトを改善** が見るのは、短いプロジェクトの概要、変更されたパス、名前があなたの言葉と一致するパスだけで、コードそのものは見ません。そのため、正しいファイルを見落とすことがあり、渡されたパスしか挙げません。送信する前に新しいテキストを読んでください。スラッシュコマンドや、ファイルやシンボルのチップを含むメッセージには使えません(新しいテキストはプレーンテキストなので、チップが失われるためです)。メッセージは最大 8,000 文字です。画像は添付されたままで、変わるのはテキストだけです。クリックするたびに、モデル呼び出しが 1 回行われます。性能の高いモデルでは 1 分ほどかかることがあります(`Esc` でキャンセルします)。
232
- - **目標チェック** がチェックするのは、自動の目標ラウンドでエージェントが行った完了だけです。チャットであなたが頼んだ完了、`/goal`、目標バーはチェックされません。エージェントは、テストやテストコマンドのファイルを自分で変更できます。検証用のモデルはチャットを読むのでそれに気づけますが、どちらの方向にも誤ることがあります(誤った「未完了」はラウンドを 1 回余分に使い、誤った「完了」は目標を閉じます)。検証用のモデルが見るのはチャットと `git status` で、コードそのものは見ません。テストの実行結果を再利用するのは、ファイルを変更できるエージェントの最新のステップが、同じフォルダーで完全に同じコマンドを実行して成功した、エージェント自身の `bash` 実行だった場合だけです。パイプ(`| tail`)や `&&` を含むコマンドは再利用しません。予算はターンの終わりに計測されるため、1 回のターンで予算を超えることがあります。数えるのはチャット自身のモデル呼び出しだけです(サブエージェントの呼び出しは数えません)。チェックの実行中、`update_goal` は待機します(テストは最大 15 分、検証は最大 3 分)。フォークしたチャットには新しいチャット ID が付くため、親チャット独自のテストコマンドと制限なしで始まります。検証まで進んだ完了 1 回ごとに、モデル呼び出しが 1 回行われます。
239
+ - **プロンプトを改善** が見るのは、短いプロジェクトの概要、変更されたパス、名前があなたの言葉と一致するパスだけで、コードそのものは見ません。そのため、正しいファイルを見落とすことがあり、渡されたパスしか挙げません。送信する前に新しいテキストを読んでください。`/goal <目標>` 以外のスラッシュコマンド、`/goal` の制御語(`clear`、`pause`、`resume`)、ファイルやシンボルのチップを含むメッセージには使えません(新しいテキストはプレーンテキストなので、チップが失われるためです)。`/goal` の目標では、下書きとコンテキストだけから条件を書きます。厳しすぎる条件は目標のラウンドを余分に使うことがあるため、送信する前に読んでください。メッセージは最大 8,000 文字です。画像は添付されたままで、変わるのはテキストだけです。クリックするたびに、モデル呼び出しが 1 回行われます。性能の高いモデルでは 1 分ほどかかることがあります(`Esc` でキャンセルします)。
240
+ - **目標チェック** がチェックするのは、自動の目標ラウンドでエージェントが行った完了だけです。チャットであなたが頼んだ完了、`/goal`、目標バーはチェックされません。エージェントは、テストやテストコマンドのファイルを自分で変更できます。検証用のモデルはチャットを読むのでそれに気づけますが、どちらの方向にも誤ることがあります(誤った「未完了」はラウンドを 1 回余分に使い、誤った「完了」は目標を閉じます)。検証用のモデルが見るのはチャットと `git status` で、コードそのものは見ません。テストの実行結果を再利用するのは、ファイルを変更できるエージェントの最新のステップが、同じフォルダーで完全に同じコマンドを実行して成功した、エージェント自身の `bash` 実行だった場合だけです。パイプ(`| tail`)や `&&` を含むコマンドは再利用しません。予算はターンの終わりに計測されるため、1 回のターンで予算を超えることがあります。トークンの予算には、そのチャットのサブエージェントのチャットの呼び出しも数えます(各ターンの終わりに、保存されたログから読み取ります。そのため、サブエージェントが多いチャットはチェックに少し長くかかります)。証拠の表は、検証用のモデル自身がチャットを読んだ結果です。検証済みとされた部分でも、重要なときは自分で確認してください。チェックの実行中、`update_goal` は待機します(テストは最大 15 分、検証は最大 3 分)。フォークしたチャットには新しいチャット ID が付くため、親チャット独自のテストコマンドと制限なしで始まります。検証まで進んだ完了 1 回ごとに、モデル呼び出しが 1 回行われます。
241
+ - **保護されたファイル** はガードレールであり、サンドボックスではありません。対象は dsh 自身のファイルツール(`read`、`read_image`、ファイルへの `grep`、`write`、`edit`、`str_replace_editor`)です。シェルコマンド(`cat .env`)、エージェントが書いたスクリプト、サブエージェントのシェル、MCP ツール、`glob` の一覧、フォルダー全体への `grep` からは、保護されたファイルに届くことがあります。本当の制限が必要なときは、dsh のサンドボックスモードを使うか、シークレットをプロジェクトのフォルダーの外に置いてください。パターンは `*`、`**`、`?` を理解しますが、`{a,b}` や `[ab]` は理解しません。また、大文字と小文字は区別しません。
242
+ - **新しいチャットで続ける** は、チャット(メッセージ、ツール呼び出し、各ツール結果の末尾。最大で約 60,000 文字、最新の部分)をチャット自身のモデルに送ります。引き継ぎメモには、決定やファイルが抜けることがあります。開始する前に読んでください。新しいチャットが知っているのは、メモとリンクしたチャットだけです(dsh は元のチャットを読み取り専用のコンテキストとして添付します)。モデルのコンテキストは小さい状態から始まり、元のチャットはそのまま残ります。1 つのチャットで同時に実行できるメモの作成または開始は 1 つだけです。
243
+ - **コンテキストの内訳** は、dsh 自身のルール(1 トークンあたり約 4 文字)で推定値を表示します。これは dsh のコンテキストリングと同じルールで、モデル自身の数え方とは異なることがあります。ツールの定義は、最新のリクエストのものです。コンテキストはチャットのログにあるとおりに表示します。実行中のターンは、次のステップの後に表示されます。
233
244
  - **停止後の新規メッセージ優先** は、チャットを停止した後(または失敗したターンの後、まだキューがあるチャットを開いたとき)にだけ働きます。ターンの実行中に送信したメッセージは、これまでどおりキューの末尾で待ちます。追い越すのは自分がキューに入れたメッセージだけです。キューに目標のラウンドや質問への回答が待っている場合は、dsh 自身の順序のままです。公開 API ではない dsh の一部(停止したターンがまだ終了処理中かどうか)を読み取ります。dsh の更新でその名前が変わった場合、メッセージはそのターンが終わった後にだけ先頭に移ります。サブエージェントのチャットは dsh 自身の順序のままです。
234
- - **プロジェクトメモリー** はチャットの最初のフォルダー(dsh のプロジェクトのフォルダー)に属します。`cd` でフォルダーを変えたチャットは最初のプロジェクトのメモリーを使い続けます。同じファイルへの別のパスで開いた同じフォルダーは、同じメモリーを共有します。チャットは開始時にメモリーのセクションを固定するため、後で保存したメモは次のチャットから表示されます(`memory_recall` ならすぐに見つかります)。確認では、モデルが残すと決めたものだけを残します。事実を見落としたり、誤った内容を残したりすることがあります。ファイルを開いて確認し、dsh を閉じている間に手で編集または削除してください。あなたのメッセージを含むターンが終わるたびに、モデルを 1 回呼び出します。呼び出しが失敗すると、次のターンの後に同じメッセージをもう一度読みます。サブエージェントのチャットは確認しません。考え方とファイル形式は [DS Bot](https://github.com/Fei2411/DS-Bot)(Apache-2.0)から来ています。Composer Plus はそのコードを使っておらず、DS Bot 自身のメモリーを読み書きすることもありません。
245
+ - **プロジェクトメモリー** はチャットの最初のフォルダー(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 自身のメモリーを読み書きすることもありません。
235
246
  - **バックアップ** が使うのは、固定の 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 のアーカイブを数え、それらを削除することがあります。
236
247
  - **復元** は、dsh を閉じている間に、レスキューコンソールでだけ実行できます。復元は dsh のホーム全体を置き換えます。古いホームは、あなたが削除するまで、隣に `.dsh.pre-restore-<time>` として残ります。そのため、ディスクには両方の分の空きが必要です。チャットはプロジェクトのパスを保ちます。別のコンピュータでは、別のパスにあるプロジェクトは、もう一度追加するまで見つからないものとして表示されます。dsh のホームの外を指すシンボリックリンク(たとえば、別のフォルダーからリンクしたスキル)は、リンクとして戻ります。リンク先は、そのコンピュータ上に存在する必要があります。
237
248
  - **セッションログのチェック** は、各チャットの最新のログを、何が開けるかについての dsh 自身のルールで読み取ります。JSON ではない行や順序の乱れた行は、その後にターンの終わりがある場合にだけ損傷と数えます(そうでなければ、dsh はその行以降を除いてチャットを開くため、一覧には表示されません)。ログのイベントを、dsh 自身のイベントのルールと照らし合わせることはしません。そのため、正常と判定されたログでも、dsh のアップグレード後に開けないことがあります。修復では、バックアップからコピーを取り出します。そのバックアップ以降のメッセージは、そのチャットから失われます(損傷したファイルは隣に残ります)。この dsh で開いているチャットは、設定では修復されません。dsh がそのチャットを保持しているためです。
@@ -264,7 +275,7 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
264
275
 
265
276
  **ループエンジニアリングの検証ループのように、エージェントが自分の作業を自分で完了扱いにしないようにできますか?** はい、**目標チェック**(既定ではオン)でできます。`/goal` で目標を開始します。エージェントが目標を完了したと言うと、プロジェクトのテストが実行され、独立したモデル呼び出しがチャットと照らし合わせて目標をチェックします。どちらかが失敗すると、目標は開いたままになり、エージェントが理由を読みます。目標の下の **目標チェック** の行にある **編集** で、独自のテストコマンド、時間制限、トークン制限を設定できます。
266
277
 
267
- **DS Bot のメモリーのように、エージェントがチャットをまたいで好みを覚えておけますか?** はい、**プロジェクトメモリー**(既定ではオフ)で可能です。**設定 → Composer Plus** でオンにしてください。ターンが終わるたびに、長く続く好みや決定がチャットのプロジェクトの短いメモとして保存され、そのプロジェクトの新しいチャットがそれを読みます。エージェントに何かを覚えるように頼むと、すぐに保存します。
278
+ **DS Bot のメモリーのように、エージェントがチャットをまたいで好みを覚えておけますか?** はい、**プロジェクトメモリー**(既定ではオフ)で可能です。**設定 → Composer Plus** でオンにしてください。ターンが終わるたびに、長く続く好みや決定がチャットのプロジェクトの短いメモとして保存され、そのプロジェクトの新しいチャットがそれを読みます。エージェントに何かを覚えるように頼むと、すぐに保存します。メモを見たり変えたりするには、同じ行の **メモリーを開く** を押して、変更する内容を書いてください。
268
279
 
269
280
  **dsh-backup のように、dsh でチャットや設定をバックアップできますか?** はい。**設定 → Composer Plus → バックアップ → 今すぐバックアップ** を使います。同じ形式のアーカイブを同じフォルダー(`~/Desktop/dsh-backups`)に書き込むため、dsh-backup のアーカイブも表示され、復元できます。dsh-backup は削除してかまいません。定期的にバックアップするには、**自動バックアップ** をオンにしてください。
270
281
 
@@ -304,7 +315,7 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
304
315
 
305
316
  **dsh のタスクが完了したときや承認が必要なときに、macOS/Windows の通知を受け取るには?** **バックグラウンド通知** をオン(既定)のままにしてください。そのうえで、OS の設定で DeepSeek Harness の通知を許可します。
306
317
 
307
- **質問をしているチャットを dsh が自動で開くことはできますか?** はい、**操作がないときに待機中のチャットを開く**(既定でオン)を使います。チャットが回答、承認、計画のレビューを待っていて、dsh を 30 秒間操作しないと、dsh がそのチャットを開きます。入力中、スクロール中、マウスを動かしている間は待ちます。
318
+ **質問をしているチャットを dsh が自動で開くことはできますか?** はい、**操作がないときに待機中のチャットを開く**(既定でオン)を使います。チャットが回答、承認、計画のレビューを待っていて、dsh を 30 秒間操作しないと、dsh がそのチャットを開きます。まだ読んでいないターンを完了したチャット(緑色の点)も、オレンジ色のチャットの後に同じように開きます。入力中、スクロール中、マウスを動かしている間は待ちます。
308
319
 
309
320
  **DeepSeek Harness のインターフェースを、トルコ語、スペイン語、日本語などに切り替えるには?** 設定 → Composer Plus → **アプリケーションの言語** で切り替えます。
310
321
 
@@ -343,6 +354,8 @@ PLAYWRIGHT=/path/to/playwright node test/browser-readme-anchors.mjs
343
354
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-keep-focus.mjs /path/to/dsh/lib/bin.js
344
355
  # Fit question card to window (fake model asks a long question at 1280 × 820): question, answers, Skip and Submit readable, height follows the window + its thumbnail
345
356
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-question-fit.mjs /path/to/dsh/lib/bin.js
357
+ # Fit chat header to window (fake model, subagent + background jobs, branch pill, grants chip): no overlap from 1280 to 320 px, wide header unchanged + its thumbnail
358
+ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-header-fit.mjs /path/to/dsh/lib/bin.js
346
359
  # Mobile connect: switch on, QR popover, a fake iPhone pairs and calls dsh through the gateway, switch off + its thumbnail
347
360
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-mobile-connect.mjs /path/to/dsh/lib/bin.js
348
361
  # Resume after restart (fake slow model, real quit and start): a running chat and a goal continue, a stopped chat does not