dsh-composer-plus 1.18.0 → 1.19.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** でオフにしてください。**入力中に補完**(既定ではオフ)は、オンにした後、入力が止まるたびに、この機能で選んだモデル(既定では予測のモデル)を呼び出します。**プロンプトを改善** は、魔法の杖をクリックしたときだけモデルを呼び出します。**目標チェック**(既定ではオン)は、自動ラウンドでエージェントが `/goal` を完了にするたびに、モデルを 1 回呼び出します。**モバイル接続**(既定ではオフ)は、オンにした後だけ、ローカルネットワークまたは tailnet からの iPhone の接続を受け付けます。
17
+ 非公式のコミュニティプラグインです。ネットワーク通信は、アップデートの確認(GitHub のリリースと npm レジストリ)だけです。起動時のこの通信を止めるには、**自動アップデート** をオフにしてください。**機能のアイデア** は、**機能を提案** をクリックしたときだけ、チャットで使っているモデルを呼び出します。**次のメッセージの予測**(既定ではオン)は、ターンが終わるたびに、設定で選んだモデル(別のモデルを選ばない限り dsh の既定のモデル)を、クリックなしで 1 回呼び出します。この呼び出しを止めるには、**設定 → Composer Plus** でオフにしてください。**入力中に補完**(既定ではオフ)は、オンにした後、入力が止まるたびに、この機能で選んだモデル(既定では予測のモデル)を呼び出します。**プロンプトを改善** は、魔法の杖をクリックしたときだけモデルを呼び出します。**タスクボード** は、ボードで開始したタスクごとに、タグを付けるために新しいチャットのモデルを 1 回呼び出します。**目標チェック**(既定ではオン)は、自動ラウンドでエージェントが `/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.18.0`。
32
+ > dsh の pnpm は、公開から 24 時間たっていないバージョンをスキップします。リリース直後は、バージョンを指定してください:`dsh-composer-plus@1.19.0`。
33
33
 
34
34
  ## 機能
35
35
 
@@ -71,11 +71,11 @@ dsh plugin --profile web add dsh-composer-plus
71
71
  | **計画済みステップ** | <a id="feature-plannedsteps"></a>既定ではオフです。**設定 → Composer Plus** でオンにしてください。エージェントはツール `plan_next_steps` を使えるようになります。コマンドと同じメッセージで、次に実行するコマンドを正確な引数と条件付きで計画できます(例:「ビルドが通ったら `npm test` を実行」)。結果が条件を満たすと、Composer Plus がモデルを呼び出さずに次のステップを自分で実行するため、長いチャットのトークン消費が減ります。ステップはチャットに「Composer Plus · Planned steps: ran `test` … without a model call」という短い行として表示され、その後にツール呼び出しと結果が続きます。対象は `bash`、`read`、`grep`、`glob` のステップのみで、承認、サンドボックス、保護されたファイルは各ステップにいつもどおり適用されます。条件を満たさないとき、2 つのステップが同時に実行可能なとき、最後のステップの後、そしてあなたがメッセージを送ったときは、モデルが再び応答します。この考え方は HarnessMM(arXiv 2610.32813)に基づきます。 | <a href="assets/features/plannedSteps.webp"><img src="assets/features/plannedSteps.webp" width="160" alt="スクリーンショット: 計画済みステップ"></a> |
72
72
  | **保護されたファイル** | <a id="feature-protectedfiles"></a>既定でオンです。エージェント自身のファイルツールは、指定したパターンに一致するファイルを読むことも変更することもできません。**読み取りと書き込み** のパターンでは、ファイルに対する `read`、`read_image`、`grep` が拒否され、どちらの種類でも `write`、`edit`、`str_replace_editor` が拒否されます。エージェントは理由を読み、あなたに確認するよう指示されます。既定のパターンは `.env*`、`*.pem`、`*.key` です。設定 → Composer Plus → **保護されたファイル**:パターンを追加し(例:`published/**` または `config/*.yml`)、種類をクリックして **読み取りと書き込み** と **書き込みのみ** を切り替え、✕ で削除するか、**既定値を使う** をクリックします。`/` を含まないパターンは、どのフォルダーのファイル名にも一致します。これはガードレールであり、サンドボックスではありません。シェルコマンド(`cat .env`)、スクリプト、MCP ツールからはファイルに届くことがあります(「制限事項」を参照)。 | <a href="assets/features/protectedFiles.webp"><img src="assets/features/protectedFiles.webp" width="160" alt="スクリーンショット: 保護されたファイル"></a> |
73
73
  | **ブロックされたコマンド** | <a id="feature-blockedcommands"></a>既定でオンで、リストは空です。エージェントのシェルコマンド(`bash`、`pwsh`)は、指定したルールに一致するコマンドを実行できません。**ブロック** のルールは呼び出しを拒否し(エージェントは理由を読み、あなたに確認するよう指示されます)、**先に確認** のルールは dsh の承認カードを表示します。コマンドは、あなたが許可したときだけ実行されます。設定 → Composer Plus → **ブロックされたコマンド**:ルールを入力し(例:`npm publish`、`git push --force` または `ssh *192.168.2.19`)、種類をクリックして **ブロック** と **先に確認** を切り替えてから、**追加** をクリックします。ルールの種類をクリックすると変更でき、✕ で削除できます。ルールは、コマンド名と、その後にこの順で続く必要がある単語です。`*` は任意のテキストに一致します。`&&`、`;`、`\|` の後、`$(…)`、`bash -c "…"`、`eval` の中、`sudo` や `env` の後にあるコマンドも見つけます。これはガードレールであり、サンドボックスではありません。変数(`$CMD`)、スクリプトファイル、ほかのプログラムからはコマンドを実行できることがあります(「制限事項」を参照)。 | <a href="assets/features/blockedCommands.webp"><img src="assets/features/blockedCommands.webp" width="160" alt="スクリーンショット: ブロックされたコマンド"></a> |
74
- | **タスクボード** | <a id="feature-taskboard"></a>左サイドバー → **タスクボード**。あなたとエージェントが使う、dsh のプロジェクトのカンバンボードです。列は **未着手**、**作業中**、**レビュー**、**完了** です(**バックログ** もあります。下記を参照)。左でプロジェクトか **すべてのプロジェクト** を選びます。**新しいタスク**(または `n`)で新しいカードが開きます。タイトルを入力して `Enter` を押します。カードは別の列や 2 枚のカードの間にドラッグできます。カードをクリックすると、**ステータス**、**タグ**、**手動**(エージェントはスキップします)、説明(Markdown)、コメントを確認して変更できます。`/` ですべてのプロジェクトを検索し、`h` で手動タスクだけを表示します。エクスポートボタンでボードを Markdown または JSON として保存します。エージェントはボードのツールを使えます。チャットで「ボードから次のタスクを取って」と頼むと、エージェントは **未着手** の一番上のカードを **作業中** に移し、行ったことをコメントして **レビュー** に移します。**完了** に移すのはあなたです。未完了のタスクがあるプロジェクトでは、各チャットがこのルールを自動で受け取ります。設定 → Composer Plus → **タスクボード** に **バックログ** 列のスイッチがあります。この列のカードはエージェントがあなたに任せます。 | <a href="assets/features/taskBoard.webp"><img src="assets/features/taskBoard.webp" width="160" alt="スクリーンショット: タスクボード"></a> |
74
+ | **タスクボード** | <a id="feature-taskboard"></a>左サイドバー → **タスクボード**。サイドバーと同じライブの状態を表示する、dsh のチャットのカンバンボードです。承認、回答、計画のレビューを待っているチャットはオレンジの点付きで **レビュー** に、実行中のチャットは **作業中** に、終わったチャットは **完了**(開くまで緑)に入ります。左でプロジェクトか **すべてのプロジェクト** を選びます。チャットごとのブランチのフォルダーは、そのプロジェクトとして扱われます。**新しいタスク**(または `n`)に必要なのはプロンプトだけです。`Enter` でプロジェクトに新しいチャットを開始すると、カードが **未着手** に表示され、dsh がチャットに名前を付け、チャットのモデルが最大 3 個のタグを付けます。カードをクリックすると、そのチャットが開きます。オレンジのカードで **回答** をクリックすると、ボード上で回答できます。承認のリクエストには **拒否** か **1回だけ許可**、計画には **承認** か **変更をリクエスト**、質問には選択肢か自分のテキストで答えます。**完了を非表示** は、このデバイスで **完了** を隠します。 | <a href="assets/features/taskBoard.webp"><img src="assets/features/taskBoard.webp" width="160" alt="スクリーンショット: タスクボード"></a> |
75
75
  | **プロジェクトメモリー** | <a id="feature-projectmemory"></a>既定ではオフです。**設定 → Composer Plus** でオンにしてください。プロジェクトのフォルダーごとに専用のメモリーがあり、そのプロジェクトの後のチャットが読みます。DS Bot が Bot ごとにメモリーを持つのと同じです。ターンが終わるたびに、チャットのモデルを 1 回呼び出して新しいメッセージ(ロールバックしたものは除きます)を読み、長く続く好み、決定、事実を短いメモとして保存し、古いメモを変更または削除します。エージェントも自分でメモを保存、削除、検索できます(`memory_remember`、`memory_forget`、`memory_recall`)。メモはグローバルにもでき、その場合はすべてのプロジェクトが読みます。新しいチャットはシステムプロンプトでメモを受け取ります。後で保存したメモは次のチャットから表示されます。ファイルは dsh のホームフォルダーにある Markdown(`storages/dsh-composer-plus/memory/`)で、プロジェクトのフォルダーには保存されません。 同じ行の **メモリーを開く** は、保存されたすべてのメモをプロジェクトごと(とグローバルメモリー)にまとめて表示し、絞り込みもできます。変更する内容を自分の言葉で書き(例:「yarn から pnpm に変えた」)、**変更をプレビュー** を押します。dsh の既定のモデルが変更を提案し、**適用** を押したときだけ保存されます。Tether では: チャットのタイトルメニュー → Project memory。 | <a href="assets/features/projectMemory.webp"><img src="assets/features/projectMemory.webp" width="160" alt="スクリーンショット: プロジェクトメモリー"></a> |
76
76
  | **このチャットで許可** | <a id="feature-allowforchat"></a>自動レビューで確認を求められると、承認カードに **このチャットで許可** が表示されます。これを選ぶと、同じチャットの同じツールが、引数にかかわらず、時間制限が終わるまで許可されます(既定は 1 時間。**設定 → Composer Plus → このチャットで許可** で選べます)。その後、エージェントが再び確認します。ヘッダーのチップに許可の一覧が終了時刻とともに表示され、そこから取り消せます。許可は再起動後も有効です。 | <a href="assets/features/allowForChat.webp"><img src="assets/features/allowForChat.webp" width="160" alt="スクリーンショット: このチャットで許可"></a> |
77
77
  | **プロジェクトの状態** | <a id="feature-projectstatus"></a>サイドバーのプロジェクトの行に、そのチャットと同じ実行中/待機中/完了のマーカーが表示されます。そのため、折りたたんだプロジェクトでも、中のチャットが作業中か、あなたの操作を待っているかがわかります。最初に表示されるのはあなたの操作を待っているチャットで、次がまだ開いていない完了済みのチャット(緑色の点。別のチャットがまだ実行中でも表示されます)、その次が実行中のマーカーです。ポインターを合わせると詳細が表示されます。**ワークスペースのツリー** では、親フォルダーの行にも、中にある各プロジェクト(たとえば `.worktrees/` 内の各ブランチのフォルダー)のチャットの状態が表示されます。フォルダーを折りたたんでいるときも同じです。 | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="スクリーンショット: プロジェクトの状態"></a> |
78
- | **チャット行の Git ブランチ** | <a id="feature-sessionbranch"></a>サイドバーの各チャット行に、チャットの最後のターンの時点でチャットのプロジェクトフォルダーがあった git ブランチが、小さな灰色のラベルで表示されます(例:`main` や `feature/login`。detached HEAD の場合はブランチがないため、ラベルは表示されません)。同じプロジェクトで別のブランチにある 2 つのチャットが同じに見えることはなくなり、間違ったブランチでチャットを続けようとしているときにすぐ気づけます。ラベルにポインターを合わせると完全な名前が表示されます。ホスト側は、ターンの開始時と終了時にブランチを読み取ります(`git branch --show-current`、読み取り専用)。この機能をインストールしてからターンのないチャットや、git リポジトリではないフォルダーには、ラベルは表示されません。チャットの上のプロジェクト行の名前がブランチと同じ場合(「チャットごとのブランチ」のフォルダーなど)、チャット行にラベルは表示されませんが、「1つのリスト」では表示されます。 | <a href="assets/features/sessionBranch.webp"><img src="assets/features/sessionBranch.webp" width="160" alt="スクリーンショット: チャット行の Git ブランチ"></a> |
78
+ | **チャット行の Git ブランチ** | <a id="feature-sessionbranch"></a>サイドバーの「1つのリスト」表示では、各チャット行に、チャットの最後のターンの時点でチャットのプロジェクトフォルダーがあった git ブランチが、小さな灰色のラベルで表示されます(例:`main` や `feature/login`。detached HEAD の場合はブランチがないため、ラベルは表示されません)。同じプロジェクトで別のブランチにある 2 つのチャットが同じに見えることはなくなり、間違ったブランチでチャットを続けようとしているときにすぐ気づけます。ラベルにポインターを合わせると完全な名前が表示されます。ホスト側は、ターンの開始時と終了時にブランチを読み取ります(`git branch --show-current`、読み取り専用)。この機能をインストールしてからターンのないチャットや、git リポジトリではないフォルダーには、ラベルは表示されません。「ワークスペース」と「ワークスペースのツリー」では、チャットがすでにプロジェクト行の下にあるため、どのチャット行にもラベルは表示されません。 | <a href="assets/features/sessionBranch.webp"><img src="assets/features/sessionBranch.webp" width="160" alt="スクリーンショット: チャット行の Git ブランチ"></a> |
79
79
  | **すべて既読にする** | <a id="feature-markprojectread"></a>サイドバーで、プロジェクトの **…** ボタン → **すべて既読にする** をクリックします。そのプロジェクトのすべてのチャットから、緑色の未読の点が一度に消えます。ほかのプロジェクトの点はそのまま残ります。プロジェクトに未読のチャットがない場合、この項目はグレー表示になります(**未読のチャットはありません**)。 | <a href="assets/features/markProjectRead.webp"><img src="assets/features/markProjectRead.webp" width="160" alt="スクリーンショット: すべて既読にする"></a> |
