dsh-composer-plus 1.14.0 → 1.16.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.14.0`。
32
+ > dsh の pnpm は、公開から 24 時間たっていないバージョンをスキップします。リリース直後は、バージョンを指定してください:`dsh-composer-plus@1.16.0`。
33
33
 
34
34
  ## 機能
35
35
 
@@ -37,7 +37,7 @@ dsh plugin --profile web add dsh-composer-plus
37
37
 
38
38
  | 機能 | 使い方 | スクリーンショット |
39
39
  |---|---|---|
40
- | **変更パネル** | <a id="feature-changespanel"></a>右サイドバー → `+` → **変更**。**未コミット**、**未ステージ**、**ステージ済み**、**ブランチ** のいずれかを選ぶと、変更されたファイルが `+/-` の行数とともに表示されます。ファイルをクリックすると、その差分を表示します。**最後のターン** は、最新のターンに対する dsh 標準のレビューを開きます。ブランチ名をクリックする(または **ツリー** を選ぶ)とブランチツリーを表示します。上のブランチをクリックするとそのブランチへ移動し、コミットをクリックするとそのファイルと差分を表示します。**このチャット** は、開いているチャットのファイルツール(write、edit)がすべてのターンで書き込んだファイルだけを、最初のメッセージからの差分の合計とともに一覧表示します。**␣** ボタンは空白の変更を非表示にします(`git diff -w`)。インデントや改行コードだけが変わった行は表示されません。ファイルの **…** メニュー → **このファイルを変更したチャット** には、同じリポジトリのチャットのうち、書き込みツールや編集ツールでそのファイルを変更したものが、変更した依頼とともに新しい順で一覧表示されます。クリックすると、そのチャットをその依頼の位置で開きます。 | <a href="assets/features/changesPanel.webp"><img src="assets/features/changesPanel.webp" width="160" alt="スクリーンショット: 変更パネル"></a> |
40
+ | **変更パネル** | <a id="feature-changespanel"></a>右サイドバー → `+` → **変更**。ページは **ツリー** で開きます。これはチャットのリポジトリのブランチマップです。3 つのカードがブランチの数を表示します。すべてのブランチ、マージ済みのブランチ、マージ待ちのブランチの数です。カードをクリックすると、そのブランチだけを表示します。もう一度クリックすると、すべてのブランチを表示します。各ブランチは、最後のコミットを示すボックスです。メインブランチにそのブランチの作業が含まれていれば緑、含まれていなければオレンジ、メインブランチ自体は青です。各ブランチから矢印が、そのブランチを取り込んだブランチ(✅ **マージ済み**)か、分岐元のブランチ(⏳ **待機中**、破線)へ伸びます。ボックスをクリックするとブランチのコミットを表示し、続けてコミットをクリックするとそのファイルと差分を表示します。**マージ済み** をクリックするとマージコミットのファイルを、**待機中** をクリックするとブランチがマージ先に持ち込むファイルを表示します。リモートブランチは、同じ名前のローカルブランチがない場合にだけ表示されます。モードメニューで **未コミット**、**未ステージ**、**ステージ済み**、**ブランチ** のいずれかを選ぶと、変更されたファイルが `+/-` の行数とともに表示されます。ファイルをクリックすると、その差分を表示します。**最後のターン** は、最新のターンに対する dsh 標準のレビューを開きます。**このチャット** は、開いているチャットのファイルツール(write、edit)がすべてのターンで書き込んだファイルだけを、最初のメッセージからの差分の合計とともに一覧表示します。**␣** ボタンは空白の変更を非表示にします(`git diff -w`)。インデントや改行コードだけが変わった行は表示されません。ファイルの **…** メニュー → **このファイルを変更したチャット** には、同じリポジトリのチャットのうち、書き込みツールや編集ツールでそのファイルを変更したものが、変更した依頼とともに新しい順で一覧表示されます。クリックすると、そのチャットをその依頼の位置で開きます。 | <a href="assets/features/changesPanel.webp"><img src="assets/features/changesPanel.webp" width="160" alt="スクリーンショット: 変更パネル"></a> |
41
41
  | **機能のアイデア** | <a id="feature-featureideas"></a>右サイドバー → `+` → **機能のアイデア** → **機能を提案**。チャットのモデルが、チャットのプロジェクトの短い概要(最上位のファイル、README とマニフェストの冒頭、README の残りの部分のアウトライン、最近のコミットのタイトル)を読み、最大 8 件の機能を提案します。提案は、dsh の UI 言語のカードの束として表示されます。カードを右にスワイプする(または **✓** をクリックするか `→` を押す。どの場合もカードはその方向へ飛んでいきます)と、同じプロジェクトで新しいチャットを開始します。新しいチャットはアイデアを依頼内容として計画モードで始まるため、計画を承認するまで何も変更されません。計画を省くには、**▶ すぐに実装** をクリックします(または `↑` を押します。カードは上へ飛んでいきます)。新しいチャットはアイデアを通常の依頼としてすぐに始まり、モデルが変更を加えてチェックを実行します(承認は通常どおり適用されます)。スキップするには、左にスワイプします(または **✕**、`←`)。**元に戻す**(または `Z`)で、スキップしたカードを戻せます。良いアイデアを後で使うには、**↓** をクリックします(または `↓` を押します)。アイデアはプロジェクトの **あとで** リストに入ります。このリストは、同じプロジェクトフォルダーのすべてのチャットに表示されます(再起動後も表示されます)。**あとで(N)** でリストを開きます。**計画する** は、そのアイデアで同じ計画モードのチャットを開始し、**すぐに実装** は計画なしのチャットを開始します。どちらもアイデアをリストから外します。**すべてまとめて計画(N)** は、リストのすべてのアイデアで 1 つの計画モードのチャットを開始するため、共通する部分は 1 回だけ計画されます。**リストから削除** はアイデアを削除します。**チェックリストとしてコピー** は、リスト全体を Markdown のチェックリスト(`- [ ] Title — Summary`、アイデアごとに 1 行)としてクリップボードにコピーします。課題管理ツールや TODO ファイルに使えます。ネットワーク通信はしません。アイデアの **GitHub issue を作成** は、あなた自身の GitHub CLI(`gh`)のログインで、プロジェクトの GitHub リポジトリに、アイデアのタイトルと概要(とその重要性)で issue を作成します。その後、アイデアの横に **Issue #N** のリンクが表示され、クリックすると issue が開きます。**アイデアをさらに提案** でカードを追加します。1 つの分野だけのアイデアがほしい場合は、**機能を提案** の横の欄に短い **重点テーマ** を入力するか(80 文字まで。`Enter` でも提案します)、その下の固定テーマ **パフォーマンス**、**アクセシビリティ**、**テスト**、**セキュリティ**、**使いやすさ**、**ドキュメント** のどれかをクリックします(もう一度クリックすると解除されます)。するとモデルは、そのテーマに関する機能だけを提案します。欄が空のときは、どの機能でも提案します。同じプロジェクトで同じアイデアが 2 回提案されることはありません。提案されたアイデアは(スキップ、保存、開始のどれでも)すべてプロジェクトの **履歴** に入ります。モデルにはそれらを再び提案しないよう指示され、同じタイトルのアイデアは除外されます。**履歴** では、アイデアが **開始済み** または **提案済み** として一覧表示されます。**忘れる**(または **すべて忘れる**)で、そのアイデアが再び提案されるようになりますが、まだ **あとで** リストにあるアイデアは、そこから削除するまで提案されません。モデルはクリックしたときだけ実行されます。 | <a href="assets/features/featureIdeas.webp"><img src="assets/features/featureIdeas.webp" width="160" alt="スクリーンショット: 機能のアイデア"></a> |
42
42
  | **内容検索** | <a id="feature-contentsearch"></a>dsh 標準のサイドバー検索(**ワークスペース** の横の虫眼鏡。デスクトップアプリでは `Cmd+K`、ブラウザーでは `Cmd+Alt+K`)で、タイトルだけでなく、自分のメッセージと返信に含まれる単語からもチャットを探せます。一致したテキストはチャットの下に表示されます。dsh にはこの検索がすでにありますが、オフの状態で提供されています。この機能は、コンピューター上の検索インデックスファイルを使って、この検索をオンにします。インデックスは起動後の最初の検索で作成され(250 件のチャットで約 15 秒。「制限事項」を参照)、次回以降の起動でも使われます。既定ではオンです。変更は dsh の再起動後に反映されます。 | <a href="assets/features/contentSearch.webp"><img src="assets/features/contentSearch.webp" width="160" alt="スクリーンショット: 内容検索"></a> |
43
43
  | **ターンのロールバック** | <a id="feature-turnrollback"></a>自分のメッセージにポインターを合わせ、**↶**(コピーの横)をクリックします。**チャットのみ** は、そのメッセージとそれ以降のすべて(返信、ツール呼び出し)をチャットとモデルのコンテキストから取り除き、メッセージを入力欄に戻します。内容を変更して、もう一度送信してください。**チャットとファイル** は、まずそのメッセージ以降に変更されたプロジェクトのファイルを一覧表示し、それらのファイルも元の状態に戻します。dsh の編集ツールによる変更だけでなく、コマンド(`bash`)による変更も戻します。実行中のターンは先に停止します。チャットのログが書き換えられることはありません。1 つの隠しマーカーが、取り除いた部分を隠します。これは、dsh 標準の `/compact` が古いメッセージを隠すのと同じ方法です。[dsh-rewind-plugin](https://www.npmjs.com/package/dsh-rewind-plugin) がインストールされている場合は、そのプラグインがこの役割を担い、Composer Plus は 2 つ目のボタンを表示しません。ロールバックの後、入力欄の上に **やり直す** バーが表示されます。ロールバックの直前から新しいチャットを開始し(同じメッセージとコンテキスト)、**チャットとファイル** の場合はファイルも戻します。ロールバックの後に変更したファイルは一覧に表示され、上書きのチェックボックスをオンにしない限り、そのまま残ります。 | <a href="assets/features/turnRollback.webp"><img src="assets/features/turnRollback.webp" width="160" alt="スクリーンショット: ターンのロールバック"></a> |
@@ -46,10 +46,12 @@ dsh plugin --profile web add dsh-composer-plus
46
46
  | **入力履歴** | <a id="feature-inputhistory"></a>入力欄が空のときに `↑` / `↓` を押すと、ターミナルのように、送信済みのメッセージを順に呼び出せます。 | <a href="assets/features/inputHistory.webp"><img src="assets/features/inputHistory.webp" width="160" alt="スクリーンショット: 入力履歴"></a> |
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
+ | **質問カードをウィンドウに合わせる** | <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> |
49
50
  | **ワンクリックで続行** | <a id="feature-continuebutton"></a>停止、失敗、または途中で切れたターンの後、空の入力欄に **▶** が表示されます。1 回クリックすると、入力欄に何も書かず、チャットに見えるメッセージも追加せずに、既存の会話から再開します(モデルには「止まったところから続ける」という短い隠しメモが届きます。Claude など一部のプロバイダーは、アシスタントの返信で終わるリクエストを拒否するためです)。キューで待っているメッセージはそのまま残ります。▶ は止まったタスクだけを続行し、その後でキューが実行されます。完了したターンの後は、通常の送信ボタンのままです。 | <a href="assets/features/continueButton.webp"><img src="assets/features/continueButton.webp" width="160" alt="スクリーンショット: ワンクリックで続行"></a> |
50
51
  | **再起動後に再開** | <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> |
51
52
  | **キューのドラッグ&ドロップ** | <a id="feature-queuereorder"></a>キュー内のメッセージにハンドル(⠿)が付きます。ドラッグして並べ替えるか、ハンドルにフォーカスを置いて `↑` / `↓` を押します。`Esc` でキャンセルします。 | <a href="assets/features/queueReorder.webp"><img src="assets/features/queueReorder.webp" width="160" alt="スクリーンショット: キューのドラッグ&ドロップ"></a> |
52
- | **キュー内のメッセージをその場で編集** | <a id="feature-queueedit"></a>キュー内のメッセージをダブルクリックします。メッセージが dsh 標準の編集欄に変わります。テキストを変更し、`Enter` で保存、`Esc` でキャンセルします。メッセージのキュー内の位置は変わりません。画像やファイルを含むメッセージは、この方法では編集できません(dsh のキューはテキストだけを編集します)。 | <a href="assets/features/queueEdit.webp"><img src="assets/features/queueEdit.webp" width="160" alt="スクリーンショット: キュー内のメッセージをその場で編集"></a> |
53
+ | **キュー内のメッセージをその場で編集** | <a id="feature-queueedit"></a>キュー内のメッセージをダブルクリックするか、その編集ボタン(**キュー内のメッセージを編集**)をクリックします。行の中にエディターが開きます。テキストを変更したり、画像やファイルを ✕ で削除したり、クリップ(**画像やファイルを追加**)や画像の貼り付けで新しく追加したりできます。`Enter` で保存、`Esc` でキャンセル、`Shift+Enter` で改行します。メッセージのキュー内の位置は変わらず、残した画像やファイルもそのままです。エディターが開いている間は、キューを並べ替えできません。Tether では、キュー内のメッセージのメニュー → Edit です。 | <a href="assets/features/queueEdit.webp"><img src="assets/features/queueEdit.webp" width="160" alt="スクリーンショット: キュー内のメッセージをその場で編集"></a> |
54
+ | **停止後の新規メッセージ優先** | <a id="feature-stopsendfirst"></a>既定でオンです。キューにメッセージが待っている状態でチャットを停止し、新しいメッセージを送信すると、そのメッセージがすぐに単独で実行されます。キュー内のメッセージは順序を保ったまま、その後に 1 ターンに 1 件ずつ実行されます。この機能がないと、dsh は新しいメッセージをキューの末尾に追加し、代わりにキューの先頭のメッセージを実行するため、新しいメッセージは最後に実行されます。チャットの実行中に送信したメッセージは、これまでどおりキューの末尾で待ちます。 | <a href="assets/features/stopSendFirst.webp"><img src="assets/features/stopSendFirst.webp" width="160" alt="スクリーンショット: 停止後の新規メッセージ優先"></a> |
53
55
  | **セッションリンクをコピー** | <a id="feature-copydeeplink"></a>サイドバーのチャットを右クリック → **セッションリンクをコピー**。`dsh-session:…` のリンクを別のチャットに貼り付けると、そのチャットを読み取り専用のコンテキストとして添付できます。dsh 0.2.1 には標準の **セッション ID をコピー** があり、こちらは ID だけをコピーします。この項目は、そのすぐ後に表示されます。 | <a href="assets/features/copyDeeplink.webp"><img src="assets/features/copyDeeplink.webp" width="160" alt="スクリーンショット: セッションリンクをコピー"></a> |
54
56
  | **メッセージリンクをコピー** | <a id="feature-copymessagelink"></a>メッセージにポインターを合わせ、**🔗** をクリックします(メッセージの操作行にあります。回答では時刻の横です)。リンクは、セッションリンクの後ろにメッセージ番号を付けたもの(`dsh-session:…#42`)です。このリンクをメッセージに貼り付けて送信します。dsh 0.2.1 以降では、リンクがチップとして表示されます。クリックするとそのチャットが開き、メッセージまでスクロールして、2 秒間ハイライトします。セッションリンクと同じく、そのチャットを読み取り専用のコンテキストとして添付します。 | <a href="assets/features/copyMessageLink.webp"><img src="assets/features/copyMessageLink.webp" width="160" alt="スクリーンショット: メッセージリンクをコピー"></a> |
