dsh-composer-plus 1.21.0 → 1.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.ja.md CHANGED
@@ -29,7 +29,7 @@ dsh plugin --profile web add dsh-composer-plus
29
29
 
30
30
  その後、dsh を再起動してください。(CLI はデスクトップのプロファイルにはインストールできません。デスクトップのプロファイルはアプリが管理します。)
31
31
 
32
- > dsh の pnpm は、公開から 24 時間たっていないバージョンをスキップします。リリース直後は、バージョンを指定してください:`dsh-composer-plus@1.21.0`。
32
+ > dsh の pnpm は、公開から 24 時間たっていないバージョンをスキップします。リリース直後は、バージョンを指定してください:`dsh-composer-plus@1.22.0`。
33
33
 
34
34
  ## 機能
35
35
 
@@ -100,7 +100,7 @@ dsh plugin --profile web add dsh-composer-plus
100
100
  | **アプリケーションの言語** | <a id="feature-language"></a>設定 → Composer Plus → **アプリケーションの言語** で、dsh のインターフェース全体を Türkçe、Español、Português (Brasil)、Français、Deutsch、Русский、日本語、한국어、Bahasa Indonesia、Tiếng Việt、हिन्दी のいずれかに切り替えます(下記を参照)。 | <a href="assets/features/language.webp"><img src="assets/features/language.webp" width="160" alt="スクリーンショット: アプリケーションの言語"></a> |
