mugi995/DSH-forJP-TUI

DSH-forJP-TUI

DeepSeek Harness 用の日本語ネイティブ TUI(設計段階 / design phase)

未分類deepseek-harnessdshjapanese

DSH-forJP-TUI

DeepSeek Harness (dsh) のための日本語ネイティブ TUI。

状態: Phase 0(走路骨格)完了。描画は未着手。 自作バンドルが DSH の Cordis 木に載り、自前の入口(C)から起動し、C が壊れれば dsh --profile 子プロセス(B)へフォールバックし、session/event の生イベントを捕捉できる。 検証は node scripts/verify-bundle.mjs(12検査)。

これは何か

dsh の TUI サーフェスを、日本語を第一級に扱う形で自作する。 既存の dsh-TUI を参考にしつつ、 コードは共有せず、描画層から自分で設計する。

目的

#目的設計要求
P1見た目を自分で設計できる描画層を自前で握る。装飾演出を既定で入れない
P2日本語ネイティブ文言を最初からカタログ化。日本語を言語パックに追い出さない
P3上流更新で崩れにくい依存する上流の非公開契約を最小化し、その数を常時計測する
P4UX 研究の土台UI 層とハーネス層を分離し、UI の反復試行を安くする
P5将来ハーネスごと差し替える(思想として保持)ハーネス境界を1箇所に閉じ込める
P6ハーネスチューニング研究ハーネスの挙動を外から差し替え可能に保つ

確定している方針

  • DSH への載せ方: in-process の Cordis バンドル(dsh.bundle.patch)。承認・ユーザー質問・モデル切替を 人対話で行うには、これ以外の経路が存在しない(公式 SDK / ACP には承認チャネルが無い)
  • 起動: 自前のフル host-entry を持つ。ただし失敗時は必ず dsh --profile 子プロセスへフォールバックする
  • 描画層: upstream の Ink v8.0.0(commit 26d2c3f8)を fork し、 src/ink/ に置いて自前で拡張する。Ink 本体はマウス選択・ヒットテスト・スクロール固定を持たないため、 これらは自作する
  • v0 の範囲: 入力解析 / 差分描画 / 全角幅 / 入力欄 / ストリーム表示 / ツールカード / 承認パネル / ユーザー質問パネル / セッション結線 / 中断と終了

ドキュメント

作業を引き継ぐ場合は docs/HANDOFF.md を先に読んでください。 今の状態・動かし方・アーキテクチャ・DSH の API で実測した落とし穴・既知の穴・次の課題が そこに集約されています。

文書内容
docs/design/0001-architecture-and-roadmap.md設計書とロードマップ(決定ログ D1〜D9、Phase -1〜5、リスク R1〜R8)
docs/reports/2026-10-18-phase0-walking-skeleton.mdPhase 0 完了レポート(達成項目・設計を変えた発見・やっていないこと)
docs/research/2026-10-18-dsh-bundle-authoring.mdバンドル/Cordis プラグインの書き方(公式実物からの抽出)
docs/research/2026-10-18-dsh-headless-recipe.md公式 dsh-headless から抽出したエージェント駆動手順
docs/research/2026-10-18-sandbox-and-dsh-home.md実行環境の制約と DSH_HOME 差し替えによる検証方法
docs/research/2026-10-18-dsh-integration-surfaces.mdDSH の統合面・バンドル契約・SDK プロトコル・Ink 反証
docs/research/2026-10-18-dsh-core-public-surface.mdDSH 本体の公開インターフェース
docs/research/2026-10-18-dsh-tui-seam.md参考実装が DSH とどう接続しているか
docs/research/2026-10-18-dsh-tui-feature-inventory.md参考実装の機能・UX 棚卸し
docs/research/2026-10-18-renderer-options.mdTypeScript TUI レンダラ基盤の比較
docs/research/2026-10-18-dsh-third-party-tui-web.mdDSH と第三者 TUI の外部情報

調査ノートには環境依存のローカル絶対パスをマスクしてある($HOME/<workspace>/...)。

開発

pnpm install
pnpm build
node scripts/verify-bundle.mjs          # 構造検査(A〜D)
COMMANDCODE_API_KEY=... node scripts/verify-bundle.mjs   # 実モデル実行まで(E)

検証は $HOME/.dsh に一切書き込まない。DSH_HOME をワークスペース内の .dsh-home/ に向けて プロファイルとバンドル解決を完結させる(理由)。

入口は lib/bin.js(dsh-forjp)。環境変数で挙動を切り替えられる:

変数値意味
FORJP_ENTRYauto(既定)C を試し、失敗したら B へフォールバック
in-processC のみ。失敗したら異常終了
childB を強制
FORJP_PROFILE既定 forjpプロファイル名
DSH_FORJP_HOST_PACKAGE未設定ホスト @deepseek-ai/dsh のパッケージディレクトリを明示

ライセンス

MIT(LICENSE)。

fork 元の Ink も MIT であり、src/ink/ に取り込む時点で Ink のライセンス表示を同梱する。

TUI を起動する(縦切り v0.1)

pnpm install
pnpm build
pnpm profile:install                 # $DSH_HOME(既定 ~/.dsh)へプロファイルを設置
COMMANDCODE_API_KEY=... dsh --profile forjp-tui
  • 入力して Enter で送信、Ctrl+C または Esc 2回で終了
  • 動作確認(PTY 上で起動→入力→応答→終了までを実測する): pnpm test:ui
  • 別の版の DSH で動くか: pnpm verify:host --host <dsh のパッケージディレクトリ>
  • 作業用の隔離環境へ入れる場合: pnpm profile:install --home .dsh-home

設計: docs/design/0004-vertical-slice-v0.md