Files
deepseek-harness/docs/module-graph.md
T
Tianyi Cui b59d245c7c feat: Code Mode — the registry's mode config, the SDK codegen, and the run_code bridge
The dsh-tools half of the Code Mode RFC (its fourth, final change): the
registry gains its first config — mode: native | code | both — and OWNS how
its tools reach the model. 'code' contributes exactly one wire tool,
run_code, plus a lazy tools:sdk prompt section declaring every other tool
as a generated TypeScript API (jsonSchemaToTs: total over the defineTool
subset, unknown degradation, lexicographic byte-identical rendering);
'both' ships both representations; 'native' is byte-for-byte the old
behavior. Non-native modes fail every assembly loudly without a
typescript-language ctx.codeRuntime.

run_code's dispatch bridge: JSON-normalizes each binding argument before
dispatch (what dispatches is what the tool/code-dispatch event logs — the
append can never fail on payload shape; BigInt/circulars reject that one
call), serializes all program tool calls through a per-run queue (even
Promise.all — no concurrency-safety metadata yet), routes every sub-call
through tools/pre-execute → tools/post-execute (a deny rejects the
program-side promise), drops sub-call additionalContext (no safe outlet
mid-run; pinned), owns a run-scoped abort that follows the outer signal in
and fires on settlement (in-flight sub-dispatch aborted, queued abandoned,
queue drained before returning), and converts a failed run into
CodeRunFailedError → a structured isError carrying kind + captured logs.
tool/code-dispatch joins SessionEventMap by declaration merging (log-only;
deriveMessages ignores it).

The composed surface: the tools config forwards through agent-core and
both app packages; examples/code-agent + demo:code run the worker runtime
under mode code (keyless boot smoke + a with-key e2e proving the collapsed
[run_code] header, the dispatch events, and the file the program wrote);
two new snapshot scenarios (code-mode-turn, both-mode-turn) record the SDK
section, collapsed header, dispatch events, and result card — each its own
header-pinning class (the harness gains per-scenario config overlays and
per-class pins). Catalogs, graphs, cookbook, hooks-bridge notes, and the
RFC (moved to implemented/, restructured to decision-era headings) updated
in the same change.
2026-07-08 12:58:23 +08:00

15 KiB

Module dependency graph

Inter-package dependencies among the @deepseek-ai/dsh-* harness packages, derived from each package's peerDependencies (the canonical runtime-dependency signal) and grouped by the packages/<group>/<pkg> hierarchy. An edge a --> b means package a depends on package b. Names have the @deepseek-ai/dsh- prefix stripped.

