# dsh-TUI v0.15.0 ユーザー向け機能・UX棚卸し 出典: 読み取り専用調査 / 対象 dsh-TUI v0.15.0 / 作成日 2026-10-18 - 対象リポジトリ: `$HOME//dsh-TUI`(`package.json` の `version: 0.15.0` / `name: @deepseek-harness-tui/dsh-tui`) - 調査方針: **ファイルは一切書き換えていない**(読み取り専用)。`git status --porcelain` が空であることを確認済み。 - `workflow` ツールは本環境で壊れている(Node が TS 非対応)ため未使用。 - 目的: 後で「独自 TUI にどの機能を載せるか」を選ぶための一覧作り。 - 根拠パスはすべて対象リポジトリ相対。 - 推測に依る記述は「**推測**」と明記。確認できないものは「不明」。web 検索は未使用。 --- # 1. 機能カテゴリ別一覧 表記: `機能名 — できること — 根拠パス` ## A. 入力・補完・編集 - 複数行入力+ネイティブカーソル継承 — 端末のカーソル形状/色/点滅/アニメーションを入力欄がそのまま使う — `src/components/PromptInput.tsx`(4,785行), `src/ink/components/CursorDeclarationContext.ts` - `/` コマンド補完 — ローカル64コマンド+DSH レジストリ+スキルを1メニューに統合、ターン実行中は影響度で灰ゾーン表示 — `src/commands.ts`(`LOCAL_COMMANDS` 64件), `src/components/CommandSuggestions.tsx`, `src/dsh-adapter/channel/command-completions.ts` - `@` ファイル参照 — ファジー一致・ディレクトリ降下・送信時に本文/一覧を添付 — `src/components/FileSuggestions.tsx`, `src/utils/mentions.ts`, `src/dsh-adapter/channel/composer-mentions.ts` - 入力履歴検索 `Ctrl+R` — 現プロジェクト単位で履歴を検索・前後移動 — `src/components/HistorySearchDialog.tsx` - 全画面ドラフトエディタ `Ctrl+Shift+E` — 行番号・現在行ハイライト・行/字カウント・マウス選択 — `src/components/PromptEditor.tsx`, `docs/interaction.md` §全屏草稿编辑 - vim 編集モード `/vim` — INSERT/NORMAL 徽標、`hjkl`/`w`/`b`/`x`/`dd`/`d$`/`u` 等 — `src/screens/Chat.tsx:4126`, `src/components/PromptInput.tsx`(vim normal-mode helpers), `docs/interaction.md` §vim 编辑模式 - 草稿の語単位 Undo `Ctrl+Z` — テキスト・カーソル・画像トークンを一緒に巻き戻す(vim の `u` とは別スタック) — `src/components/PromptInput.tsx` - 外部エディタ `Ctrl+G` — `$VISUAL`→`$EDITOR` で編集して回填、`:cq` で破棄 — `src/utils/externalEditor.ts` - 貼り付け/ブラケットペースト — CRLF 折畳・win32-input-mode 記録の復元・ANSI 除去 — `src/utils/inputPaste.ts`, `src/utils/clipboard.ts` - 端末入力の解析 — Win32 入力レコード再構成・SGR マウス断片・分割された端末応答の再構成(各1秒/64B 窓) — `src/ink/parse-keypress.ts`(3,216行), `src/ink/input-suppression.ts` - メッセージ投递3セマンティクス — 実行中 `Enter`=steer / `Tab`=follow-up / `Ctrl+Enter`=中断して送信 — `src/dsh-adapter/channel/input-delivery.ts`, `docs/interaction.md` §消息投递语义 - ショートカット再マッピング — `/settings` で変更、プラグインは `tuiShortcuts` で追加 — `src/utils/keymap.ts`, `src/settings/definitions.ts`, `src/dsh-adapter/plugin.ts` ## B. 表示・レンダリング - 自作 Ink フォーク(React リコンサイラ+自前レイアウト/差分描画) — `src/ink/**`(124ファイル/33,755行), `src/ink/ink.tsx`(3,108行), `src/native-ts/yoga-layout/` - ストリーミング Markdown — 見出し/リスト/表/引用/コードを逐次描画 — `src/components/StreamingMarkdown.tsx`, `src/components/Markdown.tsx`, `src/terminal-utils/markdown.ts`(`marked`) - シンタックスハイライト — 言語検出+テーマ連動トークン色 — `src/terminal-utils/cliHighlight.ts`(`cli-highlight`/`highlight.js`), `src/terminal-utils/syntaxTheme.ts` - ツールカード — 引数/出力/実行中ライブ出力、`Ctrl+O` で全展開、`e` でコマンド切替 — `src/components/messages/AssistantToolUseMessage.tsx`(52KB), `src/components/messages/liveOutputLines.ts` - diff 表示 — サイドバイサイド/統合、パッチ整形 — `src/components/SplitDiffView.tsx`(519行), `src/components/diffPatch.ts`(`diff`) - 思考(thinking)表示・折りたたみ・プレビュー — `src/components/messages/AssistantThinkingMessage.tsx`, `src/components/ThinkingToggle.tsx` - 超長行の折りたたみ(1000字)と展開 — `src/components/MessageList.tsx`(2,107行), `docs/user-guide.md` §5.1 - タイムライン・レール(ターン毎クリック可能) — `src/components/TimelineRail.tsx` - スクロールバー/ページマージン/選択コピー — ドラッグ選択・ダブル/トリプルクリック・選択の保持 — `src/components/ScrollbarGutter.tsx`, `src/components/PageMargin.tsx`, `src/ink/selection.ts`(1,800行), `src/ink/hooks/use-copy-on-select.ts` - 全画面 / インライン 2モード — `src/utils/fullscreen.ts`, `src/ink/components/AlternateScreen.tsx` - マウス — クリック/ドラッグ/ホイール/ホバー/コンテキストメニュー、ヒットテスト — `src/ink/hit-test.ts`(613行), `src/ink/events/*`(16ファイル) - transcript 全文検索 — `Ctrl+O` 後に `/` で検索、`n`/`N` 移動、ハイライト — `src/components/SearchBox.tsx`, `src/ink/transcript-highlight.ts` - テーブル描画 — Markdown 表を罫線付きで描画 — `src/components/MarkdownTable.tsx` - 仮想化 — 画面外行は前回計測の固定高でプレースホルダ(長セッション O(可視窓)) — `docs/architecture.md` §渲染与长会话性能 ## C. セッション管理・ワークフロー - 統合セッション管理画面(`/resume` `/home` `/agentview` `/bg` `⌸`) — ワークスペースレール+セッション一覧+検索+★ピン+プレビュー — `src/screens/SessionSupervisor.tsx`(1,002行), `src/screens/sessionSupervisor/useSessionSupervisor.ts`(39KB), `src/components/sessions/*` - ワークスペース管理 — 登録/リネーム/削除、"History only" ディレクトリ、新規セッション — `src/workspaces.ts`, `src/components/workspaces/WorkspaceListRow.tsx` - fork / rewind / セッションファミリーツリー — 過去メッセージへ戻す・分岐・採用 — `src/screens/SessionTree.tsx`(886行), `src/dsh-adapter/channel/session-switch.ts` - バックグラウンドセッション `/bg` — 本プロセス内で退避して継続、`Esc` で復帰 — `src/dsh-adapter/channel/background-action.ts`, `docs/interaction.md` §会话管理 - セッションのエクスポート — 投影済み transcript を Markdown で保存 — `src/dsh-adapter/channel/core/reports.ts` - compact / recap — 要約圧縮、`/recap` の1行要約+タイトル提案、`recapOnOpen` 自動表示 — `src/dsh-adapter/channel/compaction.ts`, `src/components/AutoRecapRow.tsx`, `src/components/RecapPanel.tsx` - リネーム / セッション色 `/color` — 入力枠と右上ラベルに反映、セッション単位で保存 — `src/components/ColorPicker.tsx`, `docs/interaction.md` §Slash Commands - 多重起動の排他(session mount ランタイム) — 同一セッションの同時オープン規則とローカル台帳 — `src/sessionMounts.ts`, `docs/session-mount-runtime.md` - サイドクエスチョン `/btw` — 会話を止めずに別スレッドで質問、専用パネル/全画面 — `src/components/BtwPanel.tsx`, `src/components/sidePanel/btw/*`(5ファイル) ## D. モデル・プロバイダ・カーネル - `/model` ピッカー — プロバイダタブ・最近使用・現在モデル先頭・`←/→` で effort 調整・マウス操作・狭い端末で段階縮退 — `src/components/ModelPicker.tsx`, `src/components/EffortSlider.tsx`, `src/screens/chat/useModelPicker.ts`, `src/modelRecents.ts` - 推論強度 `/effort` — スライダー・ティア徽標・プリセット既定値 — `src/effortPrefs.ts`, `src/components/EffortTierBadge.tsx` - `/provider` ウィザード — 追加/編集/削除、APIキー保管(0600)、`GET /models` のライブ探索と「線上新增」表示 — `src/dsh-adapter/channel/model-*.ts`, `src/components/questions/ProviderModelEditor.tsx`, `docs/configuration.md` §`/provider` - サブスク OAuth ログイン — ChatGPT/Codex・Claude・Grok(+提供時 OpenAI/Meta)、ブラウザ/デバイスコード、`/auth status|login|logout` — `src/oauth.ts`, `docs/configuration.md` §内置订阅 OAuth - DeepSeek アカウントログインと残高 `/balance` — ログイン贈金ポップアップ、残高摘要行+hover 明細 — `src/deepseekBalance.ts`, `docs/interaction.md` §Slash Commands - カーネル切替 `/kernel` `/dsh` `/codex` `/claude` — 選択を記憶し再起動して新セッション、実行中は拒否、未導入時は導入ウィザード — `src/components/KernelPicker.tsx`, `src/kernelPrefs.ts`, `src/screens/chat/useKernelPicker.ts`, `src/components/SdkInstallWizard.tsx` - Agent preset(極簡 / 梁神 / カスタム) — `src/components/PresetPicker.tsx`, `src/presetPrefs.ts`, `presets/liangshen/**`, `docs/configuration.md` §Agent Preset - モデルルーティング/グループ/能力 — 画像入力可否・文脈長・出力上限の編集 — `src/modelRoute.ts`, `src/modelGroups.ts`, `src/channel/model-capabilities.ts` - Claude バックエンド(実験的) — SDK 経由で同一 UI、CLAUDE.md/フック/MCP/プラグインを継承 — `src/backends/claude/**`(46ファイル), `docs/claude-backend.md` - Codex ネイティブバックエンド(実験的) — `codex app-server` 経由、Plan/`/review`/`/diff`/`/usage`、ネイティブスレッド — `src/backends/codex/**`(918ファイル、うち875は生成コード), `docs/codex-backend.md` - チャネルプロファイル `/channel`(Claude 限定) — リレー接続の切替/取込/マッピング表示 — `src/channel/channel-wizard.ts`, `src/components/ChannelPicker.tsx` ## E. 画像 - Kitty / Sixel サムネイル — 予約セルの物理ピクセルに合わせて拡大縮小、HiDPI 対応、失敗時は文字フォールバック — `src/ink/kitty-graphics.ts`(564行), `src/ink/sixel-codec.ts`, `src/ink/sixel-graphics.ts`, `src/ink/hooks/use-terminal-images.ts` - 全画面プレビュー — ズーム(fit/100/200/400/800%)、パン、ページ送り、元画像を外部アプリで開く — `src/components/ImagePreviewOverlay.tsx`(413行), `src/components/messages/imageInspection.ts`, `originalImage.ts` - 貼り付け時 `[Image #N]` — 添付ライブラリへ保存し送信時に実画像ブロック化、トークンは原子的に編集 — `src/components/composerImageTokens.ts`, `src/dsh-adapter/channel/composer-images.ts`, `src/dsh-adapter/channel/core/local-images.ts` - ダウンサンプル/リサイズ — ピクセル予算超過時に縮小(`sharp`、無ければ文字情報のみ) — `src/utils/imageResize.ts`, `src/dsh-adapter/sharp.ts` - transcript 画像の再投影 — セッションイベントから画像を復元して同じプレビュー経路に乗せる — `src/components/messages/TranscriptImages.tsx`, `transcriptImageDecode.ts` ## F. テーマ・i18n - テーマ — 6内蔵(light/dark/dark-ansi/pink-day/pink-night/pink-ansi)+`auto`(OSC 11 で背景検出) — `src/theme.ts`(1,503行), `src/themeCatalog.ts`, `docs/themes.md` - カスタムテーマ / npm プラグインテーマ — JSON 定義、検証失敗時の方針、`DSH_TUI_THEME` 優先 — `src/customTheme.ts`, `src/themePrefs.ts`, `docs/themes.md` §自定义主题 - テーマピッカー+ライブプレビュー — 焦点行のテーマでコードブロック/ツールカード/diff を実描画 — `src/components/ThemePicker.tsx`, `src/components/ThemePreviewPane.tsx`, `src/hooks/useRuntimeThemeSnapshot.ts` - デザインシステム — テーマトークン→共通部品(Pane/ListItem/ProgressBar/StatusIcon 等) — `src/components/design-system/*`(12ファイル/1,258行) - i18n(zh/en 内蔵) — 全 UI 文言、コマンド説明の動的切替、複数形・フォールバック連鎖 — `src/i18n.ts`(2,949行) - 言語パック(mod) — `~/.dsh-tui/langs/*.json` で追加言語、同梱シード `lang-mods/ja.json` — `src/langMod.ts`, `src/components/LangPicker.tsx`, `docs/configuration.md` §语言包 - tips — 文脈依存の使い方ヒント(日本語版つき) — `src/tips.ts`, `src/tipsJa.ts`, `src/components/TipsPanel.tsx` ## G. 通知 - タスク完了通知 — 作業が落ち着いた時のみ通知、OSC 777/99(title/body 分離)・OSC 9・BEL を自動選択、200字プレビュー、2048B 予算 — `src/dsh-adapter/channel/notifications.ts`, `src/ink/terminal-notification.ts`, `src/settings/definitions.ts`(`taskNotifications`/`notificationMethod`) - in-TUI トースト/コンパニオンの吹き出し — パネル表示中は吹き出し、エラーは常にトースト — `src/components/sidePanel/companion/*`, `docs/user-guide.md` §2.8 ## H. IDE・MCP・skills・プラグイン統合 - VS Code 拡張連携 / IDE 選択チャネル — loopback WebSocket+lock ファイル(0700/0600)、選択行をプロンプト下にリアルタイム表示 — `src/dsh-adapter/ide-channel.ts`, `src/channel/selection-record.ts`, `docs/vscode.md` - Herdr 連携 — `idle`/`working`/`blocked` をローカル API へ報告 — `src/herdr.ts`, `README.md:181` - MCP — 接続済みサーバとツール数の表示(`/mcp`)、設定は `cordis.patch.yml` — `src/dsh-adapter/channel/reports.ts`, `docs/configuration.md` §MCP - Skills — profile/ユーザ/プロジェクトから発見したスキル一覧、`/スキル名` で直呼び — `src/components/SkillsPicker.tsx`, `docs/interaction.md` §Skills - Goals / Todos — 目標バー(1行要約+hover 全文)と ToDo パネル — `src/components/GoalTodoPanel.tsx`, `src/channel/goal-command.ts` - サブエージェント — Dashboard/詳細シーン/子 transcript の埋め込み表示 — `src/components/SubagentDashboard.tsx`, `src/components/SubagentDetailScene.tsx`(813行), `src/components/messages/subagentTranscript.ts` - バックグラウンドジョブ — `/jobs` パネル、状態/所要/終了コード、`k` で停止、出力は最新2行をカードに — `src/components/JobsPanel.tsx`(641行), `src/dsh-adapter/channel/job-projection.ts` - プラグインの導入・管理 — `/plugin install|remove|enable|disable|check|info|registries`、信頼確認・ビルドスクリプト承認・自己無効化ガード(Gate 2)・嫡系フィード免確認 — `src/components/PluginInstallPane.tsx`, `src/components/PluginManagePane.tsx`, `src/dsh-adapter/plugin-{install,manage,guard,feed,storage,declaration,completions}.ts`, `src/dsh-adapter/plugins-info.ts`, `docs/plugins.md`, `tui-profile/**` - 外部注入チャネル — エディタ等から TUI へプロンプト注入(handoff/inject) — `src/dsh-adapter/inject-channel.ts`, `src/handoffEvents.ts`, `src/handoffAck.ts` ## I. 設定 - `/settings` エディタ — 57キー、変更は自動保存、`Esc` で退出、プラグインもセクション追加可 — `src/screens/Settings.tsx`(1,189行), `src/settings/definitions.ts`(741行/57キー) - 設定の永続化 — `~/.dsh-tui/settings.json`(全カーネル共有)、初回に profile から取込 — `src/tuiSettingsFile.ts`, `README.md:110` - 表示系トグル — 最小 UI、ステータスバー各項目、思考折りたたみ、ツール背景、smooth streaming、page margin 等 — `src/tuiDisplayPrefs.ts`, `src/minimalUiMode.ts`, `src/settings/definitions.ts` - プラグイン設定セクション接続 — 型付きフィールド(select/text/boolean/…)でホストへ書込 — `src/settings-sections.ts` → `src/dsh-adapter/settings-sections.ts`(`src/settings-sections.ts` は12行の再輸出シム) - パネル接続 — プラグインが `ctx.tuiPanels` で full/compact パネルを登録 — `src/panels.ts` → `src/dsh-adapter/panels.ts`(`src/panels.ts` は15行の再輸出シム), `src/components/sidePanel/pluginPanelAdapter.tsx` ## J. 権限承認・質問 - ツール承認パネル — ツール名・完全なコマンド・理由を提示、「許可(1回)/拒否」の2択のみ、`Esc` は fail-closed — `src/components/approvals/ApprovalPanel.tsx`(292行), `src/dsh-adapter/approvals.ts`, `docs/interaction.md` §工具审批 - `ask_user_question` パネル — 複数問 FIFO、複数選択、自由入力行、`Ctrl+K` 折りたたみ、取消で `ASK_CANCELLED` — `src/components/questions/AskUserQuestionPanel.tsx`(39KB), `src/channel/questions.ts`, `src/components/questions/QuestionMinimizedBar.tsx` - 計画レビュー(`exit_plan_mode`) — 計画全文を Markdown 描画、承認/継続/フィードバック、承認後に元の権限へ復元 — `src/components/questions/PlanReviewPanel.tsx`(21KB), `src/components/PlanPicker.tsx` - 権限モード — `Shift+Tab` 巡回(既定/計画/完全アクセス+レジストリ由来プリセット)、`/permission`、名簿が壊れたら fail-closed — `src/components/PermissionsPicker.tsx`, `src/permissionPrefs.ts`, `src/dsh-adapter/channel/mode-permission*.ts`, `src/dsh-adapter/channel/mode-roster.ts` - ファイルシステム方針の確認(`/add-dir`) — 現在のスコープを表示 — `src/commands.ts`, `src/backends/claude/permissions.ts` ## K. 起動・オンボーディング・演出 - ランチパッド — 実入力可能な着地ページ、クイックアクション、狭幅で段階的に要素を落とす、`/settings` で off 可 — `src/screens/Launchpad.tsx`(1,410行), `src/components/launchpadLayout.ts`, `src/components/launchpadActions.ts` - 初回4ステップウィザード — APIキー / 言語+テーマ / モデル+ワークスペース / ショートカット、`/setup` で再実行 — `src/screens/Onboarding.tsx`(886行), `src/components/onboardingModel.ts`, `src/onboardingPrefs.ts` - スプラッシュ演出 — ピクセルクジラ3種イントロ・日替わり大字8種・女僕娘立絵・クリックで起床/ハート — `src/components/LogoV2.tsx`(795行), `src/components/whaleFrames.ts`(799行), `src/components/whaleIdle.ts`, `src/components/splashFonts.ts`(563行), `src/components/maidPortrait.tsx`, `src/components/ClaudeGirl.tsx` - コンパニオン(ペット) — 3スキン、気分アニメ、つつく/くすぐる/引きずる、パネルが狭いと隠れる — `src/components/sidePanel/companion/*`(6ファイル), `docs/user-guide.md` §2.8 - セーフモード / レスキュープロファイル — 読み取り専用診断と修復案内、`safe --rescue` — `docs/getting-started.md` §安全模式, `docs/safe-mode-plan-pr1.md` ## L. 観測・診断 - 3行ステータスバー — コンテキスト分段バー/モデル・TPS・思考・モード・ctx・キャッシュ・tokens・コスト・git・cwd・タイトル・セッションID/ヒント行+ミニ軌跡 — `src/screens/StatusLine.tsx`(1,216行), `src/screens/StatusMetrics.ts`(684行), `src/components/ContextBarView.tsx` - コスト/使用量の見積り — サブエージェント込み、未収録モデルは tokens のみ、購読ルートは USD 参考と実クォータ — `src/usageStats.ts`, `src/providerUsage.ts`, `src/deepseekPricing.ts`, `src/providerPricing.ts`, `src/components/TurnUsageRow.tsx` - `/usage`(購読枠) — opencode-go ウィンドウ / Command Code クレジット — `src/providerUsage.ts`, `src/usageProviderDeclarations.ts` - 読込済みコンテキストのパネル `Ctrl+P` — 何がコンテキストに入ったかの内訳 — `src/components/LoadedContextPanel.tsx`, `src/utils/loaded-context.ts` - 軌跡シーン `/trace` `Ctrl+T` — ウェイクバンド・台帳・インスペクタ・ホットスポット、`Tab` でビュー切替 — `src/screens/TrajectoryScene.tsx`(712行), `src/components/trajectory/*`(7ファイル/1,183行), `src/trajectory/*` - 診断 — `/doctor` `/status` `/config`、`DSH_TUI_DEBUG` / `DSH_TUI_RENDER_LOG` — `src/dsh-adapter/channel/core/reports.ts`, `src/utils/debug.ts`, `docs/architecture.md` §调试与验证 - 作業状態アニメーション — `/activity` プリセット、外付けパッケージ駆動 — `src/working-activity.ts`, `src/components/ActivityLine.tsx`, `src/components/Spinner/*`, 依存 `dsh-working-activity@^0.5.0` ## M. 移行・更新・CLI - 他エージェントからの会話移行 — claude-code / codex / omp / zcode / grok-build、冪等、`--dry-run`、TUI 内 `/migrate` — `src/dsh-adapter/migrate/**`, `src/migrationPrefs.ts`, `docs/migrate.md` - 更新 — 起動時バックグラウンドで新版確認、`/update` で更新→再起動→セッション復帰 — `src/update.ts`, `src/hooks/useExternalVersion.ts` - ランチャ CLI — `dsh-tui`/`dst`、`--resume`、`update`、`doctor`、`safe`、`version`、`help`、引数転送規則 — `bin/dsh-tui.js`, `dsh-tui.cmd`, `package.json` の `bin`, `docs/getting-started.md` - GitHub star 支援 — `/star` で `gh` 経由、未ログイン時はプロンプト — `src/starAction.ts`, `src/components/StarPrompt.tsx`(604行) --- # 2. 重さの当たり(実装が大きい順・上位10) 計測は「TS/TSX のファイル数」「行数(`wc -l` 相当)」「そのグループのソースが import する外部パッケージの種類数」。Node 組み込み(`fs`,`path`,`buffer` 等)は外部依存から除外。グループは明示パス集合(重複なし)。 ## 計測コマンド ディレクトリ単位の例(ファイル集合グループは `find` にパスを列挙): ```sh cd "$HOME//dsh-TUI" # ファイル数 find \( -name '*.ts' -o -name '*.tsx' \) | wc -l # 行数 find \( -name '*.ts' -o -name '*.tsx' \) -exec cat {} + | wc -l # 外部依存の種類数 # import/export … from 'pkg' と import('pkg') を抽出し、 # '.'/'#'/'node:' 始まりと Node 組み込みを除外してユニーク化(python3 で実施) ``` ## 計測値(上位10) | # | 機能グループ | files | lines | 外部依存種 | 主な根拠 | |---|---|---|---|---|---| | 1 | **DSH/Cordis 統合層+チャネル**(基盤・機能横断) | 234 | **58,163** | **35** | `src/dsh-adapter/**`(`channel/core/compose.ts` 等) | | 2 | **自作 Ink レンダラ**(基盤・機能横断) | 124 | **33,755** | 19 | `src/ink/**` | | 3 | **Claude / Codex バックエンド** | 973 | **28,909** | 3 | `src/backends/**`(Codex 918中875が生成コード=10,118行。生成を除くと 98 files / 18,791行) | | 4 | **バックエンド中立アダプタ層**(基盤) | 88 | **13,486** | 6 | `src/adapter/**` | | 5 | **入力・補完・編集** | 16 | **10,315** | 2 | `src/components/PromptInput.tsx` ほか | | 6 | **チャット画面本体** | 10 | **8,711** | 1 | `src/screens/Chat.tsx`(7,299行), `src/screens/chat/*` | | 7 | **サイドパネル**(btw スレッド・companion 含む) | 32 | **7,351** | 2 | `src/components/sidePanel/**`, `src/dsh-adapter/panels.ts` | | 8 | **メッセージ描画**(Markdown/コード/ツールカード/diff) | 25 | **7,274** | 7 | `src/components/messages/**`, `MessageList.tsx`, `Markdown*.tsx` | | 9 | **ランチパッド/オンボーディング/スプラッシュ演出** | 21 | **6,650** | 1 | `src/screens/Launchpad.tsx`, `Onboarding.tsx`, `LogoV2.tsx`, `whale*.ts` | | 10 | **セッション/ワークスペース管理** | 21 | **6,574** | 2 | `src/screens/SessionSupervisor.tsx`, `SessionTree.tsx`, `src/sessions/*` | ## 次点(同条件) | 機能グループ | files | lines | 外部依存種 | |---|---|---|---| | プラグイン統合(install/manage/guard/feed 等) | 15 | 4,889 | 9 | | 設定画面+永続化 | 20 | 4,466 | 4 | | i18n | 5 | 4,367 | 1 | | テーマ | 20 | 3,828 | 2 | | ステータス/usage/cost | 11 | 3,665 | 1 | | 画像 | 9 | 3,267 | 2 | | 数式/LaTeX | 8 | 2,931 | 4 | | 軌跡 | 14 | 2,804 | 2 | | 質問(ask_user) | 6 | 2,334 | 1 | | IDE/Herdr | 6 | 1,931 | 1 | | 承認/permissions | 5 | 1,286 | 3 | | コマンド定義 | 5 | 876 | 1 | | Mermaid | 2 | 207 | 3 | | 通知 | 2 | 105 | 0 | ## 参考値(リポジトリ全体) - `src` = 1,785ファイル / 230,316行 - `scripts`(`verify:*` 126本を含む)= 620ファイル / 192,705行 - `vendor` = 2,466 TS ファイル / 398,230行(うち `vendor/dsh-std` は 130MB のサブモジュール) - `package.json`: dependencies 39(うち workspace 8 を除く実外部 31)+ optional 1(`sharp`)+ peer 40 + dev 89 - 単一ファイル最大: `src/screens/Chat.tsx` 7,299行、`src/components/PromptInput.tsx` 4,785行、`src/ink/parse-keypress.ts` 3,216行、`src/ink/ink.tsx` 3,108行、`src/i18n.ts` 2,949行 --- # 3. 最小核(無いと TUI として成立しない)と付加機能 ## 必須(これが無いと会話 TUI として動かない) 1. 端末入力解析 — エスケープ/マウス/貼付/端末応答の解釈 — `src/ink/parse-keypress.ts` 2. レイアウト+差分描画 — `src/ink/layout/*`, `src/ink/render-node-to-output.ts`, `output.ts`, `screen.ts`, `log-update.ts` 3. React リコンサイラ接続/実行ループ — `src/ink/reconciler.ts`, `src/ink/ink.tsx` 4. 東アジア幅・絵文字の幅計算 — `get-east-asian-width`, `emoji-regex`(`src/ink/measure-text.ts` 系) 5. 入力ボックス(編集・改行・送信) — `src/components/PromptInput.tsx` 6. 会話ストリームの逐次表示 — `src/components/MessageList.tsx`, `src/components/StreamingMarkdown.tsx` 7. ツール呼び出しの可視化 — `src/components/messages/AssistantToolUseMessage.tsx` 8. セッション結線(1 セッションを開きイベントを UI へ投影) — `src/dsh-adapter/channel/*`, `src/channel/projection.ts` 9. 中断・終了 — `Ctrl+C` 系の割り込みとプロセス終了(`src/screens/Chat.tsx`, `src/ink/ink.tsx`) 10. 最低限のコマンド — `/help` `/new` `/exit`(`src/commands.ts`, `src/screens/Chat.tsx`) ## 準必須(配備内容に依存。無いと特定機能が止まる/拒否される) - ツール承認(approval answerer) — DSH の権限層が `approval/request` を出す構成では、答える UI が無ければ fail-closed でツールが実行できない — `src/dsh-adapter/approvals.ts` + `src/components/approvals/ApprovalPanel.tsx`(**推測**を含む: 「answerer 不在時にどう振る舞うか」は実装読解ではなく設計からの推定) - `ask_user_question` パネル — 同ツールを preset が積む場合に必須 — `src/components/questions/AskUserQuestionPanel.tsx` - 権限モード巡回(`Shift+Tab` / `/permission`) — DSH 権限 presets を使う構成で必須 — `src/dsh-adapter/channel/mode-permission*.ts` - セッション選択/再開(`/resume`) — 複数セッションを扱うなら必須。単一セッション運用なら `/new`+`/exit` で足りる — `src/screens/SessionSupervisor.tsx` ## 無くても成立する付加機能(差別化要素) - 起動演出系: ランチパッド / 初回ウィザード / ピクセルクジラ・日替わり大字・女僕娘・コンパニオン(`src/screens/Launchpad.tsx`, `src/components/LogoV2.tsx`, `src/components/sidePanel/companion/*`) - サイドパネル8種(todo/jobs/agents/info/trajectory/workspace/btw/companion) — `src/components/sidePanel/builtinPanels.tsx` - 軌跡シーン / タイムライン・レール / ミニ軌跡(`src/screens/TrajectoryScene.tsx`, `src/components/TimelineRail.tsx`) - 画像(Kitty/Sixel サムネイル・全画面プレビュー・貼付添付) — `src/components/ImagePreviewOverlay.tsx` ほか - Mermaid 図・LaTeX の画像化 — `src/components/MermaidDiagram.tsx`, `src/math/*` - テーマのカスタム/プラグイン化、テーマプレビュー — `src/customTheme.ts`, `src/components/ThemePreviewPane.tsx` - i18n の言語パック(zh/en 内蔵の範囲なら軽い。パック機構自体は付加) — `src/langMod.ts` - タスク完了通知(OSC 通知) — `src/dsh-adapter/channel/notifications.ts` - コスト/使用量/サブスク枠の表示 — `src/usageStats.ts`, `src/providerUsage.ts` - セッションの fork/rewind/ツリー、エクスポート、`/btw`、recap — `src/screens/SessionTree.tsx`, `src/dsh-adapter/channel/core/reports.ts`, `src/components/BtwPanel.tsx` - サブエージェント Dashboard / ジョブパネル — `src/components/SubagentDashboard.tsx`, `src/components/JobsPanel.tsx` - プラグインエコシステム(導入・管理・ガード・フィード) — `src/dsh-adapter/plugin-*.ts`, `tui-profile/**` - VS Code 連携 / Herdr 連携 — `src/dsh-adapter/ide-channel.ts`, `src/herdr.ts` - 他エージェントからの移行、`/update`、`/star`、tips、複数カーネル対応 — `src/dsh-adapter/migrate/**`, `src/update.ts`, `src/starAction.ts`, `src/tips.ts`, `src/backends/**` --- # 4. 外部依存の重いもの(依存先パッケージ名つき) | 機能 | 依存先 | 種別 / 制約 | 根拠 | |---|---|---|---| | 画像サムネイル(Sixel) | **`sixel@0.16.0`**(npm, dependencies) | npm 依存。Sixel 非対応端末では使われない | `src/ink/sixel-codec.ts`, `src/ink/sixel-graphics.ts`, `src/ink/sixel-worker.ts` | | 画像サムネイル(Kitty) | **端末機能のみ(外部ライブラリ無し)** | Kitty graphics protocol 対応端末が必要。100% 表示には端末のピクセル寸法報告(CSI 14t/16t 相当)が要る | `src/ink/kitty-graphics.ts`(564行), `src/ink/terminal-image-protocol.ts`, `docs/interaction.md` §缩放、平移与翻页 | | 画像リサイズ/ダウンサンプル | **`sharp@0.35.4`**(optionalDependencies, ネイティブ) | 任意依存。ホスト側 `sharp` を優先ロード、無い場合は縮小せず文字情報に退避 | `src/dsh-adapter/sharp.ts`, `src/utils/imageResize.ts` | | 数式(LaTeX) | **`@dsh-tui-vendor/mathjax-tex-svg`**(workspace ベンダリング = `vendor/mathjax-tex-svg` 1.9MB, bundledDependencies) + **`sharp`**(SVG→ラスタ) + **`sixel`** または Kitty | 3段依存。どれか欠けると Unicode テキスト描画へフォールバック(自前実装 `src/math/*`) | `src/math/renderer.ts`, `src/components/MathBlock.tsx`, `src/components/InlineMathParagraph.tsx`, `src/terminal-utils/latex.ts` | | Mermaid | **`lovely-mermaid@0.3.3`**(動的 `import()`) + **`marked@18`**(フェンス検出) | npm 依存。`/settings` の `mermaidDiagrams` で off 可 | `src/terminal-utils/mermaid.ts`, `src/components/MermaidDiagram.tsx` | | Markdown / コード表示 | **`marked`**, **`cli-highlight`**, **`highlight.js`**, **`wrap-ansi`**, **`strip-ansi`**, **`cli-boxes`**, **`code-excerpt`**, **`indent-string`** | npm 依存。`cli-highlight` は動的 import(`src/terminal-utils/cliHighlight.ts`) | `src/components/Markdown.tsx`, `src/terminal-utils/markdown.ts` | | diff 表示 | **`diff@8`** | npm 依存 | `src/components/diffPatch.ts`, `src/components/SplitDiffView.tsx` | | レンダラ中核 | **`react@19`**, **`react-reconciler@0.34`**, **`chalk@6`**, **`@alcalzone/ansi-tokenize`**, **`bidi-js`**(RTL), **`supports-hyperlinks`**(OSC 8), **`signal-exit`**, **`stack-utils`**, **`auto-bind`**, **`lodash-es`**, **`semver`**, **`type-fest`**, **`figures`** | npm 依存。Ink フォークが広く依存 | `src/ink/**`(外部依存19種) | | 作業状態アニメーション | **`dsh-working-activity@^0.5.0`**(外部 npm パッケージ) | `/activity` プリセットとプロジェクト投影の供給元 | `src/working-activity.ts`, `src/settings/definitions.ts`(`statusBar.activity`) | | Claude バックエンド | **`@anthropic-ai/claude-agent-sdk@0.3.287`**(optional peer) | SDK 同梱バイナリ/PATH 上の `claude` CLI を起動。未導入なら `/kernel` の導入ウィザード | `src/backends/claude/**`, `src/components/SdkInstallWizard.tsx`, `README.md:195` | | Codex バックエンド | **`ws@8`**(app-server JSON-RPC) + **外部バイナリ `@openai/codex`(0.160.1 基準 / 最小 0.144.0)** | npm 依存+利用者が別途インストールする CLI。`CODEX_EXECUTABLE` で差替 | `src/backends/codex/rpc/transport.ts`, `README.md:235` | | IDE 選択チャネル | **`ws@8`**(loopback WebSocket) + 拡張側 lock ファイル | プロトコル v2 の拡張(dsh-tui-vscode ≥0.7.0)が必要 | `src/dsh-adapter/ide-channel.ts`, `docs/vscode.md` §IDE 选区通道 | | クリップボード画像/テキスト | **OS 外部コマンド**(Windows: PowerShell `Get-Clipboard` / macOS: `osascript`・`pbpaste` / Linux: `wl-paste`→`xclip`→`xsel`) | npm 依存ではなく実行環境依存。全部無いと「クリップボードツール無し」エラー | `src/utils/clipboard.ts`, `docs/architecture.md` §已知限制 | | 外部エディタ `Ctrl+G` | **`$VISUAL` / `$EDITOR`**(例 `code --wait`) | 環境変数依存。未設定時は案内のみ(`vi` フォールバック無し) | `src/utils/externalEditor.ts`, `docs/configuration.md` §环境变量 | | 設定/構成の解析 | **`yaml@2`**, **`zod@4`** | npm 依存 | `src/dsh-adapter/session-list-metadata.ts`(zod), `src/backends/shared/*`(yaml) | | 通知(OSC) | **端末機能**(OSC 777 / OSC 99 / OSC 9 / BEL) | ライブラリ無し。tmux は `allow-passthrough on` と `focus-events on` が必要 | `src/ink/terminal-notification.ts`, `README.md:32` | | プラグイン機構 | **`@deepseek-ai/dsh-plugin-manager`** ほか `@deepseek-ai/*` 多数(peer 40件) | Cordis ホスト側サービス群。TUI は adapter 越しのみ参照 | `src/dsh-adapter/plugin-*.ts`, `package.json` peerDependencies | | 同梱ベンダリング | **`vendor/dsh-std`(130MB, git submodule → `@dsh-std/*` 8パッケージとして bundled)**, `vendor/sqlite-island`(76KB) | ワークスペース依存。`vendor/dsh-std` が最大の同梱物 | `.gitmodules`, `package.json` bundledDependencies, `vendor/` | 補足(客観事実): `usehooks-ts` は dependencies にあるが `src/` からの import は見つからず、`src/ink/hooks/use-interval.ts:41` のコメント内参照のみ。`THIRD_PARTY_LICENSES` は dsh-ui-whale 由来コード(BSD 3-Clause)の記載のみで、上記 npm 依存全体のライセンス一覧ではない。 --- # 不明点リスト 1. **実機検証なし** — 本作業は読み取りのみ。TUI を起動していないため、各機能の実際の描画・UX 品質は未検証(特に端末依存機能: Kitty/Sixel、OSC 通知、win32-input-mode、tmux 連携)。 2. **依存の導入状態が不明** — `node_modules`(800MB)は存在するが `pnpm install --frozen-lockfile` 済みか、`sharp` のネイティブビルドが有効かは未確認。`lovely-mermaid`/MathJax の実描画も未確認。 3. **ドキュメント間の矛盾** — `docs/architecture.md:298` は `/vim` `/connect` `/hooks` を「兼容占位命令」とするが、`/vim` は `src/screens/Chat.tsx:4126` で実装され `docs/interaction.md` §vim 编辑模式 にキー表もある。`/connect` `/hooks` の実装の有無は未確認。 4. **docs と guide の同期ズレ** — `guide/dsh-tui-guide/SKILL.md` は「`docs/` から逐語同期」と説明するが、`configuration.md` は docs 側に「语言包」節(25行)があり guide 側に無い(他8篇は diff なし)。guide が配布用スナップショットとして古い。 5. **機能の利用頻度・重要度データが無い** — テレメトリ等は無く、「どれを載せるか」の重み付けは人間の判断が必要。本レポートは規模の客観値のみ。 6. **Codex の 875 ファイル**は `src/backends/codex/protocol/generated/` 配下の生成コード(10,118行)と**推測**。生成元スキーマ・再生成手順は未確認。 7. **個別機能の実装突合は文書ベース** — README/docs の記述を根拠にした項目が多く、実装コードでの全数裏取りは行っていない(規模計測と主要機能のコード確認は実施済み)。 8. **`/settings` 57キーの網羅性** — `src/settings/definitions.ts` のキー数は数えたが、各キーの既定値・実効範囲(即時反映か `/restart` 要か)は未確認。 9. **`scripts/`(620ファイル/192,705行、`verify:*` 126本)の内容**は今回棚卸し対象外。開発・検証資産であり、ユーザー向け機能ではない。