dsh-composer-plus 1.22.0 → 1.24.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
@@ -14,7 +14,7 @@
14
14
 
15
15
  <p align="center"><img src="docs/images/hero.webp" width="820" alt="Composer Plus を入れた DeepSeek Harness:実行中のプロジェクトはサイドバーにスピナーを表示し、変更パネルは git の差分を表示しています"></p>
16
16
 
17
- 非公式のコミュニティプラグインです。ネットワーク通信は、アップデートの確認(GitHub のリリースと npm レジストリ)だけです。起動時のこの通信を止めるには、**自動アップデート** をオフにしてください。**機能のアイデア** は、**機能を提案** をクリックしたときだけ、チャットで使っているモデルを呼び出します。**次のメッセージの予測**(既定ではオン)は、ターンが終わるたびに、設定で選んだモデル(別のモデルを選ばない限り dsh の既定のモデル)を、クリックなしで 1 回呼び出します。この呼び出しを止めるには、**設定 → Composer Plus** でオフにしてください。**入力中に補完**(既定ではオフ)は、オンにした後、入力が止まるたびに、この機能で選んだモデル(既定では予測のモデル)を呼び出します。**プロンプトを改善** は、魔法の杖をクリックしたときだけモデルを呼び出します。**タスクボード** は、ボードで開始したタスクごとに、タグを付けるために新しいチャットのモデルを 1 回呼び出します。**AI の要約** の設定(既定は **高速(AI なし)**)では、ボードまたは Tether で実行中のタスクの進行状況を見ている間、短い進行メモのためにそのチャットのモデルも呼び出します。**目標チェック**(既定ではオン)は、自動ラウンドでエージェントが `/goal` を完了にするたびに、モデルを 1 回呼び出します。**モバイル接続**(既定ではオフ)は、オンにした後だけ、ローカルネットワークまたは tailnet からの iPhone の接続を受け付けます。
17
+ 非公式のコミュニティプラグインです。アップデートの確認はネットワーク通信をします(GitHub のリリースと npm レジストリ)。起動時のこの通信を止めるには、**自動アップデート** をオフにしてください。 **トルコ語スキルパック**(既定でオン)は、**アプリケーションの言語** が Türkçe のときだけ、turkish-anti-ai-skill を GitHub からダウンロードし、1 日に 1 回新しい版を確認します。この通信を止めるには、**設定 → Composer Plus** でオフにしてください。**機能のアイデア** は、**機能を提案** をクリックしたときだけ、チャットで使っているモデルを呼び出します。**次のメッセージの予測**(既定ではオン)は、ターンが終わるたびに、設定で選んだモデル(別のモデルを選ばない限り dsh の既定のモデル)を、クリックなしで 1 回呼び出します。この呼び出しを止めるには、**設定 → Composer Plus** でオフにしてください。**入力中に補完**(既定ではオフ)は、オンにした後、入力が止まるたびに、この機能で選んだモデル(既定では予測のモデル)を呼び出します。**プロンプトを改善** は、魔法の杖をクリックしたときだけモデルを呼び出します。**タスクボード** は、ボードで開始したタスクごとに、タグを付けるために新しいチャットのモデルを 1 回呼び出します。**AI の要約** の設定(既定は **高速(AI なし)**)では、ボードまたは Tether で実行中のタスクの進行状況を見ている間、短い進行メモのためにそのチャットのモデルも呼び出します。**目標チェック**(既定ではオン)は、自動ラウンドでエージェントが `/goal` を完了にするたびに、モデルを 1 回呼び出します。**モバイル接続**(既定ではオフ)は、オンにした後だけ、ローカルネットワークまたは tailnet からの iPhone の接続を受け付けます。
18
18
 
19
19
  ## インストール
20
20
 