55
57
  | **チャットを Markdown として書き出し** | <a id="feature-exportmarkdown"></a>サイドバーのチャットを右クリック(またはチャットの **…** メニューを開く)→ **Markdown として書き出し…**。ダイアログにチャットのメッセージ数が表示されます。**クリップボードにコピー** はチャットを Markdown としてコピーし、**.md ファイルを保存** はブラウザーのダウンロードで `<chat title>.md` として保存します(dsh デスクトップでは、システムの設定に応じて「ダウンロード」フォルダーに保存されるか、保存ダイアログが開きます)。ファイルには、チャットのタイトル、プロジェクト名、日付が入り、その後にメッセージごとに 1 つの `## あなた` または `## アシスタント` のセクションが続きます。コードブロックはそのまま残ります。メッセージが閉じていないコードブロックは閉じられます。 | <a href="assets/features/exportMarkdown.webp"><img src="assets/features/exportMarkdown.webp" width="160" alt="スクリーンショット: チャットを Markdown として書き出し"></a> |
@@ -57,23 +59,30 @@ dsh plugin --profile web add dsh-composer-plus
57
59
  | **新しいチャットでのプロジェクト検索** | <a id="feature-projectpicker"></a>新しいチャット → 入力欄の上にあるプロジェクトのボタン。プロジェクトが A–Z 順に並び、上部に **プロジェクトを検索** ボックスが表示されます。名前の一部を入力し(大文字と小文字、アクセント記号は区別しません)、`Enter` を押すと、最初に一致したプロジェクトを選びます。一致するものがない場合は、**一致するプロジェクトはありません** と表示されます。サイドバーにある dsh の保存済みのプロジェクトの順序は変わりません。 | <a href="assets/features/projectPicker.webp"><img src="assets/features/projectPicker.webp" width="160" alt="スクリーンショット: 新しいチャットでのプロジェクト検索"></a> |
58
60
  | **新しいセッションの既定のワークスペース** | <a id="feature-defaultworkspace"></a>設定 → Composer Plus → **新しいセッションの既定のワークスペース** → **新しいセッションを開く場所**:プロジェクトを選ぶか、**汎用フォルダー(default-workspace)** を選びます(既定値です。dsh 自身のフォルダー `Documents/deepseek-harness/default-workspace` で、最初に使うときに作成されます)。その後は、サイドバーの上部にある **新しいセッション**(とそのショートカット)が、別のプロジェクトのチャットを開いているときも、常にそこで新しいチャットを開きます。プロジェクトの横にある `+` は引き続きそのプロジェクトを開きます。新しいチャットの入力欄の上にあるプロジェクトのボタンでも、引き続きプロジェクトを変更できます。 | <a href="assets/features/defaultWorkspace.webp"><img src="assets/features/defaultWorkspace.webp" width="160" alt="スクリーンショット: 新しいセッションの既定のワークスペース"></a> |