flowchart TD
  subgraph group_util["packages/util"]
    pkg_brand["brand"]
  end
  subgraph group_llm["packages/llm"]
    pkg_llm["llm"]
    pkg_llm_deepseek["llm-deepseek"]
    pkg_llm_pi_ai["llm-pi-ai"]
  end
  subgraph group_core["packages/core"]
    pkg_agent["agent"]
    pkg_agent_core["agent-core"]
    pkg_agent_loop["agent-loop"]
    pkg_session["session"]
    pkg_system_prompt["system-prompt"]
    pkg_tools["tools"]
  end
  subgraph group_bash["packages/bash"]
    pkg_bash["bash"]
    pkg_bash_local["bash-local"]
    pkg_tool_bash["tool-bash"]
  end
  subgraph group_fs["packages/fs"]
    pkg_fs["fs"]
    pkg_fs_local["fs-local"]
    pkg_fs_policy["fs-policy"]
    pkg_tool_fs["tool-fs"]
  end
  subgraph group_compact["packages/compact"]
    pkg_compact["compact"]
    pkg_compact_basic["compact-basic"]
  end
  subgraph group_subagent["packages/subagent"]
    pkg_subagent["subagent"]
    pkg_subagent_acp["subagent-acp"]
    pkg_subagent_fork["subagent-fork"]
    pkg_subagent_inprocess["subagent-inprocess"]
    pkg_subagent_spawn["subagent-spawn"]
    pkg_tool_subagent["tool-subagent"]
  end
  subgraph group_web["packages/web"]
    pkg_tool_web["tool-web"]
    pkg_web["web"]
    pkg_web_fetch_local["web-fetch-local"]
    pkg_web_search_deepseek["web-search-deepseek"]
    pkg_web_search_exa["web-search-exa"]
    pkg_web_search_perplexity["web-search-perplexity"]
  end
  subgraph group_todo["packages/todo"]
    pkg_tool_todo["tool-todo"]
  end
  subgraph group_hooks["packages/hooks"]
    pkg_hook_protocol["hook-protocol"]
    pkg_hooks_claude["hooks-claude"]
    pkg_hooks_codex["hooks-codex"]
  end
  subgraph group_session_persistence["packages/session-persistence"]
    pkg_session_persistence["session-persistence"]
    pkg_session_persistence_jsonl["session-persistence-jsonl"]
    pkg_session_persistence_sqlite["session-persistence-sqlite"]
  end
  subgraph group_support["packages/support"]
    pkg_invariants["invariants"]
    pkg_llm_replay["llm-replay"]
    pkg_subagent_mock["subagent-mock"]
  end
  subgraph group_ui["packages/ui"]
    pkg_acp["acp"]
    pkg_acp_agent["acp-agent"]
    pkg_app_boot["app-boot"]
    pkg_stdio_agent["stdio-agent"]
  end
  subgraph group_code_runtime["packages/code-runtime"]
    pkg_code_runtime["code-runtime"]
    pkg_code_runtime_worker["code-runtime-worker"]
  end
  pkg_llm --> pkg_brand
  pkg_bash --> pkg_brand
  pkg_code_runtime_worker --> pkg_code_runtime
  pkg_llm_deepseek --> pkg_llm
  pkg_llm_pi_ai --> pkg_llm
  pkg_session --> pkg_brand
  pkg_session --> pkg_llm
  pkg_system_prompt --> pkg_llm
  pkg_bash_local --> pkg_bash
  pkg_fs --> pkg_brand
  pkg_fs --> pkg_llm
  pkg_web --> pkg_llm
  pkg_agent --> pkg_brand
  pkg_agent --> pkg_llm
  pkg_agent --> pkg_session
  pkg_agent --> pkg_system_prompt
  pkg_fs_local --> pkg_fs
  pkg_fs_policy --> pkg_fs
  pkg_compact --> pkg_llm
  pkg_compact --> pkg_session
  pkg_web_fetch_local --> pkg_web
  pkg_web_search_deepseek --> pkg_web
  pkg_web_search_exa --> pkg_web
  pkg_web_search_perplexity --> pkg_web
  pkg_hook_protocol --> pkg_bash
  pkg_hook_protocol --> pkg_session
  pkg_session_persistence --> pkg_session
  pkg_llm_replay --> pkg_llm
  pkg_llm_replay --> pkg_session
  pkg_tools --> pkg_agent
  pkg_tools --> pkg_code_runtime
  pkg_tools --> pkg_llm
  pkg_tools --> pkg_session
  pkg_tools --> pkg_system_prompt
  pkg_compact_basic --> pkg_agent
  pkg_compact_basic --> pkg_compact
  pkg_compact_basic --> pkg_llm
  pkg_compact_basic --> pkg_session
  pkg_session_persistence_jsonl --> pkg_session
  pkg_session_persistence_jsonl --> pkg_session_persistence
  pkg_session_persistence_sqlite --> pkg_session
  pkg_session_persistence_sqlite --> pkg_session_persistence
  pkg_invariants --> pkg_agent
  pkg_invariants --> pkg_llm
  pkg_invariants --> pkg_session
  pkg_agent_loop --> pkg_agent
  pkg_agent_loop --> pkg_llm
  pkg_agent_loop --> pkg_session
  pkg_agent_loop --> pkg_session_persistence
  pkg_agent_loop --> pkg_system_prompt
  pkg_agent_loop --> pkg_tools
  pkg_tool_bash --> pkg_agent
  pkg_tool_bash --> pkg_bash
  pkg_tool_bash --> pkg_llm
  pkg_tool_bash --> pkg_system_prompt
  pkg_tool_bash --> pkg_tools
  pkg_tool_fs --> pkg_fs
  pkg_tool_fs --> pkg_llm
  pkg_tool_fs --> pkg_session
  pkg_tool_fs --> pkg_system_prompt
  pkg_tool_fs --> pkg_tools
  pkg_subagent --> pkg_agent
  pkg_subagent --> pkg_llm
  pkg_subagent --> pkg_tools
  pkg_tool_web --> pkg_llm
  pkg_tool_web --> pkg_system_prompt
  pkg_tool_web --> pkg_tools
  pkg_tool_web --> pkg_web
  pkg_tool_todo --> pkg_agent
  pkg_tool_todo --> pkg_session
  pkg_tool_todo --> pkg_tools
  pkg_hooks_codex --> pkg_agent
  pkg_hooks_codex --> pkg_hook_protocol
  pkg_hooks_codex --> pkg_llm
  pkg_hooks_codex --> pkg_session
  pkg_hooks_codex --> pkg_tools
  pkg_acp --> pkg_agent
  pkg_acp --> pkg_llm
  pkg_acp --> pkg_session
  pkg_acp --> pkg_session_persistence
  pkg_acp --> pkg_tools
  pkg_agent_core --> pkg_agent
  pkg_agent_core --> pkg_agent_loop
  pkg_agent_core --> pkg_invariants
  pkg_agent_core --> pkg_llm
  pkg_agent_core --> pkg_session
  pkg_agent_core --> pkg_system_prompt
  pkg_agent_core --> pkg_tool_bash
  pkg_agent_core --> pkg_tools
  pkg_subagent_acp --> pkg_agent
  pkg_subagent_acp --> pkg_llm
  pkg_subagent_acp --> pkg_subagent
  pkg_subagent_inprocess --> pkg_agent
  pkg_subagent_inprocess --> pkg_llm
  pkg_subagent_inprocess --> pkg_session
  pkg_subagent_inprocess --> pkg_subagent
  pkg_subagent_inprocess --> pkg_system_prompt
  pkg_subagent_inprocess --> pkg_tools
  pkg_tool_subagent --> pkg_agent
  pkg_tool_subagent --> pkg_llm
  pkg_tool_subagent --> pkg_subagent
  pkg_tool_subagent --> pkg_tools
  pkg_hooks_claude --> pkg_agent
  pkg_hooks_claude --> pkg_hook_protocol
  pkg_hooks_claude --> pkg_llm
  pkg_hooks_claude --> pkg_session
  pkg_hooks_claude --> pkg_subagent
  pkg_hooks_claude --> pkg_tools
  pkg_subagent_mock --> pkg_agent
  pkg_subagent_mock --> pkg_llm
  pkg_subagent_mock --> pkg_subagent
  pkg_subagent_fork --> pkg_agent
  pkg_subagent_fork --> pkg_session
  pkg_subagent_fork --> pkg_subagent
  pkg_subagent_fork --> pkg_subagent_inprocess
  pkg_subagent_spawn --> pkg_subagent
  pkg_subagent_spawn --> pkg_subagent_inprocess
  pkg_acp_agent --> pkg_acp
  pkg_acp_agent --> pkg_agent_core
  pkg_acp_agent --> pkg_app_boot
  pkg_acp_agent --> pkg_session_persistence_jsonl
  pkg_acp_agent --> pkg_tools
  pkg_stdio_agent --> pkg_agent
  pkg_stdio_agent --> pkg_agent_core
  pkg_stdio_agent --> pkg_app_boot
  pkg_stdio_agent --> pkg_llm
  pkg_stdio_agent --> pkg_session
  pkg_stdio_agent --> pkg_session_persistence_jsonl
  pkg_stdio_agent --> pkg_tools