@@ -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.22.0`。
32
+ > dsh の pnpm は、公開から 24 時間たっていないバージョンをスキップします。リリース直後は、バージョンを指定してください:`dsh-composer-plus@1.24.0`。
33
33
 
34
34
  ## 機能
35
35
 
@@ -48,6 +48,7 @@ dsh plugin --profile web add dsh-composer-plus
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
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> |
51
+ | **ウィンドウのサイズを記憶する** | <a id="feature-windowsize"></a>dsh のデスクトップアプリは、起動のたびにウィンドウを 1280 × 820 で開きます。この機能を使うと、前回使ったときのウィンドウのサイズと位置で開きます。ウィンドウのサイズを変えたり移動したりするたびに保存され、次回の起動でプラグインが読み込まれると元に戻ります。フルスクリーンや最小化したウィンドウは保存されません。今は接続されていないディスプレイ上の位置は、メインディスプレイに戻ります。デスクトップアプリのみ:ブラウザーのタブは自分のウィンドウのサイズを変えられません。 | <a href="assets/features/windowSize.webp"><img src="assets/features/windowSize.webp" width="160" alt="スクリーンショット: ウィンドウのサイズを記憶する"></a> |
51
52
  | **ワンクリックで続行** | <a id="feature-continuebutton"></a>停止、失敗、または途中で切れたターンの後、空の入力欄に **▶** が表示されます。1 回クリックすると、入力欄に何も書かず、チャットに見えるメッセージも追加せずに、既存の会話から再開します(モデルには「止まったところから続ける」という短い隠しメモが届きます。Claude など一部のプロバイダーは、アシスタントの返信で終わるリクエストを拒否するためです)。キューで待っているメッセージはそのまま残ります。▶ は止まったタスクだけを続行し、その後でキューが実行されます。完了したターンの後は、通常の送信ボタンのままです。 | <a href="assets/features/continueButton.webp"><img src="assets/features/continueButton.webp" width="160" alt="スクリーンショット: ワンクリックで続行"></a> |
52
53
  | **再起動後に再開** | <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> |
53
54
  | **キューのドラッグ&ドロップ** | <a id="feature-queuereorder"></a>キュー内のメッセージにハンドル(⠿)が付きます。ドラッグして並べ替えるか、ハンドルにフォーカスを置いて `↑` / `↓` を押します。`Esc` でキャンセルします。 | <a href="assets/features/queueReorder.webp"><img src="assets/features/queueReorder.webp" width="160" alt="スクリーンショット: キューのドラッグ&ドロップ"></a> |
@@ -69,9 +70,12 @@ dsh plugin --profile web add dsh-composer-plus
69
70
  | **新しいチャットで続ける** | <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
71
  | **コンテキストの内訳** | <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
72
  | **計画済みステップ** | <a id="feature-plannedsteps"></a>既定ではオフです。**設定 → Composer Plus** でオンにしてください。エージェントはツール `plan_next_steps` を使えるようになります。コマンドと同じメッセージで、次に実行するコマンドを正確な引数と条件付きで計画できます(例:「ビルドが通ったら `npm test` を実行」)。結果が条件を満たすと、Composer Plus がモデルを呼び出さずに次のステップを自分で実行するため、長いチャットのトークン消費が減ります。ステップはチャットに「Composer Plus · Planned steps: ran `test` … without a model call」という短い行として表示され、その後にツール呼び出しと結果が続きます。対象は `bash`、`read`、`grep`、`glob` のステップのみで、承認、サンドボックス、保護されたファイルは各ステップにいつもどおり適用されます。条件を満たさないとき、2 つのステップが同時に実行可能なとき、最後のステップの後、そしてあなたがメッセージを送ったときは、モデルが再び応答します。この考え方は HarnessMM(arXiv 2610.32813)に基づきます。 | <a href="assets/features/plannedSteps.webp"><img src="assets/features/plannedSteps.webp" width="160" alt="スクリーンショット: 計画済みステップ"></a> |
73
+ | **トルコ語スキルパック** | <a id="feature-turkishskill"></a>**アプリケーションの言語** が Türkçe のときだけ動きます(既定でオン。**設定 → Composer Plus** でオフにできます)。Composer Plus はオープンソースの [turkish-anti-ai-skill](https://github.com/yucezerey/turkish-anti-ai-skill)(MIT、作者 Yüce Zerey)を GitHub からダウンロードし、dsh のスキルに加えます。トルコ語の文章を自然にする、書き直す、または書くようエージェントに頼むと、dsh がスキルを読み込み、そのルールが AI らしさのない自然なトルコ語を書く助けになります。残すのはパックの Markdown ファイルだけで、どのファイルも GitHub のファイル一覧と一致する必要があります。パックのスクリプトは実行しません。プラグインは 1 日に 1 回 GitHub に新しい版を問い合わせ、あればインストールします。行にはインストール済みの版、またはインストールされていない理由が表示されます。ほかの言語ではスキルはインストールされません。言語を Türkçe に戻すと戻ります。 | <a href="assets/features/turkishSkill.webp"><img src="assets/features/turkishSkill.webp" width="160" alt="スクリーンショット: トルコ語スキルパック"></a> |
74
+ | **コードベースを整理** | <a id="feature-untanglecodebase"></a>既定でオンです。**設定 → Composer Plus** でオフにできます。[caldoai/skills](https://github.com/caldoai/skills) のスキル `/untangle-codebase`(MIT、© 2026 Maze)を dsh のスキル一覧に追加します。チャットで `/untangle-codebase` と入力し(`/` メニューにも表示されます)、必要なら重点を置く範囲を続けて書いて(例:`/untangle-codebase src/api`)送信します。エージェントはまず、コードを言い換えているだけのコメントと、本当のバグを見つけられないテストも削除するかを尋ねます。次に、すべてのコピー、隠れた結合、不要な結合、呼び出しを渡すだけのラッパー、使われていないコード、その場限りの特別処理を一覧にし、基本原則から修正を計画し、目標として修正を行い、直す価値のあるものがなくなるまでサブエージェントで確認を繰り返します。開始できるのはあなただけです。モデルのスキル一覧には表示されないため、他のチャットでトークンを消費しません。プロジェクトや `~/.dsh/skills` に同じ名前のスキルがあれば、そちらが優先されます。**チャットごとのブランチ** のチャットで開始し、結果を **変更パネル** で確認してください。Tether では、メッセージ欄に `/untangle-codebase` と入力します。 | <a href="assets/features/untangleCodebase.webp"><img src="assets/features/untangleCodebase.webp" width="160" alt="スクリーンショット: コードベースを整理"></a> |
72
75
  | **保護されたファイル** | <a id="feature-protectedfiles"></a>既定でオンです。エージェント自身のファイルツールは、指定したパターンに一致するファイルを読むことも変更することもできません。**読み取りと書き込み** のパターンでは、ファイルに対する `read`、`read_image`、`grep` が拒否され、どちらの種類でも `write`、`edit`、`str_replace_editor` が拒否されます。エージェントは理由を読み、あなたに確認するよう指示されます。既定のパターンは `.env*`、`*.pem`、`*.key` です。設定 → Composer Plus → **保護されたファイル**:パターンを追加し(例:`published/**` または `config/*.yml`)、種類をクリックして **読み取りと書き込み** と **書き込みのみ** を切り替え、✕ で削除するか、**既定値を使う** をクリックします。`/` を含まないパターンは、どのフォルダーのファイル名にも一致します。これはガードレールであり、サンドボックスではありません。シェルコマンド(`cat .env`)、スクリプト、MCP ツールからはファイルに届くことがあります(「制限事項」を参照)。 | <a href="assets/features/protectedFiles.webp"><img src="assets/features/protectedFiles.webp" width="160" alt="スクリーンショット: 保護されたファイル"></a> |
73
76
  | **ブロックされたコマンド** | <a id="feature-blockedcommands"></a>既定でオンで、リストは空です。エージェントのシェルコマンド(`bash`、`pwsh`)は、指定したルールに一致するコマンドを実行できません。**ブロック** のルールは呼び出しを拒否し(エージェントは理由を読み、あなたに確認するよう指示されます)、**先に確認** のルールは dsh の承認カードを表示します。コマンドは、あなたが許可したときだけ実行されます。設定 → Composer Plus → **ブロックされたコマンド**:ルールを入力し(例:`npm publish`、`git push --force` または `ssh *192.168.2.19`)、種類をクリックして **ブロック** と **先に確認** を切り替えてから、**追加** をクリックします。ルールの種類をクリックすると変更でき、✕ で削除できます。ルールは、コマンド名と、その後にこの順で続く必要がある単語です。`*` は任意のテキストに一致します。`&&`、`;`、`\|` の後、`$(…)`、`bash -c "…"`、`eval` の中、`sudo` や `env` の後にあるコマンドも見つけます。これはガードレールであり、サンドボックスではありません。変数(`$CMD`)、スクリプトファイル、ほかのプログラムからはコマンドを実行できることがあります(「制限事項」を参照)。 | <a href="assets/features/blockedCommands.webp"><img src="assets/features/blockedCommands.webp" width="160" alt="スクリーンショット: ブロックされたコマンド"></a> |
74
77
  | **タスクボード** | <a id="feature-taskboard"></a>左サイドバー → **タスクボード**。dsh のどこでも `Cmd+Shift+K`(Windows と Linux では `Ctrl+Shift+K`)でも開けます。サイドバーと同じライブの状態を表示する、dsh のチャットのカンバンボードです。承認、回答、計画のレビューを待っているチャットはオレンジの点付きで **レビュー** に、実行中のチャットは **作業中** に、まだ開いていない終わったチャットは **完了**(緑)に入ります。チャットを開くと、そのカードは **完了** から自動で外れます。緑のカードの下にある **最近完了 (N)** をクリックすると、読んだ終わったチャットを表示できます(新しい 10 件、続きは **古いタスクを N 件表示**。開閉の状態はこのデバイスに保存されます)。ボードの裏で開いたまま終わったチャット(**新しいタスク**)は、開くまで緑のままです。ボード上部のプロジェクト名をクリックするとプロジェクト一覧が開きます。そこでプロジェクトか **すべてのプロジェクト** を選びます。チャットごとのブランチのフォルダーは、そのプロジェクトとして扱われます。一覧は、選んだとき、`Esc` を押したとき、一覧の外をクリックしたときに閉じます。一覧の上部の **プロジェクトを検索** に入力すると、名前でプロジェクトを探せます(大文字と小文字、アクセント記号は区別しません。`Esc` で入力欄を空にします)。`Enter` を押すと、最初に一致したプロジェクトを選びます。**過去 2 時間以内にアクティブ** をクリックすると、待機中、実行中、未確認のまま完了、または過去 2 時間以内に変更されたチャットがあるプロジェクトだけを表示します(この設定はこのデバイスに保存されます)。**新しいタスク**(または `n`)は、ボードが表示しているプロジェクトで dsh 自身の新しいチャットを開きます(**すべてのプロジェクト** のときは、dsh の新しいセッションが選ぶプロジェクトです)。そのため、ほかのチャットと同じように、ファイルを追加し、コマンドを使い、モデルを選べます。最初のメッセージを送ると、自動でボードに戻ります。それまで、そのチャットは **作業中** の一番上で **新しいタスク** として待ちます。クリックすると、最初のメッセージを書けます。あなたを待っているチャットがあるプロジェクトには、プロジェクト一覧でオレンジの点が付きます(どれかのチャットが待っている間は、上部のプロジェクト名にも付きます)。dsh がチャットに名前を付け、チャットのモデルがそのメッセージから最大 3 個のタグを付けます。カードをクリックすると、そのチャットが開きます。オレンジのカード(またはその **回答**)をクリックすると、ボード上で回答できます。チャット全体はパネルの **チャットを開く** で開けます。承認のリクエストには **拒否** か **1回だけ許可**、計画には **承認** か **変更をリクエスト**、質問には選択肢か自分のテキストで答えます。終わったカードで **×** をクリックすると、そのカードをボードから外せます。**最近完了** を開いて **完了** の上部にある **すべてクリア** をクリックすると、それらのカードをボードから外せます。先に、どのプロジェクトのカードが何枚外れるかが表示され、未読(緑)のカードは残ります。その後 8 秒間は、**元に戻す** でカードを戻せます。**完了** の下の **外したカード (N)** には、ボードから外したカードが一覧表示され、**ボードに戻す** で 1 枚を再び **完了** に表示できます。チャットは削除されません。チャットは dsh のサイドバーに残り、ボードは再起動の後もこれを覚えています(Tether にも同じボードが表示されます)。再び実行されたチャットは、ボードに戻ります。**作業中** のカードにポインターを合わせる(またはキーボードのフォーカスを移す)と、その進行状況が表示されます。実行時間、ToDo リストのステップ、いま実行中のツール、エージェントの最後の行です。設定 → Composer Plus → タスクボード の **ホバーで進行状況を表示** で、**高速(AI なし)**(既定:チャットを読むだけです)か **AI の要約**(チャットのモデルを短く 1 回呼び出し、1〜2 文も書きます)を選びます。 | <a href="assets/features/taskBoard.webp"><img src="assets/features/taskBoard.webp" width="160" alt="スクリーンショット: タスクボード"></a> |
78
+ | **アシスタント** | <a id="feature-assistant"></a>既定ではオフです。**設定 → Composer Plus** でオンにしてください。次に、左サイドバーの **アシスタント**(**タスクボード** のすぐ下)をクリックします。ChatGPT や Grok のチャットのように、パーソナルアシスタントとして使う、長く続く 1 つのチャットが開きます。最初のクリックでフォルダー `~/Assistant` を作り、それをプロジェクト「Assistant」として追加し、workspace-write 権限モードと dsh の既定のモデルでチャットを開始します。その後のクリックでは、毎回同じチャットが開きます(アーカイブしたチャットは戻り、削除したチャットは新しく作られます)。リマインダーを頼むと(「2 分後に水を飲むようにリマインドして」)、dsh のスケジュールされたタスクを使います。そのため、その時刻にリマインダーがチャットを実行し、モバイル接続がオンのときは Tether が「Turn finished」の通知を送ります。Web の検索や、ほかのチャットについても頼めます。すべてのプロジェクトのチャット(実行中、あなたを待っている、アイドル)を一覧表示し、1 つのチャットの最新のメッセージを読めます。また、チャットへのメッセージ送信、プロジェクトでの新しいチャットの開始、実行中のチャットの停止、チャットのアーカイブもできます。この 4 つの操作は、それぞれ先に dsh の承認カードを表示し(Tether にも表示されます)、あなたが **1回だけ許可** をクリックするまで何も起きません。削除のツールはありません。これらのツールと短い指示があるのは、このチャットだけです。Web ページやほかのチャットで読んだテキストは、命令ではなくデータとして扱われます。毎回プロフィールを伝える代わりに、このプロジェクトのメモリー(**プロジェクトメモリー**、トピック「profil」)に保存してください。 | <a href="assets/features/assistant.webp"><img src="assets/features/assistant.webp" width="160" alt="スクリーンショット: アシスタント"></a> |
75
79
  | **プロジェクトメモリー** | <a id="feature-projectmemory"></a>既定ではオフです。**設定 → Composer Plus** でオンにしてください。プロジェクトのフォルダーごとに専用のメモリーがあり、そのプロジェクトの後のチャットが読みます。DS Bot が Bot ごとにメモリーを持つのと同じです。ターンが終わるたびに、チャットのモデルを 1 回呼び出して新しいメッセージ(ロールバックしたものは除きます)を読み、長く続く好み、決定、事実を短いメモとして保存し、古いメモを変更または削除します。エージェントも自分でメモを保存、削除、検索できます(`memory_remember`、`memory_forget`、`memory_recall`)。メモはグローバルにもでき、その場合はすべてのプロジェクトが読みます。新しいチャットはシステムプロンプトでメモを受け取ります。後で保存したメモは次のチャットから表示されます。ファイルは dsh のホームフォルダーにある Markdown(`storages/dsh-composer-plus/memory/`)で、プロジェクトのフォルダーには保存されません。 同じ行の **メモリーを開く** は、保存されたすべてのメモをプロジェクトごと(とグローバルメモリー)にまとめて表示し、絞り込みもできます。変更する内容を自分の言葉で書き(例:「yarn から pnpm に変えた」)、**変更をプレビュー** を押します。dsh の既定のモデルが変更を提案し、**適用** を押したときだけ保存されます。Tether では: チャットのタイトルメニュー → Project memory。 | <a href="assets/features/projectMemory.webp"><img src="assets/features/projectMemory.webp" width="160" alt="スクリーンショット: プロジェクトメモリー"></a> |
76
80
  | **メモリーのバージョン履歴** | <a id="feature-memoryhistory"></a>**プロジェクトメモリー** がオンの間、既定でオンです。メモリーを保存するたびに(エージェント、ターン後のレビュー、**メモリーを開く**)、保存前のメモのコピーが残ります。**メモリーを開く** でプロジェクトまたは **グローバルメモリー** を選び、**履歴** を押すと、日付順のバージョンと、それぞれの後にメモリーを変更したものが表示されます。バージョンを選ぶと復元で変わる内容が差分で表示され、**復元** できます。復元前のメモも残るので、復元は元に戻せます。各メモリーの最新 50 バージョンが残ります。Tether では:チャットのタイトルメニュー → Project memory → History。 | <a href="assets/features/memoryHistory.webp"><img src="assets/features/memoryHistory.webp" width="160" alt="スクリーンショット: メモリーのバージョン履歴"></a> |
77
81
  | **メモリーを AGENTS.md に書き出す** | <a id="feature-memoryexport"></a>**メモリーを開く** でプロジェクトを選び、**AGENTS.md に書き出す** を押すと、そのプロジェクトのメモがフォルダー内の `AGENTS.md` の目印付きセクションに書かれます。コミットしてチームや他のエージェントツールと共有できます。まず変更が差分で表示され、**AGENTS.md に書き込む** を押したときだけ保存されます。次の書き出しはこのセクションだけを置き換えます。グローバルメモリー、出典、日付は書かれません。Tether では:チャットのタイトルメニュー → Project memory → Export to AGENTS.md。 | <a href="assets/features/memoryExport.webp"><img src="assets/features/memoryExport.webp" width="160" alt="スクリーンショット: メモリーを AGENTS.md に書き出す"></a> |
@@ -84,6 +88,7 @@ dsh plugin --profile web add dsh-composer-plus
84
88
  | **メモを付けて拒否** | <a id="feature-rejectnote"></a>承認カードの **拒否** の横に **メモを付けて拒否…** が表示されます。クリックして理由や代わりにすることを書き、**拒否** をクリックします(または `Enter`。`Shift+Enter` で改行、`Esc` で入力欄を閉じます)。メモはまず待機中のターンへのメッセージとしてエージェントに届き、その後リクエストが拒否されます。モデルは同じターンで拒否とメモを読むので、追加のメッセージは不要です。メモを送信できなかった場合は何も拒否されず、入力欄は開いたままです。Tether では:承認シート → Reject with note。 | <a href="assets/features/rejectNote.webp"><img src="assets/features/rejectNote.webp" width="160" alt="スクリーンショット: メモを付けて拒否"></a> |
85
89
  | **シークレット入力** | <a id="feature-secretinput"></a>エージェントはツール `request_secret` を使えるようになります。パスワード、トークン、API キーが必要なとき、チャットで尋ねる代わりにこのツールで求めます。ツールの行にカードが表示され、名前、値が必要な理由、パスワード欄、**保存** と **拒否** が並びます。**保存** を押すと、値はこの Mac 上のあなただけが読めるファイルに書き込まれ、エージェントはファイルのパスだけを受け取って、コマンドの入力として使います(例:`"$(cat <path>)"`)。後のツール結果に値が含まれる場合は、モデルに届く前に `[secret]` に置き換えられます。ファイルはターンの終了時に削除されます。**拒否** はエージェントに値を渡さなかったことを伝えます。ツールを外すには **設定 → Composer Plus** でオフにします。Tether では:入力欄の上の「Secret: …」バー → Enter。 | <a href="assets/features/secretInput.webp"><img src="assets/features/secretInput.webp" width="160" alt="スクリーンショット: シークレット入力"></a> |
86
90
  | **返信で引用** | <a id="feature-quotereply"></a>回答の一部を選択すると、選択範囲の上に **引用** ボタンが表示されます。クリックすると、その部分が Markdown の引用(`> …`)として入力欄のカーソル位置に入り、後ろに空行が入ります。入力欄にフォーカスが移るので、その下に返信を書けます。対象は回答の本文だけで、思考過程、ツールの行、自分のメッセージは対象外です。引用は最大 2,000 文字です。`Cmd+Z`(`Ctrl+Z`)で取り消せます。Tether では:回答を長押し → Quote(回答全体)。 | <a href="assets/features/quoteReply.webp"><img src="assets/features/quoteReply.webp" width="160" alt="スクリーンショット: 返信で引用"></a> |
91
+ | **ファイルプレビューから引用** | <a id="feature-previewquote"></a>右サイドバーでファイル(**ワークスペースのファイル**、またはチャットが開いたファイル)を開き、その中の行を選択すると、選択範囲の上に **引用** ボタンが表示されます。クリックすると、ファイルのパス、行番号、その行が入力欄のカーソル位置に入り、入力欄にフォーカスが移ります。これでエージェントはどの部分のことかがわかります。コードとテキストのファイルは `src/login.js:2-3` とコードブロックとしての行に、Markdown と PDF のファイルはパス(PDF ではページも、`docs/spec.pdf#page=3`)と `> …` の引用になります。チャットのフォルダー内のパスは相対パスです。最大 2,000 文字です。`Cmd+Z`(`Ctrl+Z`)で取り消せます。Tether にはありません。 | <a href="assets/features/previewQuote.webp"><img src="assets/features/previewQuote.webp" width="160" alt="スクリーンショット: ファイルプレビューから引用"></a> |
87
92
  | **サイドチャット** | <a id="feature-sidechat"></a>入力欄にサイドの質問を入力し、吹き出しボタン(**サイドチャットで質問**)をクリックします。チャットのコピーが開き、dsh の読み取り専用モードで答えます。その間も元のチャットは作業を続けます。コピーはこれまでのチャットを知っていますが、キューでまだ待っているメッセージは含みません。モデルは元のチャットと同じです。コピーの入力欄の上のバーに **持ち帰る** があり、押すと元のチャットが開き、その入力欄に質問(`> ` の引用)と回答が入ります。**チャットに戻る** は元のチャットを開くだけです。サイドチャットは「↳ <質問>」としてサイドバーに残るので、そこでアーカイブします。Tether では:チャットのタイトルメニュー → Side chat…。 | <a href="assets/features/sideChat.webp"><img src="assets/features/sideChat.webp" width="160" alt="スクリーンショット: サイドチャット"></a> |
88
93
  | **差分メモ** | <a id="feature-diffcomments"></a>**変更パネル** でファイルの差分を開き、行の **+** をクリックします(範囲にするには同じブロックの 2 行目を Shift+クリック)。メモを書いて **メモを保存** をクリックします。チャットのメモはパネル上部のバーで待機し、**入力欄に送る** で入力欄のカーソル位置に Markdown として入ります:`path:12-14`、`diff` ブロックとしての行、メモ。**消去** で破棄します。メモは送るか消去するまでこのブラウザーに残ります。**変更パネル** が必要です。Tether では:ファイルの差分 → 行を長押し → Add note…。 | <a href="assets/features/diffComments.webp"><img src="assets/features/diffComments.webp" width="160" alt="スクリーンショット: 差分メモ"></a> |
89
94
  | **プロジェクトの状態** | <a id="feature-projectstatus"></a>サイドバーのプロジェクトの行に、そのチャットと同じ実行中/待機中/完了のマーカーが表示されます。そのため、折りたたんだプロジェクトでも、中のチャットが作業中か、あなたの操作を待っているかがわかります。最初に表示されるのはあなたの操作を待っているチャットで、次がまだ開いていない完了済みのチャット(緑色の点。別のチャットがまだ実行中でも表示されます)、その次が実行中のマーカーです。ポインターを合わせると詳細が表示されます。**ワークスペースのツリー** では、親フォルダーの行にも、中にある各プロジェクト(たとえば `.worktrees/` 内の各ブランチのフォルダー)のチャットの状態が表示されます。フォルダーを折りたたんでいるときも同じです。 | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="スクリーンショット: プロジェクトの状態"></a> |
@@ -95,12 +100,14 @@ dsh plugin --profile web add dsh-composer-plus
95
100
  | **状態で並べ替え** | <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> |
96
101
  | **バックグラウンド通知** | <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> |
97
102
  | **操作がないときに待機中のチャットを開く** | <a id="feature-idleswitch"></a>チャットが質問をしたり、承認や計画のレビューを待っていたり(オレンジ色の点)、まだ読んでいないターンを完了したり(緑色の点)するときに、dsh を 30 秒間操作しないと、dsh はそのチャットを開きます。オレンジ色のチャットは緑色のチャットより先に開きます。それぞれの中では、最も長く待っているチャットから開き、次のチャットはさらに 30 秒操作がないと開きます。キー入力、クリック、マウスの移動、スクロールホイール、タッチがあると 30 秒を数え直します。フォーカスのある入力欄にテキストがあるとき、テキストを選択しているとき、メニューやダイアログが開いているときも切り替えません。待機中のチャットが画面に表示されている間は何も変わりません。回答せずに待機中のチャットから離れると、次に 30 秒間操作がないときに、そのチャットが再び開くことがあります。緑色のチャットが開くと、その点は消えます。次の緑色のチャットは、もう一度 dsh を操作し、その後 30 秒間操作がないときに開きます。dsh がバックグラウンドにあるときも動作しますが、dsh は前面に出ません。 | <a href="assets/features/idleSwitch.webp"><img src="assets/features/idleSwitch.webp" width="160" alt="スクリーンショット: 操作がないときに待機中のチャットを開く"></a> |
98
- | **次の待機中のチャット** | <a id="feature-nextwaiting"></a>サイドバーのヘッダーにあるボタンに、あなたを待っているほかのチャットの数と、次のチャットの色の点が表示されます。質問をしたり、承認や計画のレビューを待っていたりするときはオレンジ色、まだ読んでいないターンを完了したときは緑色です。ボタンをクリックするか Cmd+Shift+E(Windows と Linux では Ctrl+Shift+E)を押すと、そのチャットを開きます。オレンジ色のチャットが緑色のチャットより先で、それぞれの中では最も長く待っているチャットが先です。画面に表示中のチャットは数えません。ほかに待っているチャットがないときは、ボタンは表示されず、キーも何もしません。キーは dsh のキーボードショートカットのページ(次の待機中のチャット)で変更できます。 | <a href="assets/features/nextWaiting.webp"><img src="assets/features/nextWaiting.webp" width="160" alt="スクリーンショット: 次の待機中のチャット"></a> |
103
+ | **次の待機中のチャット** | <a id="feature-nextwaiting"></a>サイドバーのヘッダーにあるボタンに、あなたを待っているほかのチャットの数と、次のチャットの色の点が表示されます。質問をしたり、承認や計画のレビューを待っていたりするときはオレンジ色、まだ読んでいないターンを完了したときは緑色です。ボタンをクリックするか Cmd+Shift+E(Windows と Linux では Ctrl+Shift+E)を押すと、そのチャットを開きます。ボタンをクリックしたときは、サイドバーでもそのチャットを表示します。折りたたんだプロジェクトが開き、リストがチャットまでスクロールし、チャットが 5 秒間点滅します。オレンジ色のチャットが緑色のチャットより先で、それぞれの中では最も長く待っているチャットが先です。画面に表示中のチャットは数えません。ほかに待っているチャットがないときは、ボタンは表示されず、キーも何もしません。キーは dsh のキーボードショートカットのページ(次の待機中のチャット)で変更できます。 | <a href="assets/features/nextWaiting.webp"><img src="assets/features/nextWaiting.webp" width="160" alt="スクリーンショット: 次の待機中のチャット"></a> |
99
104
  | **選択肢ボタン** | <a id="feature-optionpicks"></a>回答が選択肢のリスト(「選択肢」見出しまたは太字の「選択肢」行の下にある 1~9 項目の番号付きリスト。「次のステップ」やアプリの各言語の同じ語も対象)で終わると、回答の下に選択肢ごとのボタンが表示されます。クリックすると、選択肢全体を含む「Option N: …」が、入力したのと同じようにあなたのメッセージとして送信されます。「(推奨)」の付いた選択肢は強調されます。ボタンは最新の回答の下にだけ、チャットが待機中で入力欄が空のときに表示されます。選択済みの回答と、ロールバックで取り消された回答には表示されません。ボタンの表示中は、次のメッセージの予測は候補を出しません。エージェントの質問カードでは、1~9 キーでクリックと同じくその選択肢を選べます(回答欄の中と、質問が表示されてから最初の 0.8 秒間は除く)。 | <a href="assets/features/optionPicks.webp"><img src="assets/features/optionPicks.webp" width="160" alt="スクリーンショット: 選択肢ボタン"></a> |
100
105
  | **アプリケーションの言語** | <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> |
101
106
  | **モバイル接続(iPhone)** | <a id="feature-mobileconnect"></a>[Tether](tether/) アプリを使うと、同じ Wi-Fi で、または [Tailscale](https://tailscale.com) 経由で、iPhone から dsh を使えます。**設定 → Composer Plus** でオンにしてください(この Mac でネットワークポートを開くため、既定ではオフです)。次に、サイドバーの左下にある **モバイル接続** をクリックします。iPhone のカメラ(**Open in Tether** をタップ)または Tether の **Scan code** で QR コードを読み取り、**Connect** をタップして、**Approve** をクリックします。先に Tether をインストールしてください。Tether がないと、カメラはこのコードを開けません。スマートフォンでは、チャットの表示、メッセージの送信(写真付き:入力欄の **+** → Camera、Photos、Paste image)、承認と質問への回答、モデルとエージェントの切り替えができます。ペアリングできる Mac の数に制限はありません。アプリの左上にある Mac の名前で、Mac を切り替えます。**モバイル接続** パネルには、ペアリング済みの iPhone が最後の接続日時とともに表示され、**Remove** でその iPhone をすぐに切断できます。「Tailscale only」はローカルネットワークからの接続を拒否し(共有の Wi-Fi 向け)、アクセスログには接続を試みた相手が表示されます。Tether では、「Settings → Privacy」で Face ID によるアプリのロックを設定できます。 | <a href="assets/features/mobileConnect.webp"><img src="assets/features/mobileConnect.webp" width="160" alt="スクリーンショット: モバイル接続(iPhone)"></a> |
102
- | **リモートコンピュータ** | <a id="feature-remotecomputers"></a>[Tailscale](https://tailscale.com) 経由でほかの Mac の dsh を開き、そのチャットをここで続けられます。各 Mac の **設定 → Composer Plus** でオンにしてください(ネットワークポートを開くため、既定ではオフです)。開きたい Mac で **ほかのコンピュータからこの Mac を開けるようにする** をオンにし、**ペアリングリンクを作成** をクリックして、リンクをコピーします。この Mac では、チャットのタイトルの左にあるコンピュータの選択メニューで **コンピュータを追加…** を選び、リンクを貼り付けて **接続** をクリックします。次に、もう一方の Mac で **承認** をクリックします。以後、選択メニューには **この Mac** とあなたのコンピュータが表示されます。1 台を選ぶと、その dsh が右サイドバーのブラウザタブ(またはブラウザのウインドウ)で開き、そのコンピュータ自身のチャット、ツール、ファイルを使えます。設定パネルでは、コンピュータの名前の変更と削除ができ、この Mac を開けるコンピュータの一覧も表示されます(**削除** でその 1 台をすぐに切断できます)。 | <a href="assets/features/remoteComputers.webp"><img src="assets/features/remoteComputers.webp" width="160" alt="スクリーンショット: リモートコンピュータ"></a> |
103
- | **自動アップデート** | <a id="feature-autoupdate"></a>dsh の起動時に、プラグインは [GitHub の最新リリース](https://github.com/furkancak1r/dsh-composer-plus/releases/latest) を確認します。そのリリースのほうが新しく、すでに npm にある場合は、dsh 標準のプラグインマネージャー(設定 → プラグインと同じ経路)でそのバージョンをインストールし、通知します。読み込むには、dsh を再起動してください。**設定 → Composer Plus → Composer Plus のアップデート** にはバージョンが表示され、**アップデートを確認** / **今すぐアップデート** のボタンがあります。新しいバージョンで dsh を初めて起動すると、**Composer Plus N の新機能** ウィンドウにそのバージョンのリリースノートが **アプリケーションの言語** で選んだ言語で 1 回だけ表示されます(ノートは新しいバージョンに含まれていて、追加の通信はありません。その言語のノートがない場合は英語のノートが表示されます)。**閉じる** または `Esc` で閉じます。 設定 → プラグイン やコピーしたフォルダーで更新した後も、新しいバージョンごとに 1 回このウィンドウが表示されます。最初のインストール時には表示されません。更新の行にある **このバージョンの新機能** で再び開けます。実行中のバージョンより新しいバージョンがディスクにある場合、行に dsh を再起動するよう表示されます。 | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.webp" width="160" alt="スクリーンショット: 自動アップデート"></a> |
107
+ | **リモートコンピュータ** | <a id="feature-remotecomputers"></a>[Tailscale](https://tailscale.com) 経由でほかの Mac の dsh を開き、この dsh のウインドウで使えます。各 Mac の **設定 → Composer Plus** でオンにしてください(ネットワークポートを開くため、既定ではオフです)。開きたい Mac で **ほかのコンピュータからこの Mac を開けるようにする** をオンにし、**ペアリングリンクを作成** をクリックして、リンクをコピーします。この Mac では、左サイドバーのコンピュータの選択メニュー(ブランド名の右、**新しいセッション** の上)で **コンピュータを追加…** を選び、リンクを貼り付けて、**名前** を入力し(この Mac やほかのコンピュータと同じ名前は使えません)、**接続** をクリックします。次に、もう一方の Mac で **承認** をクリックします。以後、選択メニューには **この Mac** とあなたのコンピュータが表示されます。1 台を選ぶと、その dsh がこのウインドウ全体に表示され、そのコンピュータ自身のチャット、サイドバー、ツール、ファイルを使えます。その間も、この Mac は裏で動き続けます。選択メニューは同じ場所にあり、**この Mac に戻る** と表示されます。クリックすると戻れます。コンピュータが 2 台以上ある場合は、クリックでメニューが開きます。そこで **この Mac** か別のコンピュータを選びます。設定パネルでは、コンピュータの名前の変更と削除ができ、この Mac を開けるコンピュータの一覧も表示されます(**削除** でその 1 台をすぐに切断できます)。 | <a href="assets/features/remoteComputers.webp"><img src="assets/features/remoteComputers.webp" width="160" alt="スクリーンショット: リモートコンピュータ"></a> |
108
+ | **自動アップデート** | <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` で閉じます。ノートの下に GitHub のスターをお願いする 1 行が、30 日に 1 回まで表示されます(通信はありません)。**GitHub でスターを付ける** または **今後は表示しない** をクリックすると、もう表示されません。 設定 → プラグイン やコピーしたフォルダーで更新した後も、新しいバージョンごとに 1 回このウィンドウが表示されます。最初のインストール時には表示されません。更新の行にある **このバージョンの新機能** で再び開けます。実行中のバージョンより新しいバージョンがディスクにある場合、行に dsh を再起動するよう表示されます。 | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.webp" width="160" alt="スクリーンショット: 自動アップデート"></a> |
109
+ | **オン/オフ フィルター** | <a id="feature-featurefilter"></a>**設定 → Composer Plus** の **機能を検索** の横にあります。**すべて** はすべての機能を、**オン** はスイッチがオンの機能だけを、**オフ** はスイッチがオフの機能だけを表示します。判断するのは各行のスイッチで、dsh の Host が保存するスイッチ(たとえば **モバイル接続**)も含みます。検索と一緒に使えます。語を入力して **オフ** を選ぶと、オフにした機能が見つかります。**オン** または **オフ** を選んでいるときに切り替えた行は、もう一度フィルターを選ぶまで残るので、フォーカスはそのスイッチにとどまります。**オン** と **オフ** では、**アプリケーションの言語** と **Composer Plus のアップデート** の行は表示されません(スイッチがないため)。設定は毎回 **すべて** で開きます。 | <a href="assets/features/featureFilter.webp"><img src="assets/features/featureFilter.webp" width="160" alt="スクリーンショット: オン/オフ フィルター"></a> |
110
+ | **issue を報告** | <a id="feature-issuereport"></a>設定 → Composer Plus → **issue を報告…**(冒頭の説明の下)、またはサイドバーのチャットを右クリック(またはチャットの **…** メニューを開く)→ **Composer Plus の issue を報告…**。種類を選びます:**バグ**、**機能リクエスト**、**改善**、**翻訳**、または **質問**。自分の言葉と言語で内容を書き、**下書きを書く**(または `Cmd/Ctrl+Enter`)をクリックします。dsh の既定のモデルを 1 回呼び出して、英語の issue を書きます。内容は、種類の接頭辞が付いたタイトル(例:`[Bug]`)、その種類のセクション(バグの場合:What happened、Steps to reproduce、Expected、Actual)、Composer Plus、dsh、システムのバージョンを書いた 1 行です。タイトルと説明を読んで編集してください。**もう一度書く** で新しい下書きを書きます。**issue を作成** は、あなたの GitHub CLI(`gh`)のログインで Composer Plus の GitHub リポジトリに issue を作成し、そのリンクを表示します。issue は公開されます。キーやパスワードのように見えるテキストは拒否されます。`gh` で作成できないときは、**代わりに GitHub で開く** が、下書きを入力した GitHub 自身のページを開きます。 | <a href="assets/features/issueReport.webp"><img src="assets/features/issueReport.webp" width="160" alt="スクリーンショット: issue を報告"></a> |
104
111
  | **バックアップ** | <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> |
105
112
  | **自動バックアップ** | <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> |
106
113
  | **セッションログのチェック** | <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> |
@@ -112,7 +119,7 @@ dsh plugin --profile web add dsh-composer-plus
112
119
 
113
120
  ## 設定
114
121
 
115
- すべての機能は、個別にオン/オフできます。場所は dsh の **設定 → Composer Plus** です。各行には小さなスクリーンショットがあります。ポインターを合わせると大きなプレビューが表示され、クリックすると原寸で開きます(`Esc` で閉じます)。上部の **機能を検索** ボックスは、名前または説明でページを絞り込みます(どの言語でも使えます。大文字と小文字、アクセント記号は区別しません)。`Esc` で入力を消去します。各行にはスイッチと短い説明があります。行名の後ろにある小さな **?** は、その機能を説明する README の箇所を、dsh のインターフェース言語の README で開きます。変更は再起動なしですぐに適用され、そのデバイスに保存されます。**モバイル接続**、**再起動後に再開**、**入力中に補完** を除き、すべての機能が既定でオンです。この 3 つと **内容検索**、**ターンのロールバック**、**次のメッセージの予測**、**目標チェック** のスイッチは、dsh のホストが保持します。そのため、これらのスイッチはすべてのウィンドウに適用され、再起動後も有効です。**次のメッセージの予測** で選んだ **モデル** も、ホストが保持します。**入力中に補完** のモデルの選択(既定は **次のメッセージの予測と同じ**)も、ホストが保持します。**プロンプトを改善** と **目標チェック** のモデルの選択(どちらも既定は **チャットのモデルと同じ**)も、ホストが保持します。**このチャットで許可** の **時間制限**(既定は 1 時間)も、ホストが保持します。**内容検索** の変更は、dsh の再起動後にだけ反映されます(dsh は起動時にこの設定を読み込みます)。それまでは、その行に **この変更を反映するには dsh を再起動してください。** と表示されます。
122
+ すべての機能は、個別にオン/オフできます。場所は dsh の **設定 → Composer Plus** です。各行には小さなスクリーンショットがあります。ポインターを合わせると大きなプレビューが表示され、クリックすると原寸で開きます(`Esc` で閉じます)。上部の **機能を検索** ボックスは、名前または説明でページを絞り込みます(どの言語でも使えます。大文字と小文字、アクセント記号は区別しません)。`Esc` で入力を消去します。その横の **すべて**、**オン**、**オフ** で、すべての機能、オンの機能だけ、またはオフの機能だけを表示します(**オン/オフ フィルター** をオフにすると非表示になります)。各行にはスイッチと短い説明があります。行名の後ろにある小さな **?** は、その機能を説明する README の箇所を、dsh のインターフェース言語の README で開きます。変更は再起動なしですぐに適用され、そのデバイスに保存されます。**モバイル接続**、**再起動後に再開**、**入力中に補完** を除き、すべての機能が既定でオンです。この 3 つと **内容検索**、**ターンのロールバック**、**次のメッセージの予測**、**目標チェック** のスイッチは、dsh のホストが保持します。そのため、これらのスイッチはすべてのウィンドウに適用され、再起動後も有効です。**次のメッセージの予測** で選んだ **モデル** も、ホストが保持します。**入力中に補完** のモデルの選択(既定は **次のメッセージの予測と同じ**)も、ホストが保持します。**プロンプトを改善** と **目標チェック** のモデルの選択(どちらも既定は **チャットのモデルと同じ**)も、ホストが保持します。**このチャットで許可** の **時間制限**(既定は 1 時間)も、ホストが保持します。**内容検索** の変更は、dsh の再起動後にだけ反映されます(dsh は起動時にこの設定を読み込みます)。それまでは、その行に **この変更を反映するには dsh を再起動してください。** と表示されます。
116
123
 
117
124
  <p align="center"><img src="docs/images/settings.webp" width="720" alt="設定 → Composer Plus:機能の検索、言語の選択、アップデートの行、機能ごとのスイッチ。ポインターを合わせるとスクリーンショットのプレビューが表示されます"></p>
118
125
 
@@ -172,6 +179,7 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
172
179
  - **内容検索:** チャットを検索する新しいコードはありません。プラグインは、dsh 標準のメッセージインデックス(SQLite FTS5、`dsh-session-query-sqlite`)をオンにし、そのためのファイル `$DSH_HOME/cache/composer-plus/session-search.db`(所有者のみのファイルとフォルダー)を割り当てるだけです。このファイルにはあなたのメッセージとアシスタントのメッセージのテキストが入るため、`$DSH_HOME/sessions` にあるチャットのログと同じように扱う必要がある個人的なデータです。データがマシンの外に出ることはありません。このファイルは、dsh が作り直せるコピーです。dsh を閉じている間なら削除できます。スイッチは `$DSH_HOME/storages/dsh-composer-plus/content-search.json` にあります。
173
180
  - **ターンのロールバック:** あなたがメッセージを送るたびに、その前にホストがチャットのフォルダーの git スナップショットを作成し、専用のストア `$DSH_HOME/cache/composer-plus/rollback/<chat>.git`(所有者のみのフォルダー)に保存します。ストアには、そのフォルダーの中で git が認識するファイル(無視されたファイルを除く)のコピーが入ります。そのため、ストアはプロジェクトと同じように扱う必要がある個人的なデータです。ストアはリポジトリのオブジェクトを読み取ります(git がすでに持っているものはコピーしません)。リポジトリのインデックス、`HEAD`、ブランチ、タグ、stash、config には一切書き込みません。git がリポジトリに加える唯一の変更は、再利用するオブジェクトファイルのタイムスタンプの更新です(このため、`git gc` によるそれらのファイルの削除が遅れます)。ファイルを含むロールバックは、チャットのフォルダーの中の通常のファイルだけに書き込みます。シンボリックリンク、パイプ、フォルダーの外にあるものはスキップします。データがマシンの外に出ることはありません。dsh を閉じている間なら、ストアを削除できます(その後は、新しいメッセージを送るまで、ロールバックはチャットのみで動作します)。**チャットを削除** は、そのチャットのストアも削除します。スイッチは `$DSH_HOME/storages/dsh-composer-plus/rollback.json` にあります。ファイルを含むロールバックは、**やり直す** のために、ロールバック直前のファイルも保持します(同じストアの `refs/r/…`)。やり直したロールバックは、`$DSH_HOME/storages/dsh-composer-plus/redone.json`(所有者のみのファイル)に記録されます。
174
181
  - **GitHub issue を作成**(機能のアイデア → **あとで** リスト):クリックしたときだけ実行されます。ホスト側は、チャットのフォルダーで、あなた自身の GitHub CLI(`gh issue create`)を、アイデアの保存済みのタイトルと概要(とその重要性)で実行します。`gh` は自身のログインとフォルダーの GitHub リモートを使うため、issue はあなたのアカウントでそのリポジトリに作成され、GitHub はそのリポジトリを見られるすべての人にそれを表示します。dsh は、起動するコマンドから、トークンのような名前の変数を取り除きます。`GH_TOKEN` または `GITHUB_TOKEN` で `gh` にトークンを渡している場合、プラグインはこの 2 つだけを `gh` に渡します。issue のリンクは、アイデアとともに `later.json` に保存されます。
182
+ - **issue を報告**(設定 → Composer Plus → **issue を報告…**、またはチャットの **…** メニュー → **Composer Plus の issue を報告…**):クリックするまで、何も実行されません。**下書きを書く** は、種類と、あなたが入力したテキストだけ(チャットやプロジェクトは含みません)を、1 回のリクエストとして dsh の既定のモデルに送ります。ホスト側は、Composer Plus、dsh、OS のバージョンを書いた 1 行を追加し、ホームフォルダーのパスを `~` に置き換えます。**issue を作成** は、あなた自身の GitHub CLI(`gh issue create --repo furkancak1r/dsh-composer-plus`)を、あなたの `gh` のログインで実行します。そのため、issue は公開され、あなたの GitHub アカウントが表示されます。キー、トークン、パスワードのように見えるテキストは拒否され、Mac の外に出ることはありません。
175
183
  - **このファイルを変更したチャット**(変更、ファイルの「…」メニュー):ホスト側は、フォルダーが同じリポジトリにあるチャットのログを、dsh が保存しているとおりに読み取り、各チャットのタイトル、時刻、依頼の最初の行を返します。ファイル自体を開くことはありません。
176
184
  - **チャット行の Git ブランチ:** ホスト側は、ターンの開始時と終了時に、チャットのフォルダーで `git branch --show-current`(読み取り専用)を実行し、チャット ID、ブランチ名、時刻だけを `$DSH_HOME/storages/dsh-composer-plus/session-branches.json`(所有者のみのファイル、最新 2000 件のチャット)に保存します。スイッチは、その隣の `branches.json` にあります。
177
185
  - **チャット内を検索** はページの中だけで動作します。ページが表示しているテキストを読み取るだけで、何も送信しません。
@@ -180,9 +188,10 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
180
188
  - **このチャットで許可:** 許可は、許可した時刻とともに `$DSH_HOME/storages/dsh-composer-plus/chat-grants.json`(所有者のみのアクセス権)に保存されます。1 つの許可の対象は、1 つのチャットの 1 つの特定のツールで、時間制限が終わるまで有効です(既定は 1 時間)。そのツールが書き込みできる場合は、あらゆる書き込みも許可の対象になります。許可は、ヘッダーのチップから取り消します。
181
189
  - 自動レビューは、引き続きすべての呼び出しで実行されます。レビューの失敗が自動で許可されることはありません。
182
190
  - **モバイル接続:** オンにするまではオフです。オンの間、ホスト側は Tether ゲートウェイを実行します。ゲートウェイは、ポート 19390 の HTTPS(Wi-Fi のサブネットと tailnet(100.64.0.0/10)からの接続だけを受け付けます)と、`127.0.0.1:19391` のペアリングページ(この Mac からのみ)で構成されます。スマートフォンを接続するには、QR コードに含まれる 1 回限りのコード(5 分間有効)と、Mac での **Approve** が必要です。スマートフォンは、ゲートウェイの証明書を固定(ピン留め)します。Mac が保存するのは、各スマートフォンのトークンのハッシュだけです(30 日間有効で、使用中は更新されます)。**Remove** をクリックすると、そのスマートフォンの接続をすぐに切断します。スマートフォンから呼び出せるのは、許可リストにある dsh のメソッド(チャット、プロンプト、添付ファイル、スラッシュコマンド、承認、質問、モデル、エージェント、目標)だけです。設定、認証情報、ファイルブラウザー、ターミナルは呼び出せません。「Tailscale only」は、ローカルネットワークからのすべての接続を拒否し、すでに開いている接続も切断します。アクセスログは、最新 200 件の接続の試み(時刻、IP アドレス、デバイス名、許可か拒否か、その理由)を `access.json` に保存します。トークンやペアリングコードは保存しません。データ:`$DSH_HOME/storages/dsh-composer-plus/mobile/`(所有者のみのファイル)。詳細:[tether/README.md](tether/README.md)。
183
- - **リモートコンピュータ:** 各 Mac でオンにするまではオフです。**ほかのコンピュータからこの Mac を開けるようにする** は、2 つ目の HTTPS ポート(19392)を、この Mac の Tailscale アドレスだけで開きます(Wi-Fi では開かず、Bonjour でも知らせません)。別の Mac が接続するには、1 回限りのペアリングリンク(5 分間有効)、対応する証明書(固定)、あなたの **承認** が必要です。この Mac が保存するのは、そのトークンのハッシュだけです。ペアリングしたコンピュータは、ここで使うのと同じように、この Mac の dsh を完全に操作できます。チャット、モデル、ツール、ファイル、ターミナルも操作できます。設定パネルで削除すると、その接続はすぐに切れます。別の Mac を開く側の Mac は、そのコンピュータのトークンを `$DSH_HOME/storages/dsh-composer-plus/computers.json`(所有者のみのファイル)に保存します。選んだコンピュータごとに、`127.0.0.1` でリレーを開きます。ページは 1 回限りのリンク(60 秒間有効)を受け取ります。リレーが受け付けるのは自分のページ(自分のアドレス)だけで、ほかのサイトは受け付けません。別の Mac が開いたページには、コンピュータの選択メニューが表示されず、この Mac のコンピュータを変更することもできません。
191
+ - **リモートコンピュータ:** 各 Mac でオンにするまではオフです。**ほかのコンピュータからこの Mac を開けるようにする** は、2 つ目の HTTPS ポート(19392)を、この Mac の Tailscale アドレスだけで開きます(Wi-Fi では開かず、Bonjour でも知らせません)。別の Mac が接続するには、1 回限りのペアリングリンク(5 分間有効)、対応する証明書(固定)、あなたの **承認** が必要です。この Mac が保存するのは、そのトークンのハッシュだけです。ペアリングしたコンピュータは、ここで使うのと同じように、この Mac の dsh を完全に操作できます。チャット、モデル、ツール、ファイル、ターミナルも操作できます。設定パネルで削除すると、その接続はすぐに切れます。別の Mac を開く側の Mac は、そのコンピュータのトークンを `$DSH_HOME/storages/dsh-composer-plus/computers.json`(所有者のみのファイル)に保存します。選んだコンピュータごとに、`127.0.0.1` でリレーを開きます。ページは 1 回限りのリンク(60 秒間有効)を受け取ります。リレーが受け付けるのは自分のページ(自分のアドレス)だけで、ほかのサイトは受け付けません。このウインドウ内のもう一方の Mac のページは、この Mac のコンピュータの名前と状態を読み取れ(アドレスとトークンは読み取れません)、このウインドウをそれらの間で切り替えられます。コンピュータの追加、名前の変更、削除や、この Mac の設定の変更はできません。
184
192
  - **アップデート:** ホスト側は、`api.github.com` に最新のリリースを問い合わせ、`registry.npmjs.org` にそのバージョンを問い合わせます。あなたやあなたのチャットに関する情報は送信しません。インストールには dsh のプラグインマネージャー(`pnpm add dsh-composer-plus@<version>`。インストール済みのプラグインに対して dsh 0.2.1 がこれを拒否する場合は `pnpm add https://registry.npmjs.org/dsh-composer-plus/-/dsh-composer-plus-<version>.tgz`。その場合、プロファイルにはその URL がプラグインのソースとして記載されます)を使うため、dsh 標準のレジストリ、スクリプト、バージョン互換性のチェックが適用されます。プレリリースのタグや古いバージョンがインストールされることはありません。
185
- - **利用数のカウント:** ホスト側は 1 日 1 回、インストールしたバージョンのリリースにある小さなファイル `active.txt`(`github.com/furkancak1r/dsh-composer-plus/releases/download/v<version>/active.txt`)を GitHub に要求します。GitHub はこの要求をファイルごとに数えるため、作者に見えるのは、その日に各バージョンの何個のコピーが要求したかという数だけです。要求には ID、Cookie、あなたやあなたのチャットに関するデータは含まれません。アップデートの確認と同じく、GitHub にはあなたの IP アドレスが見えます。最後に要求した日は `$DSH_HOME/storages/dsh-composer-plus/active.json` に保存されます。このリポジトリの git チェックアウトと名前を変えたコピーは何も送信しません。この機能のスイッチはありません。
193
+ - **トルコ語スキルパック:** 既定でオンで、アプリの言語が Türkçe のときだけ動きます。ブラウザーが dsh の UI 言語をホスト側に伝えます。そのあとホスト側は多くても 1 日に 1 回、`api.github.com` に `yucezerey/turkish-anti-ai-skill` の最新コミットとファイル一覧を問い合わせ、変わった Markdown ファイルを `raw.githubusercontent.com` からダウンロードします。アップデートの確認と同じく GitHub には IP アドレスが見えますが、あなたやチャットについての情報は送りません。残すのは `skills/turkish-anti-ai-skill/` フォルダーの通常の `.md` ファイルだけ(最大 20 ファイル、1 MB)で、どのファイルも GitHub のファイル一覧の ID と一致する必要があります。コピーは `$DSH_HOME/cache/composer-plus/turkish-skill/<commit>`(所有者のみ)に置かれ、dsh のスキル一覧に入ります。パックのスクリプトは実行しません。スイッチと最後に伝えた言語は `$DSH_HOME/storages/dsh-composer-plus/turkish-skill.json` にあります。オフにするとスキルを外し、コピーを削除します。
194
+ - **利用数のカウント:** ホスト側は、インストールしたバージョンのリリースにある 2 つの小さなファイル(`github.com/furkancak1r/dsh-composer-plus/releases/download/v<version>/<file>`)を GitHub に要求します。`active.txt` は 1 日 1 回、`installed.txt` は dsh のホームごとに 1 回だけです。GitHub はこの要求をファイルごとに数えるため、作者に見えるのは、その日に各バージョンの何個のコピーが `active.txt` を要求したかと、合計で何個のコピーが `installed.txt` を要求したか(コピーの数)だけです。要求には ID、Cookie、あなたやあなたのチャットに関するデータは含まれません。アップデートの確認と同じく、GitHub にはあなたの IP アドレスが見えます。最後に `active.txt` を要求した日は `$DSH_HOME/storages/dsh-composer-plus/active.json` に、`installed.txt` を数えたという印は `$DSH_HOME/storages/dsh-composer-plus/installed.json` に保存されます。このリポジトリの git チェックアウトと名前を変えたコピーは何も送信しません。この機能のスイッチはありません。
186
195
  - **次のメッセージの予測:** 既定ではオンです。このモデル呼び出しを止めるには、**設定 → Composer Plus** でオフにしてください。ターンが終わるたびに、ホスト側は、そのチャットでのあなた自身のメッセージと、エージェントのテキストの返信(ツールの出力、隠れたコンテキスト、推論は含みません)を、最大で約 6,000 文字(最新の部分)、選んだモデル(別のモデルを選ばない限り dsh の既定のモデル)に送ります。送信は、dsh 標準のプロバイダー設定を通じた 1 回のリクエストです。チャットには何も保存しません。予測がチャットの履歴に追加されることはありません。スイッチと選んだモデルは `$DSH_HOME/storages/dsh-composer-plus/predict.json`(所有者のみのファイル)に保存されます。
187
196
  - **入力中に補完:** オンにするまではオフです。オンの間は、入力が止まるたびに、ホスト側が、それまでに入力したテキストと、そのチャットでのあなた自身のメッセージ、エージェントのテキストの返信(ツールの出力、隠れたコンテキスト、推論は含みません)を、**入力中に補完** で選んだモデル(既定では **次のメッセージの予測** のモデル)に送ります。チャットの部分は最大で約 3,000 文字です。次に入力が止まると、前のリクエストは止まります。チャットには何も保存しません。スイッチは `$DSH_HOME/storages/dsh-composer-plus/complete.json`(所有者のみのファイル)に保存されます。
188
197
  - **プロンプトを改善:** 魔法の杖をクリックするまで、何も実行されません。クリックすると、ホスト側は次の内容を、**プロンプトを改善** で選んだモデル(既定ではチャット自身のモデル)に 1 回のリクエストとして送ります。下書き、そのチャットでのあなた自身のメッセージとエージェントのテキストの返信(ツールの出力、隠れたコンテキスト、推論、ロールバックで取り消したメッセージは含みません。最大で約 6,000 文字、最新の部分)、**機能のアイデア** と同じプロジェクトの概要(ファイルのルールも同じです。`.env*` や鍵ファイルは読まず、フォルダーの外を指すシンボリックリンクや FIFO はスキップします)、`git status` が変更ありとして示すパス、名前に下書きと共通の言葉を含む、追跡済みまたは未追跡(無視されていない)のパス最大 30 件です。この概要以外のファイルの内容は送りません。チャットにもプロジェクトにも何も書き込みません。回答は入力欄の下書きを置き換えるだけで、送信するかどうかはあなたが決めます。モデルの選択は `$DSH_HOME/storages/dsh-composer-plus/improve.json`(所有者のみのファイル)に保存されます。
@@ -190,6 +199,7 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
190
199
  - **新しいチャットで続ける:** クリックするまで、何も実行されません。クリックすると、ホスト側はチャット(目標チェックと同じ読み方です。推論とロールバックで取り消したステップは含みません)をチャット自身のモデルに送り、引き継ぎメモを表示します。新しいチャットを作るのは **新しいチャットを開始** だけです。プロジェクトには何も書き込みません。
191
200
  - **コンテキストの内訳:** ホスト側でチャットのログだけを読みます。モデル呼び出しはせず、プロジェクトのファイルも読みません。
192
201
  - **タスクボード:** ボードは、このウィンドウにある dsh 自身の一覧から、dsh 自身のチャットを表示します。独自のチャットデータは追加しません。**新しいタスク** は dsh 自身の新しいチャットを開き、最初のメッセージはあなたが dsh の入力欄で書きます。そのため、承認、サンドボックス、チャットのモデルはいつもどおり適用されます。ホスト側は、そのチャットの最初のメッセージをカードのプロンプトとして保存し、最大 3 個のタグを得るために、それ(最初の 4,000 文字だけで、ほかには何も送りません)を、ツールなしのもう 1 回のリクエストでそのチャットのモデルに送ります。各タスクのプロンプト、タグ、開始時刻は `$DSH_HOME/storages/dsh-composer-plus/board-chats.json`(所有者のみのファイル、最新の 2,000 件)に保存されます。**×** または **すべてクリア** でボードから外したチャットの ID(最新の 5,000 件)も、このファイルに保存されます。スイッチはその隣の `board-switch.json` にあります。プロジェクトのフォルダーには何も書き込みません。**回答** は、チャット自身のカードと同じ方法で、dsh 自身の保留中のリクエストに回答を送ります。以前のバージョンの古いタスク一覧(`board.json`)はディスク上にそのまま残り、読み込まれません。**ホバーで進行状況を表示** は、この Mac 上でチャットのログを読みます。**高速(AI なし)**(既定)では何も送りません。**AI の要約** では、実行中のカードの進行状況ボックスが表示されている間(または Tether のボードが開いている間、実行中のカード最大 8 枚について)、ホスト側がそのチャットの最新の部分(最大で約 6,000 文字。あなたのメッセージ、エージェントのテキストの返信、そのツール呼び出しと結果の末尾。推論とロールバックで取り消したメッセージは含みません)を、ツールなしの 1 回のリクエストでチャットのモデルに送ります。再び送るのはチャットが進んだ後だけで、チャットごとに最大 20 秒に 1 回です。メモはメモリーにだけ保持されます。設定は `$DSH_HOME/storages/dsh-composer-plus/board-progress.json`(所有者のみのファイル)にあります。
202
+ - **アシスタント:** アシスタントのチャットは、`~/Assistant` にある通常の dsh のチャットです。モデルの呼び出しは、ほかのチャットと同じく dsh の既定のモデルに送られます。ツールは、この Mac 上でほかのチャットのログ(タイトル、プロジェクト、状態、chat_read ではその最新のメッセージ)を読み、モデルがツールを呼び出したときだけ、それをそのモデルに渡します。チャットへの送信、開始、停止、アーカイブは、それぞれあなたの承認を待ちます。チャットの ID は `$DSH_HOME/storages/dsh-composer-plus/assistant.json` に、スイッチは `assistant-switch.json` に保存されます(所有者のみのファイル)。リマインダーと自動化は dsh 自身のスケジュールされたタスクです。このチャットが行うモデルのリクエストと Web 検索のほかには、何もこの Mac の外に出ません。
193
203
  - **保護されたファイル:** リストとスイッチは `$DSH_HOME/storages/dsh-composer-plus/protected-files.json`(所有者のみのファイル)にあります。チェックが読むのは、各ファイルツール呼び出しのパス(とその実際のパス)だけで、ファイルそのものは読みません。
194
204
  - **ブロックされたコマンド:** ルールとスイッチは `$DSH_HOME/storages/dsh-composer-plus/blocked-commands.json`(所有者のみのファイル)にあります。チェックが読むのは、各 `bash` と `pwsh` 呼び出しのコマンドテキストだけです。何も実行せず、何も送信しません。
195
205
  - **シークレット入力:** 値は回答リクエストの中だけで、カードから(または Tether から、リクエスト本文を記録しないゲートウェイ経由で)Host に送られます。Host は値を `$DSH_HOME/storages/dsh-composer-plus/secrets/<ランダムな名前>` に書き込みます(フォルダ 0700、ファイル 0600)。プロジェクト、チャットの記録、ツール結果には何も書き込まれません。Host はそのチャットの後のツール結果で値を `[secret]` に置き換えるため、値をメモリに保持します。ファイルとこのコピーは、そのチャットのターンが終わったときと dsh の起動時に削除されます。スイッチは同じ場所の `secrets.json` にあります。エージェントがこのファイルを使って実行するコマンドは、そのコマンドの送信先に値を送れます。それがこの機能の目的です。
@@ -212,10 +222,11 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
212
222
  - **再起動後にチャットが続行しなかった:** 原因は次のいずれかです。dsh の終了時に、再起動後に再開がオフだった。そのターンを自分で停止した。ターンがすでに終わっていた(完了または失敗)。チャットがアーカイブされていた。20 件を超えるチャットが実行中だった(最新の 20 件が続行します)。
213
223
  - **再起動後にキューが空になっている:** キューを空にするのは dsh 自身の終了処理です。再起動後に再開は、続行するチャットでだけキューを元に戻します。ほかのチャットでは、メッセージをもう一度送信してください。終了の直前に削除したメッセージが戻ることがあります。その場合はもう一度削除してください。
214
224
  - **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 を起動してください。
225
+ - **issue を報告 で「gh could not open the issue」と表示される:** このメッセージは、`gh` 自身の出力の最初の行です。ターミナルで `gh auth status` を実行し、`gh auth login` でログインしてください。または、**代わりに GitHub で開く** をクリックしてください。下書きを入力した状態で GitHub 自身の新しい issue のページが開くので、そこで送信します。
215
226
  - **チャット行にブランチのラベルがない:** 原因は次のいずれかです。サイドバーが「1つのリスト」表示ではない(「ワークスペース」と「ワークスペースのツリー」では、どのチャット行にもラベルは表示されません)。このバージョンをインストールしてから、そのチャットにターンがない。フォルダーが git リポジトリではない。**チャット行の Git ブランチ** がオフになっている。アップデートの後は、dsh を再起動してください(ブランチはホスト側が記録します)。
216
227
  - **目標チェックで、テストが終了コード 127 または「not found」で終了したと表示される:** Finder や Dock から起動した dsh は、ターミナルより PATH が短いことがあるため、`npm`、`pnpm`、`cargo` が見つかりません。ターミナルから dsh を起動するか、**目標チェック** → **編集** で、フルパスを使った独自のテストコマンドを設定してください。**今すぐ実行** を使うと、すぐに結果が表示されます。
217
228
  - **目標が閉じず、エージェントが作業を続ける:** **目標チェック** が、失敗したテストまたは足りない作業を見つけました。目標の下の行に理由が表示されます(詳細は、結果にポインターを合わせると表示されます)。原因またはテストコマンドを直すか、`/goal` または目標バーで目標を自分で完了してください(その完了はチェックされません)。
218
- - **リリース直後にインストールが失敗する:** バージョンを指定してください(`dsh-composer-plus@1.22.0`)。上のインストールの注記を参照してください。
229
+ - **リリース直後にインストールが失敗する:** バージョンを指定してください(`dsh-composer-plus@1.24.0`)。上のインストールの注記を参照してください。
219
230
  - **今すぐバックアップ で「別のバックアップ操作を実行中です」と表示される:** 別の dsh のウィンドウ、またはレスキューコンソールで操作が実行中です(どちらも、バックアップフォルダーのロックファイル `.composer-plus.lock` を共有します)。完了するまで待ってください。実行中の操作がない場合は、次のクリックで、終了したプロセスのロックを引き継ぎます。
220
231
  - **レスキューコンソールで「dsh is running」と表示される:** まず dsh を終了してください。dsh が本当に閉じている場合、メッセージに示されたファイルはクラッシュで残ったものです。そのファイルを削除して、もう一度試してください。
221
232
  - **復元の後に dsh が起動しない、またはプラグインが見つからない:** プロファイルのプラグインパッケージを、もう一度インストールする必要があります。レスキューコンソールが、復元の後にこれを提案します。または、コンソールが一覧表示する `$DSH_HOME/profiles/` の下の各フォルダーで `pnpm install` を実行してください。vault に入っていなかったシークレット(別のコンピュータ)は、もう一度入力する必要があります。コンソールがそれらを一覧表示します。
@@ -237,9 +248,11 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
237
248
  - 新しいバージョンが dsh の設定を何も変更しない場合、dsh 0.2.1 はアップデートをすぐに読み込みます。それ以外の場合と dsh 0.2.0 では、読み込むには dsh を再起動してください。プラグインが dsh を自動で再起動することはありません。dsh のプラグインマネージャーがない Web/CLI プロファイルでは、新しいバージョンがあることを知らせるだけです。
238
249
  - **Composer Plus N の新機能** は、**アプリケーションの言語** の言語でノートを表示します。別の地域を指定した UI 言語には、その基本言語のノートが表示されます(`en-GB` には英語のノート、`zh-TW` には `zh` の中国語のノート)。ノートがない言語(別の言語パックが追加した言語や、`pt-BR` ではない `pt-PT`)では、英語のノートが表示されます。ノートは新しいバージョンに含まれています。実行中のコピーに読み取れるノートファイル(`release-notes.json`)がない場合は、GitHub の英語のノートが表示されます。
239
250
  - dsh の実行中にインストールされたバージョン(設定 → プラグイン やコピーしたフォルダーでの更新)は、dsh を再起動するまで読み込まれません。それまでは **Composer Plus のアップデート** に実行中のバージョンが表示され、再起動を求められます。そのバージョンの **Composer Plus N の新機能** ウィンドウは、そのバージョンの最初の起動時に 1 回表示されます。このプラグインを初めてインストールした後の最初の起動ではウィンドウは表示されません。**このバージョンの新機能** で実行中のバージョンのノートを開けます。
251
+ - ノートの下にある GitHub スターの行は、リポジトリにスターを付けたかどうかを知ることができません。プラグインはそのための通信をしません。ブラウザー(とデスクトップアプリ)ごとに記録を持つため、別のブラウザーではこの行がもう一度表示されることがあります。
240
252
  - **メモを付けて拒否** は、メモを待機中のターンへのメッセージとして送ってから、リクエストを拒否します。dsh はメモをチャットにあなたのメッセージとして表示します。メモの入力欄が開いている間、カードには **キャンセル** と **拒否** だけが表示されるため、誤ってクリックしてリクエストを許可することはありません。`Esc` または **キャンセル** で dsh のボタンが戻ります。空のメモは何も送信しません(dsh 自身の **拒否** を使ってください)。メモを送った後で拒否が失敗した場合(たとえば、その間にリクエストが別の場所で回答された場合)、メモはチャットに残り、モデルは次のステップでそのメモを読みます。dsh にはカードの操作用のスロットがないため、ボタンは dsh の承認カードのマークアップ(`data-approval-key`)に入れています。dsh のアップデートでそのマークアップが変わった場合、ボタンは表示されませんが、dsh 自身の **拒否** はこれまでどおり使えます。メモは最大 4,000 文字です。
241
253
  - **シークレット入力** が隠すのは値の正確な文字列だけです。同じチャットの後のツール結果では、値が `[secret]` に置き換えられます。ただし、エージェントはシェルコマンドでファイルを読み、値を別の形(base64、一部分、空白を入れたもの)で出力できます。その形はモデルに届きます。エージェント自身のファイルツール(read、grep、write、edit)はシークレットのフォルダを開けません。値がよく使われる単語でもある場合、そのチャットの他の結果にも `[secret]` が表示されます。ファイルはターンが終わるまで残ります。ターン中に dsh が終了した場合は、次の起動時に削除されます。1 つのチャットで同時に開けるリクエストは 1 つです。このツールは各モデルリクエストに約 870 文字(推定約 220 トークン)を追加します。使わないときはオフにしてください。
242
254
  - **返信で引用** は、ページに表示されているとおりの文字列を引用します。コードブロック、表、リストは Markdown の記号なしの普通の行になります。選択範囲がある回答で始まって別の回答で終わる場合や、思考過程、ツールの行、自分のメッセージにかかる場合は、ボタンが表示されません。1 つの回答の中で選択してください。dsh には文字選択用のスロットがないため、ボタンは dsh のチャット構造から回答を探します。dsh の更新でこの構造が変わると、ボタンは表示されません。引用が入力欄の末尾に入る場合は、次に入力する行が引用の下から始まるように空行がもう 1 つ入ります。dsh は送信時に末尾の空行を削除します。
255
+ - **ファイルプレビューから引用** は dsh 自身のファイルプレビューを読み取ります。行番号はプレビューの各行から取るので、コードとテキストのファイルでは正確です。Markdown ファイルは整形されたページとして表示されるため、その引用は Markdown の記号を除いた文字列になり、行番号も付きません。PDF の引用には行ではなくページが付きます。選択範囲がパスのヘッダーにある場合、別のビューアー(スプレッドシート、Office ファイル、画像)にある場合、開いている 2 つのファイルにまたがる場合は、ボタンが表示されません。右サイドバーがフルスクリーンのときも表示されません(そのとき入力欄は画面にありません)。dsh にはそこでの選択用のスロットがないため、ボタンは dsh のマークアップからプレビューを探します。dsh の更新でこのマークアップが変わると、ボタンは表示されません。入力欄に入るのは選択した文字列だけです。後でファイルが変わっても、引用は変わりません。
243
256
  - **サイドチャット** の読み取り専用は dsh 自身の読み取り専用モードによるものです。ファイルツールは書き込めず、シェルコマンドは書き込みのない dsh のサンドボックスで実行されます(サンドボックスを開始できないときは実行されません)。それでもエージェントは dsh の承認カードでより多くのアクセスを求めることができ、ネットワーク呼び出し(API リクエストなど)はコンピューターの外の何かを変えることがあります。コピーは、キューで待っているメッセージがない最新の時点で作られます。そのため、キューにメッセージが待っている間にした質問には、その後に起きたことは見えません。チャットで実行中のステップはコピーの中で閉じられるため、サイドチャットはそのステップの始まりは知っていますが、結果は知りません。サイドチャットは通常のチャットです。サイドバーに残り、モデルの使用量に含まれます。そこでアーカイブしてください。持ち帰るは、サイドチャット自身のメッセージだけ(最大 12,000 文字)を、各質問の最後の回答だけ取ります。ツール呼び出しの間のエージェントのメモは含まれません。dsh にはプラグインが右サイドバーにチャットを表示するスロットがないため、サイドチャットはメインビューで開きます。
244
257
  - **差分メモ** は変更パネルでのみ使え、dsh 自身の「前回のターン」ビューでは使えません。範囲は差分の 1 つのブロック(1 つの `@@` 部分)の中に収める必要があります。メモはこのブラウザーのストレージに保存されるため、別のブラウザーや別のコンピューターの dsh からは見えません。Tether は自分のメモをメモリに保持します。メモはクリックしたときの行を保持します。エージェントが後でファイルを変更しても、メモは古い行と行番号を表示します。チャットごとに最大 50 件、1 件あたり最大 2,000 文字・40 行です(超えた分は `…` の行になります)。
245
258
  - **このチャットで許可** は、許可した時点から時間制限を数えます。新しい時間制限は、有効な許可にすぐに適用されます。そのため、短い時間制限にすると、許可がすぐに終わることがあります。バージョン 1.12 以前の許可には時刻がありません。更新後、エージェントはそのツールについてもう一度だけ確認します。
@@ -247,7 +260,7 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
247
260
  - **質問カードをウィンドウに合わせる**は dsh の質問カードだけを変更し、計画レビューのカードは変更しません。カードは dsh のマークアップ(`data-question-key`、`data-question-scroll`)で見つけます。dsh の更新でこのマークアップが変わると、カードは dsh が描くとおりに表示されます。カードの高さはチャットではなくウィンドウに従います。狭いサイドパネル内のチャットでは、高いカードがチャットの上にはみ出すことがあります。
248
261
  - **チャットのヘッダーをウィンドウに合わせる**は、dsh が生成したクラス名(`_titleRow`、`_titleCluster`、`_crumbs`、`_headerActions`、`_headerUtilities`)でチャットのヘッダーを見つけます。dsh にはヘッダーのレイアウト用のフックがないためです。dsh の更新でこれらの名前が変わると、ヘッダーは dsh の表示のままになります。とても狭いチャット列ではヘッダーが 2〜3 行になり、メッセージの上の領域が低くなります。
249
262
  - **モバイル接続** は macOS でのみ動作します(`en0`、`openssl`、`swift`、`dns-sd` を使います)。固定のポート 19390 と 19391 を使うため、各 Mac でこれを実行できる dsh は、一度に 1 つだけです(スマートフォンの Mac の一覧では、各 Mac が 1 項目になります)。`apns.json` に APNs キーがあると(`tether/README.md` を参照)、Mac は Apple のプッシュサービスで通知を送るため、Tether を閉じていても通知が届きます。Mac はスリープせず、dsh が開いている必要があります。キーがない場合、スマートフォンが通知を受け取るのは、Tether が開いているとき、またはバックグラウンドに移った直後だけです。Tether で「Settings → Notifications → Send notifications」をオンにするまで、Tether は通知を送りません。Tether は、この設定と時間帯をペアリング済みの Mac ごとに別々に保存します。この設定はどの Mac でも初期状態でオフで、オンにしたときに iOS が許可を求めます。iOS アプリは、まだ App Store にありません。Xcode で `tether/ios` からビルドしてください。「Tailscale only」でも、Mac に Wi-Fi または Ethernet のアドレスが必要です(ゲートウェイは、そのアドレスがある場合だけ起動します)。アクセスログは Mac ごとに保存され、最新 200 件の試行だけを残します。1 分以内に繰り返された試行は、新しい行を作らず、同じ行の回数を 1 つ増やします。各通知には Mac とチャットのプロジェクト(`Studio Mac · recipe-box`)、チャットのタイトル、本文が表示されます。Turn finished にはエージェントの最後の返信が表示されます。APNs キーがある場合、この本文は Apple のプッシュサービスを通ります。Tether のアプリのロックは、iPhone のロック画面に表示される通知のプレビューを隠しません。iOS の設定でオフにしてください。Tether の緑の点は Mac に従います。dsh で開いたチャットは、スマートフォンでも点が消えます。Tether で開いたチャットは、スマートフォンでだけ点が消えます。Mac 上の dsh 自身の点は、Mac でそのチャットを開くまで残ります。
250
- - **リモートコンピュータ** を使うには、両方の Mac に Tailscale が必要です。また、開く対象の Mac に、この機能をオンにした Composer Plus が必要です。その Mac はスリープしておらず、dsh が動作している必要があります。もう一方のコンピュータは、画面に表示中のチャットの右サイドバーにあるブラウザタブで開きます。このタブはそのチャットに属するため、別のチャットでは、そのチャット自身のサイドバーが表示されます。チャットがない場合(またはブラウザタブのない dsh web の場合)、コンピュータはブラウザのウインドウで開きます。選択メニューが表示されるのは、メイン領域にチャットまたは新しいチャットの画面があるときだけです。タスクボードでは表示されません。ポート 19392 を使います(ほかのコンピュータを受け入れられる dsh は、各 Mac で 1 つだけです)。別のコンピュータのページの中で開いたコンピュータには選択メニューがないため、そこから 3 台目の Mac は開けません。
263
+ - **リモートコンピュータ** を使うには、両方の Mac に Tailscale が必要です。また、開く対象の Mac に、この機能をオンにした Composer Plus が必要です。その Mac はスリープしておらず、dsh が動作している必要があります。選択メニューは、左サイドバーを開いているときだけ表示されます(アイコンだけの表示では表示されません)。もう一方の Mac のページに自身の選択メニューがない場合(そちらの Composer Plus が 1.23.0 より古い場合)、この Mac の選択メニューが同じ場所でそのページの上に表示されます。そちらが 1.23.0 の場合、選択メニューにはその Mac の名前が表示されます。戻るには、そのメニューで **この Mac** を選びます。開いた各コンピュータのページは、この機能をオフにするか dsh を再起動するまでメモリに残ります。デスクトップアプリでは、もう一方の Mac のページは埋め込みページです。dsh 自身のキーボードショートカット(たとえば新しいチャット)はその中では動作せず、ファイルのダウンロード、マイク、通知もそこでは動作しません。ポート 19392 を使います(ほかのコンピュータを受け入れられる dsh は、各 Mac で 1 つだけです)。ほかの Mac のページの選択メニューは、この Mac のコンピュータの間でしか切り替えられません。そのため、もう一方の Mac を経由して 3 台目の Mac は開けません。
251
264
  - セッションリンクは、チャットの中で機能します。クリックしても、そのチャットは開きません。**メッセージリンクをコピー** で作ったリンクでメッセージを開けるのは、dsh 0.2.1 以降で、チャットの中のメッセージから開いた場合だけです(dsh 0.2.0 にはユーザーテキストのルールがないため、リンクはコピーされますが、プレーンテキストとして表示されます)。ロールバックで取り除かれたメッセージや、圧縮によって dsh が読み込む履歴から削除されたメッセージは表示できません。その場合、リンクがそのことを表示します。🔗 ボタンは、dsh のメッセージ行に取り付けています。dsh のアップデートでそのマークアップが変わった場合、ボタンは表示されません。
252
265
  - **すべて既読にする** は、公開 API ではない dsh の一部(dsh のセッション状態の `completionUnread` 一覧)を通じて、dsh 自身の未読の点を変更します。dsh のアップデートでこの名前が変わった場合、この項目は表示されません。この項目は dsh のプロジェクトの「…」メニューに入りますが、このメニューにはプラグイン用のスロットがありません。dsh がこのメニューを変更した場合も、この項目は表示されません。
253
266
  - **キュー内のメッセージをその場で編集** は、その間に送信が始まったメッセージを変更せず、その間に変更されたメッセージ(たとえば iPhone の Tether で変更したもの)も上書きせず、そのことを通知で知らせます。新しい画像には画像を受け付けるモデルが必要で(dsh 標準の画像の制限も適用されます)、新しいファイルはアップロードが終わるまで保存できません。編集できるのは自分のキュー内のメッセージだけで、キュー内の目標のラウンドや質問への回答は編集できません。プラグインの更新後すぐに使えるのはテキストだけの編集で、画像やファイルを含むメッセージを保存する前には dsh を再起動してください(ホスト側は起動時に読み込まれます)。
@@ -255,6 +268,7 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
255
268
  - **ツリー** のブランチマップは、各矢印の行き先を推測しています。git は、ブランチがどのブランチにマージされたかを保存しないためです。マージ済みのブランチは、マージコミットで最初にそのブランチを取り込んだブランチを指します。待機中のブランチは、分岐元のうち最も近いブランチ(メインブランチを優先)を指します。2 つのブランチが同じコミットから分岐した場合、マップが誤ったほうを選ぶことがあります。fast-forward で進んだブランチにはマージコミットがないため、その **マージ済み** ラベルをクリックしても何も開きません。メインブランチは `origin` のデフォルトブランチです。それがない場合は `main` または `master`、それもない場合は開いているブランチです。マップは最新の 20,000 件のコミットを読み取り、ブランチを最大 60 個表示します。履歴がそれより長い場合は、一部の矢印が正しくない可能性があることを表示します。squash や rebase でマージしたブランチ(たとえば GitHub 上で)は **待機中** と表示されます。git はそのコミットとのつながりを保存しないためです。
256
269
  - **このチャット** が数えるのは、dsh のファイルツール(`write`、`edit`、`str_replace_editor`)が書き込んだファイルだけです。コマンド(`bash`)が変更したファイルは、この表示には含まれず、**未コミット** に表示されます。チャットのターンのロールバックのスナップショットがない場合(ターンのロールバックがオフ、dsh-rewind-plugin がインストール済み、またはチャットがプラグインより古い場合)、表示は最後のコミットと比較し、そのことを示します。ターンのロールバックはチャットごとに最新の 50 個のスナップショットを保持します。長いチャットでは、表示は保持されている最も古いものと比較し、どのメッセージからかを示し、それより前の変更は数えません。**空白の変更を非表示** は `git diff -w` です。行の中のスペースだけが変わった行も非表示になります。
257
270
  - **GitHub issue を作成** には、dsh の PATH にある GitHub CLI(`gh`)と、チャットのフォルダーの GitHub リモートが必要です。実行時間は最大 60 秒です。`gh` がそれより長くかかると、issue は GitHub に作成されていても、そのリンクがリストに表示されないことがあります(もう一度クリックする前に、GitHub を確認してください。リストは完了した実行からしかリンクを読み取らないため、もう一度クリックすると 2 つ目の issue が作成されることがあります)。GitHub リモートが複数あるフォルダーでは、`gh` 自身のデフォルト(`gh repo set-default`)を使います。
271
+ - **issue を報告** が issue を作成するのは Composer Plus のリポジトリ(`furkancak1r/dsh-composer-plus`)だけで、あなたのプロジェクトには作成しません(プロジェクトに作成するには、機能のアイデアの **あとで** リストにある **GitHub issue を作成** を使ってください)。下書きには dsh の既定のモデルが必要で、issue の作成にはログイン済みの GitHub CLI(`gh`)が必要です。下書きは常に英語です。モデルが細部を間違えることがあります。**issue を作成** をクリックする前に下書きを読んでください。作成の実行時間は最大 60 秒です。1 時間以内に同じタイトルとテキストでもう一度作成すると、コピーを作らずに前の issue を表示します。**代わりに GitHub で開く** は、リンクを短く保つため、とても長い説明を切り詰めます。
258
272
  - **このファイルを変更したチャット** は、**このチャット** と同じく、dsh のファイルツール(`write`、`edit`、`str_replace_editor`)だけを認識します。コマンド(`bash`)による変更は表示されません。リポジトリの最新 300 件のチャット(作成日時の順)を読み取り、それより多い場合はそのことを表示します。表示するのは最大 100 行です。名前を変更したファイルは、ツールが書き込んだ名前で表示されます。フォルダーがリポジトリの外にあるチャット(同じファイルへの別のパスを通る場合も含みます)は数えません。dsh の起動後に最初に開くときは、リポジトリのすべてのチャットのログを読み取ります(275 件のチャットで約 4 秒)。2 回目以降は、それ以降に変更されたチャットだけを読み取ります。
259
273
  - **チャット行の Git ブランチ** が表示するのは、最後のターンの開始時または終了時に、チャットのフォルダーがあったブランチです。現在のブランチではありません。ターンの外でブランチを切り替えた場合は、次のターンの後に表示されます。このバージョンより前のチャットには、次のターンまでラベルが表示されません。ラベルは dsh のチャット行のマークアップの中に置かれます(dsh にはそこにスロットがありません)。dsh のアップデートでそのマークアップが変わった場合、ラベルは表示されません。ラベルは「1つのリスト」でのみ表示されます。
260
274
  - **チャットごとのブランチ** を計画モードで使う場合:dsh は `/plan <メッセージ>` をメッセージではなくコマンドとして送信します。そのため Composer Plus は、dsh の入力欄でコマンドの送信を横取りします(公開 API ではありません)。dsh のアップデートでこれが変わった場合、**新しいブランチ** を選んだ状態の `/plan <メッセージ>` は、開いている新しいチャットで dsh 自体のコマンドとして実行されます。ホストが新しいチャットで計画モードをオンにできない場合、ブランチのフォルダーは残り、メッセージは送信されません。そのため、新しいチャットが既定のモードでファイルを変更することはありません。
@@ -279,7 +293,10 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
279
293
  - **新しいチャットで続ける** は、チャット(メッセージ、ツール呼び出し、各ツール結果の末尾。最大で約 60,000 文字、最新の部分)をチャット自身のモデルに送ります。引き継ぎメモには、決定やファイルが抜けることがあります。開始する前に読んでください。新しいチャットが知っているのは、メモとリンクしたチャットだけです(dsh は元のチャットを読み取り専用のコンテキストとして添付します)。モデルのコンテキストは小さい状態から始まり、元のチャットはそのまま残ります。1 つのチャットで同時に実行できるメモの作成または開始は 1 つだけです。
280
294
  - **コンテキストの内訳** は、dsh 自身のルール(1 トークンあたり約 4 文字)で推定値を表示します。これは dsh のコンテキストリングと同じルールで、モデル自身の数え方とは異なることがあります。ツールの定義は、最新のリクエストのものです。コンテキストはチャットのログにあるとおりに表示します。実行中のターンは、次のステップの後に表示されます。
281
295
  - **計画済みステップ** でトークンが減るのは、モデルが実際に計画したときだけです。オンの間は、モデルが計画しないチャットでも、各リクエストに `plan_next_steps` ツールと短い指示(約 500 トークン)が含まれます。条件が証明するのは書かれた内容だけです(例:ビルドの終了コードが 0 だった)。作業が正しいことは証明しません。`ok` は dsh 自身の結果マーク(`[exit code: N]`、タイムアウト、サンドボックスの拒否)を読みます。0 以外の終了コードを返さずに失敗したコマンドは成功とみなされます。ステップは 1 つずつ実行され、同時に実行可能な 2 つのステップはモデルに戻されます。ステップのメッセージはチャットのモデルのアシスタントメッセージとして保存されます(dsh にはプラグインが書いたメッセージを示す印がありません)。そのため、その文面に Composer Plus が実行したことが書かれています。Tether にはありません。
296
+ - **トルコ語スキルパック** はサードパーティのスキルを入れます。ルールは Composer Plus ではなく作者の GitHub リポジトリから来ており、新しい版は私たちが確認しないまま、次の日次確認から使われます。確認でわかるのは、ファイルがそのコミットで GitHub が示すファイルと同じことだけで、ルールがよいことではありません。スキルを読み込むタイミングはモデルが決めます(名前で呼び出すこともできます)。ルールはトルコ語の文章にだけ当てはまります。ホスト側は、ブラウザーが最後に伝えた言語を使います。2 つのブラウザーが別の言語を使うと、新しいほうが優先されます。GitHub はログインなしで 1 時間に 60 回まで API を受け付けます。確認が拒否されたときはインストール済みのコピーを残し、理由を設定に表示します。
297
+ - **コードベースを整理** には、スキルの固定コピー(caldoai/skills、コミット f3cf477)が入っています。元のスキルの変更は、新しい Composer Plus のバージョンでのみ届きます。このスキルは多くのファイルを変更しうる長い目標を実行し、そのサブエージェントと確認は多くのトークンを使います。テストのない部分では、気づかないうちに動作を変えることがあります。専用のブランチで開始し、マージ前に差分を読んでください。プロジェクト、カスタムのスキルフォルダー、または `~/.dsh/skills` に同じ名前のスキルがあると、そちらに置き換わります。スイッチがオフの間、`/untangle-codebase` は普通のテキストとしてモデルに送られます。
282
298
  - **タスクボード** は、このウィンドウで dsh が一覧に表示するチャットを表示します。プロジェクトの外にあるチャットは **すべてのプロジェクト** にだけ表示され、チャットごとのブランチのフォルダー(`<project>/.worktrees/<name>`)はそのプロジェクトとして扱われます。カードの列はチャットのライブの状態なので、カードはドラッグできません。チャットはターンが終わると **完了** に移り(エラーや停止の後も同じです)、再び実行されると **作業中** に戻ります。緑の点は dsh 自身の完了の点で、dsh はこのウィンドウでだけこれを保持します。再読み込みの後、終わったチャットは緑の点なしで表示されます。**完了** には最新の 50 件のチャットが表示されます(**古いタスクを N 件表示** で残りを表示します)。**プロジェクトを検索** はプロジェクトを名前だけで探し、フォルダーのパスでは探しません。**過去 2 時間以内にアクティブ** は、プロジェクトのチャットがすべて 2 時間より古く、アイドル状態で既読のとき、そのプロジェクトを隠します。選んだプロジェクトは、ボードに表示されたままです。**新しいタスク** が覚えているのは、このウィンドウで最も新しい新規チャットだけです。最初のメッセージの前に別のチャットを開くと、そのチャットはあなたが書き込むまで **作業中** の一番上に **新しいタスク** として残りますが、自動でボードに戻るのは最も新しいチャットだけです。再読み込みの後、メッセージのない新しいチャットはボードに表示されません(dsh はそれを空の新しいセッションとして保持します)。タグは、タスクごとに、その最初のメッセージから 1 回のモデル呼び出しで作られます。タグが正しくないこともあり、ボードで開始しなかったチャットにはタグがありません。タイトルは dsh 自身のチャットのタイトルです(dsh のタイトルサービスが、チャットのモデルで作ります)。タイトルができるまで、カードには最初のメッセージの最初の行が表示されます。**×** と **すべてクリア** は、カードをボードから外すだけです。チャットは削除されません。**元に戻す** は、このウィンドウで 8 秒間だけ表示されます。その後は、**外したカード (N)** → **ボードに戻す** でカードを戻せます。再び実行されたチャットは、自動で戻ります。**すべてクリア** は、先に確認してから、表示しているプロジェクトの既読の終わったカードを外します(**すべてのプロジェクト** のときは、すべてのプロジェクトのカードです)。**古いタスクを N 件表示** の後ろにあるカードも外します。未読(緑)のカードは残ります。dsh は緑の点をこのウィンドウでだけ保持するので、再読み込みの後は、すべてクリアが、回答をまだ読んでいないカードを外すことがあります。この一覧はこの Mac に保存され、すべてのウィンドウと Tether で使われます。一覧が 5,000 件のチャットになると、最も古いチャットがボードに戻ります。**回答** が答えるのは、チャットの最新のリクエストだけです。そのリクエストに別の場所(別のウィンドウ、Tether、自動レビュー)で回答済みのとき、またはチャットが新しいことを尋ねているときは、パネルにそのことが表示され、何も送信しません。以前のバージョンには、コメントとエージェントのツールがあるタスク一覧がありました。これらはなくなり、古い `board.json` は表示されません。考え方と見た目は emanuele-em の [Kanzo](https://github.com/emanuele-em/kanzo)(AGPL-3.0)から来ています。Composer Plus はそのコードを使っていません。 `Cmd+Shift+K` は dsh のショートカットです。Linux のブラウザーでは既定のキーがありません(dsh のキーボードショートカットのページで設定してください)。また、ブラウザー拡張機能や別のアプリが先にこのキーを使う場合があります。カードが **完了** から外れるのは、dsh 自身の緑の点が消えたとき(チャットを開いたとき)です。ボードの裏で開いているチャットとして終わったチャットは、そのチャットが上にパネルのない状態で表示されたときに外れます。この既読の状態は dsh 自身の点と同じく、この dsh のウィンドウの中だけにあります。再読み込みの後や別のウィンドウでは、終わったチャットはすべて既読になり、**最近完了** に入ります。
299
+ - **アシスタント** のチャットは、この Mac のすべてのウィンドウで 1 つです。workspace-write 権限モードで動作します。ファイルを書き込むのは `~/Assistant` の中だけで、その外で実行するコマンドは先に確認を求めます。チャットを承認なしのモード(フルアクセス)に切り替えると、dsh は各承認を拒否するため、アシスタントはチャットへの送信、開始、停止、アーカイブができなくなります。承認カードが守るのは、この 6 つのツールだけです。そのモードのほかのチャットと同じく、アシスタントのシェルコマンドは、それでもネットワークにアクセスできます。dsh 0.2.0 と 0.2.1 では、dsh のスケジュールのツールはアシスタントのチャット自身のリマインダーだけを見て、ほかのチャットの自動化は見ません。dsh 0.2.2 からは、すべてのスケジュールされたタスクを一覧表示して変更します。chats_list は、アーカイブ済み、空、サブエージェントのチャットと、アシスタントのチャット自身を含みません。「あなたを待っている」は、実行中のチャットに未処理の承認、質問、計画のレビューがあることを意味します。chat_read が返すのは、ユーザーのメッセージとエージェントの返信(ツールの出力は含みません)で、最大 50 件のメッセージ、約 24,000 文字です。chat_archive は、まだ実行中のチャットや、有効なリマインダーがあるチャットを拒否します。モデルは、読んだテキストにだまされることがあります。承認カードが最後のチェックなので、**1回だけ許可** をクリックする前に内容を読んでください。
283
300
  - **停止後の新規メッセージ優先** は、チャットを停止した後(または失敗したターンの後、まだキューがあるチャットを開いたとき)にだけ働きます。ターンの実行中に送信したメッセージは、これまでどおりキューの末尾で待ちます。追い越すのは自分がキューに入れたメッセージだけです。キューに目標のラウンドや質問への回答が待っている場合は、dsh 自身の順序のままです。公開 API ではない dsh の一部(停止したターンがまだ終了処理中かどうか)を読み取ります。dsh の更新でその名前が変わった場合、メッセージはそのターンが終わった後にだけ先頭に移ります。サブエージェントのチャットは dsh 自身の順序のままです。
284
301
  - **プロジェクトメモリー** はチャットの最初のフォルダー(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 自身のメモリーを読み書きすることもありません。
285
302
  - **メモリーのバージョン履歴** は各メモリー(各プロジェクトとグローバルメモリー)の最新 50 バージョンを残し、それより古いものは削除します。1 つのバージョンは 1 件のメモではなく、そのプロジェクトのメモリー全体です。**復元** はそのバージョンのすべてのファイル(トピックを含む)を戻し、バージョンを開いた後にメモリーが変わっていれば拒否します。復元前のメモリーは新しいバージョンになるので、復元は元に戻せます。スイッチがオフの間は新しいバージョンを残さず、**復元** は拒否されます。残したバージョンは消えません。この機能より前のバージョンはありません。履歴はインストール後の最初の保存から始まります。
@@ -293,6 +310,8 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
293
310
  - **復元** は、dsh を閉じている間に、レスキューコンソールでだけ実行できます。復元は dsh のホーム全体を置き換えます。古いホームは、あなたが削除するまで、隣に `.dsh.pre-restore-<time>` として残ります。そのため、ディスクには両方の分の空きが必要です。チャットはプロジェクトのパスを保ちます。別のコンピュータでは、別のパスにあるプロジェクトは、もう一度追加するまで見つからないものとして表示されます。dsh のホームの外を指すシンボリックリンク(たとえば、別のフォルダーからリンクしたスキル)は、リンクとして戻ります。リンク先は、そのコンピュータ上に存在する必要があります。
294
311
  - **セッションログのチェック** は、各チャットの最新のログを、何が開けるかについての dsh 自身のルールで読み取ります。JSON ではない行や順序の乱れた行は、その後にターンの終わりがある場合にだけ損傷と数えます(そうでなければ、dsh はその行以降を除いてチャットを開くため、一覧には表示されません)。ログのイベントを、dsh 自身のイベントのルールと照らし合わせることはしません。そのため、正常と判定されたログでも、dsh のアップグレード後に開けないことがあります。修復では、バックアップからコピーを取り出します。そのバックアップ以降のメッセージは、そのチャットから失われます(損傷したファイルは隣に残ります)。この dsh で開いているチャットは、設定では修復されません。dsh がそのチャットを保持しているためです。
295
312
  - **自動バックアップ** は、dsh の実行中にだけ実行されます。dsh を閉じている間に予定時刻になったバックアップは、次の起動の約 45 秒後に実行されます。新しいバージョンのスナップショットは、アップデートの前ではなく、その起動の後に作成されます。
313
+ - **ウィンドウのサイズを記憶する** はデスクトップアプリでのみ動作します。起動のたびに dsh はまずウィンドウを 1280 × 820 で表示し、プラグインが読み込まれると保存したサイズに移ります。ページにはウィンドウ移動のイベントがないため、プラグインは 1 秒ごとにウィンドウを読み取ります。dsh を終了する直前 2 秒以内の変更は保存されません。サイズはコンピューターごとに、アプリ自身のストレージに保存されます。
314
+ - **利用数のカウント:** 数えるのは人ではなくコピーです。dsh のホーム 1 つが 1 コピーです。ユニークなコピーの数(`installed.txt`)には、このファイルがある最初のバージョンかそれより新しいバージョンに更新したコピーだけが入ります。古いバージョンのままのコピーは数えられません。`storages` フォルダーを削除したコピーは、もう一度数えられます。GitHub は、同じ IP アドレスから(たとえば 1 台の NAT ルーターの後ろにある複数のコンピューターから)約 10 分以内に来た要求を 1 回と数えることがあります。
296
315
  - 標準機能としてのサポートを、上流に要望しています:キューの `move` は [#773](https://github.com/deepseek-ai/deepseek-harness/discussions/773)、続行の状態は [#9269](https://github.com/deepseek-ai/deepseek-harness/discussions/9269) です。
297
316
 
298
317
  ## よくある質問
@@ -331,6 +350,8 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
331
350
 
332
351
  **すべてのチャットをカンバンボードで見て、そこから新しいチャットを開始できますか?** はい、**タスクボード**(既定でオン)で可能です。左サイドバーで開きます。各チャットは、**作業中**、**レビュー**(あなたを待っています)、**完了** のいずれかの列のカードになります。**新しいタスク** はプロジェクトで dsh の新しいチャットを開き、最初のメッセージを送るとボードに戻ります。オレンジのカードで **回答** をクリックすると、チャットを開かずに回答できます。**完了** の **すべてクリア** は、先に確認してから、読んだ終わったカードをボードから外します。**元に戻す** と **外したカード (N)** でカードを戻せます。チャットは dsh に残ります。
333
352
 
353
+ **リマインドしてくれて、ほかのチャットも管理してくれる個人アシスタントのチャットを使えますか?** はい、**アシスタント**(既定でオフ)で可能です。設定 → Composer Plus でオンにしてから、左サイドバーの **アシスタント** をクリックします。dsh のスケジュールされたタスクでリマインダーを設定し、Web を検索し、チャットを一覧表示して読みます。チャットへのメッセージ送信と、チャットの開始、停止、アーカイブは、あなたが承認した後にだけ行います。プロフィールは、そのプロジェクトメモリーのトピック「profil」に保存してください。
354
+
334
355
  **dsh-backup のように、dsh でチャットや設定をバックアップできますか?** はい。**設定 → Composer Plus → バックアップ → 今すぐバックアップ** を使います。同じ形式のアーカイブを同じフォルダー(`~/Desktop/dsh-backups`)に書き込むため、dsh-backup のアーカイブも表示され、復元できます。dsh-backup は削除してかまいません。定期的にバックアップするには、**自動バックアップ** をオンにしてください。
335
356
 
336
357
  **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 がなくても動作します。
@@ -363,6 +384,8 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
363
384
 
364
385
  **長い回答の一部だけに返信するには?** その部分を選択し、選択範囲の上の **引用** をクリックします(**返信で引用**、既定でオン)。その部分が `> …` の引用として入力欄に入るので、その下に返信を書きます。
365
386
 
387
+ **ファイルの特定の行をエージェントに示すには?** 右サイドバーでファイルを開き(**ワークスペースのファイル**)、行を選択して、選択範囲の上の **引用** をクリックします(**ファイルプレビューから引用**、既定でオン)。入力欄にパスと行番号(例:`src/login.js:2-3`)、そしてコードブロックとしての行が入ります。その下に質問を書きます。
388
+
366
389
  **エージェントの作業を止めずに何か質問できますか?** 質問を入力し、入力欄の **サイドチャットで質問** をクリックします(**サイドチャット**、既定でオン)。チャットの読み取り専用コピーが答え、その間もチャットは作業を続けます。サイドチャットで **持ち帰る** を押すと、回答がチャットの入力欄に入ります。
367
390
 
368
391
  **エージェントの差分で何を変えるべきか伝えるには?** **変更パネル** でファイルの差分を開き、行の **+** をクリックしてメモを書きます(**差分メモ**、既定でオン)。次に **入力欄に送る** をクリックすると、ファイル、行番号、行と一緒にメモが入力欄に入ります。
@@ -371,7 +394,7 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
371
394
 
372
395
  **iPhone をなくしました。その iPhone が Mac に接続できないようにするには?** サイドバーの左下にある **モバイル接続** をクリックし、その iPhone の横にある **Remove** をクリックします。その iPhone の鍵はすぐに使えなくなります。再び接続するには、Mac で承認する新しいペアリングが必要です。
373
396
 
374
- **もう一方の Mac のチャットを、この Mac で続けるには?** もう一方の Mac で **設定 → Composer Plus → リモートコンピュータ** と **ほかのコンピュータからこの Mac を開けるようにする** をオンにし、**ペアリングリンクを作成** をクリックして、リンクをコピーします(たとえば AirDrop やメモで、自分に送ります)。この Mac でも **リモートコンピュータ** をオンにし、チャットのタイトルの左で **コンピュータを追加…** を選び、リンクを貼り付けて **接続** をクリックします。次に、もう一方の Mac で **承認** をクリックします。以後は、同じメニューでそのコンピュータを選びます。
397
+ **もう一方の Mac のチャットを、この Mac で続けるには?** もう一方の Mac で **設定 → Composer Plus → リモートコンピュータ** と **ほかのコンピュータからこの Mac を開けるようにする** をオンにし、**ペアリングリンクを作成** をクリックして、リンクをコピーします(たとえば AirDrop やメモで、自分に送ります)。この Mac でも **リモートコンピュータ** をオンにし、左サイドバーの選択メニュー(ブランド名の右、**新しいセッション** の上)で **コンピュータを追加…** を選び、リンクを貼り付けて、**名前** を入力し、**接続** をクリックします。次に、もう一方の Mac で **承認** をクリックします。以後は、同じメニューでそのコンピュータを選びます。そのコンピュータがこのウインドウ全体に表示されます。戻るには、同じ場所で **この Mac に戻る** をクリックします。その間も、この Mac のチャットは動き続けます。
375
398
 
376
399
  **Face ID で Tether をロックできますか?** はい。Tether で「Settings → Privacy → Lock with Face ID」をオンにします。すると Tether は、開いたときと、アプリに戻ったときに Face ID(またはパスコード)を求めます。
377
400
 
@@ -403,6 +426,12 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
403
426
 
404
427
  **モデルに再度問い合わせずに、dsh が次のコマンドを実行できますか?** はい、**計画済みステップ**(既定ではオフ)を使います。設定 → Composer Plus でオンにしてください。モデルは次のコマンドを条件付きで計画できるようになり(例:「ビルドが通ったらテストを実行」)、結果が条件を満たすと、Composer Plus がモデルを呼び出さずにそのステップを実行します。承認とサンドボックスはそのままです。
405
428
 
429
+ **トルコ語スキルはどこから来ていて、削除できますか?** GitHub の [yucezerey/turkish-anti-ai-skill](https://github.com/yucezerey/turkish-anti-ai-skill)(MIT)から来ています。Composer Plus は **アプリケーションの言語** が Türkçe のときだけインストールし、Markdown ファイルだけを残し、スクリプトは実行しません。削除するには、設定 → Composer Plus で **トルコ語スキルパック** をオフにします。スキルとダウンロードしたコピーはすぐに消えます。
430
+
431
+ **Composer Plus のバグを報告したり、機能をリクエストしたりするには?** 設定 → Composer Plus → **issue を報告…**(またはチャットの **…** メニュー → **Composer Plus の issue を報告…**)を開きます。種類を選び、自分の言語で内容を書いて、**下書きを書く** をクリックします。英語の下書きを確認してから、**issue を作成** をクリックします。
432
+
433
+ **散らかったコードベースをエージェントに整理させるには?** チャットで `/untangle-codebase` と入力します(**コードベースを整理**、既定でオン)。必要なら範囲を続けて書きます(例:`/untangle-codebase src/api`)。エージェントはまずコピー、隠れた結合、不要なラッパー、使われていないコード、特別処理を一覧にし、目標として修正してから、サブエージェントでもう一度確認します。作業が専用のブランチに残るように、**チャットごとのブランチ** のチャットで開始してください。
434
+
406
435
  **デスクトップアプリで使えますか?** はい。設定 → プラグイン → **プラグインを追加** → `dsh-composer-plus` でインストールします。dsh 0.2.0-rc.2(デスクトップと Web)と 0.2.1-rc.2(Web)でテストしています。
407
436
 
408
437
  ## 開発
@@ -422,6 +451,8 @@ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-status-order.mjs /path/t
422
451
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-agentbox-ideas.mjs /path/to/dsh/lib/bin.js
423
452
  # Reject with note, Secret input, Quote in reply, Side chat and Diff notes (fake model + a test-only approval gate): the button on dsh's card, the note after the rejection in the next request, Esc; the secret card, Save, the value in no request, file or page, Decline, Stop; a selected part of an answer → Quote → the sent message; a side question while the chat waits on a card (read-only, no queued message in it), Bring back; notes on a diff line and range → Send to composer → the sent message; switch off + their thumbnails
424
453
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-t3code-ideas.mjs /path/to/dsh/lib/bin.js
454
+ # Quote from file preview (fake model): lines of a code, text, Markdown and PDF file in the right sidebar → Quote → the path, the line numbers and the lines in the sent message; no button for the path header; switch off + its thumbnail
455
+ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-preview-quote.mjs /path/to/dsh/lib/bin.js
425
456
  # every Settings feature row shows a loading screenshot and a ? link to its README row
426
457
  PLAYWRIGHT=/path/to/playwright node test/browser-settings-shots.mjs /path/to/dsh/lib/bin.js
427
458
  # What's new after an update: the release notes show once (also after an install through another path), Esc and Close close them; Settings → What’s new in this version opens them again
@@ -473,6 +504,8 @@ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-stop-send.mjs /pat
473
504
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-edit.mjs /path/to/dsh/lib/bin.js
474
505
  # Task board: New task opens dsh's new chat and comes back after the first message, AI tags, live columns, Answer on the board, × with Undo, Clear all with its question (unread cards stay), Removed and Put back (kept after a restart), the switch
475
506
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-task-board.mjs /path/to/dsh/lib/bin.js
507
+ # Assistant: off by default, sidebar row under Task board, one chat in ~/Assistant (workspace-write), a reminder that runs the chat, chats_list, chat_send after its approval card, an injected chat_send rejected, no tools in other chats, automations of other chats (dsh 0.2.2+), switch off
508
+ SHOT=1 CHECK_DELAY=20 PLAYWRIGHT=/path/to/playwright node test/browser-assistant.mjs /path/to/dsh/lib/bin.js
476
509
  ```
477
510
 
478
511
  ```sh
@@ -494,3 +527,5 @@ PLAYWRIGHT=/path/to/playwright node test/browser-language.mjs /path/to/dsh/lib/b
494
527
  ## License
495
528
 
496
529
  MIT
530
+
531
+ `assets/skills/untangle-codebase/SKILL.md` は [caldoai/skills](https://github.com/caldoai/skills) の `untangle-codebase` スキルです。© 2026 Maze、MIT ライセンス([ライセンス](assets/skills/untangle-codebase/LICENSE))。