59
61
  | **チャット内を検索** | <a id="feature-findinchat"></a>チャットで Mac では `Cmd+F`(Windows と Linux では `Ctrl+F`)を押すと、チャットの上に検索ボックスが開きます。単語を入力すると、画面上のメッセージと返信の一致箇所がすべてハイライトされ、現在の一致箇所はより濃い色で表示されます。ボックスには n / 合計 が表示されます。`Enter` または `↓` で次の一致へ、`Shift+Enter` または `↑` で前の一致へ移動します(矢印ボタンも使えます)。チャットは一致箇所を中央までスクロールします。大文字と小文字、アクセント記号、トルコ語の点のない ı は区別しません。`Esc` でボックスを閉じ、カーソルを元の位置に戻します。返信がストリーミングで届いている間も、検索はチャットに追従します。 | <a href="assets/features/findInChat.webp"><img src="assets/features/findInChat.webp" width="160" alt="スクリーンショット: チャット内を検索"></a> |
60
- | **チャットごとのブランチ** | <a id="feature-worktreechats"></a>新しいチャット → プロジェクトのボタンの横にある ⑂ main ボタン → **新しいブランチ**。続けて最初のメッセージを入力して送信します。AI がそのメッセージからブランチ名(`feat/…`、`fix/…`)を付け、Composer Plus が `<project>/.worktrees/` にその git worktree を作成し、`.worktreeinclude` に書かれた無視ファイル(たとえば `.env` や `node_modules/`)をコピーして、そこであなたのメッセージで新しいチャットを開きます。開いているチャットのヘッダーには ⑂ ブランチ · N 件の変更 · ↑ ↓(または **未プッシュ**)が表示されます。クリックすると **変更** を開きます。同じメニューには開いている worktree も並びます。1 つ選ぶと、そこでチャットを開始します。サイドバーでブランチのフォルダーをプロジェクト内に表示するには、dsh の **表示オプション** → **ワークスペースのツリー** を選びます。 | <a href="assets/features/worktreeChats.webp"><img src="assets/features/worktreeChats.webp" width="160" alt="スクリーンショット: チャットごとのブランチ"></a> |
62
+ | **チャットごとのブランチ** | <a id="feature-worktreechats"></a>新しいチャットの画面では、プロジェクトのボタンとモードのボタンの間にあるブランチのボタン(ブランチのアイコン)に、既定で **新しいブランチ** が表示されます。最初のメッセージを入力して送信します。現在のブランチのままにするには、同じボタンで 「現在のブランチ(main)」 を選びます。最初のメッセージには画像やファイルを添付できます。計画モードでは、新しいチャットも計画モードで開始します。メッセージを `/plan <メッセージ>` として送信する(Shift+Tab)か、先に新しいチャットを計画モードにします。AI がそのメッセージからブランチ名(`feat/…`、`fix/…`)を付け、Composer Plus が `<project>/.worktrees/` にその git worktree を作成し、`.worktreeinclude` に書かれた無視ファイル(たとえば `.env` や `node_modules/`)をコピーして、そこであなたのメッセージで新しいチャットを開きます。開いているチャットのヘッダーには ⑂ ブランチ · N 件の変更 · ↑ ↓(または **未プッシュ**)が表示されます。クリックすると **変更** を開きます。同じメニューには開いている worktree も並びます。1 つ選ぶと、そこでチャットを開始します。サイドバーでブランチのフォルダーをプロジェクト内に表示するには、dsh の **表示オプション** → **ワークスペースのツリー** を選びます。 | <a href="assets/features/worktreeChats.webp"><img src="assets/features/worktreeChats.webp" width="160" alt="スクリーンショット: チャットごとのブランチ"></a> |
63
+ | **ワークスペースのツリー内のブランチ** | <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> |
61
64
  | **次のメッセージの予測** | <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> |
62
65
  | **入力中に補完** | <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> |
63
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> |
64
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> |
65
69
  | **このチャットで許可** | <a id="feature-allowforchat"></a>自動レビューで確認を求められると、承認カードに **このチャットで許可** が表示されます。これを選ぶと、同じチャットの同じツールが、引数にかかわらず、時間制限が終わるまで許可されます(既定は 1 時間。**設定 → Composer Plus → このチャットで許可** で選べます)。その後、エージェントが再び確認します。ヘッダーのチップに許可の一覧が終了時刻とともに表示され、そこから取り消せます。許可は再起動後も有効です。 | <a href="assets/features/allowForChat.webp"><img src="assets/features/allowForChat.webp" width="160" alt="スクリーンショット: このチャットで許可"></a> |
66
- | **プロジェクトの状態** | <a id="feature-projectstatus"></a>サイドバーのプロジェクトの行に、そのチャットと同じ実行中/待機中/完了のマーカーが表示されます。そのため、折りたたんだプロジェクトでも、中のチャットが作業中か、あなたの操作を待っているかがわかります。最初に表示されるのはあなたの操作を待っているチャットで、次がまだ開いていない完了済みのチャット(緑色の点。別のチャットがまだ実行中でも表示されます)、その次が実行中のマーカーです。ポインターを合わせると詳細が表示されます。 | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="スクリーンショット: プロジェクトの状態"></a> |
67
- | **チャット行の Git ブランチ** | <a id="feature-sessionbranch"></a>サイドバーの各チャット行に、チャットの最後のターンの時点でチャットのプロジェクトフォルダーがあった git ブランチが、小さな灰色のラベルで表示されます(例:`main` や `feature/login`。detached HEAD の場合は短いコミット ID を括弧内に表示します)。同じプロジェクトで別のブランチにある 2 つのチャットが同じに見えることはなくなり、間違ったブランチでチャットを続けようとしているときにすぐ気づけます。ラベルにポインターを合わせると完全な名前が表示されます。ホスト側は、ターンの開始時と終了時にブランチを読み取ります(`git branch --show-current`、読み取り専用)。この機能をインストールしてからターンのないチャットや、git リポジトリではないフォルダーには、ラベルは表示されません。 | <a href="assets/features/sessionBranch.webp"><img src="assets/features/sessionBranch.webp" width="160" alt="スクリーンショット: チャット行の Git ブランチ"></a> |
70
+ | **プロジェクトの状態** | <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> |
68
72
  | **すべて既読にする** | <a id="feature-markprojectread"></a>サイドバーで、プロジェクトの **…** ボタン → **すべて既読にする** をクリックします。そのプロジェクトのすべてのチャットから、緑色の未読の点が一度に消えます。ほかのプロジェクトの点はそのまま残ります。プロジェクトに未読のチャットがない場合、この項目はグレー表示になります(**未読のチャットはありません**)。 | <a href="assets/features/markProjectRead.webp"><img src="assets/features/markProjectRead.webp" width="160" alt="スクリーンショット: すべて既読にする"></a> |
69
73
  | **アクティブなプロジェクトを先頭に表示** | <a id="feature-activeprojectsfirst"></a>チャットが実行を始めたり、あなたの操作が必要になったりすると、そのプロジェクトがサイドバーの先頭に移動します。移動には dsh 標準の行のアニメーション(ドラッグして移動したときと同じ動き)を使います。完了したプロジェクトはその場所に残ります。いつもどおり、ドラッグして好きな場所に移動できます。移動は dsh のプロジェクトの順序に保存されるため、この機能をオフにしても現在の順序は維持されます。 | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="スクリーンショット: アクティブなプロジェクトを先頭に表示"></a> |
70
- | **最近のプロジェクトのフィルター** | <a id="feature-recentprojects"></a>サイドバー → 表示オプション(スライダーのアイコン)→ **過去 2 時間以内にアクティブ**。選択中は、過去 2 時間以内にアクティブなチャットがあるプロジェクトだけがサイドバーに表示されます。対象となるチャットは、その間に更新されたチャット、実行中または待機中のチャット、開いているチャット、まだ開いていない完了済みのチャット(dsh の緑色の「完了」の点)です。完了済みのチャットは、2 時間を過ぎても対象のままです。このようなチャットがないプロジェクトは、新しい空のプロジェクトも含めて非表示になります。もう一度選択すると、すべてのプロジェクトを表示します。選択はこのデバイスに保存されます。 | <a href="assets/features/recentProjects.webp"><img src="assets/features/recentProjects.webp" width="160" alt="スクリーンショット: 最近のプロジェクトのフィルター"></a> |
74
+ | **最近のプロジェクトのフィルター** | <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> |
71
75
  | **すべてのプロジェクトを折りたたむ** | <a id="feature-collapseprojects"></a>サイドバーでプロジェクトが開いているとき、表示オプション(スライダーのアイコン)の横にボタンが表示されます。クリックすると、開いているすべてのプロジェクトを一度に閉じます(たとえば、5 件中 3 件が開いている場合)。開いているプロジェクトがなくなると、ボタンは再び非表示になります。 | <a href="assets/features/collapseProjects.webp"><img src="assets/features/collapseProjects.webp" width="160" alt="スクリーンショット: すべてのプロジェクトを折りたたむ"></a> |
72
76
  | **状態で並べ替え** | <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> |
73
77
  | **バックグラウンド通知** | <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> |
74
79
  | **アプリケーションの言語** | <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> |