101
101
  | **モバイル接続(iPhone)** | <a id="feature-mobileconnect"></a>[Tether](tether/) アプリを使うと、同じ Wi-Fi で、または [Tailscale](https://tailscale.com) 経由で、iPhone から dsh を使えます。**設定 → Composer Plus** でオンにしてください(この Mac でネットワークポートを開くため、既定ではオフです)。次に、サイドバーの左下にある **モバイル接続** をクリックします。iPhone のカメラ(**Open in Tether** をタップ)または Tether の **Scan code** で QR コードを読み取り、**Connect** をタップして、**Approve** をクリックします。先に Tether をインストールしてください。Tether がないと、カメラはこのコードを開けません。スマートフォンでは、チャットの表示、メッセージの送信(写真付き:入力欄の **+** → Camera、Photos、Paste image)、承認と質問への回答、モデルとエージェントの切り替えができます。ペアリングできる Mac の数に制限はありません。アプリの左上にある Mac の名前で、Mac を切り替えます。**モバイル接続** パネルには、ペアリング済みの iPhone が最後の接続日時とともに表示され、**Remove** でその iPhone をすぐに切断できます。「Tailscale only」はローカルネットワークからの接続を拒否し(共有の Wi-Fi 向け)、アクセスログには接続を試みた相手が表示されます。Tether では、「Settings → Privacy」で Face ID によるアプリのロックを設定できます。 | <a href="assets/features/mobileConnect.webp"><img src="assets/features/mobileConnect.webp" width="160" alt="スクリーンショット: モバイル接続(iPhone)"></a> |
102
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` で閉じます。 | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.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> |
104
104
  | **バックアップ** | <a id="feature-backup"></a>設定 → Composer Plus → **バックアップ** → **今すぐバックアップ** で、dsh のホーム全体(チャット、設定、プラグイン、MCP、スキル)を、チェックサム付きで `~/Desktop/dsh-backups` 内の 1 つのアーカイブに書き込みます。アーカイブ内のシークレットはマスクされます。認証情報ファイル、鍵ファイル(`.pem`、`.key`)、yml 設定の token、secret、password の値は、このコンピュータ上のフォルダーの `vault` にだけ残ります。`cache/`、`dsh-runtimes/`、`node_modules` はアーカイブに入りません(dsh が作り直します)。一覧の各バックアップには、**チェック**(全体を読み取ります)、**別のコンピュータ用**(新しいコンピュータにコピーするフォルダーで、レスキューコンソールを含みます)、**削除** があります。同じフォルダーにある dsh-backup のアーカイブも表示され、使えます。復元するには、dsh を終了してレスキューコンソールを使います。 | <a href="assets/features/backup.webp"><img src="assets/features/backup.webp" width="160" alt="スクリーンショット: バックアップ"></a> |
105
105
  | **自動バックアップ** | <a id="feature-autobackup"></a>**自動バックアップ** をオンにします(既定ではオフです。各コピーは、キャッシュを除いた dsh のホームとほぼ同じ大きさになります)。頻度(**間隔**:6 時間から 7 日、既定は 24 時間)と、残すバックアップの数(**保持**:3 から 14、既定は 7)を選びます。次回の時刻はスイッチの下に表示されます。失敗したバックアップもそこに表示され、30 分後に再試行されます。dsh または Composer Plus が新しいバージョンで起動すると、起動後まもなく、新しいバージョンがデータを長く使う前にスナップショットを作成します(最新の 2 つが残り、**アップグレード前** と表示されます)。 | <a href="assets/features/autoBackup.webp"><img src="assets/features/autoBackup.webp" width="160" alt="スクリーンショット: 自動バックアップ"></a> |
106
106
  | **セッションログのチェック** | <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> |
@@ -215,7 +215,7 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
215
215
  - **チャット行にブランチのラベルがない:** 原因は次のいずれかです。サイドバーが「1つのリスト」表示ではない(「ワークスペース」と「ワークスペースのツリー」では、どのチャット行にもラベルは表示されません)。このバージョンをインストールしてから、そのチャットにターンがない。フォルダーが git リポジトリではない。**チャット行の Git ブランチ** がオフになっている。アップデートの後は、dsh を再起動してください(ブランチはホスト側が記録します)。
216
216
  - **目標チェックで、テストが終了コード 127 または「not found」で終了したと表示される:** Finder や Dock から起動した dsh は、ターミナルより PATH が短いことがあるため、`npm`、`pnpm`、`cargo` が見つかりません。ターミナルから dsh を起動するか、**目標チェック** → **編集** で、フルパスを使った独自のテストコマンドを設定してください。**今すぐ実行** を使うと、すぐに結果が表示されます。
217
217
  - **目標が閉じず、エージェントが作業を続ける:** **目標チェック** が、失敗したテストまたは足りない作業を見つけました。目標の下の行に理由が表示されます(詳細は、結果にポインターを合わせると表示されます)。原因またはテストコマンドを直すか、`/goal` または目標バーで目標を自分で完了してください(その完了はチェックされません)。
218
- - **リリース直後にインストールが失敗する:** バージョンを指定してください(`dsh-composer-plus@1.21.0`)。上のインストールの注記を参照してください。
218
+ - **リリース直後にインストールが失敗する:** バージョンを指定してください(`dsh-composer-plus@1.22.0`)。上のインストールの注記を参照してください。
219
219
  - **今すぐバックアップ で「別のバックアップ操作を実行中です」と表示される:** 別の dsh のウィンドウ、またはレスキューコンソールで操作が実行中です(どちらも、バックアップフォルダーのロックファイル `.composer-plus.lock` を共有します)。完了するまで待ってください。実行中の操作がない場合は、次のクリックで、終了したプロセスのロックを引き継ぎます。
220
220
  - **レスキューコンソールで「dsh is running」と表示される:** まず dsh を終了してください。dsh が本当に閉じている場合、メッセージに示されたファイルはクラッシュで残ったものです。そのファイルを削除して、もう一度試してください。
221
221
  - **復元の後に dsh が起動しない、またはプラグインが見つからない:** プロファイルのプラグインパッケージを、もう一度インストールする必要があります。レスキューコンソールが、復元の後にこれを提案します。または、コンソールが一覧表示する `$DSH_HOME/profiles/` の下の各フォルダーで `pnpm install` を実行してください。vault に入っていなかったシークレット(別のコンピュータ)は、もう一度入力する必要があります。コンソールがそれらを一覧表示します。
@@ -236,6 +236,7 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
236
236
  - dsh のキューには `move` 操作がないため、プラグインのホスト側が、dsh のキューの中でメッセージそのものを移動します(1 回の変更で、同じメッセージのままです)。画像やファイルを含むメッセージも移動できます。移動できるのは自分のメッセージだけです。キュー内の目標のラウンドや質問への回答は、その位置から動きません。ドラッグ中にメッセージの送信が始まった場合は、何も移動せず、そのことを知らせる通知が表示されます。
237
237
  - 新しいバージョンが dsh の設定を何も変更しない場合、dsh 0.2.1 はアップデートをすぐに読み込みます。それ以外の場合と dsh 0.2.0 では、読み込むには dsh を再起動してください。プラグインが dsh を自動で再起動することはありません。dsh のプラグインマネージャーがない Web/CLI プロファイルでは、新しいバージョンがあることを知らせるだけです。
238
238
  - **Composer Plus N の新機能** は、**アプリケーションの言語** の言語でノートを表示します。別の地域を指定した UI 言語には、その基本言語のノートが表示されます(`en-GB` には英語のノート、`zh-TW` には `zh` の中国語のノート)。ノートがない言語(別の言語パックが追加した言語や、`pt-BR` ではない `pt-PT`)では、英語のノートが表示されます。ノートは新しいバージョンに含まれています。実行中のコピーに読み取れるノートファイル(`release-notes.json`)がない場合は、GitHub の英語のノートが表示されます。
239
+ - dsh の実行中にインストールされたバージョン(設定 → プラグイン やコピーしたフォルダーでの更新)は、dsh を再起動するまで読み込まれません。それまでは **Composer Plus のアップデート** に実行中のバージョンが表示され、再起動を求められます。そのバージョンの **Composer Plus N の新機能** ウィンドウは、そのバージョンの最初の起動時に 1 回表示されます。このプラグインを初めてインストールした後の最初の起動ではウィンドウは表示されません。**このバージョンの新機能** で実行中のバージョンのノートを開けます。
239
240
  - **メモを付けて拒否** は、メモを待機中のターンへのメッセージとして送ってから、リクエストを拒否します。dsh はメモをチャットにあなたのメッセージとして表示します。メモの入力欄が開いている間、カードには **キャンセル** と **拒否** だけが表示されるため、誤ってクリックしてリクエストを許可することはありません。`Esc` または **キャンセル** で dsh のボタンが戻ります。空のメモは何も送信しません(dsh 自身の **拒否** を使ってください)。メモを送った後で拒否が失敗した場合(たとえば、その間にリクエストが別の場所で回答された場合)、メモはチャットに残り、モデルは次のステップでそのメモを読みます。dsh にはカードの操作用のスロットがないため、ボタンは dsh の承認カードのマークアップ(`data-approval-key`)に入れています。dsh のアップデートでそのマークアップが変わった場合、ボタンは表示されませんが、dsh 自身の **拒否** はこれまでどおり使えます。メモは最大 4,000 文字です。
240
241
  - **シークレット入力** が隠すのは値の正確な文字列だけです。同じチャットの後のツール結果では、値が `[secret]` に置き換えられます。ただし、エージェントはシェルコマンドでファイルを読み、値を別の形(base64、一部分、空白を入れたもの)で出力できます。その形はモデルに届きます。エージェント自身のファイルツール(read、grep、write、edit)はシークレットのフォルダを開けません。値がよく使われる単語でもある場合、そのチャットの他の結果にも `[secret]` が表示されます。ファイルはターンが終わるまで残ります。ターン中に dsh が終了した場合は、次の起動時に削除されます。1 つのチャットで同時に開けるリクエストは 1 つです。このツールは各モデルリクエストに約 870 文字(推定約 220 トークン)を追加します。使わないときはオフにしてください。
241
242
  - **返信で引用** は、ページに表示されているとおりの文字列を引用します。コードブロック、表、リストは Markdown の記号なしの普通の行になります。選択範囲がある回答で始まって別の回答で終わる場合や、思考過程、ツールの行、自分のメッセージにかかる場合は、ボタンが表示されません。1 つの回答の中で選択してください。dsh には文字選択用のスロットがないため、ボタンは dsh のチャット構造から回答を探します。dsh の更新でこの構造が変わると、ボタンは表示されません。引用が入力欄の末尾に入る場合は、次に入力する行が引用の下から始まるように空行がもう 1 つ入ります。dsh は送信時に末尾の空行を削除します。
@@ -245,7 +246,7 @@ dsh `0.2.0-rc.2`(デスクトップと Web)と `0.2.1-rc.2`(Web)でテ
245
246
  - **入力欄のフォーカスを維持** がフォーカスを戻すのは、`/` コマンドまたはスキルの後だけです。dsh がコマンドを処理する間、入力欄は数ミリ秒だけ読み取り専用になります。そのため、その間に押したキーは失われます。dsh の `/` メニューがまだ開いている場合、`Enter` は強調表示された行を選び、送信はしません。
246
247
  - **質問カードをウィンドウに合わせる**は dsh の質問カードだけを変更し、計画レビューのカードは変更しません。カードは dsh のマークアップ(`data-question-key`、`data-question-scroll`)で見つけます。dsh の更新でこのマークアップが変わると、カードは dsh が描くとおりに表示されます。カードの高さはチャットではなくウィンドウに従います。狭いサイドパネル内のチャットでは、高いカードがチャットの上にはみ出すことがあります。
247
248
  - **チャットのヘッダーをウィンドウに合わせる**は、dsh が生成したクラス名(`_titleRow`、`_titleCluster`、`_crumbs`、`_headerActions`、`_headerUtilities`)でチャットのヘッダーを見つけます。dsh にはヘッダーのレイアウト用のフックがないためです。dsh の更新でこれらの名前が変わると、ヘッダーは dsh の表示のままになります。とても狭いチャット列ではヘッダーが 2〜3 行になり、メッセージの上の領域が低くなります。
248
- - **モバイル接続** は macOS でのみ動作します(`en0`、`openssl`、`swift`、`dns-sd` を使います)。固定のポート 19390 と 19391 を使うため、各 Mac でこれを実行できる dsh は、一度に 1 つだけです(スマートフォンの Mac の一覧では、各 Mac が 1 項目になります)。スマートフォンが通知を受け取るのは、Tether が開いているとき、またはバックグラウンドに移った直後だけです(プッシュサービスはありません)。Tether で「Settings → Notifications → Send notifications」をオンにするまで、Tether は通知を送りません。Tether は、この設定と時間帯をペアリング済みの Mac ごとに別々に保存します。この設定はどの Mac でも初期状態でオフで、オンにしたときに iOS が許可を求めます。iOS アプリは、まだ App Store にありません。Xcode で `tether/ios` からビルドしてください。「Tailscale only」でも、Mac に Wi-Fi または Ethernet のアドレスが必要です(ゲートウェイは、そのアドレスがある場合だけ起動します)。アクセスログは Mac ごとに保存され、最新 200 件の試行だけを残します。1 分以内に繰り返された試行は、新しい行を作らず、同じ行の回数を 1 つ増やします。Tether のアプリのロックは、iPhone のロック画面に表示される通知のプレビューを隠しません。iOS の設定でオフにしてください。Tether の緑の点は Mac に従います。dsh で開いたチャットは、スマートフォンでも点が消えます。Tether で開いたチャットは、スマートフォンでだけ点が消えます。Mac 上の dsh 自身の点は、Mac でそのチャットを開くまで残ります。
249
+ - **モバイル接続** は 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 でそのチャットを開くまで残ります。
249
250
  - **リモートコンピュータ** を使うには、両方の Mac に Tailscale が必要です。また、開く対象の Mac に、この機能をオンにした Composer Plus が必要です。その Mac はスリープしておらず、dsh が動作している必要があります。もう一方のコンピュータは、画面に表示中のチャットの右サイドバーにあるブラウザタブで開きます。このタブはそのチャットに属するため、別のチャットでは、そのチャット自身のサイドバーが表示されます。チャットがない場合(またはブラウザタブのない dsh web の場合)、コンピュータはブラウザのウインドウで開きます。選択メニューが表示されるのは、メイン領域にチャットまたは新しいチャットの画面があるときだけです。タスクボードでは表示されません。ポート 19392 を使います(ほかのコンピュータを受け入れられる dsh は、各 Mac で 1 つだけです)。別のコンピュータのページの中で開いたコンピュータには選択メニューがないため、そこから 3 台目の Mac は開けません。
250
251
  - セッションリンクは、チャットの中で機能します。クリックしても、そのチャットは開きません。**メッセージリンクをコピー** で作ったリンクでメッセージを開けるのは、dsh 0.2.1 以降で、チャットの中のメッセージから開いた場合だけです(dsh 0.2.0 にはユーザーテキストのルールがないため、リンクはコピーされますが、プレーンテキストとして表示されます)。ロールバックで取り除かれたメッセージや、圧縮によって dsh が読み込む履歴から削除されたメッセージは表示できません。その場合、リンクがそのことを表示します。🔗 ボタンは、dsh のメッセージ行に取り付けています。dsh のアップデートでそのマークアップが変わった場合、ボタンは表示されません。
251
252
  - **すべて既読にする** は、公開 API ではない dsh の一部(dsh のセッション状態の `completionUnread` 一覧)を通じて、dsh 自身の未読の点を変更します。dsh のアップデートでこの名前が変わった場合、この項目は表示されません。この項目は dsh のプロジェクトの「…」メニューに入りますが、このメニューにはプラグイン用のスロットがありません。dsh がこのメニューを変更した場合も、この項目は表示されません。
@@ -423,7 +424,7 @@ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-agentbox-ideas.mjs /path
423
424
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-t3code-ideas.mjs /path/to/dsh/lib/bin.js
424
425
  # every Settings feature row shows a loading screenshot and a ? link to its README row
425
426
  PLAYWRIGHT=/path/to/playwright node test/browser-settings-shots.mjs /path/to/dsh/lib/bin.js
426
- # What's new after an update: the release notes show once, Esc and Close close them
427
+ # 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
427
428
  PLAYWRIGHT=/path/to/playwright node test/browser-whats-new.mjs /path/to/dsh/lib/bin.js
428
429
  # README feature anchors (the ? links) on github.com, headless: each #feature-… shows the start of its row
429
430
  PLAYWRIGHT=/path/to/playwright node test/browser-readme-anchors.mjs
package/README.ko.md CHANGED
@@ -29,7 +29,7 @@ dsh plugin --profile web add dsh-composer-plus
29
29
 
30
30
  그런 다음 dsh를 다시 시작하세요. (CLI는 데스크톱 프로필에 설치할 수 없습니다. 데스크톱 프로필은 앱이 관리합니다.)
31
31
 
32
- > dsh의 pnpm은 게시된 지 24시간이 지나지 않은 버전을 건너뜁니다. 릴리스 직후에는 버전을 붙여서 설치하세요: `dsh-composer-plus@1.21.0`.
32
+ > dsh의 pnpm은 게시된 지 24시간이 지나지 않은 버전을 건너뜁니다. 릴리스 직후에는 버전을 붙여서 설치하세요: `dsh-composer-plus@1.22.0`.
33
33
 
34
34
  ## 기능
35
35
 
@@ -100,7 +100,7 @@ dsh plugin --profile web add dsh-composer-plus
100
100
  | **애플리케이션 언어** | <a id="feature-language"></a>설정 → Composer Plus → **애플리케이션 언어**에서 dsh 인터페이스 전체를 Türkçe, Español, Português (Brasil), Français, Deutsch, Русский, 日本語, 한국어, Bahasa Indonesia, Tiếng Việt, हिन्दी 중 하나로 바꿉니다(아래 참고). | <a href="assets/features/language.webp"><img src="assets/features/language.webp" width="160" alt="스크린샷: 애플리케이션 언어"></a> |
101
101
  | **모바일 연결(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> |
102
102
  | **원격 컴퓨터** | <a id="feature-remotecomputers"></a>[Tailscale](https://tailscale.com)을 통해 다른 Mac의 dsh를 열고, 그 채팅을 여기서 이어 가세요. 각 Mac의 **설정 → Composer Plus**에서 켜세요(네트워크 포트를 열기 때문에 기본적으로 꺼져 있습니다). 열려는 Mac에서 **다른 컴퓨터에서 이 Mac 열기 허용**을 켜고, **페어링 링크 만들기**를 클릭한 뒤 링크를 복사하세요. 이 Mac에서는 채팅 제목 왼쪽의 컴퓨터 선택 메뉴에서 **컴퓨터 추가…** 항목을 고르고, 링크를 붙여 넣은 뒤 **연결**을 클릭하세요. 그다음 다른 Mac에서 **승인**을 클릭하세요. 이제 선택 메뉴에 **이 Mac**과 내 컴퓨터들이 표시됩니다. 하나를 고르면 그 컴퓨터의 dsh가 오른쪽 사이드바의 브라우저 탭(또는 브라우저 창)에서 열리며, 그 컴퓨터의 채팅, 도구, 파일을 그대로 쓸 수 있습니다. 설정 패널에서 컴퓨터의 이름을 바꾸거나 제거할 수 있고, 이 Mac을 열 수 있는 컴퓨터 목록도 볼 수 있습니다(**제거**를 누르면 그 컴퓨터의 연결이 즉시 끊깁니다). | <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의 새로운 기능** 창이 그 버전의 릴리스 노트를 **애플리케이션 언어**에서 고른 언어로 한 번 보여 줍니다(노트는 새 버전에 함께 들어 있으며 추가 네트워크 호출은 없습니다. 그 언어의 노트가 없으면 영어 노트를 보여 줍니다). **닫기** 또는 `Esc`로 닫습니다. | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.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의 새로운 기능** 창이 그 버전의 릴리스 노트를 **애플리케이션 언어**에서 고른 언어로 한 번 보여 줍니다(노트는 새 버전에 함께 들어 있으며 추가 네트워크 호출은 없습니다. 그 언어의 노트가 없으면 영어 노트를 보여 줍니다). **닫기** 또는 `Esc`로 닫습니다. 설정 → 플러그인 이나 복사한 폴더로 업데이트한 뒤에도 새 버전마다 한 번 이 창이 표시됩니다. 처음 설치할 때는 표시되지 않습니다. 업데이트 행의 **이 버전의 새로운 기능** 으로 다시 열 수 있습니다. 실행 중인 버전보다 새 버전이 디스크에 있으면 행에 dsh를 다시 시작하라고 표시됩니다. | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.webp" width="160" alt="스크린샷: 자동 업데이트"></a> |
104
104
  | **백업** | <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> |
105
105
  | **자동 백업** | <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> |
106
106
  | **세션 로그 점검** | <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> |
@@ -215,7 +215,7 @@ dsh `0.2.0-rc.2`(데스크톱과 웹)와 `0.2.1-rc.2`(웹)에서 테스트했습
215
215
  - **채팅 행에 브랜치 배지가 없음:** 사이드바가 “하나의 목록” 보기가 아니거나(“작업 공간”과 “작업 공간 트리”에서는 어떤 채팅 행에도 배지가 없음), 이 버전을 설치한 뒤 그 채팅에 턴이 없었거나, 폴더가 git 저장소가 아니거나, **채팅 행의 Git 브랜치**가 꺼져 있습니다. 업데이트한 뒤에는 dsh를 다시 시작하세요(브랜치는 Host 쪽이 기록합니다).
216
216
  - **목표 확인에 테스트가 종료 코드 127 또는 "not found"로 끝났다고 표시됨:** Finder나 Dock에서 시작한 dsh는 터미널보다 PATH가 짧을 수 있어서 `npm`, `pnpm`, `cargo`를 찾지 못합니다. 터미널에서 dsh를 시작하거나, **목표 확인** → **편집**에서 전체 경로를 쓴 테스트 명령을 직접 정하세요. **지금 실행**을 누르면 결과가 바로 표시됩니다.
217
217
  - **목표가 닫히지 않고 에이전트가 계속 작업함:** **목표 확인**이 실패한 테스트나 남은 작업을 찾았습니다. 목표 아래의 행에 이유가 표시됩니다(자세한 내용은 결과에 포인터를 올려 보세요). 원인이나 테스트 명령을 고치거나, `/goal` 또는 목표 바로 목표를 직접 완료하세요(이 완료는 확인하지 않습니다).
218
- - **릴리스 직후 설치 실패:** 버전을 붙여서 설치하세요(`dsh-composer-plus@1.21.0`). 위의 설치 안내를 참고하세요.
218
+ - **릴리스 직후 설치 실패:** 버전을 붙여서 설치하세요(`dsh-composer-plus@1.22.0`). 위의 설치 안내를 참고하세요.
219
219
  - **지금 백업에서 "다른 백업 작업이 실행 중입니다"라고 표시됨:** 다른 dsh 창이나 복구 콘솔에서 작업이 실행 중입니다(둘은 백업 폴더의 잠금 파일 `.composer-plus.lock`을 함께 씁니다). 작업이 끝날 때까지 기다리세요. 실행 중인 작업이 없으면, 다음에 클릭할 때 종료된 프로세스의 잠금을 넘겨받습니다.
220
220
  - **복구 콘솔에 "dsh is running"이라고 표시됨:** 먼저 dsh를 종료하세요. dsh가 정말 닫혀 있다면, 메시지에 나온 파일은 비정상 종료로 남은 것입니다. 그 파일을 삭제하고 다시 시도하세요.
221
221
  - **복원 후 dsh가 시작되지 않거나 플러그인이 없음:** 프로필의 플러그인 패키지를 다시 설치해야 합니다. 복구 콘솔이 복원 후에 이를 제안합니다. 또는 콘솔이 나열하는 `$DSH_HOME/profiles/` 아래의 각 폴더에서 `pnpm install`을 실행하세요. vault에 없던 비밀 값(다른 컴퓨터)은 다시 입력해야 합니다. 콘솔이 그 목록을 보여 줍니다.
@@ -236,6 +236,7 @@ dsh `0.2.0-rc.2`(데스크톱과 웹)와 `0.2.1-rc.2`(웹)에서 테스트했습
236
236
  - dsh의 대기열에는 `move` 동작이 없습니다. 그래서 플러그인의 Host 쪽이 dsh의 대기열 안에서 대기 중인 메시지 자체를 옮깁니다(한 번의 변경, 같은 메시지). 이미지나 파일이 있는 메시지도 이동할 수 있습니다. 내 메시지만 이동할 수 있습니다. 대기열에 있는 목표 라운드나 질문에 대한 답변은 제자리에 남습니다. 끄는 중에 메시지 전송이 시작되면 아무것도 이동하지 않고, 알림으로 이를 알려 줍니다.
237
237
  - 새 버전이 dsh 설정을 하나도 바꾸지 않으면 dsh 0.2.1은 업데이트를 바로 로드합니다. 그 밖의 경우와 dsh 0.2.0에서는 업데이트를 로드하려면 dsh를 다시 시작하세요. 플러그인은 dsh를 대신 재시작하지 않습니다. dsh 플러그인 관리자가 없는 웹/CLI 프로필은 새 버전을 알리기만 합니다.
238
238
  - **Composer Plus N의 새로운 기능**은 **애플리케이션 언어**의 언어로 노트를 보여 줍니다. 다른 지역이 붙은 UI 언어는 기본 언어의 노트를 받습니다(`en-GB`는 영어 노트, `zh-TW`는 `zh`의 중국어 노트). 노트가 없는 언어(다른 언어 팩이 추가한 언어, 또는 `pt-BR`이 아닌 `pt-PT`)에서는 영어 노트를 보여 줍니다. 노트는 새 버전에 함께 들어 있습니다. 실행 중인 사본에 읽을 수 있는 노트 파일(`release-notes.json`)이 없으면 GitHub의 영어 노트를 보여 줍니다.
239
+ - dsh가 실행 중일 때 설치된 버전(설정 → 플러그인 이나 복사한 폴더로 한 업데이트)은 dsh를 다시 시작해야 로드됩니다. 그때까지 **Composer Plus 업데이트** 는 실행 중인 버전을 보여 주고 다시 시작하라고 합니다. 그 버전의 **Composer Plus N의 새로운 기능** 창은 그 버전의 첫 시작 때 한 번 표시됩니다. 이 플러그인을 처음 설치한 뒤의 첫 시작에는 창이 표시되지 않습니다. **이 버전의 새로운 기능** 은 실행 중인 버전의 노트를 엽니다.
239
240
  - **메모와 함께 거부**는 메모를 대기 중인 턴에 메시지로 보낸 다음 요청을 거부합니다. dsh는 메모를 채팅에 사용자의 메시지로 표시합니다. 메모 입력란이 열려 있는 동안 카드에는 **취소**와 **거부**만 표시되므로, 실수로 클릭해도 요청이 허용되지 않습니다. `Esc` 또는 **취소**를 누르면 dsh의 버튼이 다시 나타납니다. 빈 메모는 아무것도 보내지 않습니다(dsh 자체의 **거부**를 쓰세요). 메모를 보낸 뒤 거부가 실패하면(예를 들어 그사이에 요청이 다른 곳에서 응답된 경우) 메모는 채팅에 남고, 모델은 다음 단계에서 메모를 읽습니다. dsh에는 카드 동작용 슬롯이 없어서 버튼을 dsh의 승인 카드 마크업(`data-approval-key`)에 넣습니다. dsh 업데이트로 그 마크업이 바뀌면 버튼은 표시되지 않고, dsh 자체의 **거부**는 전과 같이 동작합니다. 메모는 최대 4,000자까지 쓸 수 있습니다.
240
241
  - **비밀 값 입력**은 값의 정확한 문자열만 숨깁니다. 같은 채팅의 이후 도구 결과에서는 값이 `[secret]`으로 바뀝니다. 하지만 에이전트는 셸 명령으로 파일을 읽고 값을 다른 형태(base64, 일부분, 공백을 넣은 형태)로 출력할 수 있으며, 그 형태는 모델에 전달됩니다. 에이전트 자체의 파일 도구(read, grep, write, edit)는 비밀 값 폴더를 열 수 없습니다. 값이 흔한 단어이기도 하면 그 채팅의 다른 결과에도 `[secret]`이 표시됩니다. 파일은 턴이 끝날 때까지 남습니다. 턴 도중 dsh가 종료되면 다음 시작 시 삭제됩니다. 한 채팅에는 한 번에 하나의 요청만 열려 있을 수 있습니다. 이 도구는 모델 요청마다 약 870자(추정 약 220토큰)를 더합니다. 사용하지 않을 때는 끄세요.
241
242
  - **답장에 인용**은 페이지에 보이는 그대로 텍스트를 인용합니다. 코드 블록, 표, 목록은 Markdown 기호 없이 일반 줄로 들어갑니다. 선택이 한 답변에서 시작해 다른 답변에서 끝나거나 생각 과정, 도구 행, 본인 메시지에 걸치면 버튼이 나타나지 않습니다. 한 답변 안에서 선택하세요. dsh에는 텍스트 선택용 슬롯이 없어서 버튼은 dsh의 채팅 구조로 답변을 찾습니다. dsh 업데이트로 이 구조가 바뀌면 버튼이 나타나지 않습니다. 인용이 입력란 끝에 들어가면 다음에 입력하는 줄이 그 아래에서 시작하도록 빈 줄이 하나 더 들어갑니다. dsh는 보낼 때 끝의 빈 줄을 지웁니다.
@@ -245,7 +246,7 @@ dsh `0.2.0-rc.2`(데스크톱과 웹)와 `0.2.1-rc.2`(웹)에서 테스트했습
245
246
  - **입력란 포커스 유지**는 `/` 명령이나 스킬을 보낸 뒤에만 포커스를 돌려줍니다. dsh가 명령을 처리하는 몇 밀리초 동안 입력란이 읽기 전용이므로, 그동안 누른 키는 사라집니다. dsh의 `/` 메뉴가 아직 열려 있으면 `Enter`는 강조된 행을 선택하고 메시지를 보내지 않습니다.
246
247
  - **질문 카드를 창에 맞추기**는 dsh의 질문 카드만 바꾸고 계획 검토 카드는 바꾸지 않습니다. 카드는 dsh의 마크업(`data-question-key`, `data-question-scroll`)으로 찾습니다. dsh 업데이트로 이 마크업이 바뀌면 카드는 dsh가 그리는 대로 보입니다. 카드 높이는 채팅이 아니라 창을 따릅니다. 좁은 사이드 패널 안의 채팅에서는 높은 카드가 채팅 위로 넘칠 수 있습니다.
247
248
  - **채팅 헤더를 창에 맞추기**는 dsh가 생성한 클래스 이름(`_titleRow`, `_titleCluster`, `_crumbs`, `_headerActions`, `_headerUtilities`)으로 채팅 헤더를 찾습니다. dsh에 헤더 레이아웃용 훅이 없기 때문입니다. dsh 업데이트로 이 이름이 바뀌면 헤더는 dsh가 그리는 그대로 보입니다. 아주 좁은 채팅 열에서는 헤더가 두세 줄을 차지할 수 있어 메시지 위의 공간이 줄어듭니다.
248
- - **모바일 연결**은 macOS에서만 작동합니다(`en0`, `openssl`, `swift`, `dns-sd` 사용). 고정 포트 19390과 19391을 쓰므로, Mac마다 한 번에 dsh 하나에서만 실행할 수 있습니다(각 Mac은 휴대폰의 Mac 목록에서 항목 하나입니다). 휴대폰은 Tether가 열려 있거나 막 백그라운드로 간 동안에만 알림을 받습니다(푸시 서비스 없음). Tether에서 "Settings → Notifications → Send notifications"를 켜기 전에는 Tether가 알림을 보내지 않습니다. Tether는 이 설정과 시간대를 페어링된 Mac마다 따로 저장합니다. 이 설정은 Mac마다 기본적으로 꺼져 있으며, 켤 때 iOS가 권한을 요청합니다. iOS 앱은 아직 App Store에 없습니다. Xcode로 `tether/ios`에서 빌드하세요. "Tailscale only"를 켜도 Mac에 Wi-Fi 또는 이더넷 주소가 있어야 합니다(게이트웨이는 그런 주소가 있을 때만 시작됩니다). 액세스 로그는 Mac마다 따로 있으며, 가장 최근의 시도 200개만 보관합니다. 1분 안에 반복된 시도는 새 행을 만들지 않고 같은 행의 횟수를 하나 늘립니다. Tether의 앱 잠금은 iPhone 잠금 화면의 알림 미리보기를 숨기지 않습니다. iOS 설정에서 끄세요. Tether의 초록 점은 Mac을 따릅니다. dsh에서 연 채팅은 휴대폰에서도 점이 사라집니다. Tether에서 연 채팅은 휴대폰에서만 점이 사라집니다. Mac에 있는 dsh 자체의 점은 Mac에서 그 채팅을 열 때까지 남습니다.
249
+ - **모바일 연결**은 macOS에서만 작동합니다(`en0`, `openssl`, `swift`, `dns-sd` 사용). 고정 포트 19390과 19391을 쓰므로, Mac마다 한 번에 dsh 하나에서만 실행할 수 있습니다(각 Mac은 휴대폰의 Mac 목록에서 항목 하나입니다). `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 또는 이더넷 주소가 있어야 합니다(게이트웨이는 그런 주소가 있을 때만 시작됩니다). 액세스 로그는 Mac마다 따로 있으며, 가장 최근의 시도 200개만 보관합니다. 1분 안에 반복된 시도는 새 행을 만들지 않고 같은 행의 횟수를 하나 늘립니다. 각 알림에는 Mac과 채팅의 프로젝트(`Studio Mac · recipe-box`), 채팅 제목, 본문이 표시됩니다. Turn finished에는 에이전트의 마지막 답변이 표시됩니다. APNs 키가 있으면 이 본문은 Apple의 푸시 서비스를 거칩니다. Tether의 앱 잠금은 iPhone 잠금 화면의 알림 미리보기를 숨기지 않습니다. iOS 설정에서 끄세요. Tether의 초록 점은 Mac을 따릅니다. dsh에서 연 채팅은 휴대폰에서도 점이 사라집니다. Tether에서 연 채팅은 휴대폰에서만 점이 사라집니다. Mac에 있는 dsh 자체의 점은 Mac에서 그 채팅을 열 때까지 남습니다.
249
250
  - **원격 컴퓨터**를 쓰려면 두 Mac 모두에 Tailscale이 있어야 하고, 여는 대상 Mac에 이 기능을 켠 Composer Plus가 있어야 합니다. 그 Mac은 잠자기 상태가 아니어야 하며 dsh가 실행 중이어야 합니다. 다른 컴퓨터는 화면에 있는 채팅의 오른쪽 사이드바 브라우저 탭에서 열립니다. 이 탭은 그 채팅에 속하므로, 다른 채팅에서는 그 채팅의 사이드바가 표시됩니다. 채팅이 없으면(또는 브라우저 탭이 없는 dsh web에서는) 컴퓨터가 브라우저 창에서 열립니다. 선택 메뉴는 기본 영역에 채팅이나 새 채팅 화면이 있을 때만 표시되며, 작업 보드에서는 표시되지 않습니다. 포트 19392를 씁니다(Mac마다 다른 컴퓨터를 받아들일 수 있는 dsh는 하나뿐입니다). 다른 컴퓨터의 페이지 안에서 연 컴퓨터에는 선택 메뉴가 없으므로, 거기서 세 번째 Mac을 열 수 없습니다.
250
251
  - 세션 링크는 채팅 안에서 작동하지만, 클릭해도 채팅이 열리지는 않습니다. **메시지 링크 복사**로 만든 링크는 dsh 0.2.1 이상에서만, 그리고 채팅 안의 메시지에서만 그 메시지를 엽니다(dsh 0.2.0에는 사용자 텍스트 규칙이 없으므로, 링크는 복사되지만 일반 텍스트로 보입니다). 되돌리기로 빠진 메시지나, 압축으로 dsh가 불러오는 기록에서 빠진 메시지는 보여 줄 수 없습니다. 이때 링크가 그렇다고 알려 줍니다. 🔗 버튼은 dsh의 메시지 행에 붙습니다. dsh 업데이트로 그 마크업이 바뀌면 버튼이 표시되지 않습니다.
251
252
  - **모두 읽음으로 표시**는 공개 API가 아닌 dsh의 일부(dsh 세션 상태의 `completionUnread` 목록)를 통해 dsh 자체의 읽지 않음 점을 바꿉니다. dsh 업데이트로 이 이름이 바뀌면 항목이 표시되지 않습니다. 이 항목은 dsh의 프로젝트 "…" 메뉴에 들어가는데, 이 메뉴에는 플러그인용 슬롯이 없습니다. dsh가 이 메뉴를 바꾸면 이 항목도 표시되지 않습니다.
@@ -423,7 +424,7 @@ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-agentbox-ideas.mjs /path
423
424
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-t3code-ideas.mjs /path/to/dsh/lib/bin.js
424
425
  # every Settings feature row shows a loading screenshot and a ? link to its README row
425
426
  PLAYWRIGHT=/path/to/playwright node test/browser-settings-shots.mjs /path/to/dsh/lib/bin.js
426
- # What's new after an update: the release notes show once, Esc and Close close them
427
+ # 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
427
428
  PLAYWRIGHT=/path/to/playwright node test/browser-whats-new.mjs /path/to/dsh/lib/bin.js
428
429
  # README feature anchors (the ? links) on github.com, headless: each #feature-… shows the start of its row
429
430
  PLAYWRIGHT=/path/to/playwright node test/browser-readme-anchors.mjs
package/README.md CHANGED
@@ -27,7 +27,7 @@ dsh plugin --profile web add dsh-composer-plus
27
27
 
28
28
  Then restart dsh. (The CLI can't install into the desktop profile; the app manages it.)
29
29
 
30
- > dsh's pnpm skips versions younger than 24 hours. Right after a release, add the version: `dsh-composer-plus@1.21.0`.
30
+ > dsh's pnpm skips versions younger than 24 hours. Right after a release, add the version: `dsh-composer-plus@1.22.0`.
31
31
 
32
32
  ## Features
33
33
 
@@ -98,7 +98,7 @@ Then restart dsh. (The CLI can't install into the desktop profile; the app manag
98
98
  | **Application language** | <a id="feature-language"></a>Settings → Composer Plus → **Application language** switches the whole dsh interface to Türkçe, Español, Português (Brasil), Français, Deutsch, Русский, 日本語, 한국어, Bahasa Indonesia, Tiếng Việt or हिन्दी (see below). | <a href="assets/features/language.webp"><img src="assets/features/language.webp" width="160" alt="Screenshot: Application language"></a> |
99
99
  | **Mobile connect (iPhone)** | <a id="feature-mobileconnect"></a>Use dsh from your iPhone with the [Tether](tether/) app, on the same Wi-Fi or over [Tailscale](https://tailscale.com). Switch it on in **Settings → Composer Plus** (it is off by default, because it opens a network port on this Mac). Then click **Mobile connect** at the bottom left of the sidebar: scan the QR code with the iPhone Camera (tap **Open in Tether**) or with **Scan code** in Tether, tap **Connect** and click **Approve**. Tether must be installed first: without it the Camera cannot open the code. The phone shows your chats, sends messages (with photos: the composer's **+** → Camera, Photos or Paste image), answers approvals and questions, and switches models and agents. Pair as many Macs as you like: the Mac name at the top left of the app switches between them. The **Mobile connect** panel lists the paired iPhones with their last connection: **Remove** cuts one off at once. **Tailscale only** refuses the local network (for a shared Wi-Fi), and the access log shows who tried to connect. In Tether, **Settings → Privacy** locks the app with Face ID. | <a href="assets/features/mobileConnect.webp"><img src="assets/features/mobileConnect.webp" width="160" alt="Screenshot: Mobile connect (iPhone)"></a> |
100
100
  | **Remote computers** | <a id="feature-remotecomputers"></a>Open the dsh of your other Macs over [Tailscale](https://tailscale.com) and continue their chats here. Switch it on in **Settings → Composer Plus** on each Mac (it is off by default, because it opens network ports). On the Mac that you want to open, switch on **Let other computers open this Mac**, click **Create pairing link** and copy the link. On this Mac, pick **Add a computer…** in the computer picker at the left of the chat title, paste the link, click **Connect**, then click **Approve** on the other Mac. The picker then lists **This Mac** and your computers: pick one and its dsh opens in the Browser tab of the right sidebar (or in a browser window), with its own chats, tools and files. The Settings panel renames and removes computers, and lists the computers that can open this Mac (**Remove** cuts one off at once). | <a href="assets/features/remoteComputers.webp"><img src="assets/features/remoteComputers.webp" width="160" alt="Screenshot: Remote computers"></a> |
101
- | **Automatic updates** | <a id="feature-autoupdate"></a>When dsh starts, the plugin checks the [latest GitHub release](https://github.com/furkancak1r/dsh-composer-plus/releases/latest). If it is newer and already on npm, it installs that exact version through dsh's own plugin manager (the same path as Settings → Plugins) and notifies you. Restart dsh to load it. **Settings → Composer Plus → Composer Plus updates** shows the version and has **Check for updates** / **Update now**. The first time dsh starts with the new version, a **What’s new in Composer Plus N** window shows the release notes of that version once, in the language of **Application language** (they come with the new version, no extra network call; a language without notes shows the English notes); **Close** or `Esc` closes it. | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.webp" width="160" alt="Screenshot: Automatic updates"></a> |
101
+ | **Automatic updates** | <a id="feature-autoupdate"></a>When dsh starts, the plugin checks the [latest GitHub release](https://github.com/furkancak1r/dsh-composer-plus/releases/latest). If it is newer and already on npm, it installs that exact version through dsh's own plugin manager (the same path as Settings → Plugins) and notifies you. Restart dsh to load it. **Settings → Composer Plus → Composer Plus updates** shows the version and has **Check for updates** / **Update now**. The first time dsh starts with the new version, a **What’s new in Composer Plus N** window shows the release notes of that version once, in the language of **Application language** (they come with the new version, no extra network call; a language without notes shows the English notes); **Close** or `Esc` closes it. The window also shows after an update from Settings → Plugins or a copied folder, once per new version; not at the first install. **What’s new in this version** in the update row opens it again. When a newer version is on disk than the one that runs, the row says to restart dsh. | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.webp" width="160" alt="Screenshot: Automatic updates"></a> |
102
102
  | **Backup** | <a id="feature-backup"></a>Settings → Composer Plus → **Backup** → **Back up now** writes your whole dsh home (chats, settings, plugins, MCP, skills) into one archive in `~/Desktop/dsh-backups`, with a checksum. Secrets are masked in the archive: credential files, key files (`.pem`, `.key`) and the token, secret and password values of the yml settings stay on this computer only, in the folder's `vault`. `cache/`, `dsh-runtimes/` and `node_modules` are not archived (dsh makes them again). Each backup in the list has **Check** (reads it fully), **For another computer** (a folder to copy to the new computer, with the rescue console) and **Delete**. dsh-backup's archives in the same folder show and work too. To restore, quit dsh and use the rescue console. | <a href="assets/features/backup.webp"><img src="assets/features/backup.webp" width="160" alt="Screenshot: Backup"></a> |
103
103
  | **Automatic backup** | <a id="feature-autobackup"></a>Switch on **Automatic backup** (off by default: each copy is about as large as your dsh home without its cache). Choose how often (**Every**: 6 hours to 7 days, 24 hours by default) and how many backups stay (**Keep**: 3 to 14, 7 by default). The next time shows under the switch; a failed backup shows there too and is tried again 30 minutes later. When dsh or Composer Plus starts with a new version, a snapshot comes soon after the start, before the new version has used your data for long (the two newest stay, marked **Before an upgrade**). | <a href="assets/features/autoBackup.webp"><img src="assets/features/autoBackup.webp" width="160" alt="Screenshot: Automatic backup"></a> |
104
104
  | **Session log check** | <a id="feature-sessiondoctor"></a>**Check session logs** reads every chat's log and lists the ones that dsh cannot open (a broken frame, a cut record, a wrong sequence number). A torn tail is not listed: dsh repairs it itself. **Repair from backups** puts back the copy from the newest backup that has a healthy one and keeps the damaged file next to it (`.corrupt-<time>`). Messages written after that backup are not in the copy. A chat that is open in this dsh is not repaired here: quit dsh and repair it in the rescue console. | <a href="assets/features/sessionDoctor.webp"><img src="assets/features/sessionDoctor.webp" width="160" alt="Screenshot: Session log check"></a> |
@@ -213,7 +213,7 @@ Tested on dsh `0.2.0-rc.2` (desktop and web) and `0.2.1-rc.2` (web). CI runs the
213
213
  - **No branch pill on a chat row:** the sidebar is not in “In one list” (in “WorkSpace” and “Workspace Tree”, no chat row shows a pill), the chat had no turn since you installed this version, its folder is not a git repository, or **Git branch on chat rows** is off. After an update, restart dsh (the Host half records the branch).
214
214
  - **Goal check says the test exited with code 127 or "not found":** dsh started from the Finder or the Dock can have a shorter PATH than your terminal, so it does not find `npm`, `pnpm` or `cargo`. Start dsh from a terminal, or set your own test command with the full path under **Goal check** → **Edit**. **Run now** shows the result at once.
215
215
  - **The goal does not close and the agent keeps working:** **Goal check** found a failing test or missing work; the row under the goal shows why (hover the result for the details). Fix the cause or the test command, or complete the goal yourself with `/goal` or the goal bar (that is not checked).
216
- - **Install fails right after a release:** add the version (`dsh-composer-plus@1.21.0`), see the install note above.
216
+ - **Install fails right after a release:** add the version (`dsh-composer-plus@1.22.0`), see the install note above.
217
217
  - **Back up now says "another backup action is running":** an action runs in another dsh window or in the rescue console (they share a lock file, `.composer-plus.lock`, in the backup folder). Wait for it. If no action runs, the lock of a closed process is taken over at the next click.
218
218
  - **The rescue console says "dsh is running":** quit dsh first. If dsh is really closed, the file named in the message is left from a crash: remove it and try again.
219
219
  - **After a restore, dsh does not start or a plugin is missing:** the plugin packages of a profile must be installed again. The rescue console offers it after a restore; or run `pnpm install` in each folder under `$DSH_HOME/profiles/` that it lists. Secrets that were not in the vault (another computer) must be entered again: the console lists them.
@@ -234,6 +234,7 @@ Tested on dsh `0.2.0-rc.2` (desktop and web) and `0.2.1-rc.2` (web). CI runs the
234
234
  - dsh's queue has no `move` action, so the plugin's Host moves the queued message itself in dsh's queue (one change, the same message). Messages with images or files move too. Only your own messages move: a goal round or a question reply in the queue stays where it is. If a message starts to send while you drag, nothing moves and a notice says so.
235
235
  - dsh 0.2.1 loads an update at once when the new version changes no dsh settings; otherwise, and on dsh 0.2.0, restart dsh to load it. The plugin never restarts dsh for you. Web/CLI profiles without dsh's plugin manager only report a new version.
236
236
  - **What’s new in Composer Plus N** shows the notes in the language of **Application language**. A UI language with another region gets the notes of its base language (`en-GB` gets the English notes, `zh-TW` the Chinese notes of `zh`). A language without notes (one that another language pack adds, or `pt-PT`, which is not `pt-BR`) shows the English notes. The notes come with the new version. When the running copy has no readable notes file (`release-notes.json`), the window shows the English notes from GitHub.
237
+ - A version that dsh installed while it runs (an update from Settings → Plugins or a copied folder) loads only after a dsh restart: until then, **Composer Plus updates** shows the running version and asks for a restart. Its **What’s new in Composer Plus N** window shows once at the first start of that version. The first start after this plugin is installed shows no window; **What’s new in this version** opens the notes of the running version.
237
238
  - **Reject with note** sends the note as a message into the waiting turn, then rejects the request; dsh shows the note in the chat as your message. While the note field is open, the card shows only **Cancel** and **Reject**, so a click cannot allow the request by mistake; `Esc` or **Cancel** brings dsh's buttons back. An empty note sends nothing (use dsh's own **Reject**). If the rejection fails after the note went (for example, the request was answered elsewhere in the meantime), the note stays in the chat and the model reads it at its next step. The button goes into dsh's approval card markup (`data-approval-key`), because dsh has no slot for card actions; if a dsh update changes that markup, the button is not shown and dsh's own **Reject** works as before. A note can have at most 4,000 characters.
238
239
  - **Secret input** hides only the exact text of a value: `[secret]` replaces it in the later tool results of the same chat. The agent can still read the file with a shell command and print the value in another form (base64, a part of it, with spaces), and that form reaches the model. The agent's own file tools (read, grep, write, edit) cannot open the secrets folder. When the value is also a common word, other results of that chat show `[secret]` too. The file stays until the turn ends; when dsh quits during the turn, the next start deletes it. A chat can have one open request at a time. The tool adds about 870 characters (about 220 tokens, estimated) to each model request: switch it off when you do not use it.
239
240
  - **Quote in reply** quotes the text as the page shows it: a code block, a table or a list comes as plain lines, without its Markdown marks. A selection that starts in one answer and ends in another, or that touches the reasoning, a tool row or your own message, shows no button: select inside one answer. The button finds an answer through dsh's chat markup, because dsh has no slot for a text selection; if a dsh update changes that markup, the button does not show. When the quote ends the field, one more empty line goes after it so the next line that you type starts below it; dsh removes empty lines at the end when it sends.
@@ -243,7 +244,7 @@ Tested on dsh `0.2.0-rc.2` (desktop and web) and `0.2.1-rc.2` (web). CI runs the
243
244
  - **Keep composer focus** gives the focus back only after a `/` command or skill. While dsh resolves the command, the composer stays read-only for a few milliseconds, so keys pressed in that time are lost. If dsh's `/` menu is still open, `Enter` picks the highlighted row and does not send.
244
245
  - **Fit question card to window** changes only dsh's question card, not the plan review card. It finds the card by dsh's markup (`data-question-key`, `data-question-scroll`); if a dsh update changes that markup, the card shows as dsh draws it. The card's height follows the window, not the chat: in a chat in a narrow side panel, a tall card can still reach above the chat.
245
246
  - **Fit chat header to window** finds dsh's chat header by its generated class names (`_titleRow`, `_titleCluster`, `_crumbs`, `_headerActions`, `_headerUtilities`), because dsh has no layout hook for it. If a dsh update renames them, the header shows as dsh draws it. In a very narrow chat column the header can take two or three lines, so the chat area above the messages gets lower.
246
- - **Mobile connect** works on macOS only (it uses `en0`, `openssl`, `swift` and `dns-sd`). It uses fixed ports 19390 and 19391, so only one dsh on each Mac can run it at a time (each Mac is one entry in the phone's Mac list). The phone gets notifications only while Tether is open or just went to the background (no push service). Tether sends them only after you switch on **Settings → Notifications → Send notifications** in Tether. Tether keeps this switch and its hours separately for each paired Mac. The switch is off by default for each Mac, and iOS asks for the permission when you switch it on. The iOS app is not on the App Store yet: build it from `tether/ios` with Xcode. **Tailscale only** still needs a Wi-Fi or Ethernet address on the Mac (the gateway starts only with one). The access log is per Mac and keeps only the newest 200 attempts; a repeated attempt within a minute counts up one row. Tether's app lock does not hide notification previews on the iPhone Lock Screen: turn them off in iOS Settings. Tether's green dots follow the Mac: a chat that you open in dsh loses its dot on the phone too. A chat that you open in Tether loses its dot on the phones only; dsh's own dot on the Mac stays until you open the chat there.
247
+ - **Mobile connect** works on macOS only (it uses `en0`, `openssl`, `swift` and `dns-sd`). It uses fixed ports 19390 and 19391, so only one dsh on each Mac can run it at a time (each Mac is one entry in the phone's Mac list). With an APNs key in `apns.json` (see `tether/README.md`), the Mac sends the notifications through Apple's push service, so they come also while Tether is closed; the Mac must be awake with dsh open. Without the key, the phone gets them only while Tether is open or just went to the background. Tether sends them only after you switch on **Settings → Notifications → Send notifications** in Tether. Tether keeps this switch and its hours separately for each paired Mac. The switch is off by default for each Mac, and iOS asks for the permission when you switch it on. The iOS app is not on the App Store yet: build it from `tether/ios` with Xcode. **Tailscale only** still needs a Wi-Fi or Ethernet address on the Mac (the gateway starts only with one). The access log is per Mac and keeps only the newest 200 attempts; a repeated attempt within a minute counts up one row. Each notification shows the Mac and the chat's project (`Studio Mac · recipe-box`), the chat's title and the text: Turn finished shows the agent's last reply. With the APNs key, this text goes through Apple's push service. Tether's app lock does not hide notification previews on the iPhone Lock Screen: turn them off in iOS Settings. Tether's green dots follow the Mac: a chat that you open in dsh loses its dot on the phone too. A chat that you open in Tether loses its dot on the phones only; dsh's own dot on the Mac stays until you open the chat there.
247
248
  - **Remote computers** needs Tailscale on both Macs, and Composer Plus with this feature on the Mac that you open. That Mac must be awake with dsh running. The other computer opens in the Browser tab of the right sidebar of the chat on screen: the tab belongs to that chat, so another chat shows its own sidebar. Without a chat (or on dsh web without its Browser tab), the computer opens in a browser window. The picker shows only while a chat or the New chat screen is in the main area, not on the Task board. It uses port 19392 (only one dsh on each Mac can let other computers in). A computer that you opened inside another computer's page has no picker, so you cannot open a third Mac from there.
248
249
  - A session link works inside chats; clicking it does not open the chat. A **Copy message link** link opens its message only on dsh 0.2.1 and later, and only from a message in a chat (dsh 0.2.0 has no user-text rules, so there the link is copied but shows as plain text). A message that a rollback took out, or that compaction removed from the history that dsh loads, cannot be shown: the link then says so. The 🔗 buttons attach to dsh's message rows; if a dsh update changes that markup, they do not show.
249
250
  - **Mark all as read** changes dsh's own unread dots through a part of dsh that is not a public API (the `completionUnread` list of dsh's session status). If a dsh update renames it, the item does not show. The item goes into dsh's project "…" menu, which has no slot for plugins; if dsh changes that menu, the item does not show either.
@@ -421,7 +422,7 @@ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-agentbox-ideas.mjs /path
421
422
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-t3code-ideas.mjs /path/to/dsh/lib/bin.js
422
423
  # every Settings feature row shows a loading screenshot and a ? link to its README row
423
424
  PLAYWRIGHT=/path/to/playwright node test/browser-settings-shots.mjs /path/to/dsh/lib/bin.js
424
- # What's new after an update: the release notes show once, Esc and Close close them
425
+ # 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
425
426
  PLAYWRIGHT=/path/to/playwright node test/browser-whats-new.mjs /path/to/dsh/lib/bin.js
426
427
  # README feature anchors (the ? links) on github.com, headless: each #feature-… shows the start of its row
427
428
  PLAYWRIGHT=/path/to/playwright node test/browser-readme-anchors.mjs
package/README.pt-BR.md CHANGED
@@ -29,7 +29,7 @@ dsh plugin --profile web add dsh-composer-plus
29
29
 
30
30
  Depois, reinicie o dsh. (A CLI não consegue instalar no perfil desktop; quem gerencia esse perfil é o app.)
31
31
 
32
- > O pnpm do dsh ignora versões publicadas há menos de 24 horas. Logo depois de uma nova versão, informe a versão: `dsh-composer-plus@1.21.0`.
32
+ > O pnpm do dsh ignora versões publicadas há menos de 24 horas. Logo depois de uma nova versão, informe a versão: `dsh-composer-plus@1.22.0`.
33
33
 
34
34
  ## Recursos
35
35
 
@@ -100,7 +100,7 @@ Depois, reinicie o dsh. (A CLI não consegue instalar no perfil desktop; quem ge
100
100
  | **Idioma do aplicativo** | <a id="feature-language"></a>Configurações → Composer Plus → **Idioma do aplicativo** muda toda a interface do dsh para Türkçe, Español, Português (Brasil), Français, Deutsch, Русский, 日本語, 한국어, Bahasa Indonesia, Tiếng Việt ou हिन्दी (veja abaixo). | <a href="assets/features/language.webp"><img src="assets/features/language.webp" width="160" alt="Captura de tela: Idioma do aplicativo"></a> |
101
101
  | **Conexão móvel (iPhone)** | <a id="feature-mobileconnect"></a>Use o dsh no seu iPhone com o app [Tether](tether/), na mesma rede Wi-Fi ou pelo [Tailscale](https://tailscale.com). Ative em **Configurações → Composer Plus** (o recurso vem desativado por padrão, porque abre uma porta de rede neste Mac). Depois, clique em **Conexão móvel** no canto inferior esquerdo da barra lateral: leia o código QR com a Câmera do iPhone (toque em **Open in Tether**) ou com **Scan code** no Tether, toque em **Connect** e clique em **Approve**. Instale o Tether antes: sem ele, a Câmera não consegue abrir o código. O celular mostra seus chats, envia mensagens (com fotos: o **+** do editor de mensagens → Camera, Photos ou Paste image), responde a aprovações e perguntas, e troca de modelo e de agente. Pareie quantos Macs quiser: o nome do Mac no canto superior esquerdo do app alterna entre eles. O painel **Conexão móvel** lista os iPhones pareados com a última conexão de cada um: **Remove** desconecta um deles na hora. “Tailscale only” recusa a rede local (para um Wi-Fi compartilhado), e o registro de acesso mostra quem tentou se conectar. No Tether, “Settings → Privacy” bloqueia o app com o Face ID. | <a href="assets/features/mobileConnect.webp"><img src="assets/features/mobileConnect.webp" width="160" alt="Captura de tela: Conexão móvel (iPhone)"></a> |
102
102
  | **Computadores remotos** | <a id="feature-remotecomputers"></a>Abra o dsh dos seus outros Macs pelo [Tailscale](https://tailscale.com) e continue os chats deles aqui. Ative em **Configurações → Composer Plus** em cada Mac (o recurso vem desativado por padrão, porque abre portas de rede). No Mac que você quer abrir, ative **Permitir que outros computadores abram este Mac**, clique em **Criar link de pareamento** e copie o link. Neste Mac, escolha **Adicionar um computador…** no seletor de computadores, à esquerda do título do chat, cole o link e clique em **Conectar**. Depois, clique em **Aprovar** no outro Mac. A partir daí, o seletor lista **Este Mac** e os seus computadores: escolha um, e o dsh dele abre na aba Navegador da barra lateral direita (ou em uma janela do navegador), com os próprios chats, ferramentas e arquivos. O painel de Configurações renomeia e remove computadores, e lista os computadores que podem abrir este Mac (**Remover** desconecta um deles na hora). | <a href="assets/features/remoteComputers.webp"><img src="assets/features/remoteComputers.webp" width="160" alt="Captura de tela: Computadores remotos"></a> |
103
- | **Atualizações automáticas** | <a id="feature-autoupdate"></a>Quando o dsh inicia, o plugin verifica a [versão mais recente no GitHub](https://github.com/furkancak1r/dsh-composer-plus/releases/latest). Se ela for mais nova e já estiver no npm, o plugin instala exatamente essa versão pelo próprio gerenciador de plugins do dsh (o mesmo caminho de Configurações → Plugins) e avisa você. Reinicie o dsh para carregá-la. **Configurações → Composer Plus → Atualizações do Composer Plus** mostra a versão e tem **Verificar atualizações** / **Atualizar agora**. Na primeira vez que o dsh abre com a nova versão, uma janela **Novidades do Composer Plus N** mostra uma vez as notas dessa versão no idioma de **Idioma do aplicativo** (elas vêm com a nova versão, sem outra chamada de rede; um idioma sem notas mostra as notas em inglês); **Fechar** ou `Esc` a fecha. | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.webp" width="160" alt="Captura de tela: Atualizações automáticas"></a> |
103
+ | **Atualizações automáticas** | <a id="feature-autoupdate"></a>Quando o dsh inicia, o plugin verifica a [versão mais recente no GitHub](https://github.com/furkancak1r/dsh-composer-plus/releases/latest). Se ela for mais nova e já estiver no npm, o plugin instala exatamente essa versão pelo próprio gerenciador de plugins do dsh (o mesmo caminho de Configurações → Plugins) e avisa você. Reinicie o dsh para carregá-la. **Configurações → Composer Plus → Atualizações do Composer Plus** mostra a versão e tem **Verificar atualizações** / **Atualizar agora**. Na primeira vez que o dsh abre com a nova versão, uma janela **Novidades do Composer Plus N** mostra uma vez as notas dessa versão no idioma de **Idioma do aplicativo** (elas vêm com a nova versão, sem outra chamada de rede; um idioma sem notas mostra as notas em inglês); **Fechar** ou `Esc` a fecha. A janela também aparece após uma atualização por Configurações → Plugins ou por uma pasta copiada, uma vez por versão nova; não na primeira instalação. **Novidades desta versão** na linha de atualizações a abre de novo. Se houver no disco uma versão mais nova que a que está em execução, a linha pede para reiniciar o dsh. | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.webp" width="160" alt="Captura de tela: Atualizações automáticas"></a> |
104
104
  | **Backup** | <a id="feature-backup"></a>Configurações → Composer Plus → **Backup** → **Fazer backup agora** grava toda a sua pasta home do dsh (chats, configurações, plugins, MCP, skills) em um único arquivo compactado em `~/Desktop/dsh-backups`, com checksum. Os segredos ficam mascarados no arquivo compactado: arquivos de credenciais, arquivos de chave (`.pem`, `.key`) e os valores token, secret e password das configurações yml ficam só neste computador, no `vault` da pasta. `cache/`, `dsh-runtimes/` e `node_modules` não entram no arquivo compactado (o dsh os cria de novo). Cada backup da lista tem **Verificar** (lê o backup inteiro), **Para outro computador** (uma pasta para copiar para o novo computador, com o console de resgate) e **Excluir**. Os arquivos compactados do dsh-backup na mesma pasta também aparecem e funcionam. Para restaurar, saia do dsh e use o console de resgate. | <a href="assets/features/backup.webp"><img src="assets/features/backup.webp" width="160" alt="Captura de tela: Backup"></a> |
105
105
  | **Backup automático** | <a id="feature-autobackup"></a>Ative **Backup automático** (desativado por padrão: cada cópia tem mais ou menos o tamanho da sua pasta home do dsh sem o cache). Escolha a frequência (**A cada**: de 6 horas a 7 dias, 24 horas por padrão) e quantos backups ficam guardados (**Manter**: de 3 a 14, 7 por padrão). O horário do próximo backup aparece abaixo da chave; um backup que falhou também aparece ali e é tentado de novo 30 minutos depois. Quando o dsh ou o Composer Plus inicia com uma nova versão, um snapshot é feito logo após o início, antes que a nova versão use seus dados por muito tempo (os dois mais recentes ficam guardados, marcados como **Antes de uma atualização**). | <a href="assets/features/autoBackup.webp"><img src="assets/features/autoBackup.webp" width="160" alt="Captura de tela: Backup automático"></a> |
106
106
  | **Verificação de logs de sessão** | <a id="feature-sessiondoctor"></a>**Verificar logs de sessão** lê o log de cada chat e lista os que o dsh não consegue abrir (um frame quebrado, um registro cortado, um número de sequência errado). Um final incompleto não entra na lista: o próprio dsh o repara. **Reparar a partir dos backups** coloca de volta a cópia do backup mais recente que tenha uma cópia íntegra e mantém o arquivo danificado ao lado dela (`.corrupt-<hora>`). As mensagens escritas depois desse backup não estão na cópia. Um chat aberto neste dsh não é reparado aqui: saia do dsh e repare-o no console de resgate. | <a href="assets/features/sessionDoctor.webp"><img src="assets/features/sessionDoctor.webp" width="160" alt="Captura de tela: Verificação de logs de sessão"></a> |
@@ -215,7 +215,7 @@ Testado no dsh `0.2.0-rc.2` (desktop e web) e `0.2.1-rc.2` (web). A CI executa o
215
215
  - **Nenhuma etiqueta de branch em uma linha de chat:** a barra lateral não está em “Em uma única lista” (em “Workspace” e “Árvore de workspaces”, nenhuma linha de chat mostra uma etiqueta), o chat não teve nenhum turno desde que você instalou esta versão, a pasta dele não é um repositório git, ou **Branch do Git nas linhas de chat** está desativado. Depois de uma atualização, reinicie o dsh (a parte Host registra o branch).
216
216
  - **Verificação da meta diz que o teste saiu com o código 127 ou "not found":** o dsh iniciado pelo Finder ou pelo Dock pode ter um PATH mais curto que o do seu terminal, então ele não encontra `npm`, `pnpm` ou `cargo`. Inicie o dsh a partir de um terminal ou defina o seu próprio comando de teste com o caminho completo em **Verificação da meta** → **Editar**. **Executar agora** mostra o resultado na hora.
217
217
  - **A meta não fecha e o agente continua trabalhando:** **Verificação da meta** encontrou um teste com falha ou trabalho faltando; a linha abaixo da meta mostra o motivo (passe o mouse sobre o resultado para ver os detalhes). Corrija a causa ou o comando de teste, ou conclua a meta você mesmo com `/goal` ou com a barra da meta (isso não é verificado).
218
- - **A instalação falha logo depois de uma nova versão:** informe a versão (`dsh-composer-plus@1.21.0`); veja a nota de instalação acima.
218
+ - **A instalação falha logo depois de uma nova versão:** informe a versão (`dsh-composer-plus@1.22.0`); veja a nota de instalação acima.
219
219
  - **Fazer backup agora diz "Outra ação de backup está em andamento":** uma ação está em execução em outra janela do dsh ou no console de resgate (eles compartilham um arquivo de bloqueio, `.composer-plus.lock`, na pasta de backups). Aguarde até ela terminar. Se nenhuma ação estiver em execução, o próximo clique assume o bloqueio de um processo encerrado.
220
220
  - **O console de resgate diz "dsh is running":** feche o dsh primeiro. Se o dsh estiver mesmo fechado, o arquivo citado na mensagem sobrou de uma falha: remova-o e tente de novo.
221
221
  - **Depois de uma restauração, o dsh não inicia ou falta um plugin:** os pacotes de plugin de um perfil precisam ser instalados de novo. O console de resgate oferece isso depois de uma restauração; ou execute `pnpm install` em cada pasta de `$DSH_HOME/profiles/` que ele listar. Os segredos que não estavam no vault (outro computador) precisam ser informados de novo: o console os lista.
@@ -236,6 +236,7 @@ Testado no dsh `0.2.0-rc.2` (desktop e web) e `0.2.1-rc.2` (web). A CI executa o
236
236
  - A fila do dsh não tem uma ação `move`, então a parte Host do plugin move a própria mensagem na fila do dsh (uma única alteração, a mesma mensagem). Mensagens com imagens ou arquivos também são movidas. Só as suas próprias mensagens são movidas: uma rodada de meta ou uma resposta a uma pergunta na fila fica onde está. Se uma mensagem começar a ser enviada enquanto você arrasta, nada é movido e um aviso informa isso.
237
237
  - O dsh 0.2.1 carrega uma atualização imediatamente quando a nova versão não muda nenhuma configuração do dsh; caso contrário, e no dsh 0.2.0, reinicie o dsh para carregá-la. O plugin nunca reinicia o dsh por você. Perfis web/CLI sem o gerenciador de plugins do dsh só avisam que há uma nova versão.
238
238
  - **Novidades do Composer Plus N** mostra as notas no idioma de **Idioma do aplicativo**. Um idioma da interface com outra região recebe as notas do seu idioma base (`en-GB` recebe as notas em inglês, e `zh-TW`, as notas em chinês de `zh`). Um idioma sem notas (um que outro pacote de idioma adiciona, ou `pt-PT`, que não é `pt-BR`) mostra as notas em inglês. As notas vêm com a nova versão. Se a cópia em execução não tiver um arquivo de notas legível (`release-notes.json`), a janela mostra as notas em inglês do GitHub.
239
+ - Uma versão instalada enquanto o dsh está em execução (uma atualização por Configurações → Plugins ou por uma pasta copiada) só carrega depois de reiniciar o dsh: até lá, **Atualizações do Composer Plus** mostra a versão em execução e pede para reiniciar. A janela **Novidades do Composer Plus N** dessa versão aparece uma vez na primeira inicialização dela. A primeira inicialização depois de instalar este plugin não mostra janela; **Novidades desta versão** abre as notas da versão em execução.
239
240
  - **Rejeitar com nota** envia a nota como uma mensagem no turno que espera e depois rejeita a solicitação; o dsh mostra a nota no chat como uma mensagem sua. Enquanto o campo da nota está aberto, o cartão mostra só **Cancelar** e **Rejeitar**, então um clique não pode permitir a solicitação por engano; `Esc` ou **Cancelar** traz de volta os botões do dsh. Uma nota vazia não envia nada (use o próprio **Rejeitar** do dsh). Se a rejeição falhar depois que a nota foi enviada (por exemplo, a solicitação foi respondida em outro lugar nesse meio-tempo), a nota fica no chat e o modelo a lê no próximo passo dele. O botão fica na marcação do cartão de aprovação do dsh (`data-approval-key`), porque o dsh não tem um espaço para ações do cartão; se uma atualização do dsh mudar essa marcação, o botão não aparece e o próprio **Rejeitar** do dsh funciona como antes. Uma nota pode ter no máximo 4.000 caracteres.
240
241
  - **Entrada secreta** esconde só o texto exato de um valor: `[secret]` o substitui nos resultados de ferramenta posteriores do mesmo chat. O agente ainda pode ler o arquivo com um comando de shell e imprimir o valor de outra forma (base64, uma parte, com espaços), e essa forma chega ao modelo. As ferramentas de arquivo do próprio agente (read, grep, write, edit) não conseguem abrir a pasta de segredos. Se o valor também for uma palavra comum, outros resultados desse chat também mostram `[secret]`. O arquivo fica até o turno terminar; se o dsh fechar durante o turno, a próxima inicialização o apaga. Um chat pode ter um só pedido aberto por vez. A ferramenta adiciona cerca de 870 caracteres (cerca de 220 tokens, estimado) a cada solicitação ao modelo: desative-a quando não a usar.
241
242
  - **Citar na resposta** cita o texto como a página o mostra: um bloco de código, uma tabela ou uma lista vêm como linhas simples, sem as marcas de Markdown. Uma seleção que começa em uma resposta e termina em outra, ou que toca o raciocínio, uma linha de ferramenta ou sua própria mensagem, não mostra o botão: selecione dentro de uma só resposta. O botão encontra a resposta pela estrutura do chat do dsh, porque o dsh não tem um slot para seleção de texto; se uma atualização do dsh mudar essa estrutura, o botão não aparece. Quando a citação fica no fim do campo, mais uma linha vazia entra depois dela para que a próxima linha digitada comece abaixo; o dsh remove as linhas vazias do fim ao enviar.
@@ -245,7 +246,7 @@ Testado no dsh `0.2.0-rc.2` (desktop e web) e `0.2.1-rc.2` (web). A CI executa o
245
246
  - **Manter o foco no editor** só devolve o foco depois de um comando `/` ou de uma skill. Enquanto o dsh resolve o comando, o editor de mensagens fica somente leitura por alguns milissegundos, então as teclas pressionadas nesse tempo se perdem. Se o menu `/` do dsh ainda estiver aberto, `Enter` escolhe a linha destacada e não envia.
246
247
  - **Ajustar o cartão de pergunta à janela** muda só o cartão de pergunta do dsh, não o cartão de revisão do plano. Ele encontra o cartão pela marcação do dsh (`data-question-key`, `data-question-scroll`); se uma atualização do dsh mudar essa marcação, o cartão aparece como o dsh o desenha. A altura do cartão segue a janela, não o chat: em um chat dentro de um painel lateral estreito, um cartão alto ainda pode passar do topo do chat.
247
248
  - **Ajustar o cabeçalho do chat à janela** encontra o cabeçalho do chat do dsh pelos nomes de classe gerados (`_titleRow`, `_titleCluster`, `_crumbs`, `_headerActions`, `_headerUtilities`), porque o dsh não oferece um ponto de extensão para o layout dele. Se uma atualização do dsh mudar esses nomes, o cabeçalho aparece como o dsh o desenha. Em uma coluna de chat muito estreita o cabeçalho pode ocupar duas ou três linhas, então sobra menos espaço acima das mensagens.
248
- - **Conexão móvel** só funciona no macOS (ela usa `en0`, `openssl`, `swift` e `dns-sd`). Ela usa as portas fixas 19390 e 19391, então só um dsh em cada Mac pode executá-la por vez (cada Mac é uma entrada na lista de Macs do celular). O celular só recebe notificações enquanto o Tether está aberto ou acabou de ir para segundo plano (não há serviço de push). O Tether só as envia depois que você ativa "Settings → Notifications → Send notifications" no Tether. O Tether guarda essa opção e o horário dela separadamente para cada Mac pareado. Ela vem desativada por padrão em cada Mac, e o iOS pede a permissão quando você a ativa. O app iOS ainda não está na App Store: compile-o a partir de `tether/ios` com o Xcode. "Tailscale only" ainda precisa de um endereço de Wi-Fi ou Ethernet no Mac (o gateway só inicia com um). O registro de acesso é de cada Mac e guarda só as 200 tentativas mais recentes; uma tentativa repetida em até um minuto soma um na mesma linha. O bloqueio do app Tether não oculta as prévias das notificações na Tela Bloqueada do iPhone: desative-as nos Ajustes do iOS. Os pontos verdes do Tether seguem o Mac: um chat que você abre no dsh também perde o ponto no celular. Um chat que você abre no Tether perde o ponto só nos celulares. O ponto do próprio dsh no Mac fica até você abrir o chat no Mac.
249
+ - **Conexão móvel** só funciona no macOS (ela usa `en0`, `openssl`, `swift` e `dns-sd`). Ela usa as portas fixas 19390 e 19391, então só um dsh em cada Mac pode executá-la por vez (cada Mac é uma entrada na lista de Macs do celular). Com uma chave APNs em `apns.json` (veja `tether/README.md`), o Mac envia as notificações pelo serviço de push da Apple, então elas chegam também com o Tether fechado; o Mac precisa estar ativo e com o dsh aberto. Sem a chave, o celular só as recebe enquanto o Tether está aberto ou acabou de ir para segundo plano. O Tether só as envia depois que você ativa "Settings → Notifications → Send notifications" no Tether. O Tether guarda essa opção e o horário dela separadamente para cada Mac pareado. Ela vem desativada por padrão em cada Mac, e o iOS pede a permissão quando você a ativa. O app iOS ainda não está na App Store: compile-o a partir de `tether/ios` com o Xcode. "Tailscale only" ainda precisa de um endereço de Wi-Fi ou Ethernet no Mac (o gateway só inicia com um). O registro de acesso é de cada Mac e guarda só as 200 tentativas mais recentes; uma tentativa repetida em até um minuto soma um na mesma linha. Cada notificação mostra o Mac e o projeto do chat (`Studio Mac · recipe-box`), o título do chat e o texto: Turn finished mostra a última resposta do agente. Com a chave do APNs, esse texto passa pelo serviço de push da Apple. O bloqueio do app Tether não oculta as prévias das notificações na Tela Bloqueada do iPhone: desative-as nos Ajustes do iOS. Os pontos verdes do Tether seguem o Mac: um chat que você abre no dsh também perde o ponto no celular. Um chat que você abre no Tether perde o ponto só nos celulares. O ponto do próprio dsh no Mac fica até você abrir o chat no Mac.
249
250
  - **Computadores remotos** precisa do Tailscale nos dois Macs, e do Composer Plus com este recurso ativado no Mac que você abre. Esse Mac não pode estar em repouso, e o dsh precisa estar em execução nele. O outro computador abre na aba Navegador da barra lateral direita do chat que está na tela. A aba pertence a esse chat, então outro chat mostra a própria barra lateral. Sem um chat (ou no dsh web sem a aba Navegador), o computador abre em uma janela do navegador. O seletor só aparece quando um chat ou a tela de novo chat está na área principal, não no Quadro de tarefas. Ele usa a porta 19392 (só um dsh em cada Mac pode deixar outros computadores entrarem). Um computador que você abriu dentro da página de outro computador não tem seletor, então você não pode abrir um terceiro Mac a partir dali.
250
251
  - Um link de sessão funciona dentro dos chats; clicar nele não abre o chat. Um link criado com **Copiar link da mensagem** só abre a mensagem no dsh 0.2.1 ou mais recente, e só a partir de uma mensagem em um chat (o dsh 0.2.0 não tem regras de texto do usuário, então ali o link é copiado, mas aparece como texto simples). Uma mensagem que uma reversão removeu, ou que a compactação tirou do histórico que o dsh carrega, não pode ser mostrada: o link avisa isso. Os botões 🔗 se prendem às linhas de mensagem do dsh; se uma atualização do dsh mudar essa marcação, eles não aparecem.
251
252
  - **Marcar tudo como lido** muda os pontos de não lido do próprio dsh por uma parte do dsh que não é uma API pública (a lista `completionUnread` do status de sessão do dsh). Se uma atualização do dsh mudar esse nome, o item não aparece. O item fica no menu "…" do projeto no dsh, que não tem espaço para plugins; se o dsh mudar esse menu, o item também não aparece.
@@ -423,7 +424,7 @@ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-agentbox-ideas.mjs /path
423
424
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-t3code-ideas.mjs /path/to/dsh/lib/bin.js
424
425
  # every Settings feature row shows a loading screenshot and a ? link to its README row
425
426
  PLAYWRIGHT=/path/to/playwright node test/browser-settings-shots.mjs /path/to/dsh/lib/bin.js
426
- # What's new after an update: the release notes show once, Esc and Close close them
427
+ # 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
427
428
  PLAYWRIGHT=/path/to/playwright node test/browser-whats-new.mjs /path/to/dsh/lib/bin.js
428
429
  # README feature anchors (the ? links) on github.com, headless: each #feature-… shows the start of its row
429
430
  PLAYWRIGHT=/path/to/playwright node test/browser-readme-anchors.mjs
package/README.ru.md CHANGED
@@ -29,7 +29,7 @@ dsh plugin --profile web add dsh-composer-plus
29
29
 
30
30
  Затем перезапустите dsh. (CLI не может устанавливать плагины в профиль настольного приложения: им управляет само приложение.)
31
31
 
32
- > pnpm в dsh пропускает версии, которые вышли меньше 24 часов назад. Сразу после выпуска укажите версию: `dsh-composer-plus@1.21.0`.
32
+ > pnpm в dsh пропускает версии, которые вышли меньше 24 часов назад. Сразу после выпуска укажите версию: `dsh-composer-plus@1.22.0`.
33
33
 
34
34
  ## Функции
35
35
 
@@ -100,7 +100,7 @@ dsh plugin --profile web add dsh-composer-plus
100
100
  | **Язык приложения** | <a id="feature-language"></a>Настройки → Composer Plus → **Язык приложения** переключает весь интерфейс dsh на Türkçe, Español, Português (Brasil), Français, Deutsch, Русский, 日本語, 한국어, Bahasa Indonesia, Tiếng Việt или हिन्दी (см. ниже). | <a href="assets/features/language.webp"><img src="assets/features/language.webp" width="160" alt="Снимок экрана: Язык приложения"></a> |
101
101
  | **Мобильное подключение (iPhone)** | <a id="feature-mobileconnect"></a>Работайте с dsh на iPhone через приложение [Tether](tether/) в той же сети Wi-Fi или через [Tailscale](https://tailscale.com). Включите функцию в **Настройки → Composer Plus** (по умолчанию она выключена, потому что открывает сетевой порт на этом Mac). Затем нажмите **Мобильное подключение** внизу слева на боковой панели, отсканируйте QR-код камерой iPhone (коснитесь **Open in Tether**) или кнопкой **Scan code** в Tether, коснитесь **Connect** и нажмите **Approve**. Сначала установите Tether: без него камера не сможет открыть код. Телефон показывает ваши чаты, отправляет сообщения (с фото: **+** в поле ввода → Camera, Photos или Paste image), отвечает на запросы одобрения и вопросы, переключает модели и агентов. Можно связать сколько угодно Mac: имя Mac вверху слева в приложении переключает между ними. Панель **Мобильное подключение** показывает связанные iPhone и время их последнего подключения: **Remove** сразу отключает любой из них. «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
102
  | **Удалённые компьютеры** | <a id="feature-remotecomputers"></a>Открывайте dsh на других ваших Mac через [Tailscale](https://tailscale.com) и продолжайте их чаты здесь. Включите функцию в **Настройки → Composer Plus** на каждом Mac (по умолчанию она выключена, потому что открывает сетевые порты). На Mac, который вы хотите открыть, включите **Разрешить другим компьютерам открывать этот Mac**, нажмите **Создать ссылку для сопряжения** и скопируйте ссылку. На этом Mac выберите **Добавить компьютер…** в меню выбора компьютера слева от заголовка чата, вставьте ссылку и нажмите **Подключить**. Затем нажмите **Одобрить** на другом Mac. После этого меню показывает **Этот Mac** и ваши компьютеры. Выберите компьютер, и его dsh откроется на вкладке «Браузер» правой боковой панели (или в окне браузера) со своими чатами, инструментами и файлами. Панель настроек переименовывает и удаляет компьютеры и показывает компьютеры, которые могут открывать этот Mac (**Удалить** сразу отключает любой из них). | <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** один раз показывает примечания к этой версии на языке из **Язык приложения** (они приходят вместе с новой версией, без нового сетевого запроса; для языка без примечаний показываются английские); **Закрыть** или `Esc` закрывает его. | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.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** один раз показывает примечания к этой версии на языке из **Язык приложения** (они приходят вместе с новой версией, без нового сетевого запроса; для языка без примечаний показываются английские); **Закрыть** или `Esc` закрывает его. Окно также показывается после обновления через Настройки → Плагины или скопированную папку, один раз для каждой новой версии; при первой установке оно не показывается. **Что нового в этой версии** в строке обновлений открывает его снова. Если на диске версия новее, чем запущенная, строка просит перезапустить dsh. | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.webp" width="160" alt="Снимок экрана: Автоматические обновления"></a> |
104
104
  | **Резервное копирование** | <a id="feature-backup"></a>Настройки → Composer Plus → **Резервное копирование** → **Создать копию сейчас** записывает всю домашнюю папку dsh (чаты, настройки, плагины, MCP, навыки) в один архив в `~/Desktop/dsh-backups` вместе с контрольной суммой. Секреты в архиве скрыты: файлы учётных данных, файлы ключей (`.pem`, `.key`) и значения token, secret и password в настройках yml остаются только на этом компьютере, в `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
105
  | **Автоматическое резервное копирование** | <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> |
106
106
  | **Проверка журналов сеансов** | <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> |
@@ -215,7 +215,7 @@ English · 中文 · Türkçe · Español · Português (Brasil) · Français ·
215
215
  - **На строке чата нет метки ветки:** боковая панель не в режиме «Одним списком» (в режимах «По рабочей области» и «Дерево рабочих областей» ни одна строка чата не показывает метку), у чата не было хода с момента установки этой версии, его папка не является репозиторием git, или функция **Ветка Git в строках чатов** выключена. После обновления перезапустите dsh (ветку записывает Host-часть).
216
216
  - **Проверка цели сообщает, что тест завершился с кодом 127 или «not found»:** у dsh, запущенного из Finder или Dock, PATH может быть короче, чем в вашем терминале, поэтому он не находит `npm`, `pnpm` или `cargo`. Запустите dsh из терминала или задайте свою тестовую команду с полным путём в **Проверка цели** → **Изменить**. **Запустить сейчас** сразу показывает результат.
217
217
  - **Цель не закрывается, и агент продолжает работать:** **Проверка цели** нашла непройденный тест или недоделанную работу; строка под целью показывает причину (наведите указатель на результат, чтобы увидеть подробности). Исправьте причину или тестовую команду либо завершите цель сами командой `/goal` или через панель цели (это не проверяется).
218
- - **Установка не удаётся сразу после выпуска:** укажите версию (`dsh-composer-plus@1.21.0`), см. примечание об установке выше.
218
+ - **Установка не удаётся сразу после выпуска:** укажите версию (`dsh-composer-plus@1.22.0`), см. примечание об установке выше.
219
219
  - **Кнопка «Создать копию сейчас» сообщает «Уже выполняется другое действие с резервными копиями»:** действие выполняется в другом окне dsh или в аварийной консоли (они используют общий файл блокировки `.composer-plus.lock` в папке резервных копий). Дождитесь его окончания. Если никакое действие не выполняется, блокировку закрытого процесса перехватит следующее нажатие.
220
220
  - **Аварийная консоль сообщает «dsh is running»:** сначала выйдите из dsh. Если dsh действительно закрыт, файл, названный в сообщении, остался после сбоя: удалите его и повторите попытку.
221
221
  - **После восстановления dsh не запускается или не хватает плагина:** пакеты плагинов профиля нужно установить заново. Аварийная консоль предлагает это после восстановления; или выполните `pnpm install` в каждой папке внутри `$DSH_HOME/profiles/`, которую она перечисляет. Секреты, которых не было в vault (другой компьютер), нужно ввести заново: консоль перечисляет их.
@@ -236,6 +236,7 @@ English · 中文 · Türkçe · Español · Português (Brasil) · Français ·
236
236
  - В очереди dsh нет действия `move`, поэтому Host-часть плагина перемещает само сообщение в очереди dsh (одно изменение, то же самое сообщение). Сообщения с изображениями или файлами тоже перемещаются. Перемещаются только ваши собственные сообщения: раунд цели или ответ на вопрос в очереди остаётся на своём месте. Если сообщение начинает отправляться, пока вы перетаскиваете, ничего не перемещается, и об этом сообщает уведомление.
237
237
  - dsh 0.2.1 загружает обновление сразу, если новая версия не меняет никаких настроек dsh; в остальных случаях, а также в dsh 0.2.0, перезапустите dsh, чтобы загрузить его. Плагин никогда не перезапускает dsh за вас. Профили Web/CLI без менеджера плагинов dsh только сообщают о новой версии.
238
238
  - **Что нового в Composer Plus N** показывает примечания на языке из **Язык приложения**. Язык интерфейса с другим регионом получает примечания своего основного языка (`en-GB` — английские, `zh-TW` — китайские примечания `zh`). Для языка без примечаний (его добавляет другой языковой пакет, или это `pt-PT`, а не `pt-BR`) показываются английские примечания. Примечания приходят вместе с новой версией. Если у запущенной копии нет читаемого файла примечаний (`release-notes.json`), окно показывает английские примечания с GitHub.
239
+ - Версия, установленная во время работы dsh (обновление через Настройки → Плагины или скопированную папку), загружается только после перезапуска dsh: до этого **Обновления Composer Plus** показывает запущенную версию и просит перезапустить dsh. Её окно **Что нового в Composer Plus N** показывается один раз при первом запуске этой версии. Первый запуск после установки плагина не показывает окно; **Что нового в этой версии** открывает примечания запущенной версии.
239
240
  - **Отклонить с примечанием** отправляет примечание как сообщение в ожидающий ход, а затем отклоняет запрос; dsh показывает примечание в чате как ваше сообщение. Пока поле примечания открыто, карточка показывает только **Отмена** и **Отклонить**, поэтому щелчок не может по ошибке разрешить запрос; `Esc` или **Отмена** возвращает кнопки dsh. Пустое примечание ничего не отправляет (используйте собственную кнопку **Отклонить** в dsh). Если отклонить запрос не удалось уже после отправки примечания (например, на запрос тем временем ответили в другом месте), примечание остаётся в чате, и модель прочитает его на своём следующем шаге. Кнопка встраивается в разметку карточки одобрения dsh (`data-approval-key`), потому что в dsh нет места для действий карточки; если обновление dsh изменит эту разметку, кнопка не появится, а собственная кнопка **Отклонить** в dsh работает как раньше. Примечание может содержать не более 4 000 символов.
240
241
  - **Ввод секрета** скрывает только точный текст значения: в следующих результатах инструментов того же чата его заменяет `[secret]`. Агент всё равно может прочитать файл командой shell и вывести значение в другой форме (base64, часть значения, с пробелами), и эта форма дойдёт до модели. Собственные файловые инструменты агента (read, grep, write, edit) не могут открыть папку секретов. Если значение — ещё и частое слово, другие результаты этого чата тоже покажут `[secret]`. Файл хранится до конца хода; если dsh закроется во время хода, следующий запуск удалит его. В чате может быть только один открытый запрос одновременно. Инструмент добавляет к каждому запросу к модели около 870 символов (примерно 220 токенов, оценка): выключите его, если не пользуетесь.
241
242
  - **Цитата в ответе** цитирует текст так, как его показывает страница: блок кода, таблица или список приходят простыми строками, без разметки Markdown. Если выделение начинается в одном ответе и заканчивается в другом или задевает рассуждения, строку инструмента или ваше собственное сообщение, кнопка не появится: выделяйте внутри одного ответа. Кнопка находит ответ по структуре чата dsh, потому что в dsh нет слота для выделения текста; если обновление dsh изменит эту структуру, кнопка не появится. Если цитата стоит в конце поля, после неё добавляется ещё одна пустая строка, чтобы следующая строка начиналась ниже; при отправке dsh удаляет пустые строки в конце.
@@ -245,7 +246,7 @@ English · 中文 · Türkçe · Español · Português (Brasil) · Français ·
245
246
  - **Сохранять фокус в поле ввода** возвращает фокус только после команды `/` или навыка. Пока dsh обрабатывает команду, поле ввода несколько миллисекунд доступно только для чтения, поэтому клавиши, нажатые в это время, теряются. Если меню `/` в dsh ещё открыто, `Enter` выбирает выделенную строку и ничего не отправляет.
246
247
  - **Подгонять карточку вопроса под окно** меняет только карточку вопроса dsh, а не карточку проверки плана. Она находит карточку по разметке dsh (`data-question-key`, `data-question-scroll`); если обновление dsh изменит эту разметку, карточка будет выглядеть так, как её рисует dsh. Высота карточки следует за окном, а не за чатом: в чате в узкой боковой панели высокая карточка всё ещё может выходить выше чата.
247
248
  - **Подогнать заголовок чата под окно** находит заголовок чата dsh по его сгенерированным именам классов (`_titleRow`, `_titleCluster`, `_crumbs`, `_headerActions`, `_headerUtilities`), потому что dsh не даёт точки подключения для его раскладки. Если обновление dsh переименует их, заголовок показывается так, как его рисует dsh. В очень узкой колонке чата заголовок может занять две или три строки, и места над сообщениями становится меньше.
248
- - **Мобильное подключение** работает только в macOS (оно использует `en0`, `openssl`, `swift` и `dns-sd`). Оно использует фиксированные порты 19390 и 19391, поэтому на каждом Mac его может одновременно запускать только один dsh (каждый Mac — одна запись в списке Mac на телефоне). Телефон получает уведомления, только пока Tether открыт или только что ушёл в фон (сервиса push-уведомлений нет). Tether отправляет их только после того, как вы включите в Tether «Settings → Notifications → Send notifications». Tether хранит этот переключатель и его часы отдельно для каждого сопряжённого Mac. По умолчанию он выключен на каждом Mac, а разрешение iOS запрашивает в момент включения. Приложения для iOS пока нет в App Store: соберите его из `tether/ios` в Xcode. «Tailscale only» всё равно требует адрес Wi-Fi или Ethernet на Mac (шлюз запускается только при таком адресе). Журнал доступа у каждого Mac свой и хранит только 200 самых новых попыток; повторная попытка в течение минуты увеличивает счётчик той же строки на один. Блокировка приложения Tether не скрывает превью уведомлений на экране блокировки iPhone: выключите их в настройках iOS. Зелёные точки в Tether следуют за Mac: у чата, который вы открыли в dsh, точка пропадает и на телефоне. У чата, который вы открыли в Tether, точка пропадает только на телефонах. Собственная точка dsh на Mac остаётся, пока вы не откроете чат на Mac.
249
+ - **Мобильное подключение** работает только в macOS (оно использует `en0`, `openssl`, `swift` и `dns-sd`). Оно использует фиксированные порты 19390 и 19391, поэтому на каждом Mac его может одновременно запускать только один dsh (каждый Mac — одна запись в списке Mac на телефоне). С ключом APNs в `apns.json` (см. `tether/README.md`) Mac отправляет уведомления через push-сервис Apple, поэтому они приходят и при закрытом Tether; Mac должен быть активен, а dsh открыт. Без ключа телефон получает уведомления, только пока Tether открыт или только что ушёл в фон. Tether отправляет их только после того, как вы включите в Tether «Settings → Notifications → Send notifications». Tether хранит этот переключатель и его часы отдельно для каждого сопряжённого Mac. По умолчанию он выключен на каждом Mac, а разрешение iOS запрашивает в момент включения. Приложения для iOS пока нет в App Store: соберите его из `tether/ios` в Xcode. «Tailscale only» всё равно требует адрес Wi-Fi или Ethernet на Mac (шлюз запускается только при таком адресе). Журнал доступа у каждого Mac свой и хранит только 200 самых новых попыток; повторная попытка в течение минуты увеличивает счётчик той же строки на один. Каждое уведомление показывает Mac и проект чата (`Studio Mac · recipe-box`), название чата и текст: Turn finished показывает последний ответ агента. С ключом APNs этот текст проходит через push-сервис Apple. Блокировка приложения Tether не скрывает превью уведомлений на экране блокировки iPhone: выключите их в настройках iOS. Зелёные точки в Tether следуют за Mac: у чата, который вы открыли в dsh, точка пропадает и на телефоне. У чата, который вы открыли в Tether, точка пропадает только на телефонах. Собственная точка dsh на Mac остаётся, пока вы не откроете чат на Mac.
249
250
  - **Удалённые компьютеры** требуют Tailscale на обоих Mac и Composer Plus с включённой функцией на Mac, который вы открываете. Этот Mac не должен быть в режиме сна, и на нём должен работать dsh. Другой компьютер открывается на вкладке «Браузер» правой боковой панели чата, который сейчас на экране. Вкладка принадлежит этому чату, поэтому другой чат показывает свою боковую панель. Без чата (или в dsh web без вкладки «Браузер») компьютер открывается в окне браузера. Меню выбора компьютера видно, только когда в основной области открыт чат или экран нового чата. На доске задач его нет. Функция использует порт 19392 (на каждом Mac пускать другие компьютеры может только один dsh). У компьютера, который вы открыли внутри страницы другого компьютера, нет меню выбора, поэтому оттуда нельзя открыть третий Mac.
250
251
  - Ссылка на сеанс работает внутри чатов; щелчок по ней не открывает чат. Ссылка, созданная через **Копировать ссылку на сообщение**, открывает своё сообщение только в dsh 0.2.1 и новее и только из сообщения в чате (в dsh 0.2.0 нет правил для пользовательского текста, поэтому там ссылка копируется, но показывается как обычный текст). Сообщение, которое убрал откат или которое сжатие удалило из истории, загружаемой dsh, показать нельзя: ссылка тогда сообщает об этом. Кнопки 🔗 привязаны к строкам сообщений dsh; если обновление dsh изменит эту разметку, они не появятся.
251
252
  - **Отметить все как прочитанные** меняет собственные точки непрочитанного dsh через часть dsh, которая не является публичным API (список `completionUnread` в состоянии сеансов dsh). Если обновление dsh переименует его, пункт не появится. Пункт добавляется в меню «…» проекта в dsh, где нет места для плагинов; если dsh изменит это меню, пункт тоже не появится.
@@ -423,7 +424,7 @@ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-agentbox-ideas.mjs /path
423
424
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-t3code-ideas.mjs /path/to/dsh/lib/bin.js
424
425
  # every Settings feature row shows a loading screenshot and a ? link to its README row
425
426
  PLAYWRIGHT=/path/to/playwright node test/browser-settings-shots.mjs /path/to/dsh/lib/bin.js
426
- # What's new after an update: the release notes show once, Esc and Close close them
427
+ # 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
427
428
  PLAYWRIGHT=/path/to/playwright node test/browser-whats-new.mjs /path/to/dsh/lib/bin.js
428
429
  # README feature anchors (the ? links) on github.com, headless: each #feature-… shows the start of its row
429
430
  PLAYWRIGHT=/path/to/playwright node test/browser-readme-anchors.mjs