80
80
  | **アクティブなプロジェクトを先頭に表示** | <a id="feature-activeprojectsfirst"></a>チャットが実行を始めたり、あなたの操作が必要になったりすると、そのプロジェクトがサイドバーの先頭に移動します。移動には dsh 標準の行のアニメーション(ドラッグして移動したときと同じ動き)を使います。完了したプロジェクトはその場所に残ります。いつもどおり、ドラッグして好きな場所に移動できます。移動は dsh のプロジェクトの順序に保存されるため、この機能をオフにしても現在の順序は維持されます。 | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="スクリーンショット: アクティブなプロジェクトを先頭に表示"></a> |
81
81
  | **最近のプロジェクトのフィルター** | <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> |
@@ -85,7 +85,7 @@ dsh plugin --profile web add dsh-composer-plus
85
85
  | **操作がないときに待機中のチャットを開く** | <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> |
86
86
  | **アプリケーションの言語** | <a id="feature-language"></a>設定 → Composer Plus → **アプリケーションの言語** で、dsh のインターフェース全体を Türkçe、Español、Português (Brasil)、Français、Deutsch、Русский、日本語、한국어、Bahasa Indonesia、Tiếng Việt、हिन्दी のいずれかに切り替えます(下記を参照)。 | <a href="assets/features/language.webp"><img src="assets/features/language.webp" width="160" alt="スクリーンショット: アプリケーションの言語"></a> |
