# DSH 本体の公開インターフェース調査 出典: 読み取り専用調査 / 対象 @deepseek-ai/dsh 0.2.0-rc.2 / 作成日 2026-10-18 対象環境: Node v22.22.1(Amaro 無し)/ pnpm 11.28.5 / DSH_HOME=$HOME/.dsh 制約遵守: ファイル書換なし・`workflow` ツール未使用(Node に Amaro が無いため orchestration script の TS 実行が不可)。 **プロファイルの起動(`dsh --profile X`)は一切実行していない**(セッション/ログ書込の恐れがあるため)。そのため app 層のフラグは実装コードと README から確認した。 実行したコマンドは `dsh --help` / `dsh --version` / `dsh-tui --version` と読み取り系(`ls` / `find` / `node -e` での JSON 読取 / `grep` / `sed -n`)のみ。 --- ## 1. インストール済み @deepseek-ai/* パッケージ一覧 ### トップレベル(`ls -la $HOME/.local/lib/node_modules/`) ``` @deepseek-ai/ @deepseek-harness-tui/ pnpm/ ``` - `@deepseek-ai/` の中身は **`dsh` のみ**(`ls $HOME/.local/lib/node_modules/@deepseek-ai/`)。 - `$HOME/.local/lib/node_modules/@deepseek-ai/dsh/package.json:2-4` → `name=@deepseek-ai/dsh`, `version=0.2.0-rc.2` - 同 `:14-16` → `bin: { "dsh": "lib/bin.js" }`(`$HOME/.local/bin/dsh` の symlink 先と一致) - 同 `:155-162` → exports は **`./profile-boot` / `./lib/*` / `./package.json` の3つのみ。`"."` が無い**(=`import "@deepseek-ai/dsh"` は不可。重要) - 同 `:17-20` → `files: ["lib/*.js", "lib/types/*.d.ts"]` → **src/ は非同梱** - 同 `:22-104` dependencies に120件、`:106-153` devDependencies に42件を宣言 ### 実体の在処は dsh の入れ子 node_modules `$HOME/.local/lib/node_modules/@deepseek-ai/dsh/node_modules/@deepseek-ai/` に **205個**(`ls | wc -l`)。 全パッケージ共通の形(機械抽出で確認): | 項目 | 値 | |---|---| | `main` | `lib/index.js`(例外: `schemastery`=lib/index.cjs, `libreoffice-kit-wasm`/`node-addon-system*`=main無し) | | `types` | `lib/types/index.d.ts`(205個中 `libreoffice-kit-wasm` と `node-addon-system*` を除く全件) | | `bin` | `cordis`(@deepseek-ai/cordis), `dsoffice`(libreoffice-kit)以外は**bin 無し** | | `exports` | 原則 `{ ".": {types, default}, "./src/*", "./package.json" }`。約40件が `./client` `./types` `./invariant` `./typert` `./remote` 等を追加 | バージョン: **205個中202個が 0.2.0-rc.2**。例外は `cordis 4.0.4` / `cordis-plugin-group 1.0.4` / `cordis-plugin-include 1.0.9` / `cordis-plugin-loader 1.0.5` / `cordis-plugin-timer 1.1.6` / `cosmokit 1.8.5` / `schemastery 3.18.4` / `libreoffice-kit(-wasm) 0.1.5` / `node-addon-system(-linux-x64) 0.1.2`。 **宣言 vs 実在の差分**(`node -e` で突合): - 宣言されているのに**実在しない 9件**: `dsh-client-ui-agent-preset`, `dsh-client-ui-cordis`(←この2つは `dependencies`。他7件は devDependencies: `dsh-agent-loop-testkit`, `dsh-experimental-ptc-runtime-python`, `dsh-host-frontend-static`, `dsh-llm-mock-server`, `dsh-llm-replay`, `dsh-loader-smoke`, `dsh-sdk-client`) - `find $HOME/.local/lib/node_modules -maxdepth 6 -name "*client-ui*"` → **0件**。`.pnpm` ディレクトリも無し。 - ⚠️ つまり **Web フロントエンドの UI プラグイン群(`dsh-client-ui-*`)は本環境に1つも入っていない**。 ### `$HOME/.dsh/profiles/*/node_modules` - `profiles/dsh-tui/node_modules/` … 64エントリ。うち DSH 製は **無し**(`@deepseek-ai` ディレクトリ自体が存在しない)。 - `@deepseek-harness-tui/dsh-tui` **0.15.0**(第三者。`bin: dsh-tui/dst`, `exports` に `./api`, `./panels`, `./scenes`, `./extensions`, `./plugin-host`, `./jsx-runtime`, `./cordis.patch.yml` 等) - `dsh-working-activity` **0.5.1**(第三者・非scoped。`dsh.bundle.patch` **と** `dsh.client.platform="web"` の両方を宣言) - 他は react / ink 系・sharp / sixel / ws / zod / yaml 等の一般依存 - `profiles/headless/` … `cordis.patch.yml`, `cordis.yml`, `package.json`, `pnpm-workspace.yaml` のみ。**node_modules 無し** - プロファイル manifest: - `profiles/headless/package.json` → `dsh.profile.bundles = ["@deepseek-ai/dsh-base","@deepseek-ai/dsh-headless"]` - `profiles/dsh-tui/package.json` → `dependencies: {"@deepseek-harness-tui/dsh-tui": "file:.../dsh-TUI/deepseek-harness-tui-dsh-tui-0.15.0-20261016b.tgz"}`, `bundles = ["@deepseek-ai/dsh-base","@deepseek-harness-tui/dsh-tui"]` - 両者 `cordis.yml` は `[]`(空ルート。木は patch で合成される) --- ## 2. アーキテクチャ文書の所在と要点 ### 所在(重要: 上流の docs は非同梱) - **`find $HOME/.local/lib/node_modules/@deepseek-ai -maxdepth 4 -name "AGENTS.md" -o -name "ADAPTER.md" -o -name "CLAUDE.md"` → 0件** - **DSH インストール配下に `docs/` ディレクトリは存在しない**(`libreoffice-kit-wasm/sources/docs` のみ) - 文書は **パッケージ単位の README.md が204本**(`@deepseek-ai/*/README.md` の実数)+ トップ `dsh/README.md`(64行) - `dsh/README.md:48,50,54` が参照する `reference/README.md`, `docs/user/guide/index.md`, `docs/config-catalog.md` は**リポジトリ内パスで、本環境に実体なし** - 唯一の「設計文書」的な実体は **型定義の module ドキュメント**。例: `dsh-app-boot/lib/types/profile.d.ts:1-20`(プロファイル/バンドル/2アンカー解決の正確な定義) - 第三者側の設計文書は `$HOME//dsh-TUI/ADAPTER.md`(191行), `docs/architecture.en.md`, `docs/standalone-host-design.md` に存在(DSH本体の文書ではない) ### 要点(フロントエンド/TUI の差し込み) 実行単位は**プロファイル**。プロファイルは「バンドル(=npmパッケージ)の patch 層を順に重ねた木」。 - `dsh/README.md:41-46`(逐語): 木は空ルートに 1. `dsh.profile.bundles` の順に各バンドルの patch 2. プロファイルの `cordis.patch.yml` 3. `$DSH_HOME/cordis.patch.yml` 4. `--patch` オーバーレイ - `dsh/README.md:46`: バンドルは **dsh インストール側 → プロファイルの node_modules** の順で解決 - 実装: `dsh-app-boot/lib/index.js:901-908 resolveBundleDir()` — 2アンカー解決。失敗時 `"cannot resolve profile bundle ...; run 'dsh plugin --profile install'"`。`:920-957 loadProfileDirectory()` — バンドルは `package.json` の `dsh.bundle` を**必須**とし、宣言が無ければエラー。互換性 NG バンドルは**例外を投げず `skippedBundles` に積んで黙って飛ばす** - バンドル契約(型): `dsh-package-manifest/lib/types/types.d.ts:65-68` ```ts interface DshBundleManifest { patch: string | string[] } // 自前 cordis.patch.yml を宣言 interface DshProfileManifest { bundles?: string[] } ``` - 実例: `dsh-base/cordis.patch.yml` 冒頭コメント「ONE insert over the empty profile root ... address these rows by id, with the last write winning」+ `disabled: !!js "!ctx.get('profileContext')"` のような **JS式が YAML 内で有効** ### プラグイン機構 = Cordis - `@deepseek-ai/cordis` 4.0.4(`@deepseek-ai` スコープの fork)+ `cordis-plugin-loader` / `-include` / `-timer` / `-group`。行は `{id, name, inject, disabled, config}` の Cordis Loader エントリ - 拡張点は **(a) 自前バンドルの patch で行を insert/上書き/disable**、**(b) プロファイルの `cordis.patch.yml` で id 指定上書き**、**(c) `dsh tool cordis` / plugin-manager による実行時操作** ### フロントエンド差し込みの2経路 1. **Host 側(プロセス内)**: TUI はこの方式。`dsh-tui` の `cordis.patch.yml` が dsh-tui / working-activity / dsh-tui-webserver 等の行を insert(`ADAPTER.md:123-146` に Patch Surface の内訳: disabled 23行 / config 6行 / insert 19行)。`ADAPTER.md:5-20` が `@deepseek-ai/*` を `src/dsh-adapter/` に閉じ込める境界規則を規定 2. **Client 側(ブラウザ)**: `dsh-web-app/cordis.patch.yml:42`(逐語)「`dsh.client` rows are the browser roster the modules node half scans into `window.__DSH_BOOT__`」。契約は `dsh-package-manifest/lib/types/types.d.ts:82-91` `DshClientManifest { platform, inject?, immediately?, external? }`、コメントに「Client platform identifier; **the Web consumer selects `web`**」 - ⚠️ この消費者(`@deepseek-ai/dsh-client-modules` / `dsh-client-ui-*`)は**本環境に未インストール** --- ## 3. 非対話・ヘッドレス・外部プロセス連携の口 ### `dsh --help` 全出力(`cd /tmp && $HOME/.local/bin/dsh --help`, exit=0) ``` Usage: dsh [--profile] [options] [app-args...] dsh plugin --profile dsh: boot a DeepSeek Harness profile — an ordered stack of plugin-bundle patch layers under your own overrides. Arguments: args arguments for the booted profile's app (see: dsh --profile --help) Options: -V, --version output the version number --profile the profile under $DSH_HOME/profiles to boot --from-default-profile initialize a new custom profile from a shipped profile template --patch extra patch-list overlay applied after the profile layer (repeatable) --dump-config print the composed profile tree and exit --dump-config-schema print JSON Schema for profile entries and patches without mounting --dump-default-config print the profile tree without its user layer or --patch overlays and exit Examples: dsh web boot the web profile (same as: dsh --profile web) dsh rescue --from-default-profile web create rescue from the shipped web template, then boot it dsh headless "run the tests" answer one task, print the result, and exit dsh tui --patch ./extra.yml boot a custom profile with one extra overlay dsh tui --resume arguments after the launcher flags reach the app dsh web --help the web app's own flags and help dsh plugin --profile tui add install a plugin into the tui profile ``` ### `dsh --version` / `-V` `0.2.0-rc.2`(両方、exit=0)。`$HOME/.local/bin/dsh-tui --version` → `@deepseek-harness-tui/dsh-tui 0.15.0 (launcher)` + `profile: 0.15.0 $HOME/.dsh/profiles/dsh-tui/node_modules/@deepseek-harness-tui/dsh-tui` ### フラグ有無の判定(`print`/`headless`/`stream-json`/`json`/`rpc`/`serve`/`socket`) - **ランチャには上記フラグは一切無い**。定義は `dsh/lib/bin.js:105` の commander 定義(`--profile`, `--from-default-profile`, `--patch`, `--dump-config`, `--dump-config-schema`, `--dump-default-config`, `-V/--version`)のみ。`.helpOption(false).allowUnknownOption().passThroughOptions()` で**未知トークン以降は app へ素通し**(`bin.js:10-24` のコメント参照) - `dsh ` は `dsh --profile ` に展開(`bin.js:129`)。`plugin` サブコマンドのみ特別扱い(`bin.js:115-126`) - **実際の機械可読口はプロファイル側**: | 口 | 実装根拠 | |---|---| | `dsh --profile headless ""` / stdin / `-` | `dsh-headless/cordis.patch.yml`(task positional, `--session-id`, `--json`) | | `--json`(NDJSON: session/final/status/text/thinking/tool_call/tool_result/error) | `dsh-headless/lib/startup.js:33-43`(`option("--json", ...)`, `option("--session-id ", ...)`)| | `dsh --profile sdk` / `sdk-minimal`(JSON-RPC 2.0 over stdio、stdout占有) | `dsh-sdk-app/cordis.patch.yml` 冒頭「Stdout belongs exclusively to JSON-RPC」 | | `dsh --profile acp`(ACP JSON-RPC over stdio) | `dsh-acp-app/cordis.patch.yml` 冒頭「Stdout belongs to ACP」 | | `dsh --profile web --host/--port/--no-open/--trusted-host`(HTTP listen) | `dsh-web-app/lib/startup.js:22,26,40-41`(`--host 0.0.0.0` は明示拒否) | | `--dump-config` 系(マウントせず木を出力) | `dsh/lib/bin.js:239-248` | - 出荷テンプレート(`dsh-app-boot/lib/index.js:529-535`): `acp`, `web`, `headless`, `sdk`, `sdk-minimal` の**5つのみ**。**`tui` は出荷テンプレートではない**(help の `dsh tui ...` は例示であり、実体は第三者プロファイル名)。それ以外の名前は `DEFAULT_PROFILE_BUNDLES = ["@deepseek-ai/dsh-base"]`(同 `:543`) - 出荷オプションバンドル(同 `:552-557`): `dsh-experimental-agent-team-profile`, `-voice-input-bundle`, `-auto-review`, `-schedule-bundle` - **`serve`/`socket`/デーモン化の口は発見できず**(ランチャ・出荷バンドル共に)。web のみ HTTP listen ### SDK 的エクスポート(分割パッケージ) - `@deepseek-ai/dsh/profile-boot` → `runProfile`, `prepareProfile`, `initializeProfileFromDefault`, `INSTALL_ANCHOR`, `PROFILE_ROOT_FILENAME`, `homePatchPath`(`dsh/lib/profile-boot.js` の export 文、`dsh/lib/types/profile-boot.d.ts`) - `@deepseek-ai/dsh-app-boot` → `composeEntries`, `createRuntimeResolution`, `loadProfile`, `loadProfileDirectory`, `resolveBundleDir`, `PROFILE_TEMPLATES`, `DEFAULT_PROFILE_BUNDLES`, `OPTIONAL_BUNDLES`, `initProfile`, `PluginPackages`, …(`dsh-app-boot/lib/types/index.d.ts:37-38`) - `@deepseek-ai/dsh-home-paths` → `resolveDshHome`(`dsh/lib/bin.js:3` で使用) - `@deepseek-ai/dsh-cmdline` → `parseCmdline`(`dsh-headless/lib/startup.js:3`) - `@deepseek-ai/dsh-sdk-protocol` → JSON-RPC トランスポート + 型(純ライブラリ、plugin 無し) - 上記以外は `dsh-` 単位で細分化(205件)。カテゴリ別: - **boot/基盤**: dsh-app-boot, dsh-cmdline, dsh-home-paths, dsh-launch-environment, dsh-plugin-manager, dsh-hmr, dsh-settings, dsh-credentials(-local), dsh-http-proxy, dsh-atomic-write, dsh-package-manifest, dsh-lazy-require, dsh-typert-{loader,protocol,registry}, dsh-api-gateway - **core agent**: dsh-agent(-loop, -default-model, -preset, -preset-registry, -instructions, -tool-presentation), dsh-session(+format系, persistence, query, projection, telemetry, title, reference, log-deepseek), dsh-llm(+deepseek, retry, pi-ai), dsh-tools(+tool-* 約25件), dsh-system-prompt, dsh-fs(+local, sandbox, observation-policy), dsh-sandbox(+local, policy), dsh-shell(+env), dsh-terminal(+bash), dsh-subagent(+drivers), dsh-jobs(+local), dsh-skill(+filesystem, office, badge), dsh-goal(+round-driver), dsh-plan-mode, dsh-persona, dsh-schedule, dsh-webhook(+github), dsh-workflow(+ptc), dsh-compaction(+basic, +pruner, +image-offload), dsh-mcp-client, dsh-mcp-resources, dsh-user-approval, dsh-user-questions, dsh-attachment(+local), dsh-storage(+domain, json), dsh-spill(+local, policy), dsh-token-meter, dsh-time-context, dsh-tmux-context - **surfaces(バンドル)**: dsh-base, dsh-headless, dsh-web-app, dsh-sdk-app, dsh-sdk-minimal, dsh-acp-app - **host/client**: dsh-host-webserver, dsh-host-plugin-inventory, dsh-client-connection, dsh-client-file-upload, dsh-cordis-host-runner, dsh-cordis-client-runner - **実験**: dsh-experimental-{agent-team(-profile), voice-input-bundle, auto-review, schedule-bundle, speech-to-text(-sensevoice), api-speech-to-text, tool-agent-team} --- ## 4. TypeScript 型定義(.d.ts) **同梱されている。** 置き場は各パッケージの **`lib/types/**/*.d.ts`**。 - 実在確認(`find /lib/types -name "*.d.ts" | wc -l`): `dsh-agent`=9, `dsh-session`=11, `dsh-llm`=14, `dsh-tools`=10, `dsh-cmdline`=1, `dsh-app-boot`=20, `dsh-home-paths`=1, `dsh-sdk-protocol`=3, `dsh-headless`=5, `dsh-typert-protocol`=5, `dsh-client-connection`=16 - `exports` の各サブパスに `"types"` 条件が付く(例 `dsh-agent/package.json`): ```json ".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"}, "./types":{"types":"./lib/types/types.d.ts","default":"./lib/types/types.js"}, "./invariant":{...} ``` - dsh 本体(CLI): `dsh/lib/types/` に `args.d.ts`, `bin.d.ts`, `dump-config.d.ts`, `dump-config-schema.d.ts`, `plugin.d.ts`, `process-shutdown.d.ts`, `profile-boot.d.ts`, `startup-diagnostics.d.ts` の8本 - **落とし穴**: `dsh-headless` は `./src/*` を exports に持つが **`src/` ディレクトリは非同梱**(`ls dsh-headless/` → lib, cordis.patch.yml, README*, package.json, LICENSE のみ)。`dsh-agent`/`dsh-session`/`dsh-cmdline`/`dsh-client-connection` も同様に `src/` 無し → **`/src/*` サブパスは npm インストールでは解決不能**(リポジトリ前提の宣言) - `./client` サブパス(ブラウザ側ハーフ)を持つのは15件: `dsh-api-gateway`, `dsh-api-session-controller`, `dsh-client-connection`, `dsh-client-file-upload`, `dsh-cordis-client-runner`, `dsh-experimental-agent-team`, `dsh-goal`, `dsh-permission-presets`, `dsh-plan-mode`, `dsh-schedule`, `dsh-session-title`, `dsh-subagent`, `dsh-token-meter`, `dsh-tool-todo`, `dsh-typert-registry` - プログラムからの公開面の実体 = **`@deepseek-ai/dsh/profile-boot`(唯一の "." 以外の dsh 本体エクスポート)+ `dsh-app-boot` / `dsh-home-paths` / `dsh-cmdline` / 各ドメインパッケージの型付き ESM**。`@deepseek-ai/dsh` ルートは import 不可(第1項) --- ## 5. 判定: DSH本体を改造せず第三者が独自フロントエンドを実装できるか ### 判定 = **条件付き「可能」(ただし TUI は "プロセス内 Host プラグイン" 経路のみ)** **可能である根拠(第三者による実証が既にローカルに存在)** 1. `@deepseek-harness-tui/dsh-tui` 0.15.0 は **`@deepseek-ai` 以外のスコープの第三者パッケージ**で、`dsh.bundle.patch` を宣言し、`profiles/dsh-tui/package.json` の `dsh.profile.bundles` に載って動作している。`dsh-working-activity` 0.5.1(非scoped・第三者)も同様 2. その README 逐語(`$HOME//dsh-TUI/README.md:31`): 「**Zero core changes: it consumes only DSH's public exports** … Install to enable; uninstall leaves no patches behind.」 3. 導入経路も公開: `dsh plugin --profile add ` は pnpm へ**素通し**(`dsh/lib/bin.js:115-126`、`dsh/lib/plugin-BGnVfe_D.js` の `runPlugin()`)。**許可リストや審査は無い**(`desktop` プロファイルのみ予約で拒否: `bin.js:35-37`)。TUI 内 `/plugin install ` も `dsh-plugin-manager` 経由で同経路 4. 契約は型で公開: `dsh-package-manifest/lib/types/types.d.ts` の `DshManifest { manifestVersion?, bundle?, profile?, client? }`, `DshBundleManifest { patch }`, `DshEnginesManifest { dsh?, node?, npm? }` 5. 実行時解決も公開 API: `dsh-app-boot` の `createRuntimeResolution` が「インストール側が持つパッケージと選択バンドルを Node の ESM/CJS リゾルバに供給」→ プロファイル内プラグインが `@deepseek-ai/dsh-agent` 等を peer として import できる(`dsh-tui` の peerDependencies が実際にそう宣言) **条件(満たさないと破綻する)** - (a) **`@deepseek-ai/dsh` 本体はルート import 不可**(`exports` に `"."` が無い)。入り口は `@deepseek-ai/dsh/profile-boot` の3导出相当のみ。`ADAPTER.md:107-111` も「宿主 CLI `@deepseek-ai/dsh` は依存ではない/`profile-boot` の3导出をローカル宣言で読む」と明記 - (b) **プラットフォーム契約は `web` しか無い**。`DshClientManifest.platform` のコメントは「the Web consumer selects `web`」で、`dsh.client` を解釈する消費者(`dsh-client-modules` 系)は**本環境に未インストール**。→ **TUI は `dsh.client` を使えず、Host 側 Cordis プラグインとして木に載る以外に無い**(=DSH と同一プロセスで動く必要がある) - (c) **バージョン整合の管理コスト**。`loadProfileDirectory` は互換性 NG バンドルを**エラーにせず黙って `skippedBundles` へ落とす**(`dsh-app-boot/lib/index.js:920-957`)。回避には `dsh plugin --profile X allow-version --dsh-version --accept-risk`(`plugin-BGnVfe_D.js`)が必要。第三者 TUI 側も `cordis.patch.yml`(25KB) / `patch-surface.snapshot.json` / `host-replica.snapshot.json` / `verify:patch-surface` で上流追随を管理している(`ADAPTER.md:123-167`) - (d) **上流 patch 面への依存は不可避**。`ADAPTER.md:125-146` が「公式行への disabled overrides 23行 / config overrides 6行 / inserts 19行」を列挙。行 id は公開面だが、**上流が行を増減させると追随が必要**(=「本体改造は不要」だが「本体非依存」ではない) - (e) **別プロセス方式(SDK/ACP)は TUI 土台として不足**: 承認要求と `ask_user_question` のチャネルがプロトコルに無い、`initialize` でモデル固定、`sdk-app` は HMR 無効(`dsh-sdk-app/README.md` の Known Limitations、および既存 `docs/research/2026-10-18-dsh-integration-surfaces.md:92-105`) **結論**: 「DSH 本体のソースを書き換える」ことなく独自 TUI を実装することは **公開面のみで可能**(実例あり)。ただしそれは **Host 側 Cordis バンドルとして DSH プロセス内に同居する**方式に限られ、Web 用 `dsh.client` のような**プラットフォーム非依存の UI 契約は公開されていない**。したがって「条件付き可能」が妥当。無条件可能と断言するのは根拠不足((b)(d) が未解決のため)。 --- ## 不明点リスト 1. `@deepseek-ai/dsh-client-ui-cordis` と `dsh-client-ui-agent-preset` が `dsh/package.json:35,37` の **dependencies に宣言されているのにディスク上に存在しない**理由(インストール時 prune / npm 配布物の欠落 / optional 扱い のいずれか)→ **不明**。他7件は devDependencies なので説明可能 2. `@deepseek-ai/dsh` に `"."` export が無いのが意図的設計かどうか → 型定義と `ADAPTER.md` の記述から**意図的と推測**(断定は避ける) 3. `dsh --profile headless --help` 等 **app 層フラグの実機出力は未取得**(読み取り専用制約を優先し、プロファイル起動を回避)。報告したフラグは実装コード(`dsh-headless/lib/startup.js:33-43`, `dsh-web-app/lib/startup.js:22`)と README からの確認 4. npm レジストリ上の `@deepseek-ai/dsh-*` の公開状況(dist-tag・取得可否)→ **未確認**。`npm view` は npm キャッシュへ書き込む恐れがあるため実行せず。ローカルには公開を裏付ける証拠(profile の pnpm-lock は `file:` 依存のみ)が無い 5. 上流リポジトリの `docs/`(`docs/user/guide/index.md`, `docs/config-catalog.md`, `reference/README.md`)の中身 → **本環境に非同梱のため不明** 6. `dsh.client` 機構の実挙動(`window.__DSH_BOOT__` へのロード、`dsh-client-modules` のスキャン規則)→ 消費者が未インストールのため**未検証**。`types.d.ts` の型コメント以上のことは不明 7. TUI を**プロセス外**から駆動する場合の承認 / ユーザー質問 / モデル切替の代替経路 → **不明**(SDK/ACP にチャネルが無いことは README 記載で確認したが、`dsh-sdk-protocol/lib/types/types.d.ts` の全文精読はしていない) 8. `dsh --dump-config` / `--dump-config-schema` の実出力 → **未実行**(読み取り専用制約。書込は無いはずだが確証が無いため回避)。出力形式は `dsh/lib/types/dump-config.d.ts`, `dump-config-schema.d.ts` から推測可能な範囲に留めた 9. `@deepseek-ai/cordis` 4.0.4 が本家 cordis からどう fork されているか(差分)→ **不明**(`cordis/README.md` 未精読)