75
80
  | **モバイル接続(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> |
76
81
  | **自動アップデート** | <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> |
82
+ | **バックアップ** | <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> |
83
+ | **自動バックアップ** | <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> |
84
+ | **セッションログのチェック** | <a id="feature-sessiondoctor"></a>**セッションログをチェック** は、すべてのチャットのログを読み取り、dsh が開けないログ(壊れたフレーム、途切れたレコード、誤ったシーケンス番号)を一覧表示します。末尾だけが欠けたログは一覧に出ません。dsh が自分で修復します。**バックアップから修復** は、正常なコピーがある最新のバックアップからコピーを戻し、損傷したファイルをその隣に残します(`.corrupt-<時刻>`)。そのバックアップ以降に書かれたメッセージはコピーに含まれません。この dsh で開いているチャットはここでは修復されません。dsh を終了して、レスキューコンソールで修復してください。 | <a href="assets/features/sessionDoctor.webp"><img src="assets/features/sessionDoctor.webp" width="160" alt="スクリーンショット: セッションログのチェック"></a> |
85
+ | **レスキューコンソール** | <a id="feature-rescueconsole"></a>バックアップのたびに、バックアップフォルダーにレスキューコンソールも置かれます。dsh が閉じているときや起動しないときは、そのフォルダーで `Composer Plus Rescue` を開きます(macOS:`Composer Plus Rescue.command`)。ターミナルウィンドウのメニューで、バックアップの一覧表示、チェック、復元と、セッションログのチェック、修復ができます。ネットワークポートは開きません。復元では `RESTORE` の入力を求め、現在の dsh のホームを `.dsh.pre-restore-<時刻>` として残し、マスクされたシークレットを vault から戻し、`cache/`、`dsh-runtimes/`、`node_modules` を古いフォルダーから移します。dsh がなくても動きます。Node.js か、DeepSeek Harness アプリ自体を使います。新しいコンピュータでは、**別のコンピュータ用** のフォルダーをコピーし、そこで `Composer Plus Rescue` を開きます。 | <a href="assets/features/rescueConsole.webp"><img src="assets/features/rescueConsole.webp" width="160" alt="スクリーンショット: レスキューコンソール"></a> |
77
86
 
78
87
  <!-- END GENERATED FEATURES -->
79
88
 
@@ -117,7 +126,7 @@ English · 中文 · Türkçe · Español · Português (Brasil) · Français ·
117
126
  | `Esc` | 予測が表示された空の入力欄 | 予測を非表示にする |
118
127
  | `Cmd/Ctrl+Z` | **プロンプトを改善** を使った後の入力欄 | 入力したテキストを戻す |
119
128
  | `Esc` | **プロンプトを改善** の実行中の入力欄 | 改善をキャンセル |
120
- | `Enter` / `Esc` | ダブルクリックしたキュー内のメッセージ | 編集を保存/キャンセル |
129
+ | `Enter` / `Esc` | キュー内のメッセージのエディター | 編集を保存/キャンセル |
121
130
  | Mac では `Cmd+F`、Windows と Linux では `Ctrl+F` | 開いているチャット | **チャット内を検索** を開く |
122
131
  | `Enter` / `Shift+Enter`、`↓` / `↑` | **チャット内を検索** のボックス | 次 / 前の一致 |
123
132
  | `Esc` | **チャット内を検索** のボックス | ボックスを閉じる |
@@ -151,6 +160,9 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
151
160
  - **入力中に補完:** オンにするまではオフです。オンの間は、入力が止まるたびに、ホスト側が、それまでに入力したテキストと、そのチャットでのあなた自身のメッセージ、エージェントのテキストの返信(ツールの出力、隠れたコンテキスト、推論は含みません)を、**入力中に補完** で選んだモデル(既定では **次のメッセージの予測** のモデル)に送ります。チャットの部分は最大で約 3,000 文字です。次に入力が止まると、前のリクエストは止まります。チャットには何も保存しません。スイッチは `$DSH_HOME/storages/dsh-composer-plus/complete.json`(所有者のみのファイル)に保存されます。
152
161
  - **プロンプトを改善:** 魔法の杖をクリックするまで、何も実行されません。クリックすると、ホスト側は次の内容を、**プロンプトを改善** で選んだモデル(既定ではチャット自身のモデル)に 1 回のリクエストとして送ります。下書き、そのチャットでのあなた自身のメッセージとエージェントのテキストの返信(ツールの出力、隠れたコンテキスト、推論、ロールバックで取り消したメッセージは含みません。最大で約 6,000 文字、最新の部分)、**機能のアイデア** と同じプロジェクトの概要(ファイルのルールも同じです。`.env*` や鍵ファイルは読まず、フォルダーの外を指すシンボリックリンクや FIFO はスキップします)、`git status` が変更ありとして示すパス、名前に下書きと共通の言葉を含む、追跡済みまたは未追跡(無視されていない)のパス最大 30 件です。この概要以外のファイルの内容は送りません。チャットにもプロジェクトにも何も書き込みません。回答は入力欄の下書きを置き換えるだけで、送信するかどうかはあなたが決めます。モデルの選択は `$DSH_HOME/storages/dsh-composer-plus/improve.json`(所有者のみのファイル)に保存されます。
153
162
  - **目標チェック:** 自動ラウンドでエージェントが `/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` にあります。
164
+ - **バックアップ:** データがマシンの外に出ることはありません。アーカイブは `~/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
+ - **レスキューコンソール:** ターミナルのメニューです。ネットワークポートは開きません。復元は、dsh のホームの隣にある新しいフォルダーにだけ書き込みます(ファイルは `O_EXCL | O_NOFOLLOW` で書き込み、シンボリックリンクは最後に作成し、たどりません)。安全でない名前(`..`、絶対パス)、デバイスや FIFO、複数の最上位フォルダー、リンクの下のエントリーを含むアーカイブは拒否します。
154
166
 
155
167
  ## トラブルシューティング
156
168
 
@@ -165,11 +177,15 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
165
177
  - **削除すると、別の dsh がこのチャットを開いていると表示される:** 同じ dsh のホームを使う 2 つ目の dsh が、チャットのロックを持っています。そのウィンドウまたは dsh を閉じてから、もう一度削除してください。それまで、チャットはアーカイブされたままです。
166
178
  - **「Tailscale only」をオンにした後、iPhone が接続できない:** Tailscale は Mac と iPhone の両方でオンにする必要があります。Mac でオフの場合は、モバイル接続のパネルに警告が表示されます。アクセスログには、拒否された各試行がその理由とともに表示されます。
167
179
  - **再起動後にチャットが続行しなかった:** 原因は次のいずれかです。dsh の終了時に、再起動後に再開がオフだった。そのターンを自分で停止した。ターンがすでに終わっていた(完了または失敗)。チャットがアーカイブされていた。20 件を超えるチャットが実行中だった(最新の 20 件が続行します)。
180
+ - **再起動後にキューが空になっている:** キューを空にするのは dsh 自身の終了処理です。再起動後に再開は、続行するチャットでだけキューを元に戻します。ほかのチャットでは、メッセージをもう一度送信してください。終了の直前に削除したメッセージが戻ることがあります。その場合はもう一度削除してください。
168
181
  - **GitHub issue を作成 で「gh could not open the issue」と表示される:** このメッセージは、`gh` 自身の出力の最初の行です。ターミナルで `gh auth status` を実行し、`gh auth login` でログインしてください。チャットのフォルダーには GitHub リモートが必要です(`git remote -v`)。「not installed or not on the PATH of dsh」は、dsh が `gh` を見つけられなかったという意味です。インストールするか、`gh` が動作するターミナルから dsh を起動してください。
169
182
  - **チャット行にブランチのラベルがない:** 原因は次のいずれかです。このバージョンをインストールしてから、そのチャットにターンがない。フォルダーが git リポジトリではない。**チャット行の Git ブランチ** がオフになっている。アップデートの後は、dsh を再起動してください(ブランチはホスト側が記録します)。
170
183
  - **目標チェックで、テストが終了コード 127 または「not found」で終了したと表示される:** Finder や Dock から起動した dsh は、ターミナルより PATH が短いことがあるため、`npm`、`pnpm`、`cargo` が見つかりません。ターミナルから dsh を起動するか、**目標チェック** → **編集** で、フルパスを使った独自のテストコマンドを設定してください。**今すぐ実行** を使うと、すぐに結果が表示されます。
171
184
  - **目標が閉じず、エージェントが作業を続ける:** **目標チェック** が、失敗したテストまたは足りない作業を見つけました。目標の下の行に理由が表示されます(詳細は、結果にポインターを合わせると表示されます)。原因またはテストコマンドを直すか、`/goal` または目標バーで目標を自分で完了してください(その完了はチェックされません)。
172
- - **リリース直後にインストールが失敗する:** バージョンを指定してください(`dsh-composer-plus@1.14.0`)。上のインストールの注記を参照してください。
185
+ - **リリース直後にインストールが失敗する:** バージョンを指定してください(`dsh-composer-plus@1.16.0`)。上のインストールの注記を参照してください。
186
+ - **今すぐバックアップ で「別のバックアップ操作を実行中です」と表示される:** 別の dsh のウィンドウ、またはレスキューコンソールで操作が実行中です(どちらも、バックアップフォルダーのロックファイル `.composer-plus.lock` を共有します)。完了するまで待ってください。実行中の操作がない場合は、次のクリックで、終了したプロセスのロックを引き継ぎます。
187
+ - **レスキューコンソールで「dsh is running」と表示される:** まず dsh を終了してください。dsh が本当に閉じている場合、メッセージに示されたファイルはクラッシュで残ったものです。そのファイルを削除して、もう一度試してください。
188
+ - **復元の後に dsh が起動しない、またはプラグインが見つからない:** プロファイルのプラグインパッケージを、もう一度インストールする必要があります。レスキューコンソールが、復元の後にこれを提案します。または、コンソールが一覧表示する `$DSH_HOME/profiles/` の下の各フォルダーで `pnpm install` を実行してください。vault に入っていなかったシークレット(別のコンピュータ)は、もう一度入力する必要があります。コンソールがそれらを一覧表示します。
173
189
 
174
190
  ## 制限事項
175
191
 
@@ -177,6 +193,7 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
177
193
  - **機能のアイデア** は、dsh またはページを再読み込みするまで、チャットごとにカードをメモリに保持します。再読み込みの後は、**機能を提案** でモデルにもう一度問い合わせます。カードは、クリックしたときの dsh の UI 言語で作成されます。言語を変更しても、すでに束にあるカードは元の言語のままで、**アイデアをさらに提案** は新しい言語を使います。モデルが見るのはプロジェクトの短い概要だけで、コードは見ません。そのため、プロジェクトにすでにある機能が提案されることがあります。その場合はスキップしてください。新しいチャットが計画モードで実行されるのは、プロファイルに dsh の `/plan` コマンドがある場合だけです。ない場合、アイデアは通常の最初のメッセージとして送られます。**あとで** リストは、チャットのフォルダーパスに属します。シンボリックリンク経由で開いた同じフォルダーには、別のリストがあります。リストに保存できるアイデアは、プロジェクトごとに最大 50 件です(さらに追加するには、1 件削除してください)。同じタイトルは 1 回だけ保存できます。カードのドラッグで決められるのは、左か右かだけです。保存するには **↓** を、すぐに実装するには **▶** を使ってください。重複はタイトルだけで判定されます。そのため、モデルが以前のアイデアを新しい名前で提案することもあります。その場合はスキップしてください。モデルが以前のアイデアだけを返した場合、新しいカードは表示されません。もう一度クリックしてください。重点テーマが狭いと、この状況が起こりやすくなります。より広いテーマにするか、テーマを解除してください。重点テーマは、dsh またはページを再読み込みするまで、チャットごとに欄に残ります。
178
194
  - **チャットを Markdown として書き出し** に含まれるのは、あなたのメッセージとアシスタントのテキストの返信だけです。ツール呼び出しとその出力、思考、画像(`[image]` の行で示されます)、非表示のコンテキスト、ターンのロールバックまたは dsh-rewind-plugin で取り消したメッセージは含まれません。1 つのターンの返信は、1 つのセクションにまとめられます。1 回の書き出しに入るのは、約 400 万文字までです。それより長いチャットでは、最初の部分と注記が書き出されます。
179
195
  - **再起動後に再開** はターンを続行するもので、ターンをやり直すものではありません。終了時に実行中だったツール呼び出しは、dsh の「結果不明」という結果で終わります。モデルには完了済みの作業を繰り返さないよう伝えます。それでも、2 回実行すると安全でないコマンドが、もう一度実行される可能性があります。開いていたサブエージェント、承認、質問は復元されません。親のチャットが続行し、もう一度尋ねます。1 回の起動で続行するチャットは、最大 20 件です。
196
+ - **再起動後に再開** とキュー:dsh は終了時にチャットのキューを空にします。プラグインは、キューにあったメッセージをチャットのログから元に戻します。順序、編集、画像、ファイルもそのままです。戻ったメッセージは、続行したターンの後に実行されます。キューが戻るのは、続行するチャットだけです(スイッチがオンで、ターンの実行中に終了した場合)。キューの最後のメッセージを自分で削除した操作も、dsh は同じ形でログに残します。削除した後、次のステップが始まる前に dsh が終了すると、そのメッセージは戻ります。
180
197
 
181
198
  - **内容検索** は dsh 標準の検索なので、dsh の制限がそのまま当てはまります。検索対象は、ユーザーとアシスタントのメッセージだけです。ツールの出力(コマンド、ファイルの内容、結果)や推論は検索しません。ユーザー、アシスタント、ツールのメッセージで絞り込む機能もありません。単語単位で一致し、単語の一部には一致しません(`deploy` で `deployment` は見つかりません)。アクセント付きの文字は、アクセントなしでも一致します(`seker` で `şeker` が見つかります)。結果は 1 つのチャットにつき 1 行で、dsh の 240 文字の抜粋を表示し、最大 20 行です。
182
199
  - **内容検索** のコスト(247 件の実際のチャットログのコピーで測定。159 MB、dsh 0.2.1-rc.2、Apple Silicon、32 GB):起動後の最初の検索で、約 15 秒かけてインデックスを作成します。その間の約 7 秒は dsh のホストが何も応答しないため、ほかのチャットのストリーミングが一時的に止まります(ページ自体は固まりません)。ホストのメモリは、ピーク時に約 1.1 GB 増えます。1 分後も起動時より約 0.5–0.6 GB 多いままで、この状態は dsh を終了するまで続きます。インデックスファイルは約 165 MB です。2 回目以降の検索は約 0.5 秒です。再起動後の最初の検索は約 1 秒で(新しいチャットと変更されたチャットだけを追加します)、メモリが約 70 MB 増えます。コンピューターのメモリが少ない場合は、オフにしてください。
@@ -187,19 +204,25 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
187
204
  - 新しいバージョンが dsh の設定を何も変更しない場合、dsh 0.2.1 はアップデートをすぐに読み込みます。それ以外の場合と dsh 0.2.0 では、読み込むには dsh を再起動してください。プラグインが dsh を自動で再起動することはありません。dsh のプラグインマネージャーがない Web/CLI プロファイルでは、新しいバージョンがあることを知らせるだけです。
188
205
  - **このチャットで許可** は、許可した時点から時間制限を数えます。新しい時間制限は、有効な許可にすぐに適用されます。そのため、短い時間制限にすると、許可がすぐに終わることがあります。バージョン 1.12 以前の許可には時刻がありません。更新後、エージェントはそのツールについてもう一度だけ確認します。
189
206
  - **入力欄のフォーカスを維持** がフォーカスを戻すのは、`/` コマンドまたはスキルの後だけです。dsh がコマンドを処理する間、入力欄は数ミリ秒だけ読み取り専用になります。そのため、その間に押したキーは失われます。dsh の `/` メニューがまだ開いている場合、`Enter` は強調表示された行を選び、送信はしません。
190
- - **モバイル接続** は macOS でのみ動作します(`en0`、`openssl`、`swift`、`dns-sd` を使います)。固定のポート 19390 と 19391 を使うため、各 Mac でこれを実行できる dsh は、一度に 1 つだけです(スマートフォンの Mac の一覧では、各 Mac が 1 項目になります)。スマートフォンが通知を受け取るのは、Tether が開いているとき、またはバックグラウンドに移った直後だけです(プッシュサービスはありません)。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 でそのチャットを開くまで残ります。
207
+ - **質問カードをウィンドウに合わせる**は dsh の質問カードだけを変更し、計画レビューのカードは変更しません。カードは dsh のマークアップ(`data-question-key`、`data-question-scroll`)で見つけます。dsh の更新でこのマークアップが変わると、カードは dsh が描くとおりに表示されます。カードの高さはチャットではなくウィンドウに従います。狭いサイドパネル内のチャットでは、高いカードがチャットの上にはみ出すことがあります。
208
+ - **モバイル接続** は 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 でそのチャットを開くまで残ります。
191
209
  - セッションリンクは、チャットの中で機能します。クリックしても、そのチャットは開きません。**メッセージリンクをコピー** で作ったリンクでメッセージを開けるのは、dsh 0.2.1 以降で、チャットの中のメッセージから開いた場合だけです(dsh 0.2.0 にはユーザーテキストのルールがないため、リンクはコピーされますが、プレーンテキストとして表示されます)。ロールバックで取り除かれたメッセージや、圧縮によって dsh が読み込む履歴から削除されたメッセージは表示できません。その場合、リンクがそのことを表示します。🔗 ボタンは、dsh のメッセージ行に取り付けています。dsh のアップデートでそのマークアップが変わった場合、ボタンは表示されません。
192
210
  - **すべて既読にする** は、公開 API ではない dsh の一部(dsh のセッション状態の `completionUnread` 一覧)を通じて、dsh 自身の未読の点を変更します。dsh のアップデートでこの名前が変わった場合、この項目は表示されません。この項目は dsh のプロジェクトの「…」メニューに入りますが、このメニューにはプラグイン用のスロットがありません。dsh がこのメニューを変更した場合も、この項目は表示されません。
193
- - **キュー内のメッセージをその場で編集** は、dsh 標準のキューエディターを開くため、その制限を受けます。画像やファイルを含むメッセージは編集できません。また、その間に送信が始まったメッセージは変更されません(dsh が独自のエラーを表示します)。
211
+ - **キュー内のメッセージをその場で編集** は、その間に送信が始まったメッセージを変更せず、その間に変更されたメッセージ(たとえば iPhone の Tether で変更したもの)も上書きせず、そのことを通知で知らせます。新しい画像には画像を受け付けるモデルが必要で(dsh 標準の画像の制限も適用されます)、新しいファイルはアップロードが終わるまで保存できません。編集できるのは自分のキュー内のメッセージだけで、キュー内の目標のラウンドや質問への回答は編集できません。プラグインの更新後すぐに使えるのはテキストだけの編集で、画像やファイルを含むメッセージを保存する前には dsh を再起動してください(ホスト側は起動時に読み込まれます)。
194
212
  - **やり直す** は、ロールバックしたチャットを変更しません。ロールバックの直前から新しいチャットを開始します(dsh 標準のフォークで、モデルのコンテキストも同じです)。そのため、新しいチャットには新しい ID とタイトルが付きます。やり直せるのは、チャットの最新のロールバックだけで、1 回だけです。また、その後に何もない間だけです(新しいメッセージを送ると、やり直しはできなくなります)。ロールバックの後に変更したファイルは保持されます。ただし、上書きするチェックボックスをオンにした場合は上書きします。やり直しには、ロールバックが保持したスナップショットが必要です(同じく最新 50 件の範囲)。このバージョンより前のロールバックや、**チャットのみ** のロールバックでは、メッセージだけが戻ります。
213
+ - **ツリー** のブランチマップは、各矢印の行き先を推測しています。git は、ブランチがどのブランチにマージされたかを保存しないためです。マージ済みのブランチは、マージコミットで最初にそのブランチを取り込んだブランチを指します。待機中のブランチは、分岐元のうち最も近いブランチ(メインブランチを優先)を指します。2 つのブランチが同じコミットから分岐した場合、マップが誤ったほうを選ぶことがあります。fast-forward で進んだブランチにはマージコミットがないため、その **マージ済み** ラベルをクリックしても何も開きません。メインブランチは `origin` のデフォルトブランチです。それがない場合は `main` または `master`、それもない場合は開いているブランチです。マップは最新の 20,000 件のコミットを読み取り、ブランチを最大 60 個表示します。履歴がそれより長い場合は、一部の矢印が正しくない可能性があることを表示します。squash や rebase でマージしたブランチ(たとえば GitHub 上で)は **待機中** と表示されます。git はそのコミットとのつながりを保存しないためです。
195
214
  - **このチャット** が数えるのは、dsh のファイルツール(`write`、`edit`、`str_replace_editor`)が書き込んだファイルだけです。コマンド(`bash`)が変更したファイルは、この表示には含まれず、**未コミット** に表示されます。チャットのターンのロールバックのスナップショットがない場合(ターンのロールバックがオフ、dsh-rewind-plugin がインストール済み、またはチャットがプラグインより古い場合)、表示は最後のコミットと比較し、そのことを示します。ターンのロールバックはチャットごとに最新の 50 個のスナップショットを保持します。長いチャットでは、表示は保持されている最も古いものと比較し、どのメッセージからかを示し、それより前の変更は数えません。**空白の変更を非表示** は `git diff -w` です。行の中のスペースだけが変わった行も非表示になります。
196
215
  - **GitHub issue を作成** には、dsh の PATH にある GitHub CLI(`gh`)と、チャットのフォルダーの GitHub リモートが必要です。実行時間は最大 60 秒です。`gh` がそれより長くかかると、issue は GitHub に作成されていても、そのリンクがリストに表示されないことがあります(もう一度クリックする前に、GitHub を確認してください。リストは完了した実行からしかリンクを読み取らないため、もう一度クリックすると 2 つ目の issue が作成されることがあります)。GitHub リモートが複数あるフォルダーでは、`gh` 自身のデフォルト(`gh repo set-default`)を使います。
197
216
  - **このファイルを変更したチャット** は、**このチャット** と同じく、dsh のファイルツール(`write`、`edit`、`str_replace_editor`)だけを認識します。コマンド(`bash`)による変更は表示されません。リポジトリの最新 300 件のチャット(作成日時の順)を読み取り、それより多い場合はそのことを表示します。表示するのは最大 100 行です。名前を変更したファイルは、ツールが書き込んだ名前で表示されます。フォルダーがリポジトリの外にあるチャット(同じファイルへの別のパスを通る場合も含みます)は数えません。dsh の起動後に最初に開くときは、リポジトリのすべてのチャットのログを読み取ります(275 件のチャットで約 4 秒)。2 回目以降は、それ以降に変更されたチャットだけを読み取ります。
198
- - **チャット行の Git ブランチ** が表示するのは、最後のターンの開始時または終了時に、チャットのフォルダーがあったブランチです。現在のブランチではありません。ターンの外でブランチを切り替えた場合は、次のターンの後に表示されます。このバージョンより前のチャットには、次のターンまでラベルが表示されません。ラベルは dsh のチャット行のマークアップの中に置かれます(dsh にはそこにスロットがありません)。dsh のアップデートでそのマークアップが変わった場合、ラベルは表示されません。
217
+ - **チャット行の Git ブランチ** が表示するのは、最後のターンの開始時または終了時に、チャットのフォルダーがあったブランチです。現在のブランチではありません。ターンの外でブランチを切り替えた場合は、次のターンの後に表示されます。このバージョンより前のチャットには、次のターンまでラベルが表示されません。ラベルは dsh のチャット行のマークアップの中に置かれます(dsh にはそこにスロットがありません)。dsh のアップデートでそのマークアップが変わった場合、ラベルは表示されません。チャットの上のプロジェクト行の名前がブランチと同じ場合(「チャットごとのブランチ」のフォルダーなど)、チャット行にラベルは表示されませんが、「1つのリスト」では表示されます。
218
+ - **チャットごとのブランチ** を計画モードで使う場合:dsh は `/plan <メッセージ>` をメッセージではなくコマンドとして送信します。そのため Composer Plus は、dsh の入力欄でコマンドの送信を横取りします(公開 API ではありません)。dsh のアップデートでこれが変わった場合、**新しいブランチ** を選んだ状態の `/plan <メッセージ>` は、開いている新しいチャットで dsh 自体のコマンドとして実行されます。ホストが新しいチャットで計画モードをオンにできない場合、ブランチのフォルダーは残り、メッセージは送信されません。そのため、新しいチャットが既定のモードでファイルを変更することはありません。
219
+ - **チャットごとのブランチ**:チャットのブランチフォルダー(`<project>/.worktrees/<name>`)が削除されると(たとえばチャット自身のエージェントが worktree を取り除いてブランチを削除したとき)、チャットの次のステップでチャットはそのフォルダーから移ります。ブランチフォルダーのプロジェクトはサイドバーから消え、チャットは「グループなし」の下に表示され、開いたままです。dsh 0.2.1 以降では、チャットはプロジェクトのメインフォルダーで続き、モデルには新しいフォルダーについての通知が届きます。dsh 0.2.0 では、チャットは削除されたフォルダーのままです。そこでのコマンドは、新しいチャットを始めるまで失敗します。移動はチャットの次のステップでのみ起こります。そのため、どのチャットも使っていない削除済みブランチのプロジェクトはサイドバーに残ります。dsh のプロジェクトメニューで削除してください。チャットの移動中は、同じリポジトリの **新しいブランチ** が「もう一度試してください」と答えます。スイッチをオフにすると、dsh 自身のエラー(「working-directory: directory does not exist」)が再び表示されます。
220
+ - **ワークスペースのツリー内のブランチ** はクリックなしで 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 のサイドバーの行からそれを読み取ります)。それ以外の場合、コピーはブランチのプロジェクトにあります。
199
221
  - **チャット内を検索** が検索するのは、ページに表示されている内容だけです。対象は読み込まれたメッセージと返信です(古いものは、上にスクロールするか、**以前の履歴を読み込む** をクリックします)。閉じているツールのステップや、ツールの出力の中で折りたたまれているテキストは対象外です。数える一致は最大 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 秒は変更できません。
200
223
  - 再起動の前に送られた通知をクリックしても、dsh が前面に表示されるだけです。
201
224
  - アクティブなプロジェクトは、dsh に保存されたプロジェクトの順序を使って移動します。そのため、新しい順序は再起動後も維持されます。どのプロジェクトにも属さないチャット(「グループなし」)は移動できません。dsh は、これらのチャットを常に最後に表示します。
202
- - dsh には、サイドバーの表示オプションのメニューに拡張ポイントがありません。そのため、最近のプロジェクトのオプションは、dsh 標準のメニューに追加しています。dsh のアップデートでこのメニューが変わった場合、オプションは表示されず、すべてのプロジェクトが表示されたままになります。フィルターはプロジェクトの行に対して動作するため、**1つのリスト** は絞り込まれません。**ワークスペース** と組み合わせて使ってください。**ワークスペースのツリー** では、非表示になった親フォルダーの中にあるアクティブなプロジェクトも、非表示になります。**状態別** にも、同じ種類の制限があります。dsh には並べ替えのスロットがないため、この項目と行の並び順は、dsh のメニューとリストのマークアップに取り付けています。
225
+ - dsh には、サイドバーの表示オプションのメニューに拡張ポイントがありません。そのため、最近のプロジェクトのオプションは、dsh 標準のメニューに追加しています。dsh のアップデートでこのメニューが変わった場合、オプションは表示されず、すべてのプロジェクトが表示されたままになります。フィルターはプロジェクトの行に対して動作するため、**1つのリスト** は絞り込まれません。**ワークスペースのツリー** では、中のプロジェクトがアクティブな間は親フォルダーも表示されたままになり、過去 2 時間にアクティブでなかったチャットの行も非表示になります。**ワークスペース** では、プロジェクトの行だけを絞り込みます。フィルターは、dsh が保存している表示設定(公開 API ではありません)から、dsh が今どの表示かを読み取ります。dsh の更新でその名前が変わった場合、**ワークスペースのツリー** は **ワークスペース** と同じように絞り込まれます。プロジェクトの状態も同じ設定を読み取ります。**ワークスペースのツリー** では、親フォルダーの行は、中にあるプロジェクトのチャットも数に入れます。dsh がこの設定の名前を変えた場合、各行には自分のチャットだけが表示されます。**状態別** にも、同じ種類の制限があります。dsh には並べ替えのスロットがないため、この項目と行の並び順は、dsh のメニューとリストのマークアップに取り付けています。
203
226
  - dsh には、プロジェクトの行のメニューも、ワークスペースのヘッダーのスロットもありません。**パスをコピー** は、dsh の行のマークアップからプロジェクトの行を見つけます。**すべてのプロジェクトを折りたたむ** は dsh のヘッダーに入り、プロジェクトの行をクリックするのと同じ方法で、開いている各プロジェクトを閉じます。dsh のアップデートでこのマークアップが変わった場合、右クリックではブラウザーのメニューが表示され、ボタンは表示されません。
204
227
  - dsh には、新しいチャットのプロジェクトメニューにも拡張ポイントがありません。そのため、**プロジェクトを検索** ボックスと A–Z 順は、dsh のメニューのマークアップに取り付けています。dsh のアップデートでこのマークアップが変わった場合、メニューは dsh が描くとおりに表示されます(保存済みの順序で、ボックスはありません)。A–Z 順は表示だけのもので、dsh に保存されたプロジェクトの順序は変わりません。
205
228
  - dsh には **新しいセッション** を開く場所を選ぶ拡張ポイントもありません。**新しいセッションの既定のワークスペース** は、公開 API ではない dsh のメソッド(dsh のワークスペースサービスの `startSession`)をラップします。dsh の更新でこの名前が変わると、**新しいセッション** は dsh が選ぶ場所(開いているプロジェクトまたは最新のプロジェクト)で開きます。プロジェクトを指定しない呼び出しはすべて既定を使います:サイドバーのボタン、そのショートカット、ロゴ、そして **自動化タスク** ページの **新規** も同じです。dsh は起動時に引き続き最後のチャットを開きます。汎用フォルダーは初回使用時に作成され、プロジェクトに追加されます。Windows や Linux で Documents フォルダーを移動している場合、dsh 自身のフォルダーと異なることがあります。
@@ -207,6 +230,12 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
207
230
  - **入力中に補完** は、dsh 標準の入力欄のヒント(dsh がスラッシュコマンドの引数のヒントに使う `--dsh-composer-hint` スタイル)を通じてテキストを表示します。スラッシュコマンド、ファイルやシンボルのチップを含むメッセージ、カーソルがメッセージの末尾にないときは動作しません。dsh のアップデートでこのスタイルが変わった場合、補完は表示されません。入力が止まるたびに、モデル呼び出しが 1 回行われます。
208
231
  - **プロンプトを改善** が見るのは、短いプロジェクトの概要、変更されたパス、名前があなたの言葉と一致するパスだけで、コードそのものは見ません。そのため、正しいファイルを見落とすことがあり、渡されたパスしか挙げません。送信する前に新しいテキストを読んでください。スラッシュコマンドや、ファイルやシンボルのチップを含むメッセージには使えません(新しいテキストはプレーンテキストなので、チップが失われるためです)。メッセージは最大 8,000 文字です。画像は添付されたままで、変わるのはテキストだけです。クリックするたびに、モデル呼び出しが 1 回行われます。性能の高いモデルでは 1 分ほどかかることがあります(`Esc` でキャンセルします)。
209
232
  - **目標チェック** がチェックするのは、自動の目標ラウンドでエージェントが行った完了だけです。チャットであなたが頼んだ完了、`/goal`、目標バーはチェックされません。エージェントは、テストやテストコマンドのファイルを自分で変更できます。検証用のモデルはチャットを読むのでそれに気づけますが、どちらの方向にも誤ることがあります(誤った「未完了」はラウンドを 1 回余分に使い、誤った「完了」は目標を閉じます)。検証用のモデルが見るのはチャットと `git status` で、コードそのものは見ません。テストの実行結果を再利用するのは、ファイルを変更できるエージェントの最新のステップが、同じフォルダーで完全に同じコマンドを実行して成功した、エージェント自身の `bash` 実行だった場合だけです。パイプ(`| tail`)や `&&` を含むコマンドは再利用しません。予算はターンの終わりに計測されるため、1 回のターンで予算を超えることがあります。数えるのはチャット自身のモデル呼び出しだけです(サブエージェントの呼び出しは数えません)。チェックの実行中、`update_goal` は待機します(テストは最大 15 分、検証は最大 3 分)。フォークしたチャットには新しいチャット ID が付くため、親チャット独自のテストコマンドと制限なしで始まります。検証まで進んだ完了 1 回ごとに、モデル呼び出しが 1 回行われます。
233
+ - **停止後の新規メッセージ優先** は、チャットを停止した後(または失敗したターンの後、まだキューがあるチャットを開いたとき)にだけ働きます。ターンの実行中に送信したメッセージは、これまでどおりキューの末尾で待ちます。追い越すのは自分がキューに入れたメッセージだけです。キューに目標のラウンドや質問への回答が待っている場合は、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 自身のメモリーを読み書きすることもありません。
235
+ - **バックアップ** が使うのは、固定の 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
+ - **復元** は、dsh を閉じている間に、レスキューコンソールでだけ実行できます。復元は dsh のホーム全体を置き換えます。古いホームは、あなたが削除するまで、隣に `.dsh.pre-restore-<time>` として残ります。そのため、ディスクには両方の分の空きが必要です。チャットはプロジェクトのパスを保ちます。別のコンピュータでは、別のパスにあるプロジェクトは、もう一度追加するまで見つからないものとして表示されます。dsh のホームの外を指すシンボリックリンク(たとえば、別のフォルダーからリンクしたスキル)は、リンクとして戻ります。リンク先は、そのコンピュータ上に存在する必要があります。
237
+ - **セッションログのチェック** は、各チャットの最新のログを、何が開けるかについての dsh 自身のルールで読み取ります。JSON ではない行や順序の乱れた行は、その後にターンの終わりがある場合にだけ損傷と数えます(そうでなければ、dsh はその行以降を除いてチャットを開くため、一覧には表示されません)。ログのイベントを、dsh 自身のイベントのルールと照らし合わせることはしません。そのため、正常と判定されたログでも、dsh のアップグレード後に開けないことがあります。修復では、バックアップからコピーを取り出します。そのバックアップ以降のメッセージは、そのチャットから失われます(損傷したファイルは隣に残ります)。この dsh で開いているチャットは、設定では修復されません。dsh がそのチャットを保持しているためです。
238
+ - **自動バックアップ** は、dsh の実行中にだけ実行されます。dsh を閉じている間に予定時刻になったバックアップは、次の起動の約 45 秒後に実行されます。新しいバージョンのスナップショットは、アップデートの前ではなく、その起動の後に作成されます。
210
239
  - 標準機能としてのサポートを、上流に要望しています:キューの `move` は [#773](https://github.com/deepseek-ai/deepseek-harness/discussions/773)、続行の状態は [#9269](https://github.com/deepseek-ai/deepseek-harness/discussions/9269) です。
211
240
 
212
241
  ## よくある質問
@@ -235,9 +264,19 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
235
264
 
236
265
  **ループエンジニアリングの検証ループのように、エージェントが自分の作業を自分で完了扱いにしないようにできますか?** はい、**目標チェック**(既定ではオン)でできます。`/goal` で目標を開始します。エージェントが目標を完了したと言うと、プロジェクトのテストが実行され、独立したモデル呼び出しがチャットと照らし合わせて目標をチェックします。どちらかが失敗すると、目標は開いたままになり、エージェントが理由を読みます。目標の下の **目標チェック** の行にある **編集** で、独自のテストコマンド、時間制限、トークン制限を設定できます。
237
266
 
267
+ **DS Bot のメモリーのように、エージェントがチャットをまたいで好みを覚えておけますか?** はい、**プロジェクトメモリー**(既定ではオフ)で可能です。**設定 → Composer Plus** でオンにしてください。ターンが終わるたびに、長く続く好みや決定がチャットのプロジェクトの短いメモとして保存され、そのプロジェクトの新しいチャットがそれを読みます。エージェントに何かを覚えるように頼むと、すぐに保存します。
268
+
269
+ **dsh-backup のように、dsh でチャットや設定をバックアップできますか?** はい。**設定 → Composer Plus → バックアップ → 今すぐバックアップ** を使います。同じ形式のアーカイブを同じフォルダー(`~/Desktop/dsh-backups`)に書き込むため、dsh-backup のアーカイブも表示され、復元できます。dsh-backup は削除してかまいません。定期的にバックアップするには、**自動バックアップ** をオンにしてください。
270
+
271
+ **dsh が起動しなくなりました。バックアップを復元するには?** バックアップフォルダー(`~/Desktop/dsh-backups`)を開き、`Composer Plus Rescue.command` をダブルクリックします(Linux:`composer-plus-rescue.sh`、Windows:`Composer Plus Rescue.cmd`)。`3) Restore a backup` を選び、バックアップを 1 つ選んで `RESTORE` と入力します。dsh がなくても動作します。
272
+
273
+ **dsh を新しいコンピュータに移すには?** 古いコンピュータで、**バックアップ** → バックアップの横にある **別のコンピュータ用** を使います。そのフォルダーを新しいコンピュータにコピーし、そこに dsh をインストールして終了します。次に、コピーしたフォルダーで `Composer Plus Rescue` を開いて復元します。API キーはもう一度入力してください(API キーは古いコンピュータに残ります)。
274
+
275
+ **クラッシュの後にチャットが開きません。修復できますか?** **設定 → Composer Plus → セッションログのチェック → セッションログをチェック** を使います。損傷したチャットは、**バックアップから修復** で最新のバックアップから戻ります(そのバックアップ以降のメッセージは失われます)。
276
+
238
277
  **dsh でキュー内のメッセージを並べ替えるには?** キュー内のメッセージの ⠿ ハンドルをドラッグします。または、ハンドルにフォーカスを置いて `↑` / `↓` を押します。
239
278
 
240
- **キュー内のメッセージの入力ミスを直すには?** キュー内のメッセージをダブルクリックし、テキストを変更して `Enter` を押します(`Esc` でキャンセル)。メッセージのキュー内の位置は変わりません。
279
+ **キュー内のメッセージの入力ミスを直すには?** キュー内のメッセージをダブルクリックし、テキストを変更して `Enter` を押します(`Esc` でキャンセル)。メッセージのキュー内の位置は変わりません。そこで画像やファイルを削除したり、新しく追加したりすることもできます。
241
280
 
242
281
  **プロジェクトの未読の点を一度にすべて消すには?** サイドバー → プロジェクトの **…** ボタン → **すべて既読にする** を選びます。
243
282
 
@@ -265,13 +304,17 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
265
304
 
266
305
  **dsh のタスクが完了したときや承認が必要なときに、macOS/Windows の通知を受け取るには?** **バックグラウンド通知** をオン(既定)のままにしてください。そのうえで、OS の設定で DeepSeek Harness の通知を許可します。
267
306
 
307
+ **質問をしているチャットを dsh が自動で開くことはできますか?** はい、**操作がないときに待機中のチャットを開く**(既定でオン)を使います。チャットが回答、承認、計画のレビューを待っていて、dsh を 30 秒間操作しないと、dsh がそのチャットを開きます。入力中、スクロール中、マウスを動かしている間は待ちます。
308
+
268
309
  **DeepSeek Harness のインターフェースを、トルコ語、スペイン語、日本語などに切り替えるには?** 設定 → Composer Plus → **アプリケーションの言語** で切り替えます。
269
310
 
270
311
  **iPhone から dsh を使うには?** `tether/ios` から Tether アプリをビルドし(Xcode)、**設定 → Composer Plus → モバイル接続(iPhone)** をオンにします。左下の **モバイル接続** をクリックし、QR コードを読み取って(iPhone のカメラまたは Tether の **Scan code**)、**Connect** をタップし、**Approve** をクリックします。外出先では、両方のデバイスで Tailscale を使ってください。
271
312
 
272
313
  **新しいセッションを常に同じプロジェクトで開くには?** 設定 → Composer Plus → **新しいセッションの既定のワークスペース** → **新しいセッションを開く場所** → プロジェクトを選びます。ほかのプロジェクト横の `+` は引き続きそのプロジェクトを開きます。
273
314
 
274
- **1 つのプロジェクトの複数の機能を、それぞれ専用のブランチで同時に進めるには?** **チャットごとのブランチ** を使います。新しいチャット → ⑂ main ボタン → **新しいブランチ** を選び、最初のメッセージを送信します。各チャットに専用のブランチと worktree フォルダーができ、`.worktreeinclude` に書かれていれば `.env` や `node_modules` もコピーされます。チャットのヘッダーに、今いるブランチが表示されます。
315
+ **1 つのプロジェクトの複数の機能を、それぞれ専用のブランチで同時に進めるには?** **チャットごとのブランチ** を使います。新しいチャットの画面では、ブランチのボタンに既定で **新しいブランチ** が表示されます。最初のメッセージを送信します。各チャットに専用のブランチと worktree フォルダーができ、`.worktreeinclude` に書かれていれば `.env` や `node_modules` もコピーされます。チャットのヘッダーに、今いるブランチが表示されます。
316
+
317
+ **サイドバーにプロジェクトの各ブランチを表示し、エージェントがブランチを作成したときにチャットを移せますか?** はい、**ワークスペースのツリー内のブランチ**(既定ではオフ)で可能です。設定 → Composer Plus でオンにし、dsh の **表示オプション** → **ワークスペースのツリー** を選びます。`<project>/.worktrees/` に worktree がある各ブランチが、そのプロジェクト内に表示されます。プロジェクトフォルダーのエージェントにブランチを作成してそこで作業するよう頼み、フォルダーに未コミットの変更がなければ、チャットは自動でブランチに移ります。ブランチのフォルダーを削除すると一覧から消え、そのチャットは **グループなし** に移ります。
275
318
 
276
319
  **iPhone から写真を送れますか?** はい。Tether のチャットで、メッセージ欄の横の **+** → Camera、Photos(最大 4 枚)、または Paste image をタップします。写真はメッセージの添付ファイルとして Mac のチャットに届くため、モデルはそれを見ることができます。
277
320
 
@@ -287,6 +330,7 @@ PLAYWRIGHT=/path/to/playwright node scripts/capture-screenshots.mjs /path/to/dsh
287
330
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-sidebar-projects.mjs /path/to/dsh/lib/bin.js
288
331
  # recent filter + a finished chat older than 2 hours (fake model): the project stays until you open the chat
289
332
  PLAYWRIGHT=/path/to/playwright node test/browser-recent-finished.mjs /path/to/dsh/lib/bin.js
333
+ PLAYWRIGHT=/path/to/playwright node test/browser-recent-tree.mjs /path/to/dsh/lib/bin.js
290
334
  # Order by status (fake model + Schedule): real-app test + its thumbnail
291
335
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-status-order.mjs /path/to/dsh/lib/bin.js
292
336
  # every Settings feature row shows a loading screenshot and a ? link to its README row
@@ -297,10 +341,14 @@ PLAYWRIGHT=/path/to/playwright node test/browser-whats-new.mjs /path/to/dsh/lib/
297
341
  PLAYWRIGHT=/path/to/playwright node test/browser-readme-anchors.mjs
298
342
  # Keep composer focus (fake model + demo skill): typing goes on after a / command + its thumbnail
299
343
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-keep-focus.mjs /path/to/dsh/lib/bin.js
344
+ # 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
+ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-question-fit.mjs /path/to/dsh/lib/bin.js
300
346
  # Mobile connect: switch on, QR popover, a fake iPhone pairs and calls dsh through the gateway, switch off + its thumbnail
301
347
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-mobile-connect.mjs /path/to/dsh/lib/bin.js
302
348
  # Resume after restart (fake slow model, real quit and start): a running chat and a goal continue, a stopped chat does not
303
349
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-resume-restart.mjs /path/to/dsh/lib/bin.js
350
+ # Resume after restart with a queue (fake model, real quit and start): text, image, file, a drag and an edit come back in order
351
+ PLAYWRIGHT=/path/to/playwright node test/browser-resume-queue.mjs /path/to/dsh/lib/bin.js
304
352
  # Feature ideas (fake model, made-up project): suggest, drag left, Undo, ✓ starts a new chat in plan mode, ▶ Build now one without, Plan all one for the Later list, a focus topic chip, Copy as checklist + its thumbnail
305
353
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-feature-ideas.mjs /path/to/dsh/lib/bin.js
306
354
  # Export chat as Markdown (fake model, made-up project): right-click → Export as Markdown…, copy and save keep the code blocks, switch off + its thumbnail
@@ -315,8 +363,10 @@ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-prompt-improve.mjs /path
315
363
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-goal-check.mjs /path/to/dsh/lib/bin.js
316
364
  # Mark all as read, Copy message link, Edit queued message in place, Redo, Changes → This chat and Hide whitespace (fake model, made-up git projects) + their thumbnails
317
365
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-six-features.mjs /path/to/dsh/lib/bin.js
318
- # Changes Tree (fake model, made-up git history): branch list, a branch's commits, commit files and diffs, back marks the row + its thumbnail
366
+ # Changes Tree (fake model, made-up git history): the branch map (counts, colors, arrows), a branch's commits, commit files and diffs, Merged and Waiting files, back marks the box + its thumbnail
319
367
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-changes-tree.mjs /path/to/dsh/lib/bin.js
368
+ # Branches in the workspace tree (fake model, made-up git project): a worktree becomes a project, the agent's new branch moves the chat, a deleted folder leaves the tree + its thumbnail
369
+ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-branch-tree.mjs /path/to/dsh/lib/bin.js
320
370
  # Allow for this chat with a time limit (fake model that is also the Auto Review reviewer): the grant ends after 1 hour
321
371
  PLAYWRIGHT=/path/to/playwright node test/browser-grant-ttl.mjs /path/to/dsh/lib/bin.js
322
372
  # Next message prediction and Complete while typing (fake models): calls, Tab, Esc, model choice + their thumbnails
@@ -327,6 +377,9 @@ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-project-picker.mjs /path
327
377
  # Queue drag-and-drop and Continue with a queued message (slow fake model)
328
378
  PLAYWRIGHT=/path/to/playwright node test/browser-queue-drag.mjs /path/to/dsh/lib/bin.js
329
379
  PLAYWRIGHT=/path/to/playwright node test/browser-continue-queue.mjs /path/to/dsh/lib/bin.js
380
+ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-stop-send.mjs /path/to/dsh/lib/bin.js
381
+ # Edit queued message in place with images and files (slow fake model) + its thumbnail
382
+ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-edit.mjs /path/to/dsh/lib/bin.js
330
383
  ```
331
384
 
332
385
  ```sh