87
87
  | **モバイル接続(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> |
88
- | **自動アップデート** | <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> |
88
+ | **自動アップデート** | <a id="feature-autoupdate"></a>dsh の起動時に、プラグインは [GitHub の最新リリース](https://github.com/furkancak1r/dsh-composer-plus/releases/latest) を確認します。そのリリースのほうが新しく、すでに npm にある場合は、dsh 標準のプラグインマネージャー(設定 → プラグインと同じ経路)でそのバージョンをインストールし、通知します。読み込むには、dsh を再起動してください。**設定 → Composer Plus → Composer Plus のアップデート** にはバージョンが表示され、**アップデートを確認** / **今すぐアップデート** のボタンがあります。新しいバージョンで dsh を初めて起動すると、**Composer Plus N の新機能** ウィンドウにそのバージョンのリリースノートが **アプリケーションの言語** で選んだ言語で 1 回だけ表示されます(ノートは新しいバージョンに含まれていて、追加の通信はありません。その言語のノートがない場合は英語のノートが表示されます)。**閉じる** または `Esc` で閉じます。 | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.webp" width="160" alt="スクリーンショット: 自動アップデート"></a> |
89
89
  | **バックアップ** | <a id="feature-backup"></a>設定 → Composer Plus → **バックアップ** → **今すぐバックアップ** で、dsh のホーム全体(チャット、設定、プラグイン、MCP、スキル)を、チェックサム付きで `~/Desktop/dsh-backups` 内の 1 つのアーカイブに書き込みます。アーカイブ内のシークレットはマスクされます。認証情報ファイル、鍵ファイル(`.pem`、`.key`)、yml 設定の token、secret、password の値は、このコンピュータ上のフォルダーの `vault` にだけ残ります。`cache/`、`dsh-runtimes/`、`node_modules` はアーカイブに入りません(dsh が作り直します)。一覧の各バックアップには、**チェック**(全体を読み取ります)、**別のコンピュータ用**(新しいコンピュータにコピーするフォルダーで、レスキューコンソールを含みます)、**削除** があります。同じフォルダーにある dsh-backup のアーカイブも表示され、使えます。復元するには、dsh を終了してレスキューコンソールを使います。 | <a href="assets/features/backup.webp"><img src="assets/features/backup.webp" width="160" alt="スクリーンショット: バックアップ"></a> |
90
90
  | **自動バックアップ** | <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> |
91
91
  | **セッションログのチェック** | <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> |
@@ -169,7 +169,7 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
169
169
  - **目標チェック:** 自動ラウンドでエージェントが `/goal` を完了にしたとき(または **今すぐ実行** をクリックしたとき)だけ実行されます。ホスト側は、テストコマンドをチャットのフォルダーで、チャットのサンドボックスモードのもとで実行します(dsh 自身の `bash` ツールと同じで、ファイルアクセスのポリシーも同じです。そのサンドボックスを開始できないときは、テストを実行せず、チェックは失敗します)。コマンドを見つけるために読むのは `package.json`、`Makefile`、`Cargo.toml`、`go.mod`、`pyproject.toml`、`pytest.ini` だけで、フォルダー内の通常のファイルとしてだけ読みます(フォルダーの外を指すシンボリックリンクや FIFO は読みません)。次に、ツールなしの 1 回のリクエストとして、**目標チェック** で選んだモデル(既定ではチャット自身のモデル)に次の内容を送ります。目標、目標の開始以降のチャット(あなたのメッセージ、エージェントの返信、1,000 文字に切り詰めたツール呼び出し、各ツール結果の最後の 2,000 文字。推論とロールバックで取り消したステップは含みません。最大で約 60,000 文字、最新の部分)、`git status --short`、テスト出力の末尾です。ツールの出力にはエージェントが読んだ内容が含まれることがあるため、このリクエストには、チャットそのものと同じように、あなたのファイルの一部が含まれることがあります。チャットにもプロジェクトにも何も書き込みません。テストコマンド、制限、最後の結果(出力の末尾を含む)、モデルの選択は `$DSH_HOME/storages/dsh-composer-plus/goal-check.json`(所有者のみのファイル、最新の 500 チャット)に保存されます。
170
170
  - **新しいチャットで続ける:** クリックするまで、何も実行されません。クリックすると、ホスト側はチャット(目標チェックと同じ読み方です。推論とロールバックで取り消したステップは含みません)をチャット自身のモデルに送り、引き継ぎメモを表示します。新しいチャットを作るのは **新しいチャットを開始** だけです。プロジェクトには何も書き込みません。
171
171
  - **コンテキストの内訳:** ホスト側でチャットのログだけを読みます。モデル呼び出しはせず、プロジェクトのファイルも読みません。
172
- - **タスクボード:** ボード(タスクのタイトル、説明、タグ、コメント、プロジェクトのフォルダーのパスとその短い ID)は `$DSH_HOME/storages/dsh-composer-plus/board.json`(所有者のみのファイル)にあります。スイッチはその隣の `board-switch.json` にあります。データがマシンの外に出ることはなく、プロジェクトのフォルダーには何も書き込みません。ボードのツールはボードに書いた内容をエージェントに渡すため、エージェントがタスクを読むと、その本文がチャットのモデルに届きます。壊れたボードのファイルは `board.json.broken-<time>` として残り、ボードは空の状態から始まります。
172
+ - **タスクボード:** ボードは、このウィンドウにある dsh 自身の一覧から、dsh 自身のチャットを表示します。独自のチャットデータは追加しません。タスクを開始すると、ホスト側は選んだプロジェクトに新しいチャットを作り、あなたがそこで入力したのと同じように、プロンプトを最初のメッセージとして送ります。そのため、承認、サンドボックス、チャットのモデルはいつもどおり適用されます。次に、最大 3 個のタグを得るために、プロンプト(最初の 4,000 文字だけで、ほかには何も送りません)を、ツールなしのもう 1 回のリクエストでそのチャットのモデルに送ります。各タスクのプロンプト、タグ、開始時刻は `$DSH_HOME/storages/dsh-composer-plus/board-chats.json`(所有者のみのファイル、最新の 2,000 件)に保存されます。スイッチはその隣の `board-switch.json` にあります。プロジェクトのフォルダーには何も書き込みません。**回答** は、チャット自身のカードと同じ方法で、dsh 自身の保留中のリクエストに回答を送ります。以前のバージョンの古いタスク一覧(`board.json`)はディスク上にそのまま残り、読み込まれません。
173
173
  - **保護されたファイル:** リストとスイッチは `$DSH_HOME/storages/dsh-composer-plus/protected-files.json`(所有者のみのファイル)にあります。チェックが読むのは、各ファイルツール呼び出しのパス(とその実際のパス)だけで、ファイルそのものは読みません。
174
174
  - **ブロックされたコマンド:** ルールとスイッチは `$DSH_HOME/storages/dsh-composer-plus/blocked-commands.json`(所有者のみのファイル)にあります。チェックが読むのは、各 `bash` と `pwsh` 呼び出しのコマンドテキストだけです。何も実行せず、何も送信しません。
175
175
  - **プロジェクトメモリー:** オンにするまではオフです。オンの間は、最上位のチャットのターンが終わるたびに、Host 側が、前回の確認以降のそのチャット自身の新しいメッセージ(あなたのメッセージとエージェントのテキスト返信。ツールの出力、推論、隠しコンテキスト、ロールバックしたメッセージは含みません。分岐したチャットでは、親チャットからのコピーは除きます。最大約 16,000 文字)と保存済みのメモを、ツールなしの 1 回のリクエストとしてチャット自身のモデルに送ります。メモは `$DSH_HOME/storages/dsh-composer-plus/memory/` にある Markdown ファイル(所有者だけが読み書きできます)です。プロジェクトのフォルダーごとの `projects/<id>/`(`<id>` はフォルダーの実際のパスのハッシュで、`project.json` にフォルダーを記録します)、`global/`、`journal.jsonl`(各変更と、変更前後の行)、`reviewed.json`(各チャットをどこまで読んだか)があります。プロジェクトのフォルダーには何も書き込みません。キー、トークン、パスワード、ID 番号のように見えるメモは拒否します。プロジェクトのメモはそのフォルダーの新しいチャットのシステムプロンプトに入るので、そのチャットのリクエストごとにモデルに送られます。スイッチは同じ場所の `memory.json` にあります。**メモリーを開く** は、**変更をプレビュー** を押すまで何も送りません。押すと、表示しているメモとあなたの文章を、ツールなしの 1 回のリクエストとして dsh の既定のモデルに送ります。変更は **適用** を押したときだけ書き込まれ、ジャーナルには `editor` と記録されます。Tether も同じルートでメモを読み、変更します。
@@ -191,10 +191,10 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
191
191
  - **再起動後にチャットが続行しなかった:** 原因は次のいずれかです。dsh の終了時に、再起動後に再開がオフだった。そのターンを自分で停止した。ターンがすでに終わっていた(完了または失敗)。チャットがアーカイブされていた。20 件を超えるチャットが実行中だった(最新の 20 件が続行します)。
192
192
  - **再起動後にキューが空になっている:** キューを空にするのは dsh 自身の終了処理です。再起動後に再開は、続行するチャットでだけキューを元に戻します。ほかのチャットでは、メッセージをもう一度送信してください。終了の直前に削除したメッセージが戻ることがあります。その場合はもう一度削除してください。
193
193
  - **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 を起動してください。
194
- - **チャット行にブランチのラベルがない:** 原因は次のいずれかです。このバージョンをインストールしてから、そのチャットにターンがない。フォルダーが git リポジトリではない。**チャット行の Git ブランチ** がオフになっている。アップデートの後は、dsh を再起動してください(ブランチはホスト側が記録します)。
194
+ - **チャット行にブランチのラベルがない:** 原因は次のいずれかです。サイドバーが「1つのリスト」表示ではない(「ワークスペース」と「ワークスペースのツリー」では、どのチャット行にもラベルは表示されません)。このバージョンをインストールしてから、そのチャットにターンがない。フォルダーが git リポジトリではない。**チャット行の Git ブランチ** がオフになっている。アップデートの後は、dsh を再起動してください(ブランチはホスト側が記録します)。
195
195
  - **目標チェックで、テストが終了コード 127 または「not found」で終了したと表示される:** Finder や Dock から起動した dsh は、ターミナルより PATH が短いことがあるため、`npm`、`pnpm`、`cargo` が見つかりません。ターミナルから dsh を起動するか、**目標チェック** → **編集** で、フルパスを使った独自のテストコマンドを設定してください。**今すぐ実行** を使うと、すぐに結果が表示されます。
196
196
  - **目標が閉じず、エージェントが作業を続ける:** **目標チェック** が、失敗したテストまたは足りない作業を見つけました。目標の下の行に理由が表示されます(詳細は、結果にポインターを合わせると表示されます)。原因またはテストコマンドを直すか、`/goal` または目標バーで目標を自分で完了してください(その完了はチェックされません)。
197
- - **リリース直後にインストールが失敗する:** バージョンを指定してください(`dsh-composer-plus@1.18.0`)。上のインストールの注記を参照してください。
197
+ - **リリース直後にインストールが失敗する:** バージョンを指定してください(`dsh-composer-plus@1.19.0`)。上のインストールの注記を参照してください。
198
198
  - **今すぐバックアップ で「別のバックアップ操作を実行中です」と表示される:** 別の dsh のウィンドウ、またはレスキューコンソールで操作が実行中です(どちらも、バックアップフォルダーのロックファイル `.composer-plus.lock` を共有します)。完了するまで待ってください。実行中の操作がない場合は、次のクリックで、終了したプロセスのロックを引き継ぎます。
199
199
  - **レスキューコンソールで「dsh is running」と表示される:** まず dsh を終了してください。dsh が本当に閉じている場合、メッセージに示されたファイルはクラッシュで残ったものです。そのファイルを削除して、もう一度試してください。
200
200
  - **復元の後に dsh が起動しない、またはプラグインが見つからない:** プロファイルのプラグインパッケージを、もう一度インストールする必要があります。レスキューコンソールが、復元の後にこれを提案します。または、コンソールが一覧表示する `$DSH_HOME/profiles/` の下の各フォルダーで `pnpm install` を実行してください。vault に入っていなかったシークレット(別のコンピュータ)は、もう一度入力する必要があります。コンソールがそれらを一覧表示します。
@@ -214,6 +214,7 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
214
214
  - **チャットを削除** には、dsh のアーカイブ機能が必要です(dsh 0.2.0 以降)。15 秒以内に停止しないチャット(またはそのサブエージェントのチャット)や、別の dsh が保持しているチャットは、アーカイブされたままになり、何も移動しません。macOS 以外のシステムでは、ゴミ箱のフォルダーがチャットの履歴と同じディスク上にある必要があります。開いているチャットを削除すると、dsh を再起動するまで、そのチャットはアーカイブされた非表示の状態で dsh のメモリに残ります。ゴミ箱は自分で空にしてください。dsh は空にしません。
215
215
  - dsh のキューには `move` 操作がないため、プラグインのホスト側が、dsh のキューの中でメッセージそのものを移動します(1 回の変更で、同じメッセージのままです)。画像やファイルを含むメッセージも移動できます。移動できるのは自分のメッセージだけです。キュー内の目標のラウンドや質問への回答は、その位置から動きません。ドラッグ中にメッセージの送信が始まった場合は、何も移動せず、そのことを知らせる通知が表示されます。
216
216
  - 新しいバージョンが dsh の設定を何も変更しない場合、dsh 0.2.1 はアップデートをすぐに読み込みます。それ以外の場合と dsh 0.2.0 では、読み込むには dsh を再起動してください。プラグインが dsh を自動で再起動することはありません。dsh のプラグインマネージャーがない Web/CLI プロファイルでは、新しいバージョンがあることを知らせるだけです。
217
+ - **Composer Plus N の新機能** は、**アプリケーションの言語** の言語でノートを表示します。別の地域を指定した UI 言語には、その基本言語のノートが表示されます(`en-GB` には英語のノート、`zh-TW` には `zh` の中国語のノート)。ノートがない言語(別の言語パックが追加した言語や、`pt-BR` ではない `pt-PT`)では、英語のノートが表示されます。ノートは新しいバージョンに含まれています。実行中のコピーに読み取れるノートファイル(`release-notes.json`)がない場合は、GitHub の英語のノートが表示されます。
217
218
  - **このチャットで許可** は、許可した時点から時間制限を数えます。新しい時間制限は、有効な許可にすぐに適用されます。そのため、短い時間制限にすると、許可がすぐに終わることがあります。バージョン 1.12 以前の許可には時刻がありません。更新後、エージェントはそのツールについてもう一度だけ確認します。
218
219
  - **入力欄のフォーカスを維持** がフォーカスを戻すのは、`/` コマンドまたはスキルの後だけです。dsh がコマンドを処理する間、入力欄は数ミリ秒だけ読み取り専用になります。そのため、その間に押したキーは失われます。dsh の `/` メニューがまだ開いている場合、`Enter` は強調表示された行を選び、送信はしません。
219
220
  - **質問カードをウィンドウに合わせる**は dsh の質問カードだけを変更し、計画レビューのカードは変更しません。カードは dsh のマークアップ(`data-question-key`、`data-question-scroll`)で見つけます。dsh の更新でこのマークアップが変わると、カードは dsh が描くとおりに表示されます。カードの高さはチャットではなくウィンドウに従います。狭いサイドパネル内のチャットでは、高いカードがチャットの上にはみ出すことがあります。
@@ -227,7 +228,7 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
227
228
  - **このチャット** が数えるのは、dsh のファイルツール(`write`、`edit`、`str_replace_editor`)が書き込んだファイルだけです。コマンド(`bash`)が変更したファイルは、この表示には含まれず、**未コミット** に表示されます。チャットのターンのロールバックのスナップショットがない場合(ターンのロールバックがオフ、dsh-rewind-plugin がインストール済み、またはチャットがプラグインより古い場合)、表示は最後のコミットと比較し、そのことを示します。ターンのロールバックはチャットごとに最新の 50 個のスナップショットを保持します。長いチャットでは、表示は保持されている最も古いものと比較し、どのメッセージからかを示し、それより前の変更は数えません。**空白の変更を非表示** は `git diff -w` です。行の中のスペースだけが変わった行も非表示になります。
228
229
  - **GitHub issue を作成** には、dsh の PATH にある GitHub CLI(`gh`)と、チャットのフォルダーの GitHub リモートが必要です。実行時間は最大 60 秒です。`gh` がそれより長くかかると、issue は GitHub に作成されていても、そのリンクがリストに表示されないことがあります(もう一度クリックする前に、GitHub を確認してください。リストは完了した実行からしかリンクを読み取らないため、もう一度クリックすると 2 つ目の issue が作成されることがあります)。GitHub リモートが複数あるフォルダーでは、`gh` 自身のデフォルト(`gh repo set-default`)を使います。
229
230
  - **このファイルを変更したチャット** は、**このチャット** と同じく、dsh のファイルツール(`write`、`edit`、`str_replace_editor`)だけを認識します。コマンド(`bash`)による変更は表示されません。リポジトリの最新 300 件のチャット(作成日時の順)を読み取り、それより多い場合はそのことを表示します。表示するのは最大 100 行です。名前を変更したファイルは、ツールが書き込んだ名前で表示されます。フォルダーがリポジトリの外にあるチャット(同じファイルへの別のパスを通る場合も含みます)は数えません。dsh の起動後に最初に開くときは、リポジトリのすべてのチャットのログを読み取ります(275 件のチャットで約 4 秒)。2 回目以降は、それ以降に変更されたチャットだけを読み取ります。
230
- - **チャット行の Git ブランチ** が表示するのは、最後のターンの開始時または終了時に、チャットのフォルダーがあったブランチです。現在のブランチではありません。ターンの外でブランチを切り替えた場合は、次のターンの後に表示されます。このバージョンより前のチャットには、次のターンまでラベルが表示されません。ラベルは dsh のチャット行のマークアップの中に置かれます(dsh にはそこにスロットがありません)。dsh のアップデートでそのマークアップが変わった場合、ラベルは表示されません。チャットの上のプロジェクト行の名前がブランチと同じ場合(「チャットごとのブランチ」のフォルダーなど)、チャット行にラベルは表示されませんが、「1つのリスト」では表示されます。
231
+ - **チャット行の Git ブランチ** が表示するのは、最後のターンの開始時または終了時に、チャットのフォルダーがあったブランチです。現在のブランチではありません。ターンの外でブランチを切り替えた場合は、次のターンの後に表示されます。このバージョンより前のチャットには、次のターンまでラベルが表示されません。ラベルは dsh のチャット行のマークアップの中に置かれます(dsh にはそこにスロットがありません)。dsh のアップデートでそのマークアップが変わった場合、ラベルは表示されません。ラベルは「1つのリスト」でのみ表示されます。
231
232
  - **チャットごとのブランチ** を計画モードで使う場合:dsh は `/plan <メッセージ>` をメッセージではなくコマンドとして送信します。そのため Composer Plus は、dsh の入力欄でコマンドの送信を横取りします(公開 API ではありません)。dsh のアップデートでこれが変わった場合、**新しいブランチ** を選んだ状態の `/plan <メッセージ>` は、開いている新しいチャットで dsh 自体のコマンドとして実行されます。ホストが新しいチャットで計画モードをオンにできない場合、ブランチのフォルダーは残り、メッセージは送信されません。そのため、新しいチャットが既定のモードでファイルを変更することはありません。
232
233
  - **チャットごとのブランチ**:チャットのブランチフォルダー(`<project>/.worktrees/<name>`)が削除されると(たとえばチャット自身のエージェントが worktree を取り除いてブランチを削除したとき)、チャットの次のステップでチャットはそのフォルダーから移ります。ブランチフォルダーのプロジェクトはサイドバーから消え、チャットは「グループなし」の下に表示され、開いたままです。dsh 0.2.1 以降では、チャットはプロジェクトのメインフォルダーで続き、モデルには新しいフォルダーについての通知が届きます。dsh 0.2.0 では、チャットは削除されたフォルダーのままです。そこでのコマンドは、新しいチャットを始めるまで失敗します。どのチャットも使っていない削除済みブランチのプロジェクトもサイドバーから消えます。Composer Plus は起動時と 30 秒ごとにブランチフォルダーを確認します。サイドバーのフィルターは必要ありません。チャットの移動中は、同じリポジトリの **新しいブランチ** が「もう一度試してください」と答えます。スイッチをオフにすると、dsh 自身のエラー(「working-directory: directory does not exist」)が再び表示されます。
233
234
  - **ワークスペースのツリー内のブランチ** はクリックなしで 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 のサイドバーの行からそれを読み取ります)。それ以外の場合、コピーはブランチのプロジェクトにあります。
@@ -248,7 +249,7 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
248
249
  - **新しいチャットで続ける** は、チャット(メッセージ、ツール呼び出し、各ツール結果の末尾。最大で約 60,000 文字、最新の部分)をチャット自身のモデルに送ります。引き継ぎメモには、決定やファイルが抜けることがあります。開始する前に読んでください。新しいチャットが知っているのは、メモとリンクしたチャットだけです(dsh は元のチャットを読み取り専用のコンテキストとして添付します)。モデルのコンテキストは小さい状態から始まり、元のチャットはそのまま残ります。1 つのチャットで同時に実行できるメモの作成または開始は 1 つだけです。
249
250
  - **コンテキストの内訳** は、dsh 自身のルール(1 トークンあたり約 4 文字)で推定値を表示します。これは dsh のコンテキストリングと同じルールで、モデル自身の数え方とは異なることがあります。ツールの定義は、最新のリクエストのものです。コンテキストはチャットのログにあるとおりに表示します。実行中のターンは、次のステップの後に表示されます。
250
251
  - **計画済みステップ** でトークンが減るのは、モデルが実際に計画したときだけです。オンの間は、モデルが計画しないチャットでも、各リクエストに `plan_next_steps` ツールと短い指示(約 500 トークン)が含まれます。条件が証明するのは書かれた内容だけです(例:ビルドの終了コードが 0 だった)。作業が正しいことは証明しません。`ok` は dsh 自身の結果マーク(`[exit code: N]`、タイムアウト、サンドボックスの拒否)を読みます。0 以外の終了コードを返さずに失敗したコマンドは成功とみなされます。ステップは 1 つずつ実行され、同時に実行可能な 2 つのステップはモデルに戻されます。ステップのメッセージはチャットのモデルのアシスタントメッセージとして保存されます(dsh にはプラグインが書いたメッセージを示す印がありません)。そのため、その文面に Composer Plus が実行したことが書かれています。Tether にはありません。
251
- - **タスクボード** が知っているのは dsh のプロジェクトだけです。プロジェクトの外にあるチャットでは **すべてのプロジェクト** が表示され、チャットごとのブランチのフォルダー(`<project>/.worktrees/<name>`)はそのプロジェクトとして扱われます。プロジェクトの ID(`acme#12`)はフォルダー名から作られ、dsh でプロジェクトの名前を変えても変わりません。「ボードを最新に保つ」というルールがチャットに入るのは、そのプロジェクトに未完了のタスクがあるときだけです。一度受け取ったチャットはルールを保ちます。エージェントには **完了**、**バックログ**、手動タスクをあなたに任せるよう伝えますが、ツールはそれを拒否しません。エージェントがそのようなカードを動かすこともあります。機能がオンの間、ボードのツールはすべてのチャットのツール一覧に入ります(リクエストごとに約 1,000 トークン)。ボードを使わない場合はオフにしてください。ページは表示中、2 秒ごとにボードを読みます。エージェントの変更はその時間内に表示されます。エージェントが同じ項目を変えている間にあなたが編集したテキストは保存されません。パネルに新しいテキストと理由が表示されます。画像、コンピューター間の git 同期、ネットワーク経由の共有はありません(Kanzo にはあります)。考え方と見た目は emanuele-em の [Kanzo](https://github.com/emanuele-em/kanzo)(AGPL-3.0)から来ています。Composer Plus はそのコードを使っていません。
252
+ - **タスクボード** は、このウィンドウで dsh が一覧に表示するチャットを表示します。プロジェクトの外にあるチャットは **すべてのプロジェクト** にだけ表示され、チャットごとのブランチのフォルダー(`<project>/.worktrees/<name>`)はそのプロジェクトとして扱われます。カードの列はチャットのライブの状態なので、カードはドラッグできません。チャットはターンが終わると **完了** に移り(エラーや停止の後も同じです)、再び実行されると **作業中** に戻ります。緑の点は dsh 自身の完了の点で、dsh はこのウィンドウでだけこれを保持します。再読み込みの後、終わったチャットは緑の点なしで表示されます。**完了** には最新の 50 件のチャットが表示されます(**古いタスクを N 件表示** で残りを表示します)。タグは、開始したタスクごとに 1 回のモデル呼び出しで作られます。タグが正しくないこともあり、ボードで開始しなかったチャットにはタグがありません。タイトルは dsh 自身のチャットのタイトルです(dsh のタイトルサービスが、チャットのモデルで作ります)。タイトルができるまで、カードにはプロンプトの最初の行が表示されます。dsh が知っている `/` コマンド(`/plan`、`/goal`)で始まるプロンプトは、そのコマンドとして実行されます。**回答** が答えるのは、チャットの最新のリクエストだけです。そのリクエストに別の場所(別のウィンドウ、Tether、自動レビュー)で回答済みのとき、またはチャットが新しいことを尋ねているときは、パネルにそのことが表示され、何も送信しません。以前のバージョンには、コメントとエージェントのツールがあるタスク一覧がありました。これらはなくなり、古い `board.json` は表示されません。考え方と見た目は emanuele-em の [Kanzo](https://github.com/emanuele-em/kanzo)(AGPL-3.0)から来ています。Composer Plus はそのコードを使っていません。
252
253
  - **停止後の新規メッセージ優先** は、チャットを停止した後(または失敗したターンの後、まだキューがあるチャットを開いたとき)にだけ働きます。ターンの実行中に送信したメッセージは、これまでどおりキューの末尾で待ちます。追い越すのは自分がキューに入れたメッセージだけです。キューに目標のラウンドや質問への回答が待っている場合は、dsh 自身の順序のままです。公開 API ではない dsh の一部(停止したターンがまだ終了処理中かどうか)を読み取ります。dsh の更新でその名前が変わった場合、メッセージはそのターンが終わった後にだけ先頭に移ります。サブエージェントのチャットは dsh 自身の順序のままです。
253
254
  - **プロジェクトメモリー** はチャットの最初のフォルダー(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 自身のメモリーを読み書きすることもありません。
254
255
  - **バックアップ** が使うのは、固定の 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 のアーカイブを数え、それらを削除することがあります。
@@ -285,7 +286,7 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
285
286
 
286
287
  **DS Bot のメモリーのように、エージェントがチャットをまたいで好みを覚えておけますか?** はい、**プロジェクトメモリー**(既定ではオフ)で可能です。**設定 → Composer Plus** でオンにしてください。ターンが終わるたびに、長く続く好みや決定がチャットのプロジェクトの短いメモとして保存され、そのプロジェクトの新しいチャットがそれを読みます。エージェントに何かを覚えるように頼むと、すぐに保存します。メモを見たり変えたりするには、同じ行の **メモリーを開く** を押して、変更する内容を書いてください。
287
288
 
288
- **Kanzo のように、エージェントと 1 つのタスクボードを共有できますか?** はい、**タスクボード**(既定でオン)で可能です。左サイドバーで開き、**新しいタスク** でタスクを追加します。チャットでエージェントに「ボードから次のタスクを取って」と頼むと、エージェントはカードを **作業中** に移し、行ったことをコメントして **レビュー** に移します。自分で行うタスクには **手動** の印を付けてください。
289
+ **すべてのチャットをカンバンボードで見て、そこから新しいチャットを開始できますか?** はい、**タスクボード**(既定でオン)で可能です。左サイドバーで開きます。各チャットは、**作業中**、**レビュー**(あなたを待っています)、**完了** のいずれかの列のカードになります。**新しいタスク** に必要なのはプロンプトだけで、そのプロンプトで新しいチャットを開始します。オレンジのカードで **回答** をクリックすると、チャットを開かずに回答できます。
289
290
 
290
291
  **dsh-backup のように、dsh でチャットや設定をバックアップできますか?** はい。**設定 → Composer Plus → バックアップ → 今すぐバックアップ** を使います。同じ形式のアーカイブを同じフォルダー(`~/Desktop/dsh-backups`)に書き込むため、dsh-backup のアーカイブも表示され、復元できます。dsh-backup は削除してかまいません。定期的にバックアップするには、**自動バックアップ** をオンにしてください。
291
292
 
@@ -407,7 +408,7 @@ PLAYWRIGHT=/path/to/playwright node test/browser-continue-queue.mjs /path/to/dsh
407
408
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-stop-send.mjs /path/to/dsh/lib/bin.js
408
409
  # Edit queued message in place with images and files (slow fake model) + its thumbnail
409
410
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-edit.mjs /path/to/dsh/lib/bin.js
410
- # Task board: the page, the agent tools (fake model), drag and drop, search, the switch
411
+ # Task board: a prompt starts a chat, AI tags, live columns, Answer on the board, Hide finished, the switch
411
412
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-task-board.mjs /path/to/dsh/lib/bin.js
412
413
  ```
413
414
 
package/README.ko.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 diff를 보여 줍니다"></p>
16
16
 
17
- 비공식 커뮤니티 플러그인입니다. 네트워크 호출은 업데이트 확인(GitHub 릴리스와 npm 레지스트리)뿐입니다. 시작할 때 이 호출을 막으려면 **자동 업데이트**를 끄세요. **기능 아이디어**는 **기능 제안**을 클릭할 때만 채팅 자체의 모델을 호출합니다. **다음 메시지 예측**(기본값: 켜짐)은 턴이 끝날 때마다 설정에서 고른 모델(다른 모델을 고르지 않으면 dsh의 기본 모델)을 클릭 없이 한 번 호출합니다. 이 호출을 막으려면 **설정 → Composer Plus**에서 끄세요. **입력 중 자동 완성**(기본값: 꺼짐)은 사용자가 켠 뒤에 입력을 멈출 때마다 이 기능에서 고른 모델(기본값: 예측의 모델)을 호출합니다. **프롬프트 개선**은 요술봉을 클릭할 때만 모델을 호출합니다. **목표 확인**(기본값: 켜짐)은 에이전트가 자동 라운드에서 `/goal`을 완료로 표시할 때마다 모델을 한 번 호출합니다. **모바일 연결**(기본값: 꺼짐)은 사용자가 켠 뒤에만 로컬 네트워크나 tailnet에서 오는 iPhone 연결을 받습니다.
17
+ 비공식 커뮤니티 플러그인입니다. 네트워크 호출은 업데이트 확인(GitHub 릴리스와 npm 레지스트리)뿐입니다. 시작할 때 이 호출을 막으려면 **자동 업데이트**를 끄세요. **기능 아이디어**는 **기능 제안**을 클릭할 때만 채팅 자체의 모델을 호출합니다. **다음 메시지 예측**(기본값: 켜짐)은 턴이 끝날 때마다 설정에서 고른 모델(다른 모델을 고르지 않으면 dsh의 기본 모델)을 클릭 없이 한 번 호출합니다. 이 호출을 막으려면 **설정 → Composer Plus**에서 끄세요. **입력 중 자동 완성**(기본값: 꺼짐)은 사용자가 켠 뒤에 입력을 멈출 때마다 이 기능에서 고른 모델(기본값: 예측의 모델)을 호출합니다. **프롬프트 개선**은 요술봉을 클릭할 때만 모델을 호출합니다. **작업 보드**는 보드에서 시작한 각 작업의 태그를 만들 때 새 채팅의 모델을 한 번 호출합니다. **목표 확인**(기본값: 켜짐)은 에이전트가 자동 라운드에서 `/goal`을 완료로 표시할 때마다 모델을 한 번 호출합니다. **모바일 연결**(기본값: 꺼짐)은 사용자가 켠 뒤에만 로컬 네트워크나 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.18.0`.
32
+ > dsh의 pnpm은 게시된 지 24시간이 지나지 않은 버전을 건너뜁니다. 릴리스 직후에는 버전을 붙여서 설치하세요: `dsh-composer-plus@1.19.0`.
33
33
 
34
34
  ## 기능
35
35
 
@@ -71,11 +71,11 @@ dsh plugin --profile web add dsh-composer-plus
71
71
  | **계획된 단계** | <a id="feature-plannedsteps"></a>기본적으로 꺼져 있습니다. **설정 → Composer Plus**에서 켜세요. 에이전트는 `plan_next_steps` 도구를 받습니다. 명령과 같은 메시지에서 다음 명령을 정확한 인수와 조건과 함께 계획할 수 있습니다(예: “빌드가 통과하면 `npm test` 실행”). 결과가 조건을 충족하면 Composer Plus가 새 모델 호출 없이 다음 단계를 직접 실행하므로 긴 채팅의 토큰 사용량이 줄어듭니다. 단계는 채팅에 “Composer Plus · Planned steps: ran `test` … without a model call”이라는 짧은 줄로 표시되고, 그 뒤에 도구 호출과 결과가 이어집니다. `bash`, `read`, `grep`, `glob` 단계만 해당되며 승인, 샌드박스, 보호된 파일은 각 단계에 평소처럼 적용됩니다. 조건이 맞지 않을 때, 두 단계가 동시에 준비될 때, 마지막 단계 뒤, 그리고 메시지를 보낼 때 모델이 다시 답합니다. 이 아이디어는 HarnessMM(arXiv 2610.32813)에서 왔습니다. | <a href="assets/features/plannedSteps.webp"><img src="assets/features/plannedSteps.webp" width="160" alt="스크린샷: 계획된 단계"></a> |
72
72
  | **보호된 파일** | <a id="feature-protectedfiles"></a>기본적으로 켜져 있습니다. 에이전트 자체의 파일 도구는 지정한 패턴과 일치하는 파일을 읽거나 바꿀 수 없습니다. **읽기와 쓰기** 패턴에서는 파일에 대한 `read`, `read_image`, `grep`이 거부되고, 두 종류 모두에서 `write`, `edit`, `str_replace_editor`가 거부됩니다. 에이전트는 이유를 읽고 사용자에게 물어보라는 안내를 받습니다. 기본 패턴은 `.env*`, `*.pem`, `*.key`입니다. 설정 → Composer Plus → **보호된 파일**: 패턴을 추가하고(예: `published/**` 또는 `config/*.yml`), 종류를 클릭해 **읽기와 쓰기**와 **쓰기만** 사이에서 전환하고, ✕로 삭제하거나 **기본값 사용**을 클릭하세요. `/`가 없는 패턴은 모든 폴더의 파일 이름과 일치합니다. 이것은 가드레일이며 샌드박스가 아닙니다. 셸 명령(`cat .env`), 스크립트, MCP 도구는 여전히 파일에 접근할 수 있습니다(제한 사항 참고). | <a href="assets/features/protectedFiles.webp"><img src="assets/features/protectedFiles.webp" width="160" alt="스크린샷: 보호된 파일"></a> |
73
73
  | **차단된 명령** | <a id="feature-blockedcommands"></a>기본적으로 켜져 있으며, 목록은 비어 있습니다. 에이전트의 셸 명령(`bash`, `pwsh`)은 지정한 규칙과 일치하는 명령을 실행할 수 없습니다. **차단** 규칙은 호출을 거부하고(에이전트는 이유를 읽고 사용자에게 물어보라는 안내를 받습니다), **먼저 묻기** 규칙은 dsh의 승인 카드를 표시하며, 명령은 사용자가 허용할 때만 실행됩니다. 설정 → Composer Plus → **차단된 명령**: 규칙을 입력하고(예: `npm publish`, `git push --force` 또는 `ssh *192.168.2.19`), 종류를 클릭해 **차단**과 **먼저 묻기** 사이에서 전환한 뒤 **추가**를 클릭하세요. 규칙의 종류를 클릭하면 바꿀 수 있고, ✕로 삭제할 수 있습니다. 규칙은 명령 이름과 그 뒤에 이 순서로 와야 하는 단어입니다. `*`는 모든 텍스트와 일치합니다. `&&`, `;`, `\|` 뒤, `$(…)`, `bash -c "…"` 또는 `eval` 안, `sudo`나 `env` 뒤에 있는 명령도 찾습니다. 이것은 가드레일이며 샌드박스가 아닙니다. 변수(`$CMD`), 스크립트 파일, 다른 프로그램은 여전히 명령을 실행할 수 있습니다(제한 사항 참고). | <a href="assets/features/blockedCommands.webp"><img src="assets/features/blockedCommands.webp" width="160" alt="스크린샷: 차단된 명령"></a> |
74
- | **작업 보드** | <a id="feature-taskboard"></a>왼쪽 사이드바 → **작업 보드**. 사용자와 에이전트가 함께 쓰는 dsh 프로젝트의 칸반 보드입니다. 열은 **할 일**, **진행 중**, **검토**, **완료**입니다(**백로그**도 있습니다. 아래 참고). 왼쪽에서 프로젝트나 **모든 프로젝트**를 고르세요. **새 작업**(또는 `n`)을 누르면 새 카드가 열립니다. 제목을 입력하고 `Enter`를 누르세요. 카드를 다른 열이나 두 카드 사이로 끌어다 놓을 수 있습니다. 카드를 클릭하면 **상태**, **태그**, **수동**(에이전트가 건너뜀), 설명(Markdown), 댓글을 보고 바꿀 수 있습니다. `/`는 모든 프로젝트를 검색하고, `h`는 수동 작업만 보여 주며, 내보내기 버튼은 보드를 Markdown이나 JSON으로 저장합니다. 에이전트는 보드 도구를 받습니다. 채팅에서 "보드에서 다음 작업을 가져와"라고 하면 에이전트가 **할 일**의 맨 위 카드를 **진행 중**으로 옮기고, 한 일을 댓글로 남긴 뒤 **검토**로 옮깁니다. **완료**로 옮기는 것은 사용자입니다. 열린 작업이 있는 프로젝트에서는 각 채팅이 이 규칙을 자동으로 받습니다. 설정 → Composer Plus → **작업 보드**에 **백로그** 열 스위치가 있습니다. 이 열의 카드는 에이전트가 사용자에게 맡깁니다. | <a href="assets/features/taskBoard.webp"><img src="assets/features/taskBoard.webp" width="160" alt="스크린샷: 작업 보드"></a> |
74
+ | **작업 보드** | <a id="feature-taskboard"></a>왼쪽 사이드바 → **작업 보드**. 사이드바와 같은 실시간 상태를 보여 주는 dsh 채팅의 칸반 보드입니다. 승인, 답변 또는 계획 검토를 기다리는 채팅은 주황색 점과 함께 **검토**에, 실행 중인 채팅은 **진행 중**에, 끝난 채팅은 **완료**에 있습니다(열기 전까지 초록색). 왼쪽에서 프로젝트나 **모든 프로젝트**를 고르세요. 채팅별 브랜치 폴더는 해당 프로젝트로 취급됩니다. **새 작업**(또는 `n`)에는 프롬프트만 입력합니다. `Enter`를 누르면 프로젝트에서 새 채팅이 시작되고, 카드가 **할 일**에 표시되며, dsh가 채팅 이름을 짓고 채팅의 모델이 태그를 최대 3개 씁니다. 카드를 클릭하면 채팅이 열립니다. 주황색 카드에서 **답변**을 클릭하면 보드에서 바로 답할 수 있습니다. 승인 요청에는 **거부** 또는 **한 번 허용**, 계획에는 **승인** 또는 **변경 요청**, 질문에는 선택지와 직접 쓴 텍스트로 답합니다. **끝난 채팅 숨기기**는 이 기기에서 **완료**를 숨깁니다. | <a href="assets/features/taskBoard.webp"><img src="assets/features/taskBoard.webp" width="160" alt="스크린샷: 작업 보드"></a> |
75
75
  | **프로젝트 메모리** | <a id="feature-projectmemory"></a>기본적으로 꺼져 있습니다. **설정 → Composer Plus**에서 켜세요. 프로젝트 폴더마다 자체 메모리가 있으며, 그 프로젝트의 이후 채팅이 읽습니다. DS Bot이 Bot마다 메모리를 두는 것과 같습니다. 턴이 끝날 때마다 채팅의 모델을 한 번 호출해 새 메시지(되돌린 메시지 제외)를 읽고, 오래 유지되는 선호, 결정, 사실을 짧은 메모로 저장하며, 오래된 메모를 바꾸거나 지웁니다. 에이전트도 직접 메모를 저장, 삭제, 검색할 수 있습니다(`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
76
  | **이 채팅에서 허용** | <a id="feature-allowforchat"></a>자동 검토가 확인을 요청하면 승인 카드에 **이 채팅에서 허용**이 추가됩니다. 이후 같은 채팅의 같은 도구는 인수와 관계없이 시간 제한이 끝날 때까지 허용됩니다(기본값 1시간. **설정 → Composer Plus → 이 채팅에서 허용**에서 고릅니다). 그 후에는 에이전트가 다시 묻습니다. 헤더 칩에서 허용 목록과 종료 시각을 보고 취소할 수 있습니다. 허용은 재시작 후에도 유지됩니다. | <a href="assets/features/allowForChat.webp"><img src="assets/features/allowForChat.webp" width="160" alt="스크린샷: 이 채팅에서 허용"></a> |
77
77
  | **프로젝트 상태** | <a id="feature-projectstatus"></a>사이드바의 프로젝트 행에 그 채팅과 같은 실행 중 / 대기 중 / 완료 표시가 나타납니다. 그래서 접힌 프로젝트도 안의 채팅이 작업 중인지, 사용자의 조치가 필요한지 알려 줍니다. 사용자의 조치를 기다리는 채팅이 먼저 표시되고, 그다음 아직 열지 않은 완료된 채팅(초록색 점, 다른 채팅이 아직 실행 중일 때도 표시), 마지막으로 실행 중 표시가 나타납니다. 포인터를 올리면 자세한 내용이 보입니다. **작업 공간 트리**에서는 상위 폴더의 행에도 그 안에 있는 각 프로젝트(예: `.worktrees/` 안의 각 브랜치 폴더)의 채팅 상태가 표시되며, 폴더가 접혀 있을 때도 마찬가지입니다. | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="스크린샷: 프로젝트 상태"></a> |
78
- | **채팅 행의 Git 브랜치** | <a id="feature-sessionbranch"></a>사이드바의 각 채팅 행에 작은 회색 배지로, 채팅의 마지막 턴 때 채팅 프로젝트 폴더가 있던 git 브랜치가 표시됩니다(예: `main` 또는 `feature/login`. 분리된 HEAD는 브랜치가 없으므로 배지가 표시되지 않습니다). 한 프로젝트에서 서로 다른 브랜치에 있는 두 채팅이 더 이상 똑같아 보이지 않으며, 잘못된 브랜치에서 채팅을 이어 가려 할 때 바로 알 수 있습니다. 배지에 포인터를 올리면 전체 이름이 보입니다. Host 쪽은 턴이 시작될 때와 끝날 때 브랜치를 읽습니다(`git branch --show-current`, 읽기 전용). 이 기능을 설치한 뒤 턴이 없는 채팅이나 git 저장소가 아닌 폴더에는 배지가 표시되지 않습니다. 채팅 위의 프로젝트 행 이름이 브랜치와 같으면(예: “채팅별 브랜치” 폴더) 채팅 행에 배지가 표시되지 않지만, “하나의 목록”에서는 계속 표시됩니다. | <a href="assets/features/sessionBranch.webp"><img src="assets/features/sessionBranch.webp" width="160" alt="스크린샷: 채팅 행의 Git 브랜치"></a> |
78
+ | **채팅 행의 Git 브랜치** | <a id="feature-sessionbranch"></a>사이드바의 “하나의 목록” 보기에서는 각 채팅 행에 작은 회색 배지로, 채팅의 마지막 턴 때 채팅 프로젝트 폴더가 있던 git 브랜치가 표시됩니다(예: `main` 또는 `feature/login`. 분리된 HEAD는 브랜치가 없으므로 배지가 표시되지 않습니다). 한 프로젝트에서 서로 다른 브랜치에 있는 두 채팅이 더 이상 똑같아 보이지 않으며, 잘못된 브랜치에서 채팅을 이어 가려 할 때 바로 알 수 있습니다. 배지에 포인터를 올리면 전체 이름이 보입니다. Host 쪽은 턴이 시작될 때와 끝날 때 브랜치를 읽습니다(`git branch --show-current`, 읽기 전용). 이 기능을 설치한 뒤 턴이 없는 채팅이나 git 저장소가 아닌 폴더에는 배지가 표시되지 않습니다. “작업 공간”과 “작업 공간 트리”에서는 채팅이 이미 프로젝트 행 아래에 있으므로 어떤 채팅 행에도 배지가 표시되지 않습니다. | <a href="assets/features/sessionBranch.webp"><img src="assets/features/sessionBranch.webp" width="160" alt="스크린샷: 채팅 행의 Git 브랜치"></a> |
79
79
  | **모두 읽음으로 표시** | <a id="feature-markprojectread"></a>사이드바에서 프로젝트의 **…** 버튼 → **모두 읽음으로 표시**를 클릭하세요. 그 프로젝트의 모든 채팅에서 초록색 읽지 않음 점이 한 번에 사라집니다. 다른 프로젝트의 점은 그대로 남습니다. 프로젝트에 읽지 않은 채팅이 없으면 이 항목은 회색으로 표시됩니다(**읽지 않은 채팅 없음**). | <a href="assets/features/markProjectRead.webp"><img src="assets/features/markProjectRead.webp" width="160" alt="스크린샷: 모두 읽음으로 표시"></a> |
80
80
  | **활성 프로젝트 우선** | <a id="feature-activeprojectsfirst"></a>채팅이 실행을 시작하거나 사용자의 조치가 필요해지면, 그 프로젝트가 dsh 자체 행 애니메이션으로 사이드바 맨 위로 이동합니다(직접 끌어 올릴 때와 같은 움직임). 완료된 프로젝트는 제자리에 남으며, 평소처럼 원하는 곳으로 끌어 옮길 수 있습니다. 이동은 dsh의 프로젝트 순서에 저장되므로, 이 기능을 꺼도 현재 순서가 유지됩니다. | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="스크린샷: 활성 프로젝트 우선"></a> |
81
81
  | **최근 프로젝트 필터** | <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> |
@@ -85,7 +85,7 @@ dsh plugin --profile web add dsh-composer-plus
85
85
  | **유휴 상태일 때 대기 중인 채팅 열기** | <a id="feature-idleswitch"></a>채팅이 질문을 하거나 승인 또는 계획 검토를 기다리고 있을 때(주황색 점), 또는 아직 읽지 않은 턴을 마쳤을 때(초록색 점) 30초 동안 dsh를 사용하지 않으면 dsh가 그 채팅을 엽니다. 주황색 채팅이 초록색 채팅보다 먼저 열립니다. 각 그룹에서는 가장 오래 기다린 채팅이 먼저 열리고, 다음 채팅은 다시 30초 동안 사용하지 않으면 열립니다. 키 입력, 클릭, 마우스 이동, 스크롤 휠, 터치가 있으면 30초를 다시 셉니다. 포커스가 있는 입력란에 텍스트가 있거나, 텍스트를 선택했거나, 메뉴나 대화 상자가 열려 있어도 전환하지 않습니다. 기다리는 채팅이 화면에 있는 동안에는 아무것도 바뀌지 않습니다. 답하지 않고 기다리는 채팅을 떠나면, 다음에 30초 동안 사용하지 않을 때 그 채팅이 다시 열릴 수 있습니다. 초록색 채팅이 열리면 그 점은 사라집니다. 다음 초록색 채팅은 dsh를 다시 사용한 뒤 30초 동안 사용하지 않을 때 열립니다. dsh가 백그라운드에 있을 때도 작동하지만, dsh가 앞으로 나오지는 않습니다. | <a href="assets/features/idleSwitch.webp"><img src="assets/features/idleSwitch.webp" width="160" alt="스크린샷: 유휴 상태일 때 대기 중인 채팅 열기"></a> |
86
86
  | **애플리케이션 언어** | <a id="feature-language"></a>설정 → Composer Plus → **애플리케이션 언어**에서 dsh 인터페이스 전체를 Türkçe, Español, Português (Brasil), Français, Deutsch, Русский, 日本語, 한국어, Bahasa Indonesia, Tiếng Việt, हिन्दी 중 하나로 바꿉니다(아래 참고). | <a href="assets/features/language.webp"><img src="assets/features/language.webp" width="160" alt="스크린샷: 애플리케이션 언어"></a> |
87
87
  | **모바일 연결(iPhone)** | <a id="feature-mobileconnect"></a>[Tether](tether/) 앱으로 iPhone에서 dsh를 사용하세요. 같은 Wi-Fi나 [Tailscale](https://tailscale.com)을 통해 연결합니다. **설정 → 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> |
88
- | **자동 업데이트** | <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의 새로운 기능** 창이 그 버전의 릴리스 노트를 한 번 보여 줍니다(같은 업데이트 확인에서 받은 내용이며 추가 네트워크 호출은 없습니다). **닫기** 또는 `Esc`로 닫습니다. | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.webp" width="160" alt="스크린샷: 자동 업데이트"></a> |
88
+ | **자동 업데이트** | <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의 새로운 기능** 창이 그 버전의 릴리스 노트를 **애플리케이션 언어**에서 고른 언어로 한 번 보여 줍니다(노트는 새 버전에 함께 들어 있으며 추가 네트워크 호출은 없습니다. 그 언어의 노트가 없으면 영어 노트를 보여 줍니다). **닫기** 또는 `Esc`로 닫습니다. | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.webp" width="160" alt="스크린샷: 자동 업데이트"></a> |
89
89
  | **백업** | <a id="feature-backup"></a>설정 → Composer Plus → **백업** → **지금 백업**은 dsh 홈 전체(채팅, 설정, 플러그인, MCP, 스킬)를 체크섬과 함께 `~/Desktop/dsh-backups`의 아카이브 하나에 씁니다. 아카이브에서 비밀 값은 마스킹됩니다. 자격 증명 파일, 키 파일(`.pem`, `.key`), yml 설정의 token, secret, password 값은 이 컴퓨터에만, 폴더의 `vault`에 남습니다. `cache/`, `dsh-runtimes/`, `node_modules`는 아카이브에 들어가지 않습니다(dsh가 다시 만듭니다). 목록의 각 백업에는 **검사**(끝까지 읽음), **다른 컴퓨터용**(새 컴퓨터로 복사할 폴더, 복구 콘솔 포함), **삭제**가 있습니다. 같은 폴더에 있는 dsh-backup의 아카이브도 표시되고 사용할 수 있습니다. 복원하려면 dsh를 종료하고 복구 콘솔을 사용하세요. | <a href="assets/features/backup.webp"><img src="assets/features/backup.webp" width="160" alt="스크린샷: 백업"></a> |
90
90
  | **자동 백업** | <a id="feature-autobackup"></a>**자동 백업**을 켜세요(기본적으로 꺼져 있습니다. 각 사본은 캐시를 뺀 dsh 홈과 크기가 거의 같습니다). 얼마나 자주 백업할지(**간격**: 6시간에서 7일, 기본값 24시간)와 백업을 몇 개 남길지(**보관**: 3에서 14, 기본값 7)를 고르세요. 다음 백업 시각은 스위치 아래에 표시됩니다. 실패한 백업도 그곳에 표시되고, 30분 뒤에 다시 시도합니다. dsh나 Composer Plus가 새 버전으로 시작하면, 시작 직후 새 버전이 데이터를 오래 쓰기 전에 스냅샷을 만듭니다(가장 최신 두 개가 남고, **업그레이드 전**으로 표시됩니다). | <a href="assets/features/autoBackup.webp"><img src="assets/features/autoBackup.webp" width="160" alt="스크린샷: 자동 백업"></a> |
91
91
  | **세션 로그 점검** | <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> |
@@ -169,7 +169,7 @@ dsh `0.2.0-rc.2`(데스크톱과 웹)와 `0.2.1-rc.2`(웹)에서 테스트했습
169
169
  - **목표 확인:** 에이전트가 자동 라운드에서 `/goal`을 완료로 표시할 때(또는 **지금 실행**을 클릭할 때)만 실행됩니다. Host 쪽은 테스트 명령을 채팅 폴더에서 채팅의 샌드박스 모드로 실행합니다(dsh 자체의 `bash` 도구와 같음: 같은 파일 접근 정책. 그 샌드박스를 시작할 수 없으면 테스트를 실행하지 않고 확인은 실패합니다). 명령을 찾으려고 `package.json`, `Makefile`, `Cargo.toml`, `go.mod`, `pyproject.toml`, `pytest.ini`만 폴더 안의 일반 파일로 읽습니다(폴더 밖을 가리키는 심볼릭 링크 없음, FIFO 없음). 그다음 목표, 목표가 시작된 뒤의 채팅(사용자의 메시지, 에이전트의 답변, 1,000자로 자른 도구 호출, 각 도구 결과의 마지막 2,000자. 추론과 되돌린 단계 제외. 최대 약 60,000자, 가장 최근 부분), `git status --short`, 테스트 출력의 끝부분을 **목표 확인**에서 고른 모델(기본값: 채팅 자체의 모델)에 도구 없는 요청 한 번으로 보냅니다. 도구 출력에는 에이전트가 읽은 내용이 들어 있을 수 있으므로, 채팅 자체와 마찬가지로 이 요청에 파일의 일부가 들어갈 수 있습니다. 채팅과 프로젝트에는 아무것도 쓰지 않습니다. 직접 정한 테스트 명령, 제한, 마지막 결과(출력의 끝부분 포함), 고른 모델은 `$DSH_HOME/storages/dsh-composer-plus/goal-check.json`(소유자 전용 파일, 최신 채팅 500개)에 보관됩니다.
170
170
  - **새 채팅에서 계속:** 클릭하기 전에는 아무것도 실행되지 않습니다. 클릭하면 Host 쪽은 채팅(목표 확인이 읽는 방식과 같음: 추론과 되돌린 단계 제외)을 채팅 자체의 모델에 보내고 인계 메모를 보여 줍니다. 새 채팅을 만드는 것은 **새 채팅 시작**뿐입니다. 프로젝트에는 아무것도 쓰지 않습니다.
171
171
  - **컨텍스트 구성:** Host에서 채팅 로그만 읽습니다. 모델 호출도 프로젝트 파일도 없습니다.
172
- - **작업 보드:** 보드(작업의 제목, 설명, 태그, 댓글, 프로젝트 폴더 경로와 그 짧은 ID)는 `$DSH_HOME/storages/dsh-composer-plus/board.json`(소유자 전용 파일)에 있습니다. 스위치는 그 옆의 `board-switch.json`에 있습니다. 아무것도 컴퓨터 밖으로 나가지 않으며, 프로젝트 폴더에는 아무것도 쓰지 않습니다. 보드 도구는 사용자가 보드에 쓴 내용을 에이전트에게 주므로, 에이전트가 작업을 읽으면 그 텍스트가 채팅의 모델에 전달됩니다. 손상된 보드 파일은 `board.json.broken-<time>`으로 보관되고, 보드는 빈 상태로 시작합니다.
172
+ - **작업 보드:** 보드는 이 창에 있는 dsh 자체 목록에서 dsh 자체 채팅을 보여 주며, 자체 채팅 데이터를 추가하지 않습니다. 작업을 시작하면 Host 쪽이 고른 프로젝트에 새 채팅을 만들고, 사용자가 거기서 직접 입력한 것처럼 프롬프트를 첫 메시지로 보냅니다. 그래서 승인, 샌드박스, 채팅의 모델이 평소처럼 적용됩니다. 그런 다음 태그를 최대 3개 얻기 위해 프롬프트(처음 4,000자만, 다른 것은 없음)를 도구 없이 요청 한 번으로 그 채팅의 모델에 더 보냅니다. 각 작업의 프롬프트, 태그, 시작 시각은 `$DSH_HOME/storages/dsh-composer-plus/board-chats.json`(소유자 전용 파일, 최신 2,000개)에 보관됩니다. 스위치는 그 옆의 `board-switch.json`에 있습니다. 프로젝트 폴더에는 아무것도 쓰지 않습니다. **답변**은 채팅 자체의 카드와 같은 방식으로 dsh 자체의 대기 중인 요청에 답변을 보냅니다. 이전 버전의 예전 작업 목록(`board.json`)은 디스크에 그대로 남으며 읽지 않습니다.
173
173
  - **보호된 파일:** 목록과 스위치는 `$DSH_HOME/storages/dsh-composer-plus/protected-files.json`(소유자 전용 파일)에 있습니다. 확인은 각 파일 도구 호출의 경로(와 실제 경로)만 읽으며, 파일 자체는 읽지 않습니다.
174
174
  - **차단된 명령:** 규칙과 스위치는 `$DSH_HOME/storages/dsh-composer-plus/blocked-commands.json`(소유자 전용 파일)에 있습니다. 확인은 각 `bash`와 `pwsh` 호출의 명령 텍스트만 읽으며, 아무것도 실행하거나 보내지 않습니다.
175
175
  - **프로젝트 메모리:** 직접 켜기 전까지는 꺼져 있습니다. 켜져 있는 동안 최상위 채팅의 턴이 끝날 때마다 Host 쪽이 지난 검토 이후 그 채팅의 새 메시지(사용자 메시지와 에이전트의 텍스트 답변. 도구 출력, 추론, 숨은 컨텍스트, 되돌린 메시지는 제외. 분기한 채팅에서는 부모 채팅의 복사본 제외. 최대 약 16,000자)와 저장된 메모를, 도구 없는 요청 한 번으로 채팅 자체의 모델에 보냅니다. 메모는 `$DSH_HOME/storages/dsh-composer-plus/memory/` 아래의 Markdown 파일(소유자만 읽고 쓸 수 있음)입니다. 프로젝트 폴더마다 `projects/<id>/`(`<id>`는 폴더 실제 경로의 해시이며, `project.json`에 폴더가 적힙니다), `global/`, `journal.jsonl`(각 변경과 변경 전후의 줄), `reviewed.json`(각 채팅을 어디까지 읽었는지)이 있습니다. 프로젝트 폴더에는 아무것도 쓰지 않습니다. 키, 토큰, 비밀번호, 신분증 번호처럼 보이는 메모는 거부합니다. 프로젝트의 메모는 그 폴더의 새 채팅마다 시스템 프롬프트에 들어가므로, 그 채팅의 모든 요청과 함께 모델에 전달됩니다. 스위치는 같은 위치의 `memory.json`에 있습니다. **메모리 열기**는 **변경 미리 보기**를 누르기 전에는 아무것도 보내지 않습니다. 누르면 보이는 메모와 사용자의 글을 도구 없는 한 번의 요청으로 dsh의 기본 모델에 보냅니다. 변경은 **적용**을 눌러야만 기록되며 저널에는 `editor`로 남습니다. Tether도 같은 경로로 메모를 읽고 바꿉니다.
@@ -191,10 +191,10 @@ dsh `0.2.0-rc.2`(데스크톱과 웹)와 `0.2.1-rc.2`(웹)에서 테스트했습
191
191
  - **재시작 후 채팅이 이어지지 않음:** dsh를 종료할 때 재시작 후 이어서 실행이 꺼져 있었거나, 그 턴을 직접 중지했거나, 턴이 이미 끝났거나(완료 또는 실패), 채팅이 보관되었거나, 실행 중인 채팅이 20개보다 많았습니다(가장 최근 채팅 20개만 이어짐).
192
192
  - **재시작 후 대기열이 비어 있음:** 대기열을 비우는 것은 dsh 자체의 종료입니다. 재시작 후 이어서 실행은 이어서 실행하는 채팅에서만 대기열을 되돌립니다. 다른 채팅에서는 메시지를 다시 보내세요. 종료 직전에 삭제한 메시지가 돌아올 수 있습니다. 그때는 다시 삭제하세요.
193
193
  - **GitHub 이슈 열기에 "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를 시작하세요.
194
- - **채팅 행에 브랜치 배지가 없음:** 이 버전을 설치한 뒤 그 채팅에 턴이 없었거나, 폴더가 git 저장소가 아니거나, **채팅 행의 Git 브랜치**가 꺼져 있습니다. 업데이트한 뒤에는 dsh를 다시 시작하세요(브랜치는 Host 쪽이 기록합니다).
194
+ - **채팅 행에 브랜치 배지가 없음:** 사이드바가 “하나의 목록” 보기가 아니거나(“작업 공간”과 “작업 공간 트리”에서는 어떤 채팅 행에도 배지가 없음), 이 버전을 설치한 뒤 그 채팅에 턴이 없었거나, 폴더가 git 저장소가 아니거나, **채팅 행의 Git 브랜치**가 꺼져 있습니다. 업데이트한 뒤에는 dsh를 다시 시작하세요(브랜치는 Host 쪽이 기록합니다).
195
195
  - **목표 확인에 테스트가 종료 코드 127 또는 "not found"로 끝났다고 표시됨:** Finder나 Dock에서 시작한 dsh는 터미널보다 PATH가 짧을 수 있어서 `npm`, `pnpm`, `cargo`를 찾지 못합니다. 터미널에서 dsh를 시작하거나, **목표 확인** → **편집**에서 전체 경로를 쓴 테스트 명령을 직접 정하세요. **지금 실행**을 누르면 결과가 바로 표시됩니다.
196
196
  - **목표가 닫히지 않고 에이전트가 계속 작업함:** **목표 확인**이 실패한 테스트나 남은 작업을 찾았습니다. 목표 아래의 행에 이유가 표시됩니다(자세한 내용은 결과에 포인터를 올려 보세요). 원인이나 테스트 명령을 고치거나, `/goal` 또는 목표 바로 목표를 직접 완료하세요(이 완료는 확인하지 않습니다).
197
- - **릴리스 직후 설치 실패:** 버전을 붙여서 설치하세요(`dsh-composer-plus@1.18.0`). 위의 설치 안내를 참고하세요.
197
+ - **릴리스 직후 설치 실패:** 버전을 붙여서 설치하세요(`dsh-composer-plus@1.19.0`). 위의 설치 안내를 참고하세요.
198
198
  - **지금 백업에서 "다른 백업 작업이 실행 중입니다"라고 표시됨:** 다른 dsh 창이나 복구 콘솔에서 작업이 실행 중입니다(둘은 백업 폴더의 잠금 파일 `.composer-plus.lock`을 함께 씁니다). 작업이 끝날 때까지 기다리세요. 실행 중인 작업이 없으면, 다음에 클릭할 때 종료된 프로세스의 잠금을 넘겨받습니다.
199
199
  - **복구 콘솔에 "dsh is running"이라고 표시됨:** 먼저 dsh를 종료하세요. dsh가 정말 닫혀 있다면, 메시지에 나온 파일은 비정상 종료로 남은 것입니다. 그 파일을 삭제하고 다시 시도하세요.
200
200
  - **복원 후 dsh가 시작되지 않거나 플러그인이 없음:** 프로필의 플러그인 패키지를 다시 설치해야 합니다. 복구 콘솔이 복원 후에 이를 제안합니다. 또는 콘솔이 나열하는 `$DSH_HOME/profiles/` 아래의 각 폴더에서 `pnpm install`을 실행하세요. vault에 없던 비밀 값(다른 컴퓨터)은 다시 입력해야 합니다. 콘솔이 그 목록을 보여 줍니다.
@@ -214,6 +214,7 @@ dsh `0.2.0-rc.2`(데스크톱과 웹)와 `0.2.1-rc.2`(웹)에서 테스트했습
214
214
  - **채팅 삭제**에는 dsh의 보관 기능(dsh 0.2.0 이상)이 필요합니다. 15초 안에 멈추지 않거나 다른 dsh가 잡고 있는 채팅(또는 그 하위 에이전트 채팅 중 하나)은 보관된 상태로 남고, 아무것도 이동하지 않습니다. macOS가 아닌 시스템에서는 휴지통 폴더가 채팅 기록과 같은 디스크에 있어야 합니다. 열려 있는 채팅을 삭제하면, 그 채팅은 dsh를 다시 시작할 때까지 dsh 메모리에 보관되고 숨겨진 상태로 남습니다. 휴지통은 직접 비우세요. dsh는 휴지통을 비우지 않습니다.
215
215
  - dsh의 대기열에는 `move` 동작이 없습니다. 그래서 플러그인의 Host 쪽이 dsh의 대기열 안에서 대기 중인 메시지 자체를 옮깁니다(한 번의 변경, 같은 메시지). 이미지나 파일이 있는 메시지도 이동할 수 있습니다. 내 메시지만 이동할 수 있습니다. 대기열에 있는 목표 라운드나 질문에 대한 답변은 제자리에 남습니다. 끄는 중에 메시지 전송이 시작되면 아무것도 이동하지 않고, 알림으로 이를 알려 줍니다.
216
216
  - 새 버전이 dsh 설정을 하나도 바꾸지 않으면 dsh 0.2.1은 업데이트를 바로 로드합니다. 그 밖의 경우와 dsh 0.2.0에서는 업데이트를 로드하려면 dsh를 다시 시작하세요. 플러그인은 dsh를 대신 재시작하지 않습니다. dsh 플러그인 관리자가 없는 웹/CLI 프로필은 새 버전을 알리기만 합니다.
217
+ - **Composer Plus N의 새로운 기능**은 **애플리케이션 언어**의 언어로 노트를 보여 줍니다. 다른 지역이 붙은 UI 언어는 기본 언어의 노트를 받습니다(`en-GB`는 영어 노트, `zh-TW`는 `zh`의 중국어 노트). 노트가 없는 언어(다른 언어 팩이 추가한 언어, 또는 `pt-BR`이 아닌 `pt-PT`)에서는 영어 노트를 보여 줍니다. 노트는 새 버전에 함께 들어 있습니다. 실행 중인 사본에 읽을 수 있는 노트 파일(`release-notes.json`)이 없으면 GitHub의 영어 노트를 보여 줍니다.
217
218
  - **이 채팅에서 허용**은 허용한 순간부터 시간 제한을 셉니다. 새 시간 제한은 유효한 허용에 즉시 적용되므로, 더 짧은 시간 제한은 허용을 즉시 끝낼 수 있습니다. 버전 1.12 이하의 허용에는 시간 정보가 없습니다. 업데이트 후 에이전트가 그 도구들에 대해 한 번 더 묻습니다.
218
219
  - **입력란 포커스 유지**는 `/` 명령이나 스킬을 보낸 뒤에만 포커스를 돌려줍니다. dsh가 명령을 처리하는 몇 밀리초 동안 입력란이 읽기 전용이므로, 그동안 누른 키는 사라집니다. dsh의 `/` 메뉴가 아직 열려 있으면 `Enter`는 강조된 행을 선택하고 메시지를 보내지 않습니다.
219
220
  - **질문 카드를 창에 맞추기**는 dsh의 질문 카드만 바꾸고 계획 검토 카드는 바꾸지 않습니다. 카드는 dsh의 마크업(`data-question-key`, `data-question-scroll`)으로 찾습니다. dsh 업데이트로 이 마크업이 바뀌면 카드는 dsh가 그리는 대로 보입니다. 카드 높이는 채팅이 아니라 창을 따릅니다. 좁은 사이드 패널 안의 채팅에서는 높은 카드가 채팅 위로 넘칠 수 있습니다.
@@ -227,7 +228,7 @@ dsh `0.2.0-rc.2`(데스크톱과 웹)와 `0.2.1-rc.2`(웹)에서 테스트했습
227
228
  - **이 채팅**은 dsh의 파일 도구(`write`, `edit`, `str_replace_editor`)가 쓴 파일만 셉니다. 명령(`bash`)이 바꾼 파일은 이 보기에 없고, **커밋 안 됨**에 표시됩니다. 채팅의 턴 되돌리기 스냅샷이 없으면(턴 되돌리기 꺼짐, dsh-rewind-plugin 설치됨, 또는 플러그인보다 오래된 채팅) 보기는 마지막 커밋과 비교하고 그렇다고 알려 줍니다. 턴 되돌리기는 채팅마다 최신 스냅샷 50개를 보관합니다. 더 긴 채팅에서는 보기가 보관된 가장 오래된 스냅샷과 비교하고, 어느 메시지부터인지 알려 주며, 그 이전의 변경은 세지 않습니다. **공백 변경 숨기기**는 `git diff -w`입니다. 줄 안의 공백만 바뀐 줄도 숨겨집니다.
228
229
  - **GitHub 이슈 열기**에는 dsh의 PATH에 있는 GitHub CLI(`gh`)와 채팅 폴더의 GitHub 원격 저장소가 필요합니다. 최대 60초 동안 실행됩니다. `gh`가 더 오래 걸리면, 이슈가 GitHub에는 만들어졌지만 목록에는 링크가 없을 수 있습니다(다시 클릭하기 전에 GitHub를 확인하세요. 목록은 끝난 실행에서만 링크를 읽으므로, 다시 클릭하면 두 번째 이슈가 열릴 수 있습니다). GitHub 원격 저장소가 둘 이상인 폴더는 `gh` 자체의 기본값(`gh repo set-default`)을 씁니다.
229
230
  - **이 파일을 변경한 채팅**은 **이 채팅**처럼 dsh의 파일 도구(`write`, `edit`, `str_replace_editor`)만 압니다. 명령(`bash`)으로 만든 변경은 목록에 나오지 않습니다. 저장소의 최신 채팅 300개(만든 시점 기준)를 읽고, 더 있으면 그렇다고 알려 줍니다. 최대 100행을 보여 줍니다. 이름이 바뀐 파일은 도구가 쓴 이름으로 표시됩니다. 폴더가 저장소 밖에 있는 채팅(같은 파일로 가는 다른 경로를 통한 경우도 포함)은 세지 않습니다. dsh를 시작한 뒤 처음 열 때는 저장소의 모든 채팅 로그를 읽습니다(채팅 275개에 약 4초). 그 뒤로 열 때는 그 이후에 바뀐 채팅만 읽습니다.
230
- - **채팅 행의 Git 브랜치**는 현재 브랜치가 아니라, 마지막 턴이 시작되거나 끝날 때 채팅 폴더가 있던 브랜치를 보여 줍니다. 턴 밖에서 브랜치를 바꾸면 다음 턴 뒤에 표시됩니다. 이 버전 이전의 채팅에는 다음 턴까지 배지가 표시되지 않습니다. 배지는 dsh의 채팅 행 마크업 안에 들어갑니다(dsh에는 그곳에 슬롯이 없습니다). dsh 업데이트로 그 마크업이 바뀌면 배지가 표시되지 않습니다. 채팅 위의 프로젝트 행 이름이 브랜치와 같으면(예: “채팅별 브랜치” 폴더) 채팅 행에 배지가 표시되지 않지만, “하나의 목록”에서는 계속 표시됩니다.
231
+ - **채팅 행의 Git 브랜치**는 현재 브랜치가 아니라, 마지막 턴이 시작되거나 끝날 때 채팅 폴더가 있던 브랜치를 보여 줍니다. 턴 밖에서 브랜치를 바꾸면 다음 턴 뒤에 표시됩니다. 이 버전 이전의 채팅에는 다음 턴까지 배지가 표시되지 않습니다. 배지는 dsh의 채팅 행 마크업 안에 들어갑니다(dsh에는 그곳에 슬롯이 없습니다). dsh 업데이트로 그 마크업이 바뀌면 배지가 표시되지 않습니다. 배지는 “하나의 목록”에서만 표시됩니다.
231
232
  - **채팅별 브랜치**를 계획 모드에서 쓸 때: dsh는 `/plan <메시지>`를 메시지가 아니라 명령으로 보냅니다. 그래서 Composer Plus가 dsh 입력란에서 명령 전송을 가로챕니다(공개 API가 아님). dsh 업데이트로 이것이 바뀌면, **새 브랜치**를 고른 상태의 `/plan <메시지>`는 열린 새 채팅에서 dsh 자체 명령으로 실행됩니다. Host가 새 채팅에서 계획 모드를 켜지 못하면 브랜치 폴더는 남고 메시지는 보내지지 않습니다. 따라서 새 채팅이 기본 모드에서 파일을 바꾸지 않습니다.
232
233
  - **채팅별 브랜치**: 채팅의 브랜치 폴더(`<project>/.worktrees/<name>`)가 삭제되면(예: 채팅 자신의 에이전트가 worktree를 제거하고 브랜치를 삭제할 때) 채팅의 다음 단계에서 채팅이 그 폴더 밖으로 옮겨집니다. 브랜치 폴더의 프로젝트는 사이드바에서 사라지고, 채팅은 그룹 없음 아래에 표시되며 열린 상태로 유지됩니다. dsh 0.2.1 이상에서는 채팅이 프로젝트의 기본 폴더에서 계속되고, 모델은 새 폴더에 대한 안내를 받습니다. dsh 0.2.0에서는 채팅이 삭제된 폴더를 그대로 사용합니다. 그곳에서 실행하는 명령은 새 채팅을 시작할 때까지 실패합니다. 어떤 채팅도 사용하지 않는 삭제된 브랜치의 프로젝트도 사이드바에서 사라집니다. Composer Plus는 시작할 때와 30초마다 브랜치 폴더를 확인하며, 사이드바 필터가 없어도 됩니다. 채팅이 옮겨지는 동안 같은 저장소의 **새 브랜치**는 "다시 시도하세요"라고 답합니다. 스위치를 끄면 dsh 자체 오류("working-directory: directory does not exist")가 다시 표시됩니다.
233
234
  - **작업 공간 트리의 브랜치**은(는) 클릭 없이 git에 씁니다. 채팅을 옮길 때 프로젝트 폴더를 이전 브랜치로 되돌리고(`git switch`) worktree를 추가합니다(`git worktree add`). 브랜치, worktree, 파일은 절대 삭제하지 않습니다. dsh는 채팅의 폴더를 바꿀 수 없으므로, 옮겨진 채팅은 복사본(새 id를 가진 dsh 자체 포크)이고 이전 채팅은 보관됩니다. 복사본은 멈춘 작업을 이어서 합니다. 브랜치가 생겼을 때 실행 중이던 도구 호출은 거부로 끝나고, 에이전트는 새 폴더에서 그것을 다시 실행합니다. 이전 채팅의 목표는 함께 옮겨지지 않습니다. 폴더가 저장소의 메인 폴더인 채팅만 옮겨지며, 그 턴에서 만들고 전환한 브랜치(`git switch -c`, `git checkout -b`)일 때만 옮겨집니다. `git branch`만으로 만든 브랜치, 커밋되지 않은 변경이 있는 폴더, 연결된 worktree, 하위 폴더는 아무것도 옮기지 않습니다. 트리에는 `<project>/.worktrees/` 바로 아래에 있고 브랜치가 있는 worktree만 표시됩니다. 분리된(detached) worktree나 다른 위치의 worktree는 표시되지 않습니다. 복사본은 원래 채팅이 열려 있던 채팅일 때만 저절로 열립니다(플러그인은 dsh의 사이드바 행에서 이를 읽습니다). 그 외에는 브랜치 프로젝트에 있습니다.
@@ -248,7 +249,7 @@ dsh `0.2.0-rc.2`(데스크톱과 웹)와 `0.2.1-rc.2`(웹)에서 테스트했습
248
249
  - **새 채팅에서 계속**은 채팅(메시지, 도구 호출, 각 도구 결과의 끝부분. 최대 약 60,000자, 가장 최근 부분)을 채팅 자체의 모델에 보냅니다. 인계 메모는 결정이나 파일을 빠뜨릴 수 있으므로, 시작하기 전에 읽어 보세요. 새 채팅은 메모와 링크된 채팅만 압니다(dsh는 이전 채팅을 읽기 전용 컨텍스트로 첨부합니다). 새 채팅의 모델 컨텍스트는 작게 시작하고, 이전 채팅은 그대로 남습니다. 채팅마다 한 번에 메모 작성이나 시작 하나만 실행됩니다.
249
250
  - **컨텍스트 구성**은 dsh 자체의 규칙(토큰당 약 4자)으로 추정값을 보여 줍니다. dsh의 컨텍스트 링과 같은 규칙이며, 모델 자체의 계산과 다를 수 있습니다. 도구 정의는 가장 최근 요청의 것입니다. 채팅 로그에 있는 그대로의 컨텍스트를 보여 주며, 지금 실행 중인 턴은 다음 단계 뒤에 나타납니다.
250
251
  - **계획된 단계**는 모델이 실제로 계획할 때만 토큰을 절약합니다. 켜져 있는 동안에는 모델이 계획하지 않는 채팅에서도 모든 요청에 `plan_next_steps` 도구와 짧은 지침(약 500토큰)이 포함됩니다. 조건은 적힌 내용만 증명합니다(예: 빌드 종료 코드가 0이었음). 작업이 올바르다는 것은 증명하지 않습니다. `ok`는 dsh 자체의 결과 표시(`[exit code: N]`, 시간 초과, 샌드박스 거부)를 읽습니다. 0이 아닌 종료 코드 없이 실패한 명령은 통과로 처리됩니다. 단계는 한 번에 하나씩 실행되며, 동시에 준비된 두 단계는 모델에게 돌아갑니다. 단계의 메시지는 채팅 모델의 어시스턴트 메시지로 저장됩니다(dsh에는 플러그인이 쓴 메시지를 나타내는 표시가 없습니다). 그래서 그 텍스트에 Composer Plus가 실행했다고 적혀 있습니다. Tether에는 없습니다.
251
- - **작업 보드**는 dsh의 프로젝트만 압니다. 프로젝트 밖의 채팅에서는 **모든 프로젝트**가 표시되고, 채팅별 브랜치 폴더(`<project>/.worktrees/<name>`)는 해당 프로젝트로 취급됩니다. 프로젝트 ID(`acme#12`)는 폴더 이름에서 오며, dsh에서 프로젝트 이름을 바꿔도 그대로입니다. "보드를 최신 상태로 유지" 규칙은 그 프로젝트에 열린 작업이 있을 때만 채팅에 들어갑니다. 한 번 받은 채팅은 규칙을 유지합니다. 에이전트에게는 **완료**, **백로그**, 수동 작업을 사용자에게 맡기라고 알리지만, 도구가 이를 거부하지는 않습니다. 에이전트가 그런 카드를 옮길 수도 있습니다. 기능이 켜져 있는 동안 보드 도구는 모든 채팅의 도구 목록에 들어갑니다(요청마다 약 1,000 토큰). 보드를 쓰지 않으면 끄세요. 페이지가 보이는 동안 2초마다 보드를 읽으므로, 에이전트의 변경은 그 시간 안에 표시됩니다. 에이전트가 같은 필드를 바꾸는 동안 사용자가 편집한 텍스트는 저장되지 않습니다. 패널에 새 텍스트와 이유가 표시됩니다. 이미지, 컴퓨터 간 git 동기화, 네트워크 공유는 없습니다(Kanzo에는 있습니다). 아이디어와 디자인은 emanuele-em의 [Kanzo](https://github.com/emanuele-em/kanzo)(AGPL-3.0)에서 왔습니다. Composer Plus는 그 코드를 쓰지 않습니다.
252
+ - **작업 보드**는 dsh가 이 창에 나열하는 채팅을 보여 줍니다. 프로젝트 밖의 채팅은 **모든 프로젝트**에만 표시되고, 채팅별 브랜치 폴더(`<project>/.worktrees/<name>`)는 해당 프로젝트로 취급됩니다. 카드의 열은 채팅의 실시간 상태이므로 카드를 끌어 옮길 수 없습니다. 채팅은 턴이 끝나면(오류나 중지 후에도) **완료**로 가고, 다시 실행되면 **진행 중**으로 돌아갑니다. 초록색 점은 dsh 자체의 완료 점이며, dsh는 이 점을 이 창에만 보관합니다. 페이지를 다시 불러오면 끝난 채팅이 이 점 없이 표시됩니다. **완료**에는 최신 채팅 50개가 표시됩니다(나머지는 **이전 작업 N개 보기**로 볼 수 있습니다). 태그는 시작한 작업마다 모델 호출 한 번으로 만들어지므로 틀릴 수 있으며, 보드에서 시작하지 않은 채팅에는 태그가 없습니다. 제목은 dsh 자체의 채팅 제목입니다(dsh의 제목 서비스가 채팅의 모델로 만듭니다). 제목이 오기 전까지 카드에는 프롬프트의 첫 줄이 표시됩니다. dsh가 아는 `/` 명령(`/plan`, `/goal`)으로 시작하는 프롬프트는 그 명령으로 실행됩니다. **답변**은 채팅의 가장 최근 요청에만 답합니다. 그 요청이 다른 곳(다른 창, Tether, 자동 검토)에서 이미 답변되었거나 채팅이 새로운 것을 물으면, 패널이 그렇게 알려 주고 아무것도 보내지 않습니다. 이전 버전에는 댓글과 에이전트 도구가 있는 작업 목록이 있었지만 이제 없어졌으며, 예전 `board.json`은 표시되지 않습니다. 아이디어와 디자인은 emanuele-em의 [Kanzo](https://github.com/emanuele-em/kanzo)(AGPL-3.0)에서 왔습니다. Composer Plus는 그 코드를 쓰지 않습니다.
252
253
  - **중지 후 보낸 메시지 먼저 실행**은 채팅을 중지한 뒤에만 동작합니다(또는 실패한 턴 뒤, 아직 대기열이 있는 채팅을 열 때). 턴이 실행되는 중에 보낸 메시지는 여전히 대기열 끝에서 기다립니다. 내가 대기열에 넣은 메시지만 앞지릅니다. 대기열에 목표 라운드나 질문 답변이 기다리고 있으면 dsh 자체 순서가 유지됩니다. 공개 API가 아닌 dsh의 일부(중지된 턴이 아직 끝나는 중인지)를 읽습니다. dsh 업데이트로 그 이름이 바뀌면, 메시지는 그 턴이 끝난 뒤에만 앞으로 옮겨집니다. 서브에이전트 채팅은 dsh 자체 순서를 유지합니다.
253
254
  - **프로젝트 메모리**는 채팅의 첫 폴더(dsh의 프로젝트 폴더)에 속합니다. `cd`로 폴더를 바꾼 채팅은 첫 프로젝트의 메모리를 계속 씁니다. 같은 파일로 가는 다른 경로로 연 같은 폴더는 메모리를 공유합니다. 채팅은 시작할 때 메모리 섹션을 고정하므로, 나중에 저장한 메모는 다음 채팅부터 보입니다(`memory_recall`은 바로 찾습니다). 검토는 모델이 남기기로 정한 것만 남깁니다. 사실을 놓치거나 틀린 것을 남길 수 있으니, **메모리 열기**에서 확인하고 그곳에서 바꾸거나, dsh가 닫혀 있을 때 파일을 직접 고치세요. **메모리 열기**는 선택한 프로젝트의 메모와 전역 메모(모든 메모를 선택하면 모든 프로젝트, 최대 약 60,000자이며 나머지는 개수만 표시되고 그 요청에서는 바꿀 수 없음)와 사용자의 글을 채팅의 모델이 아니라 dsh의 기본 모델로 보냅니다. 미리 보기는 Mac에 30분 동안, dsh를 다시 시작할 때까지 보관됩니다. 그사이 검토나 에이전트가 메모를 바꾸면 **적용**이 거부되므로 다시 미리 보기를 하세요. **적용**은 미리 보기의 변경을 모두 저장하거나 하나도 저장하지 않습니다. 저장할 수 없는 변경이 하나라도 있으면(예: MEMORY.md가 가득 찬 경우) 메모는 그대로 남고 이유가 표시됩니다. 사용자 메시지가 있는 턴이 끝날 때마다 모델 호출이 한 번 듭니다. 호출이 실패하면 다음 턴 뒤에 같은 메시지를 다시 읽습니다. 서브에이전트 채팅은 검토하지 않습니다. 아이디어와 파일 형식은 [DS Bot](https://github.com/Fei2411/DS-Bot)(Apache-2.0)에서 왔습니다. Composer Plus는 그 코드를 쓰지 않으며, DS Bot 자체의 메모리를 읽거나 쓰지 않습니다.
254
255
  - **백업**은 고정된 폴더 하나, `~/Desktop/dsh-backups`만 씁니다(dsh-backup의 기본 폴더이므로 그 아카이브도 계속 쓸 수 있습니다). 다른 폴더를 고르는 설정은 없습니다. 아카이브 크기는 `cache/`와 `dsh-runtimes/`를 뺀 dsh 홈과 거의 같습니다(측정: Apple Silicon에서 1.6 GB의 파일이 약 30초 만에 830 MB 아카이브가 되었고, 그동안 dsh는 계속 응답했습니다). 읽는 동안 바뀐 파일은 백업이 그 파일을 열었을 때의 상태로 저장됩니다. 그래서 열려 있는 채팅의 로그가 잘린 레코드로 끝날 수 있으며, dsh가 다음에 쓸 때 이를 복구합니다. 마스킹은 yml 파일의 비밀 값을 한 줄에 있는 키 이름(`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 아카이브를 자기 보관 개수에 포함하며 그 아카이브를 삭제할 수 있습니다.
@@ -285,7 +286,7 @@ dsh `0.2.0-rc.2`(데스크톱과 웹)와 `0.2.1-rc.2`(웹)에서 테스트했습
285
286
 
286
287
  **DS Bot의 메모리처럼 에이전트가 채팅이 바뀌어도 내 선호를 기억할 수 있나요?** 네, **프로젝트 메모리**(기본적으로 꺼짐)로 가능합니다. **설정 → Composer Plus**에서 켜세요. 턴이 끝날 때마다 오래 유지되는 선호와 결정이 채팅 프로젝트의 짧은 메모로 저장되고, 그 프로젝트의 새 채팅마다 이를 읽습니다. 에이전트에게 무언가를 기억하라고 하면 바로 저장합니다. 메모를 보거나 바꾸려면 같은 줄의 **메모리 열기**를 누르고 바꿀 내용을 적으세요.
287
288
 
288
- **Kanzo처럼 에이전트와 하나의 작업 보드를 함께 쓸 수 있나요?** 네, **작업 보드**(기본적으로 켜짐)로 가능합니다. 왼쪽 사이드바에서 열고 **새 작업**으로 작업을 추가하세요. 채팅에서 에이전트에게 "보드에서 다음 작업을 가져와"라고 하면, 에이전트가 카드를 **진행 중**으로 옮기고, 한 일을 댓글로 남긴 뒤 **검토**로 옮깁니다. 직접 할 작업은 **수동**으로 표시하세요.
289
+ **모든 채팅을 칸반 보드로 보고 거기서 새 채팅을 시작할 수 있나요?** 네, **작업 보드**(기본적으로 켜짐)로 가능합니다. 왼쪽 사이드바에서 여세요. 각 채팅은 **진행 중**, **검토**(사용자를 기다림) 또는 **완료**에 있는 카드입니다. **새 작업**에는 프롬프트만 입력하면 그 프롬프트로 새 채팅이 시작됩니다. 주황색 카드에서 **답변**을 클릭하면 채팅을 열지 않고 답할 수 있습니다.
289
290
 
290
291
  **dsh-backup처럼 dsh에서 채팅과 설정을 백업할 수 있나요?** 네. **설정 → Composer Plus → 백업 → 지금 백업**을 사용하세요. 같은 아카이브 형식으로 같은 폴더(`~/Desktop/dsh-backups`)에 쓰므로, dsh-backup의 아카이브도 표시되고 복원할 수 있으며, dsh-backup은 삭제해도 됩니다. 정해진 일정으로 백업하려면 **자동 백업**을 켜세요.
291
292
 
@@ -407,7 +408,7 @@ PLAYWRIGHT=/path/to/playwright node test/browser-continue-queue.mjs /path/to/dsh
407
408
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-stop-send.mjs /path/to/dsh/lib/bin.js
408
409
  # Edit queued message in place with images and files (slow fake model) + its thumbnail
409
410
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-edit.mjs /path/to/dsh/lib/bin.js
410
- # Task board: the page, the agent tools (fake model), drag and drop, search, the switch
411
+ # Task board: a prompt starts a chat, AI tags, live columns, Answer on the board, Hide finished, the switch
411
412
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-task-board.mjs /path/to/dsh/lib/bin.js
412
413
  ```
413
414