Package Group Depends on
brand util
app-boot ui
code-runtime code-runtime
llm llm brand
bash bash brand
code-runtime-worker code-runtime code-runtime
llm-deepseek llm llm
llm-pi-ai llm llm
session core brand, llm
system-prompt core llm
bash-local bash bash
fs fs brand, llm
web web llm
agent core brand, llm, session, system-prompt
fs-local fs fs
fs-policy fs fs
compact compact llm, session
web-fetch-local web web
web-search-deepseek web web
web-search-exa web web
web-search-perplexity web web
hook-protocol hooks bash, session
session-persistence session-persistence session
llm-replay support llm, session
tools core agent, code-runtime, llm, session, system-prompt
compact-basic compact agent, compact, llm, session
session-persistence-jsonl session-persistence session, session-persistence
session-persistence-sqlite session-persistence session, session-persistence
invariants support agent, llm, session
agent-loop core agent, llm, session, session-persistence, system-prompt, tools
tool-bash bash agent, bash, llm, system-prompt, tools
tool-fs fs fs, llm, session, system-prompt, tools
subagent subagent agent, llm, tools
tool-web web llm, system-prompt, tools, web
tool-todo todo agent, session, tools
hooks-codex hooks agent, hook-protocol, llm, session, tools
acp ui agent, llm, session, session-persistence, tools
agent-core core agent, agent-loop, invariants, llm, session, system-prompt, tool-bash, tools
subagent-acp subagent agent, llm, subagent
subagent-inprocess subagent agent, llm, session, subagent, system-prompt, tools
tool-subagent subagent agent, llm, subagent, tools
hooks-claude hooks agent, hook-protocol, llm, session, subagent, tools
subagent-mock support agent, llm, subagent
subagent-fork subagent agent, session, subagent, subagent-inprocess
subagent-spawn subagent subagent, subagent-inprocess
acp-agent ui acp, agent-core, app-boot, session-persistence-jsonl, tools
stdio-agent ui agent, agent-core, app-boot, llm, session, session-persistence-jsonl, tools