dsh-agent-lang
August 31, 2026 · View on GitHub
エージェント言語制御 —— DeepSeek Harness (DSH) のモデル出力におけるツール説明・モデルの思考・回答の3チャネルをそれぞれ設定可能:GUI言語に従う / 指定言語で強制 / オフ。ワンクリックで全同期・全オフにも対応。デフォルトはツール説明チャネルのみ有効です。
なぜ必要か
DSH のツール呼び出しには必須の description 引数があり、それがそのまま UI の呼び出しカードラベルとして表示されます。しかしツールスキーマ内のこのフィールドの説明は英語の文言と英語の例("5-10 words … Examples: 'Count TODO markers…'")で書かれているため、GUI の言語に関係なくモデルは常に英語で書いてしまいます。
本プラグインはプロンプト側だけを変更します。グローバルな動的 runtime-context ディレクティブを 1 件登録し、現在の GUI 表示言語を伝えて、すべてのツール呼び出しの description をその言語で書くよう指示します。preset・persona・ツールスキーマは一切変更しません(それらはアップグレードで上書きされるデプロイ資産です)。
対応範囲
| モード / preset | 対応 | 備考 |
|---|---|---|
standard | ✅ | |
ptc(旧称 code) | ✅ | run_code の description も対象 |
cordis(Creation モード) | ✅ | |
ユーザー preset(ptc-cordis、dsh-gitbash-shell の gitbash 系を含む) | ✅ | ホスト面での登録により、封鎖されていないすべての preset に適用 |
minimal | ❌(設計上) | minimal は complete な persona を持ち runtime context を抑制するため、プロンプトが完全に封鎖されています。プロンプトレベルのプラグインでは侵入不可能です |
仕組み
- 検出順序(auto モード):設定 → 全般 → 言語での明示的な選択 > ブラウザーから報告された現在の言語。英語も通常のターゲット言語です(v0.3.0 以降)——モデルによっては思考・回答で多言語が混在するため、英語の明示的指定も同様に補正します。完全に未検出の場合のみ注入しません。
- 注入チャネル:
systemPrompt.context()—— サンドボックス/承認ポリシーと同じ、リクエストごとに再評価される runtime-context スナップショット。リクエスト末尾近くに描画されるため、ツールスキーマの英語ガイダンスを新しい情報が上書ちます。GUI 言語の切り替えは次のリクエストから即時反映されます。 - 設定カード:設定 → プラグイン に本プラグインのカードが現れます(ホスト側でサービス中の設定名前空間とカードが自動ペアリング)。動作切り替え(GUI言語に従う / BCP 47 タグによる強制(
zh、jaなど)/ オフ)と検出チェーンの表示が可能です。
インストール
dsh plugin --profile web add dsh-agent-lang
ピュア JS、ビルドなし、インストール依存なし(schemastery は peer として profile 経由で解決)。インストール後、DSH を再起動してください。
検証
- インストールして DSH を再起動し、一度ハードリフレッシュ(⌘/Ctrl+Shift+R、下記の既知の境界 #1 を参照);
~/.dsh/settings.yamlにagent-lang:セクション(uiLocale)が現れる;- minimal 以外の任意のモードで新規セッションを実行 → ツール呼び出しカードの description が GUI 言語になる;
- 設定 → 全般 → 言語 を切り替える → 次のリクエストから description が追随;
- 設定 → プラグイン → ツール説明言語カードで動作を切り替えテスト。
既知の境界
- 新規インストール/更新後の初回起動はハードリフレッシュが一度必要(2026-08-31 実機検証):初回ページロードがクライアントモジュールテーブルの再構築と重なると、新規パッケージが一時的に除外される場合があります(設定カードが出ないが、
settings.yamlへの報告は残る)。ハードリフレッシュで復旧。通常の再起動では再現しません。 - minimal モード:プロンプトが封鎖されているため影響しません(上表参照)。
- ブラウザーページがない場合(純 CLI デプロイなど):検出チェーンは「明示的な選択」のみ。設定で言語を選択したことがなければ注入しません。
- 複数ブラウザー/リモートページ:GUI 言語はグローバルの単一値で、最後に開いたページの報告が優先されます。
- サブエージェント / workflow のモデルにも同じディレクティブが見えます(それらの description も UI に表示されるため、意味的に一貫しています)。
ライセンス
MIT