{
  "meta": {
    "mission": "DeepSeek Harness 插件级 DAG 依赖链分析 — v0.1.7-rc.2 全量重建",
    "generated_at": "2026-09-27",
    "source": "官方 tarball dsh-v0.1.7-rc.2 (SHA256 761df167…) + 21 分片源码级三依据分析",
    "plugin_count": 239,
    "edge_count": 1077,
    "seam_edge_count": 536,
    "layer_count": 19,
    "group_count": 50,
    "seam_count": 73,
    "acyclic": true,
    "l1_plugins": 90,
    "l2_plugins": 82,
    "l3_plugins": 67
  },
  "groups": [
    {
      "id": "G01",
      "name": "ACP 协议",
      "plugins": [
        "dsh-acp"
      ]
    },
    {
      "id": "G02",
      "name": "API 网关与控制器",
      "plugins": [
        "dsh-api-account-controller",
        "dsh-api-gateway",
        "dsh-api-job-controller",
        "dsh-api-remotes",
        "dsh-api-session-controller",
        "dsh-api-settings-controller",
        "dsh-api-terminal-controller",
        "dsh-api-workspace-controller",
        "dsh-api-workspace-files"
      ]
    },
    {
      "id": "G03",
      "name": "附件",
      "plugins": [
        "dsh-attachment-local"
      ]
    },
    {
      "id": "G04",
      "name": "启动与插件管理",
      "plugins": [
        "dsh-config-editor",
        "dsh-hmr",
        "dsh-plugin-manager"
      ]
    },
    {
      "id": "G05",
      "name": "客户端运行时",
      "plugins": [
        "dsh-client-connection",
        "dsh-client-file-upload",
        "dsh-client-hmr",
        "dsh-client-locale",
        "dsh-client-modules",
        "dsh-client-resources",
        "dsh-client-shortcuts",
        "dsh-client-web"
      ]
    },
    {
      "id": "G06",
      "name": "客户端 UI 包",
      "plugins": [
        "dsh-client-ui-agent-preset",
        "dsh-client-ui-approval",
        "dsh-client-ui-attachment",
        "dsh-client-ui-brand-official",
        "dsh-client-ui-chat",
        "dsh-client-ui-commands",
        "dsh-client-ui-conversation",
        "dsh-client-ui-deliverables",
        "dsh-client-ui-directory-picker-browse",
        "dsh-client-ui-directory-picker-native",
        "dsh-client-ui-dockkit",
        "dsh-client-ui-goal",
        "dsh-client-ui-input-trigger",
        "dsh-client-ui-jobs",
        "dsh-client-ui-layout",
        "dsh-client-ui-message-feedback",
        "dsh-client-ui-model-selection",
        "dsh-client-ui-open-in-app",
        "dsh-client-ui-permission-presets",
        "dsh-client-ui-plan",
        "dsh-client-ui-plugin-manager",
        "dsh-client-ui-primitives",
        "dsh-client-ui-reference",
        "dsh-client-ui-renderer",
        "dsh-client-ui-schedule",
        "dsh-client-ui-session",
        "dsh-client-ui-settings",
        "dsh-client-ui-settings-account",
        "dsh-client-ui-settings-agent-loop",
        "dsh-client-ui-settings-general",
        "dsh-client-ui-settings-models",
        "dsh-client-ui-settings-plugin-inventory",
        "dsh-client-ui-settings-plugins",
        "dsh-client-ui-settings-shell",
        "dsh-client-ui-settings-subagent",
        "dsh-client-ui-settings-web-search",
        "dsh-client-ui-shortcuts",
        "dsh-client-ui-sidebar",
        "dsh-client-ui-sidebar-browser",
        "dsh-client-ui-sidebar-documentpreview",
        "dsh-client-ui-sidebar-files",
        "dsh-client-ui-sidebar-right",
        "dsh-client-ui-sidebar-terminal",
        "dsh-client-ui-skill",
        "dsh-client-ui-subagent",
        "dsh-client-ui-theme",
        "dsh-client-ui-tool",
        "dsh-client-ui-trajectory",
        "dsh-client-ui-user-questions",
        "dsh-client-ui-workflow-run",
        "dsh-client-ui-workspace"
      ]
    },
    {
      "id": "G07",
      "name": "上下文压缩",
      "plugins": [
        "dsh-command-compact",
        "dsh-compaction-basic",
        "dsh-compaction-image-offload",
        "dsh-compaction-tool-result-pruner"
      ]
    },
    {
      "id": "G08",
      "name": "上下文注入",
      "plugins": [
        "dsh-agent-instructions",
        "dsh-file-reference-local",
        "dsh-session-reference",
        "dsh-time-context",
        "dsh-tmux-context"
      ]
    },
    {
      "id": "G09",
      "name": "核心运行时",
      "plugins": [
        "dsh-agent",
        "dsh-agent-default-model",
        "dsh-agent-loop",
        "dsh-agent-tool-presentation",
        "dsh-scope",
        "dsh-session",
        "dsh-system-prompt",
        "dsh-tools"
      ]
    },
    {
      "id": "G10",
      "name": "凭据与授权",
      "plugins": [
        "dsh-authorization",
        "dsh-credentials-local",
        "dsh-deepseek-account-platform"
      ]
    },
    {
      "id": "G11",
      "name": "交付物",
      "plugins": [
        "dsh-tool-present",
        "dsh-workspace-changes"
      ]
    },
    {
      "id": "G12",
      "name": "文档处理",
      "plugins": [
        "dsh-office-to-pdf"
      ]
    },
    {
      "id": "G13",
      "name": "实验特性",
      "plugins": [
        "dsh-experimental-api-speech-to-text",
        "dsh-experimental-auto-review",
        "dsh-experimental-browser-use-chrome-devtools-mcp",
        "dsh-experimental-browser-use-playwright-mcp",
        "dsh-experimental-browser-use-stagehand-native",
        "dsh-experimental-client-ui-agent-team",
        "dsh-experimental-client-ui-voice-input",
        "dsh-experimental-computer-use-cua-driver-mcp",
        "dsh-experimental-computer-use-cua-driver-native",
        "dsh-experimental-inspector",
        "dsh-experimental-ptc-runtime-python",
        "dsh-experimental-speech-to-text-sensevoice",
        "dsh-experimental-tool-agent-team",
        "dsh-experimental-webworker-runtime"
      ]
    },
    {
      "id": "G14",
      "name": "宿主扩展",
      "plugins": [
        "dsh-client-ui-cordis",
        "dsh-cordis-client-runner",
        "dsh-cordis-host-runner",
        "dsh-tool-cordis"
      ]
    },
    {
      "id": "G15",
      "name": "反馈通道",
      "plugins": [
        "dsh-command-feedback",
        "dsh-message-feedback"
      ]
    },
    {
      "id": "G16",
      "name": "文件系统",
      "plugins": [
        "dsh-fs-local",
        "dsh-fs-observation-policy",
        "dsh-fs-sandbox",
        "dsh-tool-fs",
        "dsh-tool-fs-search",
        "dsh-tool-str-replace-editor"
      ]
    },
    {
      "id": "G17",
      "name": "目标与计划",
      "plugins": [
        "dsh-command-goal",
        "dsh-goal",
        "dsh-goal-round-driver",
        "dsh-tool-goal"
      ]
    },
    {
      "id": "G18",
      "name": "工具守卫",
      "plugins": [
        "dsh-repeat-tool-reminder",
        "dsh-tool-call-timeout-policy"
      ]
    },
    {
      "id": "G19",
      "name": "Hooks 扩展",
      "plugins": [
        "dsh-hook-protocol",
        "dsh-hooks-claude-code",
        "dsh-hooks-codex"
      ]
    },
    {
      "id": "G20",
      "name": "宿主服务",
      "plugins": [
        "dsh-host-directory-picker-auto",
        "dsh-host-directory-picker-browse",
        "dsh-host-directory-picker-native",
        "dsh-host-frontend-static",
        "dsh-host-open-in-app",
        "dsh-host-plugin-inventory",
        "dsh-host-webserver"
      ]
    },
    {
      "id": "G21",
      "name": "交互命令",
      "plugins": [
        "dsh-commands",
        "dsh-permission-presets",
        "dsh-tool-ask-user",
        "dsh-user-approval",
        "dsh-user-questions"
      ]
    },
    {
      "id": "G22",
      "name": "作业调度",
      "plugins": [
        "dsh-jobs-local",
        "dsh-tool-jobs"
      ]
    },
    {
      "id": "G23",
      "name": "LLM 适配",
      "plugins": [
        "dsh-deepseek-llm-api-extensions",
        "dsh-llm",
        "dsh-llm-deepseek-account",
        "dsh-llm-deepseek-api-key",
        "dsh-llm-pi-ai",
        "dsh-llm-retry",
        "dsh-plugin-package-inventory-deepseek",
        "dsh-token-meter"
      ]
    },
    {
      "id": "G24",
      "name": "LSP 集成",
      "plugins": [
        "dsh-lsp-stdio",
        "dsh-tool-lsp"
      ]
    },
    {
      "id": "G25",
      "name": "MCP 协议",
      "plugins": [
        "dsh-mcp-client",
        "dsh-mcp-resources"
      ]
    },
    {
      "id": "G26",
      "name": "规划模式",
      "plugins": [
        "dsh-plan-mode"
      ]
    },
    {
      "id": "G27",
      "name": "Agent 预设",
      "plugins": [
        "dsh-agent-preset",
        "dsh-agent-preset-registry",
        "dsh-persona"
      ]
    },
    {
      "id": "G28",
      "name": "代码执行运行时",
      "plugins": [
        "dsh-ptc-runtime-node"
      ]
    },
    {
      "id": "G29",
      "name": "运行时诊断",
      "plugins": [
        "dsh-invariants"
      ]
    },
    {
      "id": "G30",
      "name": "沙箱",
      "plugins": [
        "dsh-sandbox-local",
        "dsh-sandbox-policy"
      ]
    },
    {
      "id": "G31",
      "name": "定时调度",
      "plugins": [
        "dsh-schedule"
      ]
    },
    {
      "id": "G32",
      "name": "SDK 与协议",
      "plugins": [
        "dsh-sdk-jsonrpc-server"
      ]
    },
    {
      "id": "G33",
      "name": "会话核心",
      "plugins": [
        "dsh-session-checkpoint-policy",
        "dsh-session-log-deepseek",
        "dsh-session-persistence-jsonl",
        "dsh-session-projection",
        "dsh-session-projection-cache",
        "dsh-session-stats",
        "dsh-session-telemetry-otel",
        "dsh-session-title",
        "dsh-session-title-all-prompts-llm",
        "dsh-session-title-first-prompt-llm",
        "dsh-session-turn-outline"
      ]
    },
    {
      "id": "G34",
      "name": "会话检索",
      "plugins": [
        "dsh-session-log-export",
        "dsh-session-query-sqlite",
        "dsh-tool-session-query"
      ]
    },
    {
      "id": "G35",
      "name": "设置",
      "plugins": [
        "dsh-settings"
      ]
    },
    {
      "id": "G36",
      "name": "Shell 执行",
      "plugins": [
        "dsh-bash-local",
        "dsh-bash-sandbox",
        "dsh-pwsh-local",
        "dsh-pwsh-sandbox",
        "dsh-shell-env",
        "dsh-tool-bash",
        "dsh-tool-bash-persistent",
        "dsh-tool-pwsh",
        "dsh-tool-pwsh-persistent"
      ]
    },
    {
      "id": "G37",
      "name": "技能",
      "plugins": [
        "dsh-skill",
        "dsh-skill-badge",
        "dsh-skill-filesystem",
        "dsh-skill-office",
        "dsh-tool-skill",
        "dsh-tool-workspace-dependencies"
      ]
    },
    {
      "id": "G38",
      "name": "溢出存储",
      "plugins": [
        "dsh-spill-local",
        "dsh-spill-policy"
      ]
    },
    {
      "id": "G39",
      "name": "SSH 远程执行",
      "plugins": [
        "dsh-fs-ssh",
        "dsh-sandbox-ssh",
        "dsh-subprocess-ssh"
      ]
    },
    {
      "id": "G40",
      "name": "存储",
      "plugins": [
        "dsh-storage",
        "dsh-storage-domain",
        "dsh-storage-json",
        "dsh-storage-sqlite"
      ]
    },
    {
      "id": "G41",
      "name": "子代理",
      "plugins": [
        "dsh-subagent",
        "dsh-subagent-acp",
        "dsh-subagent-claude-code",
        "dsh-subagent-codex",
        "dsh-subagent-dsh-sdk",
        "dsh-subagent-fork-in-process",
        "dsh-subagent-spawn-in-process",
        "dsh-tool-subagent",
        "dsh-tool-subagent-control"
      ]
    },
    {
      "id": "G42",
      "name": "子进程",
      "plugins": [
        "dsh-subprocess-local"
      ]
    },
    {
      "id": "G43",
      "name": "终端",
      "plugins": [
        "dsh-terminal",
        "dsh-terminal-bash",
        "dsh-tool-terminal"
      ]
    },
    {
      "id": "G44",
      "name": "待办",
      "plugins": [
        "dsh-tool-todo"
      ]
    },
    {
      "id": "G45",
      "name": "类型契约",
      "plugins": [
        "dsh-typert-loader",
        "dsh-typert-registry"
      ]
    },
    {
      "id": "G46",
      "name": "框架 vendor",
      "plugins": [
        "cordis-plugin-group",
        "cordis-plugin-include",
        "cordis-plugin-loader",
        "cordis-plugin-logger-console",
        "cordis-plugin-timer",
        "schemastery"
      ]
    },
    {
      "id": "G47",
      "name": "Web 访问",
      "plugins": [
        "dsh-tool-web",
        "dsh-web",
        "dsh-web-fetch-http",
        "dsh-web-search-deepseek",
        "dsh-web-search-exa",
        "dsh-web-search-perplexity"
      ]
    },
    {
      "id": "G48",
      "name": "Webhook",
      "plugins": [
        "dsh-webhook-github"
      ]
    },
    {
      "id": "G49",
      "name": "工作流",
      "plugins": [
        "dsh-tool-ralph",
        "dsh-tool-workflow",
        "dsh-workflow-ptc"
      ]
    },
    {
      "id": "G50",
      "name": "工作区",
      "plugins": [
        "dsh-workspace"
      ]
    }
  ],
  "layers": {
    "0": [
      "cordis-plugin-loader",
      "cordis-plugin-logger-console",
      "cordis-plugin-timer",
      "dsh-attachment-local",
      "dsh-bash-local",
      "dsh-client-resources",
      "dsh-client-ui-primitives",
      "dsh-credentials-local",
      "dsh-deepseek-llm-api-extensions",
      "dsh-experimental-api-speech-to-text",
      "dsh-experimental-ptc-runtime-python",
      "dsh-experimental-speech-to-text-sensevoice",
      "dsh-fs-local",
      "dsh-fs-observation-policy",
      "dsh-host-directory-picker-browse",
      "dsh-host-directory-picker-native",
      "dsh-host-webserver",
      "dsh-invariants",
      "dsh-lsp-stdio",
      "dsh-pwsh-local",
      "dsh-sandbox-local",
      "dsh-sandbox-ssh",
      "dsh-shell-env",
      "dsh-spill-local",
      "dsh-storage",
      "dsh-subprocess-local",
      "dsh-typert-registry",
      "dsh-workspace-changes",
      "schemastery"
    ],
    "1": [
      "cordis-plugin-group",
      "cordis-plugin-include",
      "dsh-client-modules",
      "dsh-client-ui-dockkit",
      "dsh-client-ui-renderer",
      "dsh-experimental-inspector",
      "dsh-llm",
      "dsh-scope",
      "dsh-storage-domain",
      "dsh-storage-json",
      "dsh-storage-sqlite",
      "dsh-subprocess-ssh",
      "dsh-typert-loader"
    ],
    "2": [
      "dsh-authorization",
      "dsh-client-connection",
      "dsh-client-hmr",
      "dsh-client-web",
      "dsh-hmr",
      "dsh-llm-deepseek-account",
      "dsh-llm-deepseek-api-key",
      "dsh-session",
      "dsh-skill",
      "dsh-system-prompt",
      "dsh-web"
    ],
    "3": [
      "dsh-api-gateway",
      "dsh-commands",
      "dsh-config-editor",
      "dsh-deepseek-account-platform",
      "dsh-experimental-webworker-runtime",
      "dsh-hook-protocol",
      "dsh-host-frontend-static",
      "dsh-host-open-in-app",
      "dsh-llm-pi-ai",
      "dsh-persona",
      "dsh-session-log-deepseek",
      "dsh-session-persistence-jsonl",
      "dsh-session-projection",
      "dsh-session-query-sqlite",
      "dsh-session-telemetry-otel",
      "dsh-skill-badge",
      "dsh-skill-filesystem",
      "dsh-skill-office",
      "dsh-user-approval",
      "dsh-web-fetch-http",
      "dsh-web-search-exa",
      "dsh-web-search-perplexity",
      "dsh-webhook-github",
      "dsh-workspace"
    ],
    "4": [
      "dsh-agent",
      "dsh-api-job-controller",
      "dsh-api-workspace-controller",
      "dsh-command-compact",
      "dsh-command-feedback",
      "dsh-sandbox-policy",
      "dsh-session-projection-cache",
      "dsh-session-stats",
      "dsh-session-title",
      "dsh-session-turn-outline",
      "dsh-settings",
      "dsh-token-meter",
      "dsh-tools"
    ],
    "5": [
      "dsh-agent-default-model",
      "dsh-agent-instructions",
      "dsh-agent-loop",
      "dsh-agent-preset-registry",
      "dsh-agent-tool-presentation",
      "dsh-api-account-controller",
      "dsh-api-settings-controller",
      "dsh-api-terminal-controller",
      "dsh-api-workspace-files",
      "dsh-bash-sandbox",
      "dsh-client-file-upload",
      "dsh-compaction-image-offload",
      "dsh-compaction-tool-result-pruner",
      "dsh-cordis-host-runner",
      "dsh-experimental-browser-use-chrome-devtools-mcp",
      "dsh-experimental-browser-use-playwright-mcp",
      "dsh-experimental-tool-agent-team",
      "dsh-file-reference-local",
      "dsh-fs-sandbox",
      "dsh-fs-ssh",
      "dsh-goal",
      "dsh-hooks-codex",
      "dsh-jobs-local",
      "dsh-llm-retry",
      "dsh-mcp-resources",
      "dsh-message-feedback",
      "dsh-permission-presets",
      "dsh-ptc-runtime-node",
      "dsh-pwsh-sandbox",
      "dsh-repeat-tool-reminder",
      "dsh-sdk-jsonrpc-server",
      "dsh-session-checkpoint-policy",
      "dsh-session-reference",
      "dsh-session-title-all-prompts-llm",
      "dsh-session-title-first-prompt-llm",
      "dsh-spill-policy",
      "dsh-terminal",
      "dsh-time-context",
      "dsh-tmux-context",
      "dsh-tool-bash",
      "dsh-tool-call-timeout-policy",
      "dsh-tool-fs",
      "dsh-tool-fs-search",
      "dsh-tool-jobs",
      "dsh-tool-lsp",
      "dsh-tool-present",
      "dsh-tool-pwsh",
      "dsh-tool-session-query",
      "dsh-tool-skill",
      "dsh-tool-str-replace-editor",
      "dsh-tool-todo",
      "dsh-tool-web",
      "dsh-tool-workspace-dependencies",
      "dsh-user-questions",
      "dsh-web-search-deepseek"
    ],
    "6": [
      "dsh-agent-preset",
      "dsh-command-goal",
      "dsh-compaction-basic",
      "dsh-experimental-auto-review",
      "dsh-goal-round-driver",
      "dsh-host-plugin-inventory",
      "dsh-mcp-client",
      "dsh-office-to-pdf",
      "dsh-plan-mode",
      "dsh-plugin-package-inventory-deepseek",
      "dsh-subagent",
      "dsh-terminal-bash",
      "dsh-tool-ask-user",
      "dsh-tool-bash-persistent",
      "dsh-tool-cordis",
      "dsh-tool-goal",
      "dsh-tool-pwsh-persistent",
      "dsh-tool-terminal"
    ],
    "7": [
      "dsh-acp",
      "dsh-api-session-controller",
      "dsh-experimental-browser-use-stagehand-native",
      "dsh-experimental-computer-use-cua-driver-mcp",
      "dsh-experimental-computer-use-cua-driver-native",
      "dsh-hooks-claude-code",
      "dsh-plugin-manager",
      "dsh-subagent-acp",
      "dsh-subagent-claude-code",
      "dsh-subagent-codex",
      "dsh-subagent-dsh-sdk",
      "dsh-subagent-fork-in-process",
      "dsh-subagent-spawn-in-process",
      "dsh-tool-subagent",
      "dsh-tool-subagent-control",
      "dsh-workflow-ptc"
    ],
    "8": [
      "dsh-client-ui-session",
      "dsh-schedule",
      "dsh-tool-ralph",
      "dsh-tool-workflow"
    ],
    "9": [
      "dsh-api-remotes"
    ],
    "10": [
      "dsh-client-ui-settings",
      "dsh-client-ui-tool",
      "dsh-cordis-client-runner"
    ],
    "11": [
      "dsh-client-locale"
    ],
    "12": [
      "dsh-client-shortcuts",
      "dsh-client-ui-cordis",
      "dsh-client-ui-settings-models",
      "dsh-client-ui-settings-plugins",
      "dsh-client-ui-theme",
      "dsh-client-ui-user-questions"
    ],
    "13": [
      "dsh-client-ui-conversation",
      "dsh-client-ui-layout",
      "dsh-client-ui-settings-general",
      "dsh-client-ui-shortcuts"
    ],
    "14": [
      "dsh-client-ui-approval",
      "dsh-client-ui-input-trigger",
      "dsh-client-ui-jobs",
      "dsh-client-ui-sidebar",
      "dsh-client-ui-sidebar-right",
      "dsh-client-ui-trajectory",
      "dsh-client-ui-workspace"
    ],
    "15": [
      "dsh-client-ui-agent-preset",
      "dsh-client-ui-brand-official",
      "dsh-client-ui-commands",
      "dsh-client-ui-directory-picker-browse",
      "dsh-client-ui-directory-picker-native",
      "dsh-client-ui-plugin-manager",
      "dsh-client-ui-reference",
      "dsh-client-ui-schedule",
      "dsh-client-ui-sidebar-browser",
      "dsh-client-ui-sidebar-documentpreview",
      "dsh-client-ui-sidebar-files",
      "dsh-client-ui-sidebar-terminal",
      "dsh-client-ui-skill",
      "dsh-client-ui-subagent",
      "dsh-client-ui-workflow-run",
      "dsh-experimental-client-ui-agent-team"
    ],
    "16": [
      "dsh-client-ui-chat",
      "dsh-client-ui-message-feedback",
      "dsh-client-ui-model-selection",
      "dsh-client-ui-permission-presets",
      "dsh-client-ui-settings-agent-loop",
      "dsh-client-ui-settings-plugin-inventory",
      "dsh-client-ui-settings-shell",
      "dsh-client-ui-settings-subagent",
      "dsh-client-ui-settings-web-search",
      "dsh-experimental-client-ui-voice-input",
      "dsh-host-directory-picker-auto"
    ],
    "17": [
      "dsh-client-ui-attachment",
      "dsh-client-ui-deliverables",
      "dsh-client-ui-goal",
      "dsh-client-ui-plan",
      "dsh-client-ui-settings-account",
      "dsh-session-log-export"
    ],
    "18": [
      "dsh-client-ui-open-in-app"
    ]
  },
  "nodes": [
    {
      "id": "cordis-plugin-loader",
      "name": "@deepseek-ai/cordis-plugin-loader",
      "group": "G46",
      "group_name": "框架 vendor",
      "layer": 0,
      "implementation": "cordis 插件加载器：Loader 继承 EntryTree（src/index.ts:77），持有 entry 树与模块导入器，负责导入配置插件、解析 inject、处理自卸载与热更新写回（src/index.ts:129-166）。它注册 loader 服务并声明 exit 与 loader/* 事件（src/index.ts:23-55, 102）。",
      "provides": [
        "ctx.loader（插件加载器：entry 树、插件导入与热更新，src/index.ts:77/102）",
        "事件 loader/config-update、loader/entry-init、loader/partial-dispose、loader/volatile-update、loader/patch-context、exit（src/index.ts:23-42）"
      ],
      "path": "vendor/loader",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "cordis-plugin-logger-console",
      "name": "@deepseek-ai/cordis-plugin-logger-console",
      "group": "G46",
      "group_name": "框架 vendor",
      "layer": 0,
      "implementation": "控制台日志导出器：ConsoleExporter 基类在 shared 中定义配置与通用实现（src/shared.ts:28-42），Node 面以 util.inspect 与 supports-color 格式化对象（src/index.ts:9-26），browser 面派发原生 console 方法（src/browser.ts:8-15）。",
      "provides": [
        "logger-console 导出器（ConsoleExporter，Node 与 browser 双面，src/index.ts:14 / src/browser.ts:8）"
      ],
      "path": "vendor/logger-console",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "cordis-plugin-timer",
      "name": "@deepseek-ai/cordis-plugin-timer",
      "group": "G46",
      "group_name": "框架 vendor",
      "layer": 0,
      "implementation": "可随 fiber 处置的计时器服务：TimerService 注册 ctx.timer 并把 timeout/interval/throttle/debounce 混入 Context（src/index.ts:12-16）。每个计时器经 ctx.effect 在作用域处置时自动清理（src/index.ts:28-54），interval 另提供异步迭代器形态（src/index.ts:57-104）。",
      "provides": [
        "ctx.timer / ctx.timeout / ctx.interval / ctx.throttle / ctx.debounce（随 fiber dispose 的计时器服务，src/index.ts:12-16）"
      ],
      "path": "vendor/timer",
      "source_layer": "L1",
      "assembled_in": [
        "base",
        "sdk-minimal"
      ]
    },
    {
      "id": "dsh-attachment-local",
      "name": "@deepseek-ai/dsh-attachment-local",
      "group": "G03",
      "group_name": "附件",
      "layer": 0,
      "implementation": "以 `LocalAttachmentStore extends AttachmentStore` 实现本地持久化附件后端：构造时把存储根定为 `DSH_HOME/attachments/v1`，并从 Config 解析图像字节/像素/张数限额与归一化策略，建立 `CompressionLimiter` 并发闸 (src/index.ts:147-201)。图像经 `prepareImageFile` → `commitPreparedImageFile` 落盘，读取分别走 `readImageFile`、`readRequestImageFile`，并用 `SharedRequest` 对同一 variantId 做 in-flight 去重与取消传播 (src/index.ts:207-287)。文件类附件走 verbatim 流式写入/读取 (src/index.ts:232-246)，底层实现分散在 store.ts/file-store.ts/request-image.ts/normalization.ts/sharp.ts。",
      "provides": [
        "本地附件存储后端 (AttachmentStore 服务实现，内容寻址持久化到 $DSH_HOME/attachments/v1)",
        "图像限额与归一化能力 (imageLimits、normalizationPolicy，供上层做请求体容量校验)",
        "图像归一化与请求级变体工具 (normalizeImage、prepareImageFile、readRequestImageFile、requestImageVariantId)"
      ],
      "path": "packages/attachment/attachment-local",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-bash-local",
      "name": "@deepseek-ai/dsh-bash-local",
      "group": "G36",
      "group_name": "Shell 执行",
      "layer": 0,
      "implementation": "实现 shell 能力 seam 的本地 bash 执行器 ctx.shell：resolve() 用配置补齐 workdir/timeout/输出上限并夹取超时，spawnSpec() 组装带 ENV_OVERRIDES 的 subprocess spawn 规格 (src/index.ts:120-174)。execute() 以 bash -c 运行，executeArgv() 负责 deadline/取消分类（'kill' 与 'none' 两臂）、输出读取、stdout/stderr 模型友好合并、kill 与 result 投影 (src/index.ts:187-389)。实际进程经 ctx.subprocess 管理、输出有界并可溢出到 spill 文件，替身未产出进程时以 settled-killed 形态收敛 (src/index.ts:97-107, 156-185, 251-341)。",
      "provides": [
        "ctx.shell (本地 bash 执行器实现，经 ctx.subprocess 以 bash -c 运行命令)"
      ],
      "path": "packages/shell/bash-local",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-client-resources",
      "name": "@deepseek-ai/dsh-client-resources",
      "group": "G05",
      "group_name": "客户端运行时",
      "layer": 0,
      "implementation": "Host 半为空实现，资源模型全在浏览器半 (src/index.ts:1-4)。浏览器半 `apply` 构建 `ResourceRegistry` 并 provide `ctx.resources`，再经 `slots.provideRoot` 贡献 `resource` keyed hook，使任意槽组件获得 `useResource` (src/client/index.ts:30-41)。`resources.ts` 按 `dsh-resource://` 地址维护 per-address 记录，以 holders 引用计数启停 provider 流，并把流帧折叠为 live/failed 快照，记录永不销毁以保证 source() 引用稳定 (src/client/resources.ts:75-211)。",
      "provides": [
        "ctx.resources (资源提供者注册表、pin、按地址的 ObservableSnapshot)",
        "useResource 全局标准 hook (经 slots.provideRoot 贡献给所有槽组件)"
      ],
      "path": "packages/client/resources",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-ui-primitives",
      "name": "@deepseek-ai/dsh-client-ui-primitives",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 0,
      "implementation": "无 cordis 服务与槽注册的纯 React 组件/工具库：入口 src/index.ts 汇总导出约 80 个组件与工具，覆盖基础控件（Button/Input/Switch/Checkbox/Menu/MenuSurface/SegmentedControl/Modal/Tooltip/Toast 等）、工具输出展示块（ReadBlock/DiffBlock/SearchBlock/WebBlock/TerminalBlock/JsonTree）、Markdown 渲染与高亮（markdown/*、code-highlighting.ts）、设置表单（settings-form/*）以及一批图标与平台/时间工具。组件仅依赖 --dsw-* 设计 token，跨包复用代码集中在少数浏览器安全工具依赖上：PathLabel 用 dsh-util-workspace-path（src/PathLabel.tsx:4）、代码高亮用 dsh-util-code-language（src/code-highlighting.ts:10）、设置表单模型用 dsh-client-store（src/settings-form/form-model.ts:16）。",
      "provides": [
        "React 基础控件库（Button/Input/Switch/Checkbox/Menu/MenuSurface/SegmentedControl/Tabs/Modal/HoverCard/Tooltip/Toast/Pill/Tag/DisclosureRow/TextShimmer/StateDot/ConnectionIndicator/RiskConfirmation 等）",
        "工具结果展示块（ReadBlock / DiffBlock / SearchBlock / WebBlock / TerminalBlock / JsonTree / CodeBlock / JsonBlock）",
        "Markdown 渲染与文件/图片链接、数学公式、增量高亮与纯文本提取（MarkdownText / MarkdownDelegateProvider / extractMarkdownPlainText）",
        "设置表单组件与模型（SettingsForm / SettingsSecretField / SettingsValueField / SettingsFormModel / settingsTextField / settingsNumberField）",
        "图标与品牌图形集合（icons/*、FileTypeIcon、LinkIcon、ReferenceIcon、PermissionIcon、FishLogo、BrandWordmark、plugin-artwork、guide-artwork）",
        "通用钩子与工具（useAnchoredPosition/useAnchoredMaxHeight/useDismissOnOutsidePointer/useModalLayer/useCodeHighlighter/relativeTime/rankByName/fileSizeText/writeClipboard/observeComposition）"
      ],
      "path": "packages/client/ui-primitives",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-credentials-local",
      "name": "@deepseek-ai/dsh-credentials-local",
      "group": "G10",
      "group_name": "凭据与授权",
      "layer": 0,
      "implementation": "实现文件型 `CredentialProvider`（`LocalCredentialProvider`，src/index.ts:513）：以 `$DSH_HOME/.credentials.yaml` 为可写的托管层，按可信度分层解析 ref（继承环境 > 托管文件 > 项目 .env > 用户 .env，src/index.ts:609-631、553-567）。文档解析严格拒绝未知版本/顶层键/记录字段而非跳过（src/index.ts:188-227、328-358），写入在跨进程文件锁下 read-modify-write、保留注释并以 0600 原子写（src/index.ts:666-699）；同时校验文件不得 group/other 可读（src/index.ts:127-146）。chokidar 监听外部编辑并在 `ready` 时补一次对账热发布（src/index.ts:569-607、869-891）。",
      "provides": [
        "CredentialProvider 实现 (文件型 refs/records 凭据存储，供 ctx.credentials seam 消费)"
      ],
      "path": "packages/credentials/credentials-local",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-deepseek-llm-api-extensions",
      "name": "@deepseek-ai/dsh-deepseek-llm-api-extensions",
      "group": "G23",
      "group_name": "LLM 适配",
      "layer": 0,
      "implementation": "定义并暴露 ctx.deepseekLlmApiExtensions 服务，作为官方 DeepSeek 请求顶层字段的扩展注册表 (src/index.ts:66-71, 18-22)。register() 以 ctx.effect 让插件按字段名注册唯一 provider 并在释放时撤销 (src/index.ts:79-99)。prepare() 在 HTTP 派发前并发调用各 provider 准备字段、对取值做结构化克隆并冻结，并把各 provider 的 accept 回调收拢为幂等的联合提交事务，支持中止传播 (src/index.ts:108-129)。types.ts 用声明合并声明可扩展字段表与 provider 协议 (src/types.ts:16, 39-48)。",
      "provides": [
        "ctx.deepseekLlmApiExtensions (DeepSeek 顶层请求字段扩展注册表，供 plugin-package-inventory-deepseek 等贡献独立字段)"
      ],
      "path": "packages/llm/deepseek-llm-api-extensions",
      "source_layer": "L1",
      "assembled_in": [
        "base",
        "sdk-minimal"
      ]
    },
    {
      "id": "dsh-experimental-api-speech-to-text",
      "name": "@deepseek-ai/dsh-experimental-api-speech-to-text",
      "group": "G13",
      "group_name": "实验特性",
      "layer": 0,
      "implementation": "`SpeechController` 继承 `TypertRemoteService`（命名空间 speech）（src/index.ts:28-37），把 Host 的 `ctx.speechToText` 以 authenticated Remote 暴露给 Client：`catalog()`/`follow()` 读 provider 与就绪快照，`configure/prepare/cancelPreparation` 透传，`transcribe()` 先做 base64 规范性与字节上限校验、`validateWave` 校验录音，再委派识别并映射为稳定 RemoteError（src/index.ts:43-110）。",
      "provides": [
        "Remote 命名空间 speech (catalog/follow/configure/prepare/cancelPreparation/transcribe)"
      ],
      "path": "packages/experimental/api-speech-to-text",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-experimental-ptc-runtime-python",
      "name": "@deepseek-ai/dsh-experimental-ptc-runtime-python",
      "group": "G13",
      "group_name": "实验特性",
      "layer": 0,
      "implementation": "`PythonPtcRuntime` 继承 `PtcRuntime` 并注册为 `ctx.ptcRuntime`（language=python，src/index.ts:804-816），以 fresh `python3` 子进程执行模型程序：binding 调用走 fd-3 JSON-lines，stdout/stderr 留给程序自身输出，bootstrap 内提供 asyncio 顶层 await（src/index.ts:1-11）。containment 由 RLIMIT_CPU/RLIMIT_AS、墙钟超时、SIGTERM→grace→SIGKILL 进程组构成，所有上限在 load 时验证（src/index.ts:804-879）；包还拥有并导出 fd-3 wire 协议的编解码与敌意帧校验器，供所有消费方共享词表（src/index.ts:26-39）。",
      "provides": [
        "ctx.ptcRuntime (python 子进程隔离的 PTC 运行时后端)",
        "fd-3 wire 协议编解码/校验器 (validateChildFrame 等)"
      ],
      "path": "packages/experimental/ptc-runtime-python",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-experimental-speech-to-text-sensevoice",
      "name": "@deepseek-ai/dsh-experimental-speech-to-text-sensevoice",
      "group": "G13",
      "group_name": "实验特性",
      "layer": 0,
      "implementation": "本地 SenseVoice 识别 provider：`apply()` 先校验 dataRoot/modelDirectory/vadModelPath 必须是绝对路径、model origin 合法，再创建 `SenseVoiceWorker` 并注册到 `ctx.speechToText.register`（info/preparation/transcribe），激活时只调用 `worker.inspect()` 检查磁盘缓存、不下载也不加载模型（src/index.ts:20-41）。识别工作进程经 `ctx.subprocess` 执行（src/recognizer.ts:262），卸载时反注册并 await worker.dispose（src/index.ts:36-40）。",
      "provides": [
        "SpeechProvider 注册 (host-local SenseVoiceSmall 识别器)"
      ],
      "path": "packages/experimental/speech-to-text-sensevoice",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-fs-local",
      "name": "@deepseek-ai/dsh-fs-local",
      "group": "G16",
      "group_name": "文件系统",
      "layer": 0,
      "implementation": "LocalFileSystem 实现 ctx.fs 文件系统 seam：以 realpath 派生的 targetKey 作为目标身份，使别名共享版本守卫 (src/index.ts:133-138)；stat/读/流/列目录委托 fsio 辅助函数 (src/index.ts:157-200)，写与 edit 在 per-target FIFO 锁内完成版本守卫与原子替换，写前捕获有界 diff 基准，edit 走读-匹配-写临界区 (src/index.ts:202-291)。watch() 基于 chokidar 监视单文件或目录的变更 (src/index.ts:69-90)。",
      "provides": [
        "ctx.fs (本地宿主文件系统实现，供 fs-sandbox 等替换或包装)"
      ],
      "path": "packages/fs/fs-local",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-fs-observation-policy",
      "name": "@deepseek-ai/dsh-fs-observation-policy",
      "group": "G16",
      "group_name": "文件系统",
      "layer": 0,
      "implementation": "事件专属的文件观察策略，不注册任何服务：ObservedStateGate 用 WeakMap(owner→targetKey→FsObservation) 记录每次权威的 present/absent 观察，区分「确认不存在」与「未见」 (src/index.ts:28-54, 91-94)。在 fs/write-intent 与 fs/edit-intent 两个单槽 waterfall 上据该状态派生 createIfAbsent/replaceIfVersion，或对未读/不存在抛 FS_NOT_OBSERVED/FS_NOT_FOUND (src/index.ts:65-88, 119-122)；fs/observed 上同步记录且保持同步非抛 (src/index.ts:127-129)。无此插件时工具退回 provider 的无条件变更行为。",
      "provides": [],
      "path": "packages/fs/fs-observation-policy",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-host-directory-picker-browse",
      "name": "@deepseek-ai/dsh-host-directory-picker-browse",
      "group": "G20",
      "group_name": "宿主服务",
      "layer": 0,
      "implementation": "实现 dsh-host-directory-picker 定义的 DirectoryPicker 服务，向 ctx.directoryPicker 注册 kind:'browse' 能力（src/index.ts:187-215）。list() 用 opendir 流式扫描目标目录，以 maxEntries+1 的有界保序窗口截断并用 raceAbort 让文件系统等待可被调用方中止，返回 crumbs 面包屑与 entries（src/index.ts:217-297）。createDirectory() 校验父路径全限定与单段名后非递归 mkdir（src/index.ts:299-323）。",
      "provides": [
        "ctx.directoryPicker (browse 能力实现：一层目录列举 + 子目录创建，src/index.ts:199-203)"
      ],
      "path": "packages/host/directory-picker-browse",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-host-directory-picker-native",
      "name": "@deepseek-ai/dsh-host-directory-picker-native",
      "group": "G20",
      "group_name": "宿主服务",
      "layer": 0,
      "implementation": "实现 dsh-host-directory-picker 的 DirectoryPicker 服务，注册 kind:'native' 能力，pick 委托 pickNativeDirectory（src/index.ts:22-35）。native-picker.ts 按平台分派：darwin 调 osascript、linux 依次调 zenity/kdialog、win32 走 koffi 驱动的 IFileOpenDialog 子进程（src/native-picker.ts:48-107）。命令一律经 dsh-native-command 的 runNativeCommand 以 argv 执行，绝不经过 shell（src/native-picker.ts:3、53）。",
      "provides": [
        "ctx.directoryPicker (native 能力实现：调用宿主 OS 原生目录选择对话框，src/index.ts:23-27)"
      ],
      "path": "packages/host/directory-picker-native",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-host-webserver",
      "name": "@deepseek-ai/dsh-host-webserver",
      "group": "G20",
      "group_name": "宿主服务",
      "layer": 0,
      "implementation": "实现 ctx.webServer 服务（node:http 载体），Service.init 监听 socket 并把命名路由/升级路由/fallback 分派（src/index.ts:125-316）。命名路由支持 exact 与最长前缀匹配，fallback 座位单属主且二次注册抛错（src/index.ts:166-203、319-328）。index 渲染先收集 webserver/index-inject 结构化注入行再套用原始 tapIndex 变换（src/index.ts:336-362），injections.ts 负责行到 markup 的渲染与 boot-ready 结算（src/injections.ts:96-118）。",
      "provides": [
        "ctx.webServer (HTTP 载体服务：命名路由/升级路由/fallback 座位/index 注入渲染，src/index.ts:125-365)"
      ],
      "path": "packages/host/webserver",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-invariants",
      "name": "@deepseek-ai/dsh-invariants",
      "group": "G29",
      "group_name": "运行时诊断",
      "layer": 0,
      "implementation": "以 InvariantRegistry（Service）实现包级运行时不变式注册表，注册为 ctx.invariants（src/index.ts:94-118）；register(packageName, installer) 校验包名合法性与唯一性，并在子 fiber（ctx.effect + ctx.plugin）中运行每个包自带的检查安装器，违规时抛出带包名的 InvariantError（src/index.ts:136-197）。Config 提供全局开关与 package_allowlist/package_blocklist 正则过滤（src/index.ts:95-99,121-126）。该包无本仓内部依赖。",
      "provides": [
        "ctx.invariants (包级运行时不变式注册表，供各包 ./invariant 伴侣注册检查)"
      ],
      "path": "packages/runtime-diagnostics/invariants",
      "source_layer": "L3",
      "assembled_in": [
        "sdk-minimal"
      ]
    },
    {
      "id": "dsh-lsp-stdio",
      "name": "@deepseek-ai/dsh-lsp-stdio",
      "group": "G24",
      "group_name": "LSP 集成",
      "layer": 0,
      "implementation": "通用 stdio 语言服务器后端：apply() 先经 ctx.subprocess.resolveExecutable 解析每个配置项的可执行文件，再为每个条目构造 LocalLspProvider 并通过 ctx.lsp.registerProvider 注册，注册失败逆序回滚（src/index.ts:126-186）。每个 Provider 按规范工作区单一实例池化，经 ctx.fs 读源码、经 ctx.subprocess 惰性拉起进程并服务只读查询，选中传输在下次查询前或期间故障时透明替换一次（src/index.ts:216-380、src/host.ts:32-120）。LspInstance 拥有 initialize 握手、串行队列、瞬时 didOpen→request→didClose 与有界 teardown（src/instance.ts:110-320）；LspConnection 实现 Content-Length 分帧 JSON-RPC 与 id 关联（src/connection.ts:66-317、src/framing.ts:30-87）。",
      "provides": [
        "ctx.lsp (stdio 本地语言服务器 Provider 实现：按 provider id 注册、每规范工作区惰性单飞一个进程并服务只读查询，src/index.ts:171-185)"
      ],
      "path": "packages/lsp/lsp-stdio",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-pwsh-local",
      "name": "@deepseek-ai/dsh-pwsh-local",
      "group": "G36",
      "group_name": "Shell 执行",
      "layer": 0,
      "implementation": "实现 shell 能力 seam 的本地 PowerShell 执行器 ctx.shell：以 pwsh -NoLogo -NoProfile -NonInteractive -Command 运行命令作为单个 argv 元素，并前置 UTF-8 编码前言避免老版 PowerShell 控制台码页乱码 (src/index.ts:193-195, 40-49)。executeArgv() 复用与 bash-local 相同的 deadline 分类、输出合并、kill/result 投影与 provider 失败收敛机制 (src/index.ts:245-433)。resolve.ts 以纯函数按「显式配置 > Windows 已知安装位置 > PATH」解析 pwsh 可执行文件 (src/resolve.ts:21-78)。",
      "provides": [
        "ctx.shell (本地 PowerShell 执行器实现，经 ctx.subprocess 以 pwsh -Command 运行命令)"
      ],
      "path": "packages/shell/pwsh-local",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-sandbox-local",
      "name": "@deepseek-ai/dsh-sandbox-local",
      "group": "G30",
      "group_name": "沙箱",
      "layer": 0,
      "implementation": "LocalSandboxProvider 继承 SandboxProvider（注册 ctx.sandbox），按平台先选 runner 链（Linux bwrap→Landlock、darwin seatbelt、win32 windows-acl），仅当链有多候选时按序做功能探测，全部不可用则 fail-closed 抛 SandboxUnavailableError（src/index.ts:160-167,497-545）。confine() 把调用方 argv 包装为所选 runner 的 profile 参数，并附带 enforcement、denial签名与结构化 runner 失败规则（src/index.ts:319-338）；profiles.ts 生成 bwrap/landlock/seatbelt 三套 profile 参数（src/profiles.ts:16-57）。windows-acl rung 额外管理工作区级长期写授权与每会话私有临时写授权，并在 provider dispose 时撤销临时授权（src/index.ts:363-482）。",
      "provides": [
        "ctx.sandbox (本地进程沙箱后端：平台 runner 选择、confine 包装与写授权管理)"
      ],
      "path": "packages/sandbox/sandbox-local",
      "source_layer": "L1",
      "assembled_in": [
        "base",
        "sdk-minimal"
      ]
    },
    {
      "id": "dsh-sandbox-ssh",
      "name": "@deepseek-ai/dsh-sandbox-ssh",
      "group": "G39",
      "group_name": "SSH 远程执行",
      "layer": 0,
      "implementation": "SshSandboxProvider 继承 dsh-sandbox 的 SandboxProvider，把 confine() 约束请求经 ctx.ssh.request('sandbox', …) 发往远端主机解析并返回 ConfinedArgv (src/index.ts:10-25)。返回结果会规范化 runnerFailureRules 中的可选字段 (src/index.ts:20-24)，任何失败都包装为 SandboxUnavailableError (src/index.ts:26-29)。",
      "provides": [
        "ctx.sandbox (SSH 远程沙箱约束提供者 SshSandboxProvider)"
      ],
      "path": "packages/ssh/sandbox-ssh",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-shell-env",
      "name": "@deepseek-ai/dsh-shell-env",
      "group": "G36",
      "group_name": "Shell 执行",
      "layer": 0,
      "implementation": "提供与具体 shell 工具无关的 ctx.shellEnv 注册表，管理每次执行注入的受信任 DSH_* 变量 (src/index.ts:93-201)。内置变量（DSH_HOME/DSH_SHELL/DSH_SESSION_ID/DSH_PROFILE/DSH_PROFILE_DIR）由注册表自身持有，插件可经 register() 声明并贡献额外可枚举变量（名称/键唯一、保留键与命名校验、随 fiber 处置）(src/index.ts:72-82, 114-149)。collect() 为一次工具执行生成按名排序的冻结环境快照，list() 供诊断枚举 (src/index.ts:156-201)。",
      "provides": [
        "ctx.shellEnv (受信任的 DSH_* 环境变量注册表，供 shell 工具每次执行时收集与插件注册贡献)"
      ],
      "path": "packages/shell/shell-env",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-spill-local",
      "name": "@deepseek-ai/dsh-spill-local",
      "group": "G38",
      "group_name": "溢出存储",
      "layer": 0,
      "implementation": "溢出存储 seam 的宿主机实现 LocalSpillStore：把超长文本以随机名加注入式 encodeSegment 路径安全编码写入会话私有目录（根 0700、文件 0600 独占写），返回路径 locator 与 read/grep 检索提示 (src/index.ts:65-162, src/store.ts:55-131)。构造时经 ctx.effect 启动一次尽力而为的启动清理，回收早于 cleanupPeriodDays 的过期文件、剪除空 session 目录与历史默认根，并由 fiber 保证 dispose 前清理收敛 (src/index.ts:95-101, src/cleanup.ts:274-362)。",
      "provides": [
        "ctx.spillStore (宿主机文件系统溢出存储实现：会话隔离私有文件写入 + 启动过期清理)"
      ],
      "path": "packages/spill/spill-local",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-storage",
      "name": "@deepseek-ai/dsh-storage",
      "group": "G40",
      "group_name": "存储",
      "layer": 0,
      "implementation": "Storage 服务实现存储中枢 ctx.storage：自身不做 IO，只维护命名后端注册表 BackendRegistry 与可挂载的数据形态表 forms (src/index.ts:47-93)。mount()/form() 以 effect 语义挂载与解析数据形态，domain getter 暴露域形态 (src/index.ts:64-93)。BackendRegistry 支持多后端并存，注册返回 disposer 且带 stale-disposer 保护 (src/registry.ts:25-37)。",
      "provides": [
        "ctx.storage (存储中枢：命名后端注册表 + 数据形态挂载与解析)"
      ],
      "path": "packages/storage/storage",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-subprocess-local",
      "name": "@deepseek-ai/dsh-subprocess-local",
      "group": "G42",
      "group_name": "子进程",
      "layer": 0,
      "implementation": "本地子进程能力 seam 的 provider：LocalSubprocessRuntime 继承 SubprocessRuntime（src/index.ts:59-85），按平台选择 linux-scope / windows-job / fallback 三种受管进程范围（src/index.ts:213-232），提供普通进程 spawn（src/spawn.ts:454-492）与 node-pty 终端 spawn（src/index.ts:264-329）。它负责 per-stream stdio 处置、输出 tail-keep 与 spill 文件（src/spawn.ts:267-446）、凭据清洗环境（src/spawn.ts:44-54），并在 JS 可观察的 host 退出时同步终止仍存活的进程范围（src/index.ts:77-105）。",
      "provides": [
        "ctx.subprocess（本地实现：受管进程范围 spawn、终端 spawn、可执行文件解析与退出清理）"
      ],
      "path": "packages/subprocess/subprocess-local",
      "source_layer": "L1",
      "assembled_in": [
        "base",
        "sdk-minimal"
      ]
    },
    {
      "id": "dsh-typert-registry",
      "name": "@deepseek-ai/dsh-typert-registry",
      "group": "G45",
      "group_name": "类型契约",
      "layer": 0,
      "implementation": "共享 Typert 运行时注册表：TypertRegistry 注册 ctx.typert（src/service.ts:456），存储生成的包反射元数据与 Zod schema，并提供 register/get/resolve/list 与 toJSONSchema 等契约（src/index.ts:17-26）。它不做 TypeScript 分析或 schema 生成（src/service.ts:1-6），web 客户端面复用同一实现（src/client/index.ts:13-15）。",
      "provides": [
        "ctx.typert（生成式反射元数据与 Zod schema 运行时注册表，host 与 client 双面）"
      ],
      "path": "packages/typert/registry",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-workspace-changes",
      "name": "@deepseek-ai/dsh-workspace-changes",
      "group": "G11",
      "group_name": "交付物",
      "layer": 0,
      "implementation": "汇总每个顶层 turn 改动的文件：以 git 工作树快照（turn 起止）为主，叠加文件工具编辑的整文件捕获，非 git 环境退化为仅文件工具编辑（src/index.ts:1-10、120-129）。`apply()` 通过 `session/event`、`agent/turn-stopping`、`tools/pre-execute` 驱动每 Session 的 `TurnRecorder`（src/index.ts:143-164），并把 `workspaceChanges` 服务 provide 到 ctx，按 SessionId+seq 提供 `summary()` 与按需计算的 `diff()`（src/index.ts:114-118、src/types.ts:78-97）。变更摘要由 `workspace/changes` Session 事件宣告，摘要本体留在 Host 侧（src/types.ts:99-108）。",
      "provides": [
        "ctx.workspaceChanges (按 Session/seq 提供每 turn 变更摘要与文件前后对比)",
        "Session 事件 workspace/changes"
      ],
      "path": "packages/deliverables/workspace-changes",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "schemastery",
      "name": "@deepseek-ai/schemastery",
      "group": "G46",
      "group_name": "框架 vendor",
      "layer": 0,
      "implementation": "类型驱动的 schema 校验器：Schema 工厂与 Schema 类做值校验、默认值填充与类型推断（src/index.ts:42-50, 254），默认导出供 z(...) 调用（src/index.ts:962）。它基于 cosmokit 的原语（Binary/clone/deepEqual/volatile 等）实现 schema 组合与序列化简写（src/index.ts:1-2, 5-6）。",
      "provides": [
        "Schema / z(...) 类型驱动校验器（默认导出，src/index.ts:962）"
      ],
      "path": "vendor/schemastery",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "cordis-plugin-group",
      "name": "@deepseek-ai/cordis-plugin-group",
      "group": "G46",
      "group_name": "框架 vendor",
      "layer": 1,
      "implementation": "把 Loader 的 Group 类作为默认导出暴露为独立插件包（src/index.ts:1-3），用于在 cordis 配置中声明嵌套插件组。",
      "provides": [
        "Group 插件（嵌套插件组的默认导出，src/index.ts:1-3）"
      ],
      "path": "vendor/group",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "cordis-plugin-include",
      "name": "@deepseek-ai/cordis-plugin-include",
      "group": "G46",
      "group_name": "框架 vendor",
      "layer": 1,
      "implementation": "文件支持的 Loader 子树：Include 继承 EntryTree（src/index.ts:159），从 ctx.baseUrl 解析 YAML/JSON 入口清单，应用 patch（src/index.ts:57-127），并支持写回与热重载（src/index.ts:279-287, 289-334）。entryListSchema 承载 !!js 表达式的 YAML 方言，供配置工具与挂载共用（src/index.ts:9-23）。",
      "provides": [
        "Include 插件（文件支持的 Loader 子树 EntryTree，src/index.ts:159）",
        "entryListSchema（支持 !!js 表达式的 YAML 方言，src/index.ts:23）"
      ],
      "path": "vendor/include",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-client-modules",
      "name": "@deepseek-ai/dsh-client-modules",
      "group": "G05",
      "group_name": "客户端运行时",
      "layer": 1,
      "implementation": "Node 半增量扫描 Loader 中声明 `dsh.client` 的包（`internal/plugin` 事件触发 microtask flush，激活期同步 flush 同一实现），按模块图拓扑排序组合 `window.__DSH_BOOT__` 条目图 (src/index.ts:596-657, 501-533)。它按行读取并缓存客户端 bundle、生成 revision 化的 combo 脚本与 source map、注册 `/plugins` 路由并惰性生成响应体 (src/index.ts:434-459, 1128-1156)，同时提供 `clientModules` 服务（rebuilt/onRebuilt/onGraphChanged）作为 HMR Node 半的注册与通知面 (src/index.ts:706-756)。",
      "provides": [
        "ctx.clientModules (ClientModuleRegistry：graph/artifactBaseline/rebuilt/onRebuilt/onGraphChanged/clientPath/fetchBundle)",
        "/plugins 路由 (revision 化 combo 脚本与 source map 及包本地 chunk)",
        "window.__DSH_BOOT__ 条目图与 index 注入行 (bootInjections)",
        "客户端模块 HTTP 路由与模块表身份 (供 web 壳消费)"
      ],
      "path": "packages/client/modules",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-ui-dockkit",
      "name": "@deepseek-ai/dsh-client-ui-dockkit",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 1,
      "implementation": "零 cordis 的停靠布局库：引擎层是纯 TS——applyOp/replay 与 Sequencer 记录可逆布局操作，DockController 每个方法都是 planner 调用加记录加一次通知，getSnapshot 的引用只在布局变化时改变 (src/engine/controller.ts:1-14, 54-80; src/index.ts:26-59)。组件层渲染布局快照并只回报每次手势的 settled intent，tab 的 kind 是不透明字符串，宿主概念（DockLabels/TabRenderer）全部由嵌入方注入 (src/index.ts:1-18, 62-70)。包内不注册任何槽位、没有 apply，只被其他客户端包以引擎/组件 API 消费。",
      "provides": [
        "引擎 API：applyOp/replay、Sequencer/record/stepBack/stepForward/canStepBack/canStepForward、tree 查询 (getNode/getPane/findTabPane 等)",
        "约束与几何：canSplit/clampSizes/DOCK_ZONES/MAX_DOCK_PANES、containsPoint/dividerSizes/floatRectAt/SPLIT_MINIMUMS",
        "意图规划纯函数：planAddTab/planDropTab/planSplitPane/planResizeSplit/planFloatTab/planOpenContent 等",
        "DockController (每停靠面的状态化嵌入，subscribe+getSnapshot 可观察快照) 与 createIdMinter/createInitialState",
        "React 组件 DockSurface/DockLayout/FloatLayer 及外向契约 DockIntents/DockLabels/TabRenderer/TabMenuExtras",
        "类型 LayoutState/LayoutOp/DockZone/PaneId/SplitId/TabId/LayoutNode 等"
      ],
      "path": "packages/client/ui-dockkit",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-client-ui-renderer",
      "name": "@deepseek-ai/dsh-client-ui-renderer",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 1,
      "implementation": "apply 构造 renderer-owned 的 SlotRegistry（在 ui-slots 的纯 SlotCore 语义之上补上活应用所需部分：'slots/changed' 事件桥、按 caller ctx.effect 收集注册/声明、install()/renderSlot('root')、以及 store 实例轴），并 install(createSlotRenderer())（src/client/index.ts:91-95）。随后经 ctx.reflect.provide('uiRenderer') 暴露 mount(container)：mountApp 优先 hydrate 引导期 DOM，否则 createRoot 渲染（src/client/index.ts:70-85），渲染树由 buildRenderApp 从内建 'root' 槽展开（src/client/app.tsx:17-23）。invariant.ts 另订阅 internal/dispatch 并注入 'invariants'，对槽关系做运行时不变式检查（src/invariant.ts:19-46）。",
      "provides": [
        "ctx.slots (SlotRegistry：槽注册/声明、'slots/changed' 事件、renderSlot('root')、store 实例轴与 HMR 卸载级联)",
        "ctx.uiRenderer.mount (把组装好的应用挂载到给定容器的入口)",
        "内建 'root' 槽（唯一由 shell 渲染的根洞，其余槽皆其子）",
        "'slots/changed' 事件（槽声明或条目集变化时发布）"
      ],
      "path": "packages/client/ui-renderer",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-experimental-inspector",
      "name": "@deepseek-ai/dsh-experimental-inspector",
      "group": "G13",
      "group_name": "实验特性",
      "layer": 1,
      "implementation": "跨 realm 的运行时 Inspector：Host 面（src/host/plugin.ts:38-62）启动 Inspector Worker、以 `ctx.provide('inspector')` 暴露观察发布服务与只读 Cordis 拓扑查询（src/index.ts:39-50），并通过 `webserver/index-inject` 把 Client bootstrap 注入 index.html。Client 面（src/client/plugin.ts:45-70）读取全局 `__DSH_INSPECTOR__` bootstrap 连接 Worker 并发布浏览器侧观察。共享实现含 bridge(buffers/codec/rpc)、CDP 域代理、cordis 快照投影等（src/index.ts:1-37）。",
      "provides": [
        "ctx.inspector (发布 JSON 观察 + 只读 Cordis 运行时拓扑查询)"
      ],
      "path": "packages/experimental/inspector",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-llm",
      "name": "@deepseek-ai/dsh-llm",
      "group": "G23",
      "group_name": "LLM 适配",
      "layer": 1,
      "implementation": "抽象出 provider 无关的 ctx.llm 服务：LlmAdapter 注册表加上可被 llm/stream waterfall 拦截的流式调用 API (src/index.ts:342-352, 1135-1157)。registerAdapter/registerConfigurableProviders 以 ctx.effect 做全有或全无的原子路由注册/替换，并在每次拓扑变更发布 llm/adapters-updated (src/index.ts:396-471, 490-543)。prepareCall 冻结一次调用的 config、retryPolicy 与模型元数据并绑定同一适配器注册代，防止 HMR 混用能力 (src/index.ts:936-983)。adapterStream 在最终适配器边界把文件/图像投影为文本句柄、按 model 能力裁剪工具，并把适配器失败归一为终止 chunk (src/index.ts:1033-1122)；invariant.ts 的 companion 校验流语法与适配器注册可读性 (src/invariant.ts:87-104)。",
      "provides": [
        "ctx.llm (provider 无关的 LLM 适配器注册表与流式调用 API，供各 llm-* 适配器注册路由、供 agent loop 发起请求)",
        "llm/stream waterfall 扩展点 (可拦截或短路每次流式模型调用)",
        "llm/adapters-updated 事件 (适配器路由与目录拓扑变更的非否决通知)"
      ],
      "path": "packages/llm/llm",
      "source_layer": "L1",
      "assembled_in": [
        "base",
        "sdk-minimal"
      ]
    },
    {
      "id": "dsh-scope",
      "name": "@deepseek-ai/dsh-scope",
      "group": "G09",
      "group_name": "核心运行时",
      "layer": 1,
      "implementation": "提供作用域上下文原语：`createScope` 用 `ctx.plugin()` 铸造带 `kScope` 标记的子上下文并给出 exact/shared 两种拆卸边界 (src/index.ts:137-147)；`bindScopeParent`/`scopeParentOf`/`scopeChainOf` 维护 key 的父子链并做环检测 (src/index.ts:54-102)；`scopeTarget` 构造保留基础 filter、按 key 及其祖先准入监听的作用域载体 (src/index.ts:170-185)。store.ts 提供 `NamedEntries`/`AnonymousEntries` 插入有序存储与 `ScopedLayers` 全局/精确作用域层聚合，经 `ctx.effect()` 绑定注册所有权与可见性 (src/store.ts:30-266)。invariant.ts 注册作用域派发不变量，要求 scope-filtered 事件必须携带匹配的 scope carrier (src/invariant.ts:16-32)。",
      "provides": [
        "createScope/bindScopeParent/scopeParentOf/scopeChainOf/scopeOf (作用域铸造与父子链)",
        "scopeTarget/isScopeCarrier/carrierKeyOf (作用域路由载体)",
        "NamedEntries/AnonymousEntries/ScopedLayers/ScopeLayer (作用域感知注册表存储)",
        "ScopeKey/Scope/Scoped/ScopeParentBinding 类型"
      ],
      "path": "packages/core/scope",
      "source_layer": "L3",
      "assembled_in": [
        "sdk-minimal"
      ]
    },
    {
      "id": "dsh-storage-domain",
      "name": "@deepseek-ai/dsh-storage-domain",
      "group": "G40",
      "group_name": "存储",
      "layer": 1,
      "implementation": "向存储中枢挂载 domain 数据形态：DomainFacility 按 Config.backend/routes 路由到后端 kv facet，打开单元、用 zod schema 校验载入记录后构造 DomainImpl (src/index.ts:103-175)。DomainImpl 维护权威内存状态与每域唯一写链，写操作先落盘、再改内存、再 emit domain/changed，从而读与介质不产生分叉 (src/domain.ts:236-270)。spec.ts 用 defineDomain 校验域声明并投影为后端 descriptor (src/spec.ts:107-163)，invariant 保证事件快照等于内存状态 (src/invariant.ts:24-59)。",
      "provides": [
        "ctx.storage.domain (域数据形态 DomainFacility)",
        "ctx.storageDomain (域设施服务别名，供 Provider 注入)"
      ],
      "path": "packages/storage/storage-domain",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-storage-json",
      "name": "@deepseek-ai/dsh-storage-json",
      "group": "G40",
      "group_name": "存储",
      "layer": 1,
      "implementation": "注册存储后端 json：JsonStorageBackend 在配置 root 下按 descriptor.layout 打开 single（整单元单文件）或 per-record（记录级目录）单元 (src/index.ts:64-80)。single 单元以内存为权威，每次写整文件原子重写并在失败时回滚 (src/single-unit.ts:74-112)；per-record 单元不持有内存态、目录即状态，记录键映射为路径段并带版本戳读取 (src/per-record-unit.ts:195-254)。原子发布用同目录临时文件 fsync 后 rename，并对父目录 fsync (src/atomic.ts:24-40)。",
      "provides": [
        "storage 后端 `json` (storage.backend.json 生命周期服务与 kv facet)"
      ],
      "path": "packages/storage/storage-json",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-storage-sqlite",
      "name": "@deepseek-ai/dsh-storage-sqlite",
      "group": "G40",
      "group_name": "存储",
      "layer": 1,
      "implementation": "注册存储后端 sqlite：SqliteStorageBackend 独占一个 DatabaseSync 连接，在 units 表强制每单元版本戳，并为 descriptor.tables 建立 u_<unit>_<table> 记录表 (src/index.ts:98-123)。单元原语为单条 prepared statement（upsert/delete/selectAll），原子性由 SQLite 保证，不用显式事务也无写队列 (src/unit.ts:27-118)。打开数据库时创建 owner-only 文件、施加 journal_mode，并把布局版本戳入 PRAGMA user_version，非当前版本拒绝 (src/schema.ts:60-107)。",
      "provides": [
        "storage 后端 `sqlite` (storage.backend.sqlite 生命周期服务与 kv facet)"
      ],
      "path": "packages/storage/storage-sqlite",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-subprocess-ssh",
      "name": "@deepseek-ai/dsh-subprocess-ssh",
      "group": "G39",
      "group_name": "SSH 远程执行",
      "layer": 1,
      "implementation": "SshSubprocessRuntime 继承 dsh-subprocess 的 SubprocessRuntime，经 ctx.ssh 在远端主机管理普通进程与 PTY（resolveExecutable/terminalEnvironment/spawn/spawnTerminal）(src/index.ts:229-343)。RemoteProcess 用独立 SSH 流复用本地 OutputCollector 处理 stdout/stderr 的收集、快照与背压，并通过 process.prepare/start/done/terminate 协议驱动远端进程生命周期 (src/index.ts:21-226)。构造函数内注册 ctx.effect 清理器，在插件销毁时终止所有存活进程与终端 (src/index.ts:236-253)。",
      "provides": [
        "ctx.subprocess (SSH 远程子进程与 PTY 提供者 SshSubprocessRuntime)"
      ],
      "path": "packages/ssh/subprocess-ssh",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-typert-loader",
      "name": "@deepseek-ai/dsh-typert-loader",
      "group": "G45",
      "group_name": "类型契约",
      "layer": 1,
      "implementation": "Loader 集成：当 Loader entry 挂载时解析其 package.json，若导出 ./typert 则导入 host 面并把 TYPERT 清单注册进 ctx.typert，entry 卸载时撤下注册（src/index.ts:1-26）。扫描按 entry 名增量进行：internal/plugin 标脏后经微任务 flush 对账实时 entries（src/index.ts:435-463）。",
      "provides": [
        "自动注册挂载插件包的 ./typert 清单到 ctx.typert（src/index.ts:410）"
      ],
      "path": "packages/typert/loader",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-authorization",
      "name": "@deepseek-ai/dsh-authorization",
      "group": "G10",
      "group_name": "凭据与授权",
      "layer": 2,
      "implementation": "定义 `ctx.authorization` 能力 seam：`AuthorizationService` 继承 cordis `Service` 并 `static inject=['credentials']`（src/index.ts:189-198），以 `registerFlow()` 按 `CredentialKey` 注册「凭据获取流程」且一个 key 只允许一个 flow（src/index.ts:209-225）。`begin()` 用 `running` Map 保证同一 key 单飞、校验 method 合法性，并把流程屏蔽在一个中立会话（notify/commit/prompt）后执行（src/index.ts:283-323）。seam 只在流程于本次尝试内确实提交了凭据记录后才报 `authorized`（`observed.committed` + `describeRecord`，src/index.ts:392-453），并以容错扇出广播 `authorization/settled`（src/index.ts:338-358）。`invariant.ts` 独立校验 settled 后 key 不再 in-flight（src/invariant.ts:24-37），`types.ts` 给出不含 cordis/service 依赖的 wire 安全类型（src/types.ts:1-91）。",
      "provides": [
        "ctx.authorization (凭据授权 seam：注册/列出/取消/执行凭据获取流程，按 key 单飞)",
        "事件 authorization/settled (一次授权尝试终态广播，含 failed)"
      ],
      "path": "packages/credentials/authorization",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-client-connection",
      "name": "@deepseek-ai/dsh-client-connection",
      "group": "G05",
      "group_name": "客户端运行时",
      "layer": 2,
      "implementation": "Host 侧 `HostConnectionService` 提供载体中立的 RPC 与 Fetch 注册表，并在有 `webServer` 时把 `/api` 路由挂到 Web 服务器，经 Host/Origin 信任栅栏与持久浏览器认证后才放行 (src/index.ts:124-162, src/rpc-host.ts:63-113)。浏览器侧 `installConnection` 装配 `ctx.connection`，把 `ConnectionController` 的连接/重连循环、generation 状态与通用 RPC 通道以 getSnapshot/subscribe 观察面暴露，并在 online/offline 时更新可用性 (src/client/index.ts:205-311)。两侧通过 `__DSH_CONNECTION_RECOVERY__` 全局与 `connection/request` waterfall 协同。",
      "provides": [
        "ctx.connection (Host 侧 Connection 传输与 RPC/Fetch 注册表；浏览器侧连接 generation 与恢复循环句柄)",
        "connection/request waterfall 事件 (允许对已认证 /api 请求做准入/包装)",
        "OperatorPeer 与 rpc/schema 导出 (RpcId、transportError、rpcMessageSchema 等)"
      ],
      "path": "packages/client/connection",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-hmr",
      "name": "@deepseek-ai/dsh-client-hmr",
      "group": "G05",
      "group_name": "客户端运行时",
      "layer": 2,
      "implementation": "Host 侧以单一定时器 stat-poll 每个 graph 行的客户端 bundle（设计上用轮询，因网络挂载无 inotify），元数据变化即调 `clientModules.rebuilt(id)` 发布新 generation (src/index.ts:68-156)。同时注册 `/plugins/events` SSE 路由，把 graph 变化与 rebuilt 帧广播给浏览器 (src/index.ts:158-207)。另发布 invariant 伴生插件，以 StatWatcher 计数基线校验 bundle 轮询器随 fiber 销毁而终止 (src/invariant.ts:31-59)。",
      "provides": [
        "客户端 bundle 变更的 stat 轮询监测与 clientModules.rebuilt 触发",
        "/plugins/events SSE 频道 (graph 与 rebuilt 帧广播)",
        "client-hmr-invariant 伴生不变量 (StatWatcher 泄漏检测)"
      ],
      "path": "packages/client/hmr",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-web",
      "name": "@deepseek-ai/dsh-client-web",
      "group": "G05",
      "group_name": "客户端运行时",
      "layer": 2,
      "implementation": "Web 壳库入口导出 `AppWebEntry`、静态模块表与 index 注入应用器 (src/index.ts:9-12)。`AppWebEntry.run` 等待 boot-ready、从 `__ModuleLoader__` 创建模块系统与 manifest、预取 immediate 层，再以 `bootClient` 组装 Cordis Loader 激活全部客户端条目，最后用 `mountClient` 交接渲染器 (src/boot.ts:49-103)。`bootClient` 把 Loader 挂到模块系统并逐行 create、await，随后 `assertEntriesActive` 审计失败/待服务条目并抛聚合错误 (src/boot-client.ts:36-89)；`mountClient` 以 `uiRenderer` 依赖 fiber 挂载应用 (src/mount.ts:19-24)。",
      "provides": [
        "AppWebEntry (Web 壳启动入口：模块系统+HMR 交接+应用挂载)",
        "客户端静态模块表与平台模块词表 (PLATFORM_MODULES/PRELOADED_CLIENT_EXTERNALS)",
        "bootClient/assertEntriesActive/mountClient 组装与激活审计",
        "applyIndexInjections (消费 webserver index 注入表)"
      ],
      "path": "packages/client/web",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-hmr",
      "name": "@deepseek-ai/dsh-hmr",
      "group": "G04",
      "group_name": "启动与插件管理",
      "layer": 2,
      "implementation": "HMR 服务以 Chokidar 监听模块根，把文件变更经 debounce 后串行投入 `runExclusive` 队列处理 (src/index.ts:139-153, 260-305)。它对变更做 externals/accepted/declined 分类与依赖图闭包分析 (src/index.ts:66-77, 351-404)，据此清 ESM loadCache 与 CJS require.cache 并重导入插件、重建 fiber，失败时回滚缓存与旧插件 (src/index.ts:471-575)。同一队列也承载 profile 配置文件监视 (`watchConfig` 委托 watch-config.ts，处理尚不存在的路径) (src/index.ts:160-176)，完成后发 `hmr/reload` 事件 (src/index.ts:578)。",
      "provides": [
        "ctx.hmr (串行化的模块与配置热重载服务：runExclusive/watchConfig/getLinked/getOuterStack)",
        "hmr/change 与 hmr/reload 事件，供其它插件感知文件变更与重载批次"
      ],
      "path": "packages/boot/hmr",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-llm-deepseek-account",
      "name": "@deepseek-ai/dsh-llm-deepseek-account",
      "group": "G23",
      "group_name": "LLM 适配",
      "layer": 2,
      "implementation": "以 DeepSeek 账号令牌为鉴权实现官方 provider 路由 'deepseek-account'：resolveAuth 经 ctx.get('deepseekAccount').resolveToken 取令牌并注入 x-dsh-auth-token 头 (src/index.ts:20-38)，在 onRequestError 中把配额超限映射为 ACCOUNT_QUOTA_EXCEEDED、401 映射为 ACCOUNT_TOKEN_INVALID 并拒绝失效令牌 (src/index.ts:26-36)。向 ctx.llm 注册可配置 provider 目录项并注册适配器 (src/index.ts:39-53)，配置直接复用 llm-deepseek 的协议字段（无 API-key 引用）(src/config.ts:2-6)。",
      "provides": [
        "DeepSeek Account provider 路由注册 (以账号令牌鉴权，向 ctx.llm 注册 'deepseek-account' 适配器与可配置目录项)"
      ],
      "path": "packages/llm/llm-deepseek-account",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-llm-deepseek-api-key",
      "name": "@deepseek-ai/dsh-llm-deepseek-api-key",
      "group": "G23",
      "group_name": "LLM 适配",
      "layer": 2,
      "implementation": "以 API key 鉴权实现官方 DeepSeek 路由 'deepseek-official'：resolveApiKey 先经 ctx.get('credentials').resolve 解析凭据引用，无 seam 时退化到启动环境变量，对空或含非法字符的 key 抛 INVALID_CREDENTIAL (src/index.ts:20-35)。注册可配置 provider 目录项并以 x-api-key 头鉴权、以 catalogModelInfo 列出模型 (src/index.ts:36-46)。config.ts 在协议配置上追加默认 DEEPSEEK_API_KEY 的 credential-ref 字段，并与端点一起解析出 ResolvedDeepSeekOptions (src/config.ts:14-38)。",
      "provides": [
        "DeepSeek 官方 provider 路由注册 (以 API key 鉴权，向 ctx.llm 注册 'deepseek-official' 适配器与可配置目录项)"
      ],
      "path": "packages/llm/llm-deepseek-api-key",
      "source_layer": "L1",
      "assembled_in": [
        "base",
        "sdk-minimal"
      ]
    },
    {
      "id": "dsh-session",
      "name": "@deepseek-ai/dsh-session",
      "group": "G09",
      "group_name": "核心运行时",
      "layer": 2,
      "implementation": "事件溯源会话服务：`SessionStore`（服务名 `sessions`）以 `Map<SessionId, SessionEntry>` 维护存活会话，提供 `prepare/enter/announce/create` 与 `session/created`、`session/event`、`session/flush` 派发；`flush()` 是所有持久性 checkpoint 的唯一入口，await 全部监听者并回传其失败 (src/index.ts:919-963,986-997,1194-1211)。`Session` 类维护 append-only 日志、surface 派生消息历史与 fork/seed (src/index.ts:446-560)；surface.ts 定义消息投影与 surface 折叠，repair.ts 为中断 turn 生成合成收尾事件，request-header.ts 折叠请求头，tool-history.ts 重建工具历史 (src/index.ts:19-35)。构造时经 `ctx.inject(['typert'])` 注册 session 的 typert lookup (src/index.ts:954-962)；invariant.ts 校验日志的 seq/turn/step/tool-call 关系不变量 (src/invariant.ts:16-258)。",
      "provides": [
        "ctx.sessions (SessionStore 事件溯源会话服务：prepare/enter/announce/create/flush/get)",
        "Session 类与 SessionId/SessionSeq/SessionLogOffset 品牌类型",
        "session/created、session/disposed、session/event、session/flush 事件",
        "surface/fork/repair/request-header/tool-history 派生与修复工具",
        "SessionPreparation、foldRequestHeader、interruptedTurnClosers、KNOWN_SESSION_EVENT_TYPES 等导出"
      ],
      "path": "packages/core/session",
      "source_layer": "L1",
      "assembled_in": [
        "base",
        "sdk-minimal"
      ]
    },
    {
      "id": "dsh-skill",
      "name": "@deepseek-ai/dsh-skill",
      "group": "G37",
      "group_name": "技能",
      "layer": 2,
      "implementation": "技能能力 seam 的 Service Definition：实现分层技能注册表 SkillRegistry（以 'skills' 名注册 ctx 服务），按调用上下文 scope 把 provider 与运行时技能分入 global 层与各 scope 层，读取时合并 global 与 scope 链、同层内按 rank 解析同名胜出者，并按 revision+cwd+scope 链做目录缓存 (src/index.ts:356-660)。对外暴露 list/snapshot/get 读取目录与技能正文，registerProvider/register 供 provider 与运行时贡献注册，变更时提升 revision 并使缓存失效、向 skills/change 事件广播 (src/index.ts:390-517, src/index.ts:621-659)。",
      "provides": [
        "ctx.skills (技能注册表 seam：合并多渠道 provider 目录、按 scope 分层与 rank 解析唯一胜出技能，暴露 list/snapshot/get)",
        "skills/change 事件 (技能目录失效通知，订阅者据此重新拉取目录)"
      ],
      "path": "packages/skill/skill",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-system-prompt",
      "name": "@deepseek-ai/dsh-system-prompt",
      "group": "G09",
      "group_name": "核心运行时",
      "layer": 2,
      "implementation": "系统提示装配注册表：`SystemPrompt`（服务名 `systemPrompt`）以 `ScopedLayers` 维护 section/context/tool-provider/variable 四类作用域层，构造时注册若干内建 section (src/index.ts:405-450)。`section/context/tools/variable` 分别在调用上下文作用域内注册贡献 (src/index.ts:454-547)；`assemble()` 合并全局与作用域 provider、脱离 tool 参数并按序产出权威装配 (src/index.ts:549-585)。对外声明 `system-prompt/assemble` 瀑布与 `system-prompt/change` 事件 (src/index.ts:18-38)；invariant.ts 前置校验装配结果的 section/context/tool/variable 合法性 (src/invariant.ts:16-51)。",
      "provides": [
        "ctx.systemPrompt (SystemPrompt 装配注册表：section/context/tools/variable/assemble/getSectionOrder)",
        "system-prompt/assemble 瀑布与 system-prompt/change 事件",
        "PromptSection/PromptContext/PromptAssembly/ToolProviderResult/AssembleContext 类型"
      ],
      "path": "packages/core/system-prompt",
      "source_layer": "L1",
      "assembled_in": [
        "base",
        "sdk-minimal"
      ]
    },
    {
      "id": "dsh-web",
      "name": "@deepseek-ai/dsh-web",
      "group": "G47",
      "group_name": "Web 访问",
      "layer": 2,
      "implementation": "WebRuntime 服务 (src/index.ts:74-164) 作为 ctx.web 能力 seam：持有 search/fetch 两个 provider 注册表，暴露 registerSearchProvider/registerFetchProvider (src/index.ts:103-116)。search()/fetch() 在调用时经 resolveProvider 做与注册顺序无关的选择（配置缺失→WEB_PROVIDER_CONFIGURED_MISSING、多个可用→WEB_PROVIDER_AMBIGUOUS 等，src/index.ts:172-194），并按 maxResults 截断结果并置 truncated (src/index.ts:196-200)。types.ts 定义请求/结果词汇、provider 接口与 WebError 分类 (src/types.ts:35-130)，并以默认导出满足服务类插件约定 (src/index.ts:202)。",
      "provides": [
        "ctx.web (Web 访问能力 seam：search/fetch provider 注册表与与注册顺序无关的选择)",
        "WebError 错误分类与 WebSearch/WebFetch 请求结果词汇"
      ],
      "path": "packages/web/web",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-api-gateway",
      "name": "@deepseek-ai/dsh-api-gateway",
      "group": "G02",
      "group_name": "API 网关与控制器",
      "layer": 3,
      "implementation": "Host 侧 TypertGatewayService 继承 Service 并实现 TypertGateway，构造时向 connection 注册 /api RPC 拦截器、向 webServer 注册 WebSocket 多路复用路由 /api/remote.mux（存在 appReady 时等待其就绪再监听）(src/index.ts:226-277)。invoke/stream 经 prepareInvocation 解析 Typert 描述符（严格定义或 SRC 回退）、校验精确参数、解析 lookup/context provider，再以 Reflect.apply 调用业务方法并把结果编码为 RPC 结果 (src/index.ts:345-410, 686-877)。registerRemoteEvents 消费应用选定的唯一事件源：emit 通知广播给各客户端，Agent 作用域 waterfall 以事件 id 关联并在收到结果后继续/取消 (src/index.ts:285-311, 463-655)。客户端侧 apply() 安装 ClientRemoteService，暴露 ctx.remote 与 $stream/$host (src/client/index.ts:140-199)。",
      "provides": [
        "ctx.typertGateway（Typert Remote Host 调度器：invoke/stream/registerRemoteEvents 与载体无关的 wireStream 适配）",
        "ctx.remote（客户端侧生成式 Remote 命名空间服务，以及 $stream / $host 事实）",
        "WebSocket 多路复用端点 /api/remote.mux 与转发事件流端点 $events / $events/result"
      ],
      "path": "packages/api/gateway",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-commands",
      "name": "@deepseek-ai/dsh-commands",
      "group": "G21",
      "group_name": "交互命令",
      "layer": 3,
      "implementation": "实现 ctx.commands 人类命令注册表：全局与 agent 作用域分层（NamedEntries/ScopedLayers），register() 校验并冻结定义（src/index.ts:94-111、179-292）。execute() 解析斜杠命令行，先写 command/run 再执行处理函数并写 command/done，附件准入与取消也在此强制（src/index.ts:360-431）。list/execute 以 TypertRemote 暴露给 UI（src/index.ts:314、360），invariant.ts 校验生命周期事件按 commandId 成对（src/invariant.ts:20-67）。",
      "provides": [
        "ctx.commands (命令注册与执行服务 + Remote list/execute；命令生命周期事件配对不变量，src/index.ts:263-490)"
      ],
      "path": "packages/interaction/commands",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-config-editor",
      "name": "@deepseek-ai/dsh-config-editor",
      "group": "G04",
      "group_name": "启动与插件管理",
      "layer": 3,
      "implementation": "`ConfigEditor extends Service` 提供对当前 profile patch 文件的持久化配置编辑能力 (src/index.ts:26-31)。`entries()` 筛出由 `include` 父树拥有且 id 唯一的可寻址行 (src/index.ts:39-44)，`configuration()` 用 `loadProfileDirectory`+`composeEntries` 同时给出继承层值与显式覆盖值 (src/index.ts:49-68)。`edit()` 在文件锁下校验目标行仍在册、经 `waterfall('internal/config')`+`resolveConfig` 预演新配置、用 yaml AST 精确改写对应行，写盘后调用 `reconcileProfilePatches` 触发 Loader 重载，失败则回滚文件与 patch (src/index.ts:75-142)。",
      "provides": [
        "ctx.configEditor (对活动 profile 插件配置的持久化编辑服务：entries/configuration/edit)",
        "基于 YAML AST 的配置行改写与写盘回滚 (保留 __jsExpr 等自定义标签)"
      ],
      "path": "packages/boot/config-editor",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-deepseek-account-platform",
      "name": "@deepseek-ai/dsh-deepseek-account-platform",
      "group": "G10",
      "group_name": "凭据与授权",
      "layer": 3,
      "implementation": "`PlatformAccount` 继承 `DeepSeekAccount`（src/index.ts:84-85），以 PKCE 实现 DeepSeek Platform 网页登录：注册 authorization flow（src/index.ts:138-146），`run()` 生成 verifier/challenge+state、在 webServer 注册 `/oauth/callback` 时序安全校验回调、交换 token 后经 `session.commit` 写 grant 记录（src/index.ts:509-599）。grant 以 issuer 绑定 provider origin，失效或拒 token 即删除记录并广播 `deepseek-account/session-expired`/`signed-out`（src/index.ts:329-344、372-388）。profile/余额/未通知奖励经 `details.ts`/`protocol.ts` 的 zod 校验与 65KB 响应上限读取（src/details.ts:62-70、src/protocol.ts:166-234）。",
      "provides": [
        "ctx.credentials 记录 (deepseek-account-platform/default 与 /device 的 grant)",
        "事件 deepseek-account/session-expired, deepseek-account/signed-out"
      ],
      "path": "packages/credentials/deepseek-account-platform",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-experimental-webworker-runtime",
      "name": "@deepseek-ai/dsh-experimental-webworker-runtime",
      "group": "G13",
      "group_name": "实验特性",
      "layer": 3,
      "implementation": "浏览器专用 host runtime：在专用 Web Worker 内跑整套 harness Cordis 树。`createWorkerHost` 同步构造（先装消息处理器以便启动期排队），`start()` 挂载 VFS 镜像/overlay、安装 Worker 模块加载器与 process shim，再从镜像 require `boot()`/cmdline 启动 preview profile 并让 TunnelServer 开始服务（src/worker-host.ts:169-271）。包同时导出 ModuleLoader、node builtin/external 代理与 mock、shell 解释器、storage(VFS/tar/gzip)、transport(tunnel/synthetic-http)、async-context polyfill 等浏览器运行时基建（src/index.ts:5-52）。",
      "provides": [
        "createWorkerHost/startWorkerHost (在 Web Worker 内组装并启动完整 harness Cordis 树)",
        "浏览器运行时基建 (WorkerModuleLoader / MemoryVfs / TunnelServer / shell / node builtin 代理)"
      ],
      "path": "packages/experimental/webworker-runtime",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-hook-protocol",
      "name": "@deepseek-ai/dsh-hook-protocol",
      "group": "G19",
      "group_name": "Hooks 扩展",
      "layer": 3,
      "implementation": "不注册插件的共享协议库：导出方言中立的 matcher 匹配（Claude 字面/正则双模、Codex 全正则）、codec 对退出码与 stdout 的解码、merge 的「最严格优先」结果折叠、runner 经 shell 执行 hook，以及 events/detached 工具（src/index.ts:9-25）。runner.ts 用注入的 shell 执行器运行命令，并把基础设施异常降级为无退出码的非阻断结果（src/runner.ts:67-105）。events.ts 追加成对的 hook/invoked、hook/result 持久事件（src/events.ts:75-103），invariant.ts 校验其配对与 open-turn 边界（src/invariant.ts:31-113）。",
      "provides": [
        "hook 协议库 (匹配/解码/合并/执行/持久事件/脱离运行静默) 供各方言桥复用",
        "hook-protocol-invariant 不变量伴随件 (hook invoked/result 配对与轮次边界校验)"
      ],
      "path": "packages/hooks/hook-protocol",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-host-frontend-static",
      "name": "@deepseek-ai/dsh-host-frontend-static",
      "group": "G20",
      "group_name": "宿主服务",
      "layer": 3,
      "implementation": "在 webServer 的 fallback 座位注册 SPA 静态服务：非 GET/HEAD 返回 405，解析后越出 distRoot 返回 403，index 与非 index 资产分别处理（src/index.ts:113-139、71-106）。index 响应先经 Connection 的 authorizeIndex 浏览器鉴权，再由 ctx.webServer.renderIndex 注入并加 <base href=\"./\">（src/index.ts:117-120、136）。未知扩展名以 octet-stream 下发，缺失文件返回 404（src/index.ts:94、99-101）。",
      "provides": [
        "webServer 回退座位 (SPA dist 静态托管：index 鉴权+注入、资产 MIME 服务，src/index.ts:121-139)"
      ],
      "path": "packages/host/frontend-static",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-host-open-in-app",
      "name": "@deepseek-ai/dsh-host-open-in-app",
      "group": "G20",
      "group_name": "宿主服务",
      "layer": 3,
      "implementation": "在 webServer 上注册 apps/icon/open 三条路由：每个请求先经 connection.requestRejection 的 Host/Origin 与浏览器鉴权栅栏，open 路由再对 JSON body 做 64KiB、字段、绝对路径与目录存在性校验（src/index.ts:138-310）。catalog.ts 为纯数据表，resolver.ts 用各平台定位器链把条目解析为宿主上已核验的启动器并惰性缓存一次（src/resolver.ts:604-662、src/index.ts:154-157）。启动经 launchDetachedApp 以凭据擦洗环境分离 spawn，ENOENT 时刷新该条目并重试一次（src/resolver.ts:74-96、src/index.ts:295-303）。icons.ts 按平台抽取图标（src/icons.ts:143-161）。",
      "provides": [
        "webServer 路由 (open-in-app 应用目录/图标/启动端点，src/index.ts:193-310)"
      ],
      "path": "packages/host/open-in-app",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-llm-pi-ai",
      "name": "@deepseek-ai/dsh-llm-pi-ai",
      "group": "G23",
      "group_name": "LLM 适配",
      "layer": 3,
      "implementation": "以 @earendil-works/pi-ai 为后端实现通用多 provider LLM 适配器：PiAiAdapter 每次操作捕获一个不可变 snapshot（profiles 与其 Models 集合），保证一次调用的 provider/模型/凭据在 await 期间冻结 (src/adapter.ts:232-241, 330-348)。config.ts 按 provider 路由解析 profile、物化模型目录与注册时捕获的 retryPolicy (src/config.ts:410-509)，context.ts 把 harness 消息历史（含持久图像解析与 offload 占位）转成 pi-ai 的 Context (src/context.ts:262-338)。index.ts 以设置驱动注册/原子替换适配器路由与可配置目录，并注册按命名空间的模型发现 (src/index.ts:285-316, 275-278)；auth.ts 与 login.ts 把 harness 的 credentials/authorization seam 桥接到 pi-ai 的凭据存储与登录流 (src/auth.ts:141-231, src/login.ts:120-160)。",
      "provides": [
        "pi-ai 多 provider LLM 适配器 (向 ctx.llm 注册一组 provider 路由，实现 LlmAdapter 并声明各路由 retry policy)",
        "pi-ai 凭据/登录桥接 (把 credentials 记录与 authorization 流程映射为 pi-ai 的 CredentialStore/AuthContext 与登录事件)"
      ],
      "path": "packages/llm/llm-pi-ai",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-persona",
      "name": "@deepseek-ai/dsh-persona",
      "group": "G27",
      "group_name": "Agent 预设",
      "layer": 3,
      "implementation": "作用域级 persona 行：inject=['systemPrompt']，apply() 用 ctx.effect 注册 deployment:persona-prefix 段（order 取 DEPLOYMENT_PERSONA_PREFIX，complete 时令其为完整系统提示）与 deployment:persona-suffix 段（order 取 DEPLOYMENT_PERSONA_SUFFIX）（src/index.ts:62-73）。当 includeRuntimeContext 为假时调用 ctx.systemPrompt.suppressRuntimeContext() 抑制该作用域的运行时上下文快照（src/index.ts:74）。因 dsh-system-prompt 无条件注册部署 persona，本行只能挂载在 agent preset 作用域内遮蔽之，全局挂载会冲突失败（src/index.ts:1-14）。",
      "provides": [
        "systemPrompt `deployment:persona-prefix` / `deployment:persona-suffix` 段（作用域级 persona 覆盖，src/index.ts:63-73）"
      ],
      "path": "packages/preset/persona",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-session-log-deepseek",
      "name": "@deepseek-ai/dsh-session-log-deepseek",
      "group": "G33",
      "group_name": "会话核心",
      "layer": 3,
      "implementation": "向 DeepSeek 官方 LLM API 请求贡献增量 dsh_session_log 字段：acceptedThrough() 折叠本会话的 delivery-accepted 事件得到已确认水位（src/index.ts:141-175），prepare 从该水位起按 maxBytes 打包最长可容纳的事件前缀，并把 header/事件翻译为线格式（src/index.ts:182-243）。接受时追加 session-log-deepseek/delivery-accepted 事件记录水位，使重启后能保守重发不确定尾部（src/index.ts:233-240）。invariant.ts 校验水位字段与所在事件/会话的一致性（src/invariant.ts:17-57）。",
      "provides": [
        "DeepSeek 官方请求的 dsh_session_log 增量会话日志扩展（注册于 ctx.deepseekLlmApiExtensions）"
      ],
      "path": "packages/session/session-log-deepseek",
      "source_layer": "L1",
      "assembled_in": [
        "base",
        "sdk-minimal"
      ]
    },
    {
      "id": "dsh-session-persistence-jsonl",
      "name": "@deepseek-ai/dsh-session-persistence-jsonl",
      "group": "G33",
      "group_name": "会话核心",
      "layer": 3,
      "implementation": "JsonlSessionPersistence 继承 SessionPersistence（注册 ctx.sessionPersistence），以每会话目录下的不可变 generation 文件存 header 与连续事件：create/open 返回带 per-handle 变更链的句柄，读取统一做 fail-closed 校验（src/index.ts:245-577）。写入经 format.ts 编码（默认带校验和的 zstd 帧）、lease.ts 用内核 flock（Windows 具名 semaphore）保证跨进程单写者（src/lease.ts:58-134），storage.ts 负责 live 事件路由与 flush 屏障（src/storage.ts:534-566）。历史 generation 经 format catalog 与 v3→v4 迁移在显式写打开时发布（src/index.ts:579-714），worker 校验由 migration-verifier.ts 承担（src/index.ts:47）。",
      "provides": [
        "ctx.sessionPersistence (JSONL 会话持久化后端：不可变 generation 文件、内核写锁与迁移)"
      ],
      "path": "packages/session/session-persistence-jsonl",
      "source_layer": "L1",
      "assembled_in": [
        "base",
        "sdk-minimal"
      ]
    },
    {
      "id": "dsh-session-projection",
      "name": "@deepseek-ai/dsh-session-projection",
      "group": "G33",
      "group_name": "会话核心",
      "layer": 3,
      "implementation": "SessionProjectionRegistry（ctx.sessionProjections）是会话投影能力 seam 的 Service Definition 与其驱动：唯一订阅 session/created 与 session/event，把每个提交事件驱动过所有注册单元的纯同步 apply，并按 Object.is 判断状态/视图引用是否变化以触发 change feed（src/index.ts:199-223,656-704）。register() 是 effect，末位注册者退出即移除 key，并读面提供 stateOf/snapshot/cachedSnapshot/checkpoint/restoreFloor/viewCheckpoint/restore/hydrate（src/index.ts:233-595）。类型出口 types.ts 定义可合并的投影状态表与客户端视图表（src/types.ts:11-24）。",
      "provides": [
        "ctx.sessionProjections (会话投影单元注册表、驱动与快照/检查点读写面)"
      ],
      "path": "packages/session/session-projection",
      "source_layer": "L1",
      "assembled_in": [
        "base",
        "sdk-minimal"
      ]
    },
    {
      "id": "dsh-session-query-sqlite",
      "name": "@deepseek-ai/dsh-session-query-sqlite",
      "group": "G34",
      "group_name": "会话检索",
      "layer": 3,
      "implementation": "继承抽象 SessionQueryEngine，作为 ctx.sessionQuery 的具体后端：按 openAt 配置在启动或首次检索时打开 SQLite 派生索引（FTS5），并把 live 与 persisted 会话事件索引化 (src/index.ts:203-266, 360-367)。searchSessions/searchEvents 先归一化请求，经 _serialized 串行化、_reconcile 对 live/persisted 语料做稳定观测与增量写入，再用 FTS5 MATCH + highlight() 查询并返回带指纹校验的游标分页 (src/index.ts:268-325, 407-562, 647-708)。query.ts 负责请求归一化、id/cwd/time/type 等谓词编译、FTS 短语转义、snippet 截取与请求指纹 (src/query.ts:100-216, 269-294)。",
      "provides": [
        "ctx.sessionQuery (SQLite FTS5 全文检索后端：跨会话/会话内事件检索，继承的精确读与追迹能力)"
      ],
      "path": "packages/session-query/session-query-sqlite",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-session-telemetry-otel",
      "name": "@deepseek-ai/dsh-session-telemetry-otel",
      "group": "G33",
      "group_name": "会话核心",
      "layer": 3,
      "implementation": "OpenTelemetrySessionBackend 继承 SessionTelemetryBackend（注册 ctx.sessionTelemetry），组合 OTel SDK 的 LoggerProvider + BatchLogRecordProcessor + OTLP/HTTP exporter，把协调器交来的记录映射到 logger.emit（src/index.ts:156-267，日志器构造 src/index.ts:204-237）。FEEDBACK_ONLY 模式仅在显式 feedback 提交时经 SessionTelemetryCoordinator 捕获会话历史，DISABLED 不构造 SDK 仅告警（src/index.ts:168-175,242-266）；shutdown() 以自有外部截止时间约束 SDK 完整关闭路径（src/index.ts:294-309）。",
      "provides": [
        "ctx.sessionTelemetry (OpenTelemetry 遥测后端实现，按 feedback 授权捕获会话历史)"
      ],
      "path": "packages/session/session-telemetry-otel",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-skill-badge",
      "name": "@deepseek-ai/dsh-skill-badge",
      "group": "G37",
      "group_name": "技能",
      "layer": 3,
      "implementation": "内置技能提供者插件：构造单个 dsh-badge 技能候选（bundled 来源、BUNDLED_SKILL_RANK 优先级、资源基目录指向 ../assets/），list 返回静态候选、get 读取 assets/dsh-badge.md 正文 (src/index.ts:25-50)。apply 时经 ctx.skills.registerProvider 注册名为 'dsh-badge' 的 provider (src/index.ts:57-60)。",
      "provides": [
        "dsh-badge 技能 (bundled 提供者：向 ctx.skills 注册官方 powered-by-dsh 徽章技能)"
      ],
      "path": "packages/skill/skill-badge",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-skill-filesystem",
      "name": "@deepseek-ai/dsh-skill-filesystem",
      "group": "G37",
      "group_name": "技能",
      "layer": 3,
      "implementation": "本地文件系统技能提供者：按 project(.dsh/.agents skill 根)/custom/user/bundled 有序根（各带 rank）发现目录式 SKILL.md 与扁平 .md 技能，解析 YAML frontmatter 与 invocation 策略后产出候选；技能正文优先经 ctx.fs 读取，无 fs 服务时退回 node fs (src/index.ts:134-266, src/index.ts:723-840)。内置 SkillWatchManager 以 chokidar/watchFile 监听技能根，并在 fs/observed 的一手写改后同步失效目录，dispose 时收敛全部 watcher (src/index.ts:288-601, src/index.ts:143-146)。",
      "provides": [
        "filesystem 技能提供者 (从项目/自定义/用户/bundled 根发现并加载本地技能注册进 ctx.skills)"
      ],
      "path": "packages/skill/skill-filesystem",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-skill-office",
      "name": "@deepseek-ai/dsh-skill-office",
      "group": "G37",
      "group_name": "技能",
      "layer": 3,
      "implementation": "内置 Office 技能提供者：从打包 assets 目录为 office-docx/office-pptx/office-xlsx 三个技能解析 frontmatter 描述生成候选（bundled 来源、统一 BUNDLED_SKILL_RANK），get 返回 SKILL.md 正文并追加 LibreOffice Kit 运行时说明 (src/index.ts:37-96)。officeRuntime 校验 node 与 kit cli.js 均为绝对可执行文件，或按显式 cli:false 关闭 KIT (src/index.ts:47-62)。",
      "provides": [
        "office-docx/office-pptx/office-xlsx 技能 (bundled 提供者：文档编写工作流与 LibreOffice Kit 资源指引)"
      ],
      "path": "packages/skill/skill-office",
      "source_layer": "L3",
      "assembled_in": [
        "sdk-app"
      ]
    },
    {
      "id": "dsh-user-approval",
      "name": "@deepseek-ai/dsh-user-approval",
      "group": "G21",
      "group_name": "交互命令",
      "layer": 3,
      "implementation": "实现 ctx.approval 审批能力 seam 的服务定义：request() 要求处于未闭合 turn 内，先写 approval/asked 审计再经作用域 waterfall 求决策并写 approval/decided（src/index.ts:215-234、267-307）。策略 'never' 在任何答案者之前由服务自身决断性拒绝，缺答案者则 fail-closed 返回 unavailable（src/index.ts:275、283）。setPolicy 写 approval/policy 事件并把切换通知注入模型，systemPrompt 上下文档声明当前策略（src/index.ts:162-195）。",
      "provides": [
        "ctx.approval (审批服务 + approval/request 作用域 waterfall；approval/asked↔decided 审计不变量，src/index.ts:150-308)"
      ],
      "path": "packages/interaction/user-approval",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-web-fetch-http",
      "name": "@deepseek-ai/dsh-web-fetch-http",
      "group": "G47",
      "group_name": "Web 访问",
      "layer": 3,
      "implementation": "函数插件 apply() 构造 HttpFetchProvider 并通过 ctx.web.registerFetchProvider 注册为 fetch provider 'http' (src/index.ts:79-93，id 见 src/provider.ts:36-40)。provider.fetch 用 deadline 施加超时 (src/provider.ts:56-63)，validateFetchUrl 校验 URL 并只跟随同源重定向 (src/provider.ts:66-115)，经 publicHttpNetwork 解析并固定公共 IP、可选择走 dsh-http-proxy 代理 (src/provider.ts:134-139)。readBody 按字节/字符上限截断并按 charset 解码 (src/provider.ts:147-177)。",
      "provides": [
        "ctx.web 的 fetch provider 'http' (匿名公共 HTTP(S) 安全抓取实现)"
      ],
      "path": "packages/web/web-fetch-http",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-web-search-exa",
      "name": "@deepseek-ai/dsh-web-search-exa",
      "group": "G47",
      "group_name": "Web 访问",
      "layer": 3,
      "implementation": "函数插件把 ExaSearchProvider 注册进 ctx.web（id 'exa'，src/index.ts:57-66）。provider 以 POST /search 携带 highlights 请求 Exa (src/provider.ts:96-149)，把首个非空 highlight 映射为 snippet、publishedDate→publishedAt，并丢弃无 snippet 的条目 (src/provider.ts:56-81)。API key 缺省从 launchEnvironmentOf(ctx).get('EXA_API_KEY') 取得。",
      "provides": [
        "ctx.web 的 search provider 'exa' (Exa 检索)"
      ],
      "path": "packages/web/web-search-exa",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-web-search-perplexity",
      "name": "@deepseek-ai/dsh-web-search-perplexity",
      "group": "G47",
      "group_name": "Web 访问",
      "layer": 3,
      "implementation": "函数插件把 PerplexitySearchProvider 注册进 ctx.web（id 'perplexity'，src/index.ts:52-61）。provider 以 POST /chat/completions 调用 sonar 模型 (src/provider.ts:101-152)，把生成答案作为 content，来源优先结构化 search_results[]、缺失时回退为仅 URL 的 citations[] (src/provider.ts:73-83)。API key 缺省从 launchEnvironmentOf(ctx).get('PERPLEXITY_API_KEY') 取得。",
      "provides": [
        "ctx.web 的 search provider 'perplexity' (Perplexity 生成式检索)"
      ],
      "path": "packages/web/web-search-perplexity",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-webhook-github",
      "name": "@deepseek-ai/dsh-webhook-github",
      "group": "G48",
      "group_name": "Webhook",
      "layer": 3,
      "implementation": "函数插件在 ctx.webServer 上注册一条 exact 路由 (src/index.ts:47-61)。handler 校验 POST 与 JSON Content-Type，读取受限 body 及 x-hub-signature-256/x-github-delivery/x-github-event 头，用 ctx.credentials 解析密钥并经 Octokit Webhooks 校验签名 (src/handler.ts:82-105)。校验通过后构造 VerifiedWebhookDelivery<'github'> 交给 ctx.webhookRuntime.dispatch 做 fire-and-forget 分发 (src/handler.ts:107-119)，并在 types.ts 里向 WebhookEventMap 合并 'github' 事件 (src/types.ts:16-20)。",
      "provides": [
        "ctx.webServer 上的 GitHub 签名 webhook 路由",
        "WebhookEventMap['github'] 事件类型 (dsh-webhook 的 provider 事件族)"
      ],
      "path": "packages/webhook/webhook-github",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-workspace",
      "name": "@deepseek-ai/dsh-workspace",
      "group": "G50",
      "group_name": "工作区",
      "layer": 3,
      "implementation": "以 Cordis Service 类 WorkspaceRegistry（static inject=['storageDomain','sessionPersistence']，src/index.ts:170-194）实现工作区实体注册表，启动时用 ctx.storageDomain.open 打开 name=workspace、version=2 的域规格，取得 workspaces 表与全局态（src/index.ts:198-202，src/spec.ts:76-84）。初始化先做 pendingMutation 恢复与 stored state 一致性校验，再按 initialized 标记决定是否用 sessionPersistence 的历史 header 一次性 bootstrap 出工作区记录与顺序（src/index.ts:204-218、src/index.ts:634-740、src/index.ts:748-783）。所有写操作串行挂在单条 operationTail 队列上（src/index.ts:886-895），每条记录由私有 WorkspaceEntity 承载，其 sessionIds 是把持久账户按「id 在账户中且 header 的 canonical cwd 等于工作区 path」同步过滤后的投影（src/entity.ts:101-103），写路径统一走 mutate→table.update 并盖章 updatedAt（src/entity.ts:202-220）。除 CRUD/排序/默认工作区外还维护注册表级归档集与置顶集，归档前以 waterfall 事件 workspace/session-activity 询问各 provider 会话是否活跃，拒绝则报 WorkspaceActiveSessionError（src/index.ts:363-385），带 stopActivity 时归档落盘后再 parallel 触发 workspace/session-stop 请求停止（src/index.ts:479-491）。路径唯一性由 realpathNormalize 统一规范化（src/paths.ts:52-57），另有 ./invariant 伴生插件订阅 domain/changed 断言实体缓存与持久表不漂移（src/invariant.ts:27-49）。",
      "provides": [
        "ctx.workspaceRegistry (持久化工作区实体注册表：工作区记录增删改查、稳定显示顺序、默认工作区初始化、会话归档/置顶集合、按 canonical cwd 校验的会话归属与顺序)",
        "事件 workspace/session-activity (waterfall；归档前询问各 provider 该会话是否仍活跃，决定归档准入)",
        "事件 workspace/session-stop (parallel；归档落盘后要求各 provider 停止该会话运行中的工作)",
        "storage 域规格 workspace v2 (workspaces 表 + bootstrap/顺序全局态，经 ctx.storageDomain 打开)"
      ],
      "path": "packages/workspace/workspace",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-agent",
      "name": "@deepseek-ai/dsh-agent",
      "group": "G09",
      "group_name": "核心运行时",
      "layer": 4,
      "implementation": "Agent 接口与注册表实现：`AgentRegistry`（服务名 `agents`）用 `Map<SessionId, AgentEntry>` 维护存活 agent，并以 `AsyncLocalStorage` 承载进程内 initiator scope，提供 `create/resume`（委派给已注册的 `AgentFactory`）、`register/enter/announce/get/list/roots` 等生命周期方法 (src/index.ts:245-283,391-416,437-559)。构造时经 `ctx.inject(['typert'])` 注册 agent 的 typert lookup/host context，并安装 workspace 归档准入监听 (src/index.ts:257-270,282)。dispatch.ts 提供 `agentCarrier/agentEvents/emitAgentEvent/assembleContextFor`，把 agent 主体与其 scope carrier 融合，保证派发作用域键与 payload.agent 不漂移 (src/dispatch.ts:94-176)。model-selection.ts 把可变模型选择耦合到 `system-prompt/assemble` 与 `agent/request` 瀑布并在路由变化时追加持久化通知 (src/model-selection.ts:81-131)；consumed-work.ts 单遍折叠会话日志判定已消费工作 (src/consumed-work.ts:69-108)；invariant.ts 校验 `agent/status` 无空转 (src/invariant.ts:15-24)。",
      "provides": [
        "ctx.agents (Agent 注册表服务：create/resume/register/enter/announce/get/list/roots 与 initiator scope)",
        "Agent 事件词表 (agent/created、agent/disposed、agent/status、agent/inbox/*、agent/pre-step、agent/request、agent/request-error、agent/assistant-stream、agent/turn-stopping、agent/error)",
        "agentEvents/agentCarrier/emitAgentEvent/assembleContextFor 融合作用域派发助手",
        "installModelSelection (agent 级模型选择与请求路由耦合)",
        "foldConsumedWork (会话日志的已消费工作折叠)",
        "Agent/Inbox/AgentOptions/TurnBoundaryProjection 等公共类型与声明合并"
      ],
      "path": "packages/core/agent",
      "source_layer": "L1",
      "assembled_in": [
        "base",
        "sdk-minimal"
      ]
    },
    {
      "id": "dsh-api-job-controller",
      "name": "@deepseek-ai/dsh-api-job-controller",
      "group": "G02",
      "group_name": "API 网关与控制器",
      "layer": 4,
      "implementation": "JobController 继承 TypertRemoteService，以 namespace 'job' 注册并注入 jobs/typert (src/index.ts:43-65)。list 与 follow 两个 stream 方法分别委托 streamJobRows / observeJobOutput，把 ctx.jobs 的可见任务集合与单个任务的保留输出投影成帧 (src/index.ts:75-96)。两个生成器都在首次读取前订阅 registry.events，先产出 opened/rows 基线，之后在唤醒后按 flushMs 合并突发；输出按 maxFrameBytes 软预算切分，任务到终态或收到 removed 时产出 status 后收尾 (src/observe.ts:41-93, src/rows.ts:26-52)。kill 先以 sessionId 做所有权查询再同步调用 jobs.kill，未知/越权统一映射为 job/not-found (src/index.ts:109-127)。",
      "provides": [
        "ctx.remote.job（job 命名空间流式 Remote：list 任务名单、follow 单任务输出与终态、kill 人工终止）",
        "jobController（Host 侧后台任务观测服务，含 observeFlushMs / observeMaxFrameBytes 配置）"
      ],
      "path": "packages/api/job-controller",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-api-workspace-controller",
      "name": "@deepseek-ai/dsh-api-workspace-controller",
      "group": "G02",
      "group_name": "API 网关与控制器",
      "layer": 4,
      "implementation": "WorkspaceController 继承 TypertRemoteService，以 namespace 'workspace' 注册，注入 typert/workspaceRegistry，并用 WorkspaceCommands/WorkspaceFeed 承载命令与状态流，同时把 DirectoryPickerController 作为子插件挂载 (src/index.ts:51-78)。命令方法（create/rename/delete/insertBefore/insertSessionBefore/archiveSession/unarchiveSession/pinSession/unpinSession）先串行化再调用 workspaceRegistry，并把注册表异常映射为 workspace/* / session/* Remote 失败 (src/commands.ts:45-227, 242-248)。follow 先产 baseline 再订阅 domain/changed，按 workspace 域变更派发 upsert/order/archived/pinned/remove 增量 (src/feed.ts:85-139)。DirectoryPickerController 依 directoryPicker.capability() 门控分发 pick/list/createDirectory，并把 seam 错误投影为 directory-picker/* (src/directory-picker.ts:54-119, 127-170)。",
      "provides": [
        "ctx.remote.workspace（workspace 命名空间：create/initializeDefault/rename/delete/insertBefore/insertSessionBefore/archiveSession/unarchiveSession/pinSession/unpinSession/follow）",
        "ctx.remote.directoryPicker（目录选择/浏览：pick/list/createDirectory）"
      ],
      "path": "packages/api/workspace-controller",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-command-compact",
      "name": "@deepseek-ai/dsh-command-compact",
      "group": "G07",
      "group_name": "上下文压缩",
      "layer": 4,
      "implementation": "面向人类的 `/compact` 命令插件：注入 commands 与 compaction 两个 seam，在 apply() 中通过 ctx.commands.register 注册无参数命令，把调用转发给 ctx.compaction.compactNow(agent, signal, commandId)（src/index.ts:101-106、src/index.ts:67）。执行结果按 ManualCompactionError 的封闭错误码（busy/cancelled/changed/summary/commit/persistence）映射为简洁的人类可读文案（src/index.ts:24-56）。使用 ctx.effect 管理生命周期，注册前先 yield 一个 drain 回调等待在途 handler 结算，避免拆卸期新调用进入（src/index.ts:97-107）。",
      "provides": [],
      "path": "packages/compaction/command-compact",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-command-feedback",
      "name": "@deepseek-ai/dsh-command-feedback",
      "group": "G15",
      "group_name": "反馈通道",
      "layer": 4,
      "implementation": "提供与 UI 触发解耦的会话反馈记录链路：recordFeedback() 以 session.append('feedback/record', …) 写入单条权威的 log-only 事件（去除首尾空白、空文本记为缺省）(src/index.ts:58-64)。SessionFeedbackService 作为 Host Remote 暴露 ctx.sessionFeedback.record，按 sessionId 取活会话或返回 session-not-found (src/index.ts:85-110)；apply() 同时注册全局 /feedback 斜杠命令并在无文本时返回用法错误 (src/index.ts:73-82, 117-126)。",
      "provides": [
        "ctx.sessionFeedback (Host Remote，供产品面写入会话级反馈)",
        "feedback/record 会话事件与 /feedback 斜杠命令",
        "FEEDBACK_CATEGORIES 反馈类别常量"
      ],
      "path": "packages/feedback/command-feedback",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-sandbox-policy",
      "name": "@deepseek-ai/dsh-sandbox-policy",
      "group": "G30",
      "group_name": "沙箱",
      "layer": 4,
      "implementation": "SandboxPolicyService（ctx.sandboxPolicy）是文件沙箱策略的单一归属：持有部署默认 mode 与 fallback workspaceRoot，并按 (显式 override > 会话最近 sandbox/mode 事件 > 部署默认) 结合 session.cwd 解析出每次调用的 SandboxExecutionPolicy（src/index.ts:110-181）。它把 sandboxMode 折叠注册为 session-projection 单元（src/index.ts:133-139），并在每次请求前经 systemPrompt.context 注入策略文本（src/index.ts:141-152）。session-mode.ts 定义 log-only 的 sandbox/mode 事件与其唯一写路径 setSandboxMode（src/session-mode.ts:33-54）。",
      "provides": [
        "ctx.sandboxPolicy (文件沙箱模式与 workspace 根的统一策略解析与 per-session override 折叠)"
      ],
      "path": "packages/sandbox/sandbox-policy",
      "source_layer": "L1",
      "assembled_in": [
        "base",
        "sdk-minimal"
      ]
    },
    {
      "id": "dsh-session-projection-cache",
      "name": "@deepseek-ai/dsh-session-projection-cache",
      "group": "G33",
      "group_name": "会话核心",
      "layer": 4,
      "implementation": "SessionProjectionCache（ctx.sessionProjectionCache）在 session_projcache 域持久化每个投影单元的状态检查点：init 打开域并装写回路径（src/index.ts:104-122），在 session/created、turn/end、session/disposed 三个强制点以及计数/间隔节流触发下做 fail-soft 写（src/index.ts:311-375）。读面提供 cachedSnapshot/cachedPredecessorTitle/hydratePrepared/coldSnapshot，只有 (header 生命周期身份 + 继承 cut + 行 ver) 全部匹配才采信缓存行（src/index.ts:136-306）。spec.ts 定义 per-record 布局的域与 (identity, rows) 记录 schema（src/spec.ts:101-108）。",
      "provides": [
        "ctx.sessionProjectionCache (投影单元状态的持久化检查点与冷/热读加速)"
      ],
      "path": "packages/session/session-projection-cache",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-session-stats",
      "name": "@deepseek-ai/dsh-session-stats",
      "group": "G33",
      "group_name": "会话核心",
      "layer": 4,
      "implementation": "以函数插件向 ctx.sessionProjections 注册 sessionStats 单元（src/index.ts:27-29）。该单元纯同步折叠 step/start、assistant/attempt、assistant/message、tool/call、tool/result、step/end、turn/end，产出整日志的 turns/steps 计数与 llm/tool/ttft/decode 墙钟时间（src/projection.ts:113-212）；以 step/end 而非 assistant/message 计步以正确覆盖失败/取消/超限步骤。stateVersion=1，wire 视图仅暴露会话总计（src/projection.ts:199-211）。",
      "provides": [
        "sessionStats 投影单元（经 ctx.sessionProjections 交付整会话计数与墙钟时间）"
      ],
      "path": "packages/session/session-stats",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-session-title",
      "name": "@deepseek-ai/dsh-session-title",
      "group": "G33",
      "group_name": "会话核心",
      "layer": 4,
      "implementation": "SessionTitleService（ctx.sessionTitle）以会话日志为真相源维护标题：get/foldSessionTitle 从 session/title 事件折叠最新标题（src/index.ts:282-388），rename() 追加 user 来源标题从而钉住并抑制自动生成（src/index.ts:401-421）。它注册 title/titleInput 两个投影单元（src/index.ts:263-354），监听 user/message、request/header、llm/stream、session/disposed，按 provider 的 first-prompt/all-prompts 节奏在校验主请求路由后调度生成，并提供同步确定性 fallback（src/index.ts:356-378,498-523,787-832）。",
      "provides": [
        "ctx.sessionTitle (日志驱动的会话标题服务、provider 契约与确定性 fallback)"
      ],
      "path": "packages/session/session-title",
      "source_layer": "L1",
      "assembled_in": [
        "base",
        "sdk-minimal"
      ]
    },
    {
      "id": "dsh-session-turn-outline",
      "name": "@deepseek-ai/dsh-session-turn-outline",
      "group": "G33",
      "group_name": "会话核心",
      "layer": 4,
      "implementation": "以函数插件向 ctx.sessionProjections 注册 turnOutline 单元（src/index.ts:27-29）。该单元纯同步折叠 turn/start、user/message、assistant/message、turn/end，产出整日志轮次大纲（turn 号、turn/start seq、有界 prompt/response 预览），使客户端可枚举所有轮次并按精确 seq 定位历史分页（src/projection.ts:85-137）。stateVersion=2，仅边界/提示/回复三处改变 turns 引用以压低 change feed（src/projection.ts:90-132）。",
      "provides": [
        "turnOutline 投影单元（经 ctx.sessionProjections 交付整会话轮次大纲）"
      ],
      "path": "packages/session/session-turn-outline",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-settings",
      "name": "@deepseek-ai/dsh-settings",
      "group": "G35",
      "group_name": "设置",
      "layer": 4,
      "implementation": "提供 ctx.settings（SettingsForms 服务），把已激活插件条目的 schemastery Config 投影为可编辑表单并按 namespace 读写 profile patch (src/index.ts:222-429)。describe() 计算 value/base/user 三层、维护 revision 并在变化时 emit settings/document-updated，update/replace/mutate 以 JSON 净化 + 分层合并写回，revision 不符抛 SettingsConflictError (src/index.ts:302-423)。redact.ts 按 schema 的 role('secret') 结构式剥离敏感字段并记录已设置槽位，schema.ts 负责 plainConfig/projectForm/volatileForm 投影 (src/redact.ts:106-116, src/schema.ts:10-79)。启动时另把遗留 settings.yaml 一次性导入当前 profile (src/index.ts:241-258)。",
      "provides": [
        "ctx.settings (SettingsForms：插件 Config schema → 可编辑表单投影与 profile patch 写回，含 secret 脱敏与 revision 冲突检测)"
      ],
      "path": "packages/settings/settings",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-token-meter",
      "name": "@deepseek-ai/dsh-token-meter",
      "group": "G23",
      "group_name": "LLM 适配",
      "layer": 4,
      "implementation": "提供 ctx.tokenMeter 服务，以 replay-aware 方式从持久 session log 计算请求压力与 surface (src/index.ts:101-123, 146-191, 219-240)。注册三个 session projection：tokenUsage 累计 provider usage、contextPressure 以 provider 采样叠加 O(1) shadow-price surface fold 推算占用、contextBreakdown 启发式分解 system/tools/message (src/usage-projection.ts:117-150, 173-217, src/breakdown-projection.ts:48-81)。estimate.ts 以固定密度启发式统一给消息/工具定价 (src/estimate.ts:88-102)，route-pricing.ts 按路由的图片/文件表示重定价 surface 并校验定价对齐 (src/route-pricing.ts:32-75)，turn-usage.ts 折叠一个完整 Turn 的各次尝试得出精确 token 账目 (src/turn-usage.ts:178-273)。",
      "provides": [
        "ctx.tokenMeter (从持久 session log 回放测量的 token 计量服务，供 compaction 与上下文压力消费)",
        "tokenUsage / contextPressure / contextBreakdown 三个 session projection 供 UI 与压缩读取"
      ],
      "path": "packages/llm/token-meter",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-tools",
      "name": "@deepseek-ai/dsh-tools",
      "group": "G09",
      "group_name": "核心运行时",
      "layer": 4,
      "implementation": "工具注册表与执行流水线：`ToolRuntime`（服务名 `tools`）用 `ScopedLayers` 维护作用域化工具注册与呈现模式，构造时向 systemPrompt 注册 tool-schema provider，并在非 native 默认模式下注册 PTC 折叠与 SDK section (src/index.ts:807-859)。`register()` 以 ctx.effect 绑定注册所有权 (src/index.ts:1063-1086)；呈现模式由 `presentAs` 按作用域声明并遮蔽全局默认 (src/index.ts:974-999)；执行走 pre/guard/around/post/result 多段 waterfall (src/index.ts:1325,1505,1605,1782)。ptc.ts 实现 `run_code` 传输，经 `ctx.ptcRuntime` 与 `dsh-sandbox` 执行嵌套子调用，审批经 `ctx.get('approval')` 可选消费 (src/index.ts:947,1731; src/ptc.ts:19-22)。schema/json-schema/ts-types/py-types 提供工具参数校验与 TS/Python SDK 渲染；invariant.ts 校验会话内工具调用关系 (src/invariant.ts:77-129)。",
      "provides": [
        "ctx.tools (ToolRuntime 工具注册表与执行流水线：register/presentAs/modeFor/调用调度)",
        "tools/change 事件",
        "defineTool/JSON Schema 校验与 ToolDefinition/ToolPresentationMode/ToolCallView 等类型",
        "TS/Python 工具 SDK 渲染 (renderToolsSdk/renderToolsSdkPy/jsonSchemaToTs/jsonSchemaToPy)",
        "PTC run_code 工具与沙箱升级审批集成"
      ],
      "path": "packages/core/tools",
      "source_layer": "L1",
      "assembled_in": [
        "base",
        "sdk-minimal"
      ]
    },
    {
      "id": "dsh-agent-default-model",
      "name": "@deepseek-ai/dsh-agent-default-model",
      "group": "G09",
      "group_name": "核心运行时",
      "layer": 5,
      "implementation": "实现 `AgentDefaultModelConfig`（服务名 `agentDefaultModel`），为未显式指定模型的 Agent 提供默认模型选择 (src/index.ts:48-95)。构造时经 `ctx.inject(['settings'], ...)` 关闭 settings 自动模式，并把 provider/model/reasoningEffort 三个 volatile Config 字段投影为 `ModelSelection` (src/index.ts:34-42,57-61)。`currentSelection()` 读取当前默认选择 (src/index.ts:67-73)；`saveSelection()` 在部署装配了 configEditor 时按提交顺序串行写入 profile，无 editor 时保留组合项 (src/index.ts:82-94)。",
      "provides": [
        "ctx.agentDefaultModel (默认模型选择服务：currentSelection 读取与 saveSelection 持久化)",
        "AgentDefaultModelConfig 服务类与 Config 字段 (provider/model/reasoningEffort)"
      ],
      "path": "packages/core/agent-default-model",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-agent-instructions",
      "name": "@deepseek-ai/dsh-agent-instructions",
      "group": "G08",
      "group_name": "上下文注入",
      "layer": 5,
      "implementation": "AGENTS.md 兼容的工作区指令加载器：启动/恢复基线在首个请求前进入持久上下文，成功触及文件的 fs 工具会把嵌套/变更/移除的指令合入 inbox（src/index.ts:84-225）。通过 ctx.fs 逐目录探测候选指令文件、按字节预算渲染、按 trimmed-content 摘要去重，并把变更状态协商进 sessionProjections 的 turnBoundary 判定（src/index.ts:286-294、src/state.ts:247-433）。监听 session/event(step/end)、agent/pre-step、tools/result 以在正确提交边界刷新指令上下文（src/index.ts:307、src/index.ts:315、src/index.ts:343）。仅在 ctx.fs 存在时生效，无 provider 时退化为 no-op（src/index.ts:119-120）。",
      "provides": [],
      "path": "packages/context/agent-instructions",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-agent-loop",
      "name": "@deepseek-ai/dsh-agent-loop",
      "group": "G09",
      "group_name": "核心运行时",
      "layer": 5,
      "implementation": "具体 agent 循环插件：`AgentLoop`（服务名 `agentLoop`）继承 Service 并实现 `AgentFactory`，构造时加载 declarative agents、注册 turnBoundary 与 inbox 两个会话投影、把自身注册为 `ctx.agents` 工厂，并注册 provider/model/cwd 三个 system-prompt 变量 (src/index.ts:330-404)。`create/createAgent/resume/resumeWith` 经 `SessionPreparation` 与持久化写句柄在单一事务内构造 session 与 `ReactLoopAgent`，`prepare()` 建立 memo 化反向拆卸，setup 后 `publish()` 进入两个注册表并 announce (src/index.ts:479-640,714-780,807-890)。`ReactLoopAgent` 以 Phase 状态机驱动 turn/step 边界，所有请求由会话日志派生 (src/agent.ts:98-160)；inbox.ts 提供 inbox 投影与命令门面 (src/inbox.ts:27-74)；tool-calls.ts/assistant-stream.ts/runtime-context.ts 处理工具调用调度、流式发布与运行时上下文投影；invariant.ts 校验 loop 构造的 llm 请求可从会话日志重建 (src/invariant.ts:19-57)。",
      "provides": [
        "ctx.agentLoop (具体 Agent 工厂与驱动器服务，实现 AgentFactory)",
        "turnBoundary 会话投影定义",
        "inbox 会话投影定义",
        "agent-loop/config-start-failed 事件",
        "ReactLoopAgent/ReactLoopInbox 驱动实现与 DEFAULT_MAX_PARALLEL_TOOL_CALLS"
      ],
      "path": "packages/core/agent-loop",
      "source_layer": "L1",
      "assembled_in": [
        "base",
        "sdk-minimal"
      ]
    },
    {
      "id": "dsh-agent-preset-registry",
      "name": "@deepseek-ai/dsh-agent-preset-registry",
      "group": "G27",
      "group_name": "Agent 预设",
      "layer": 5,
      "implementation": "AgentPresetRegistry 为 TypertRemoteService，构造时注册 agentPreset 投影并监听 session/event 转发 agent-preset/selected（src/index.ts:63-71、src/session.ts:35-44）。register() 立即激活定义，activate() 在独立 scope 内用 mountPreset 挂载 Loader 子树，失败则记录 broken 并 dispose scope（src/index.ts:80-118、src/mount.ts:258-272）。mount()/bind() 以 bindScopeParent 把 Agent scope 绑到保留的 standing revision，用引用计数 collect 回收，composeFrom 让子 Agent 继承父的精确版次（src/index.ts:208-284）。auditRows 与 leakedServices 审计行可用性与根域服务泄漏（src/mount.ts:86-212）；invariant.ts 在 internal/service 与 system-prompt/assemble 复核隔离与绑定（src/invariant.ts:33-59）。",
      "provides": [
        "ctx.agentPresets (Agent 预设注册表：激活/绑定/选择与 composition 读取，src/index.ts:51-365)",
        "sessionProjections `agentPreset` 投影（会话实际运行的预设定，src/index.ts:66、src/session.ts:35-44）",
        "Remote 方法 list/read/select（客户端花名册读取与选择，src/index.ts:170-206、:318-334）"
      ],
      "path": "packages/preset/agent-preset-registry",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-agent-tool-presentation",
      "name": "@deepseek-ai/dsh-agent-tool-presentation",
      "group": "G09",
      "group_name": "核心运行时",
      "layer": 5,
      "implementation": "函数插件（named export `name`/`inject`/`Config`/`apply`，无默认导出）。`apply` 依据 Config 的 mode 在挂载 scope 上调用 `ctx.tools.presentAs('native')`；对 `ptc`/`both` 模式先 `ctx.inject(['ptcRuntime'], ...)` 等待 PTC 运行时再声明呈现，未装配运行时的行在挂载期显式失败 (src/index.ts:59-72)。该行按组合（preset 常驻 scope）而非按会话声明工具呈现模式 (src/index.ts:1-19,27-35)。",
      "provides": [
        "无 ctx 服务；作为 preset 行声明挂载 scope 的工具呈现模式 (native/ptc/both)"
      ],
      "path": "packages/core/agent-tool-presentation",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-api-account-controller",
      "name": "@deepseek-ai/dsh-api-account-controller",
      "group": "G02",
      "group_name": "API 网关与控制器",
      "layer": 5,
      "implementation": "AccountController 继承 TypertRemoteService，构造时以 namespace 'account' 注册并静态注入 deepseekAccount/agents (src/index.ts:10-13)。它把账号 seam 的读写几乎原样暴露为 @Remote 方法：getState/getProfile/getBalance/getUnnotifiedBonuses/ackBonusNotified/startSignIn/cancelSignIn/signOut (src/index.ts:18-90)，并有 hasRunningAccountTasks 经 ctx.agents.list() 过滤正在运行的账号任务 (src/index.ts:80-83)。两个 @Remote({mode:'stream'}) 方法提供重连安全状态流：watch 直通 deepseekAccount.watch，watchExpiry 订阅 deepseek-account/session-expired 事件并用 pending 计数去重产出 (src/index.ts:96-119)。",
      "provides": [
        "ctx.remote.account（account 命名空间 Remote：账号状态/资料/余额/奖励读取与确认、浏览器登录启停、登出、运行任务探测、状态与凭证过期流）"
      ],
      "path": "packages/api/account-controller",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-api-settings-controller",
      "name": "@deepseek-ai/dsh-api-settings-controller",
      "group": "G02",
      "group_name": "API 网关与控制器",
      "layer": 5,
      "implementation": "SettingsController 继承 TypertRemoteService，以 namespace 'settings' 注册，并在构造时把 CredentialsController 作为子插件挂载，两个命名空间即使缺少 provider 也保持注册以便返回可操作的缺失诊断 (src/index.ts:85-89)。describe 以 redactSecrets 读取全部命名空间并逐字段投影成线视图 (src/index.ts:48-60, 97-105)；update/replace/mutate 统一走 write()，串行调用 settings seam 的合并/替换/路径操作，并把 SETTINGS_CONFLICT 分类为 settings/conflict、其余 refusal 归为 settings/rejected (src/index.ts:187-213, 249-268)。openSettingsDocument 先 prepareDocument 再交原生文本编辑器，并把取消映射为 gateway/cancelled (src/index.ts:166-185)。CredentialsController 另以 namespace 'credentials' 暴露批量 describe/set/unset，且任何读路径都不返回密钥值 (src/credentials.ts:67-118)。",
      "provides": [
        "ctx.remote.settings（settings 命名空间：describe/update/replace/mutate/openSettingsDocument，读路径强制 redactSecrets）",
        "ctx.remote.credentials（credentials 命名空间：describe/set/unset，密钥单向写入不回读）"
      ],
      "path": "packages/api/settings-controller",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-api-terminal-controller",
      "name": "@deepseek-ai/dsh-api-terminal-controller",
      "group": "G02",
      "group_name": "API 网关与控制器",
      "layer": 5,
      "implementation": "TerminalController 继承 TypertRemoteService，以 namespace 'terminal' 注册并注入 subprocess/sandboxPolicy/typert，构造时登记进程清理 effect (src/index.ts:75-109)。它按 Session 身份维护 OwnedSession（terminals/pending/allocations），create 幂等地经 subprocess.spawnTerminal 分配用户 shell 并用 BrowserTerminal 包装 (src/index.ts:157-188, 339-375)。BrowserTerminal 用 headless xterm + SerializeAddon 维护有界屏幕，follow 先送 snapshot 再推有序 output/state，write/resize 由唯一 controller attachment 校验后串行执行 (src/terminal.ts:77-130, 167-180)。其余 @Remote 方法提供 environment/shells/list/retain/rename/close，并施加尺寸、输入字节、终端数量等配置上限 (src/index.ts:117-284)。",
      "provides": [
        "ctx.remote.terminal（terminal 命名空间：environment/shells/list/create/retain/follow/write/resize/rename/close，Session 级用户终端）"
      ],
      "path": "packages/api/terminal-controller",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-api-workspace-files",
      "name": "@deepseek-ai/dsh-api-workspace-files",
      "group": "G02",
      "group_name": "API 网关与控制器",
      "layer": 5,
      "implementation": "WorkspaceFiles 继承 TypertRemoteService 并注册 workspaceFiles 服务，注入 fs/sandboxPolicy/sessions/typert，并在构造时注册 workspaceFileScope lookup：把 SessionId 解析为 workspaceRoot（活会话头或持久化头，缺 cwd 回退 sandboxPolicy.workspaceRoot）(src/index.ts:199-222)。read 以 fs.streamText 流式切页（不整文件读入、超 maxBytes 拒绝、页内含 NUL 判为二进制）(src/index.ts:113-160, 232-246)；readBytes/stat 走 fs.readByteRange/readBytes/stat 并施加 maxFileBytes 上限 (src/index.ts:256-293)；list 在 lstat 后经 confine 校验目录位于工作区内再 listDir (src/index.ts:302-328)。changes 流由 WorkspaceChangeFeed 订阅 fs/observed、按目标 watch，初始化后先产 ready 再产 change 帧 (src/changes.ts:39-109)；客户端另提供 file 协议的 ResourceProvider (src/client/provider.ts:46-112)。",
      "provides": [
        "ctx.remote.workspaceFiles（workspaceFiles 命名空间：read/readBytes/stat/list/changes，只读文件预览与工作区目录观测）",
        "workspaceFileScope Typert lookup 与客户端 file 协议 ResourceProvider"
      ],
      "path": "packages/api/workspace-files",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-bash-sandbox",
      "name": "@deepseek-ai/dsh-bash-sandbox",
      "group": "G36",
      "group_name": "Shell 执行",
      "layer": 5,
      "implementation": "继承 LocalBashExecutor，作为 ctx.shell 的沙箱化 bash 执行器：resolve() 为每次调用盖上完整 sandboxPolicy（缺省取 ctx.sandboxPolicy.resolve()）(src/index.ts:45-87)。execute() 对非 danger-full-access 命令调用 ctx.sandbox.confine(['bash','-c',command]) 得到包装 argv 再交回本地执行路径，并按 per-process facts 分类 denial/runner 失败——runner 崩溃抛 SandboxUnavailableError，其余 provider 拒绝保留本地语义 (src/index.ts:89-133, 154-189)。helpers.ts 复用 dsh-sandbox 的签名与 runner 失败分类 (src/helpers.ts:12-14)。",
      "provides": [
        "ctx.shell (沙箱约束版 bash 执行器，经 ctx.sandbox.confine 包裹命令后执行并上报 enforcement/denial 事实)"
      ],
      "path": "packages/shell/bash-sandbox",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-client-file-upload",
      "name": "@deepseek-ai/dsh-client-file-upload",
      "group": "G05",
      "group_name": "客户端运行时",
      "layer": 5,
      "implementation": "Host 侧 `FileUploads extends TypertRemoteService` 承接待上传文件：`upload` 走 base64 编码路径、`uploadStream` 走原始字节流，均委托 `ctx.attachments` 落盘 (src/index.ts:105-131)，并在 Agent 会话作用域下以 receiptId 暂存，`bindPrompt`/`retirePrompt` 随 prompt 生命周期提交或回滚绑定 (src/index.ts:139-181)。它向 Connection 注册 `POST` 流式路由 `handleFileUploadHttp`，校验 content-type 与 sessionId 后把请求体转成 AsyncIterable (src/index.ts:72-80, src/http-route.ts:22-81)，并通过 `session/event` 观察 user/message 来退役已消费 receipt (src/index.ts:241-254)。",
      "provides": [
        "ctx.fileUploads (Host 侧文件上传存储与 Agent 级暂存 receipt 服务)",
        "上传 HTTP 流式路由 (FILE_UPLOAD_PATH，application/octet-stream)",
        "CommandFileReceiptResolver 注册 (让命令层解析上传 receipt)",
        "ctx.fileUpload (浏览器侧后台上传服务 FileUploadRuntime)"
      ],
      "path": "packages/client/file-upload",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-compaction-image-offload",
      "name": "@deepseek-ai/dsh-compaction-image-offload",
      "group": "G07",
      "group_name": "上下文压缩",
      "layer": 5,
      "implementation": "图像卸载执行器：当具备图像能力的路由以 IMAGE_OFFLOAD_REQUIRED 拒绝请求时，插件通过 offloadOldestImages 选取最旧的保留输入图像并追加一条 image/offload 决策事件（src/index.ts:27-32、src/image-offload.ts:16-45）。注册的 imageOffloadProjection 在重放时把被选中的图像块标记为 offloaded，形成持久化的表面修复而不是花费重试预算（src/projection.ts:40-73、src/project-message.ts:13-35）。同时对压缩摘要失败（compaction/summary-error）走同一卸载恢复路径（src/index.ts:33-40）。",
      "provides": [],
      "path": "packages/compaction/compaction-image-offload",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-compaction-tool-result-pruner",
      "name": "@deepseek-ai/dsh-compaction-tool-result-pruner",
      "group": "G07",
      "group_name": "上下文压缩",
      "layer": 5,
      "implementation": "无模型、可重放的工具结果裁剪服务 ToolResultPruner：按字符预算把超预算的文段替换为 head+marker+tail，按 Unicode 码点切分以免劈开代理对（src/index.ts:83-122、src/index.ts:68-74）。pruneSession 对当前表面的全部 tool/result 节点做一次稳定快照裁剪，并为每个被遮蔽节点先追加一条 compaction/prune 影子价格事件（经 tokenMeter 计价），再追加带 surfaceOp=replace 的替换事件（src/index.ts:136-182）。配置阈值在加载期校验 head+marker+tail ≤ threshold（src/config.ts:36-65）。",
      "provides": [
        "ctx.toolResultPruner (确定性工具结果裁剪服务：按字符预算裁剪并写 compaction/prune 影子价格事件)"
      ],
      "path": "packages/compaction/compaction-tool-result-pruner",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-cordis-host-runner",
      "name": "@deepseek-ai/dsh-cordis-host-runner",
      "group": "G14",
      "group_name": "宿主扩展",
      "layer": 5,
      "implementation": "DynamicCordisRunnerService（继承 TypertRemoteService）实现进程级动态插件注册表与宿主半生命周期：持有不可变包定义、每插件单一活动运行、经人工审批后激活客户端半，并支持 Host/Client 双向调用 (src/index.ts:129-149)。宿主半代码在 node:vm 沙箱中求值，沙箱仅暴露 tagged console、harness.defineTool/registerTool 与 Node API 陷阱（重定向到 ctx.fs/ctx.web/ctx.bash/cordis 定时器）(src/sandbox.ts:101-117)；CordisInspectRegistryService 则提供只读 Inspect provider 注册表与跨页查询路由 (src/inspect-registry.ts:45-69, 37-42)。运行期发出 cordis/request-run、cordis/dynamic-package、cordis/dynamic-retract、cordis/inspect-query(-resolved) 等事件 (src/index.ts:296-1021, src/inspect-registry.ts:153-189)。",
      "provides": [
        "ctx.dynamicCordisRunner (宿主动态插件注册表、宿主半沙箱生命周期与 Host/Client 调用表)",
        "ctx.cordisInspect (宿主 Inspect provider 注册表与跨页查询路由)",
        "事件 cordis/request-run、cordis/request-run-resolved、cordis/dynamic-package、cordis/dynamic-retract、cordis/inspect-query、cordis/inspect-query-resolved"
      ],
      "path": "packages/extensions/cordis-host-runner",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-experimental-browser-use-chrome-devtools-mcp",
      "name": "@deepseek-ai/dsh-experimental-browser-use-chrome-devtools-mcp",
      "group": "G13",
      "group_name": "实验特性",
      "layer": 5,
      "implementation": "函数插件（name/inject/Config/apply）复用 browser-use runtime 的 `mountSessionMcp`，把 pinned 的 Chrome DevTools MCP server 以「每个 live Session 一个进程」方式挂载（src/index.ts:25-41）。launch 模式追加 `--isolated`/`--headless`，attach 模式按 endpoint 形状追加 `--ws-endpoint` 或 `--browser-url`，并禁用 usage statistics；attach 时标记 exclusive（src/index.ts:29-41）。",
      "provides": [],
      "path": "packages/experimental/browser-use-chrome-devtools-mcp",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-experimental-browser-use-playwright-mcp",
      "name": "@deepseek-ai/dsh-experimental-browser-use-playwright-mcp",
      "group": "G13",
      "group_name": "实验特性",
      "layer": 5,
      "implementation": "函数插件复用 browser-use runtime 的 `mountSessionMcp`，把 pinned Playwright MCP server 以 `--browser chromium` 挂到每个 live Session（src/index.ts:26-49）。为避免上游 `PLAYWRIGHT_MCP_*` 环境变量覆盖配置，先把同名变量清空；attach 模式用 `--cdp-endpoint`，launch 模式用 `--isolated`/`--headless`/`--executable-path`（src/index.ts:31-49）。",
      "provides": [],
      "path": "packages/experimental/browser-use-playwright-mcp",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-experimental-tool-agent-team",
      "name": "@deepseek-ai/dsh-experimental-tool-agent-team",
      "group": "G13",
      "group_name": "实验特性",
      "layer": 5,
      "implementation": "为 Agent Teams 在 member 的 Agent scope 内注册整套模型可见工具：spawn_teammate/send_message/list_agents/wait_agent/interrupt_agent 与 team_task_create/list/get/update（src/index.ts:164-391），并注册 `team:policy` systemPrompt 段（src/index.ts:169-173）。`apply()` 对已存在与后续 `agent/created` 的 Agent 用 `ctx.agentTeams.tryMembership` 幂等安装、`agent/disposed` 时卸载（src/index.ts:402-421）。wait_agent 在无 active peer 时短路返回 noProgress 以免空等（src/index.ts:252-274）。",
      "provides": [
        "Agent Teams 模型可见工具集 (spawn/list/send/wait/interrupt + 共享任务 CRUD)",
        "systemPrompt 段 team:policy"
      ],
      "path": "packages/experimental/tool-agent-team",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-file-reference-local",
      "name": "@deepseek-ai/dsh-file-reference-local",
      "group": "G08",
      "group_name": "上下文注入",
      "layer": 5,
      "implementation": "ctx.fileReferences 的本地文件系统实现 LocalFileReferenceService，继承 dsh-file-reference 的服务基类并以 WorkspaceFileSearch 对 agent 工作目录建立可取消/可复用的模糊索引（src/index.ts:44-127、src/search.ts:84-255）。索引只含路径；目录前缀查询走实时列举，裸模糊查询共享一次有界遍历，且失效时旧索引继续应答、重建在后台进行（src/search.ts:114-130、src/search.ts:159-199）。按 agent 生命周期安装/卸载 system-prompt 的 context:file-reference 段落与搜索缓存，并在 tool/result 时使缓存失效（src/index.ts:66-102）。",
      "provides": [
        "ctx.fileReferences (@file 引用的本地文件系统候选发现实现，供 @ 补全)",
        "system-prompt section context:file-reference (@ 引用使用说明段落，仅在 read 工具可用时展示)"
      ],
      "path": "packages/context/file-reference-local",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-fs-sandbox",
      "name": "@deepseek-ai/dsh-fs-sandbox",
      "group": "G16",
      "group_name": "文件系统",
      "layer": 5,
      "implementation": "SandboxedFileSystem 继承 LocalFileSystem，复用其全部文本存储机制，只在两个变更入口加每调用策略围栏：writeText/editText 先经 checkedTarget (src/index.ts:80-109)。checkedTarget 按策略 mode 判定：read-only 抛 FS_SANDBOX_DENIED，workspace-write 立即用 resolve 重规范化路径并要求落在 writableRoots 内（返回该新目标以避免 check-here-write-there），danger-full-access 原样放行 (src/index.ts:122-144)；读操作完全透传。",
      "provides": [
        "ctx.fs (沙箱约束版文件系统实现，加载时替换 fs-local)"
      ],
      "path": "packages/fs/fs-sandbox",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-fs-ssh",
      "name": "@deepseek-ai/dsh-fs-ssh",
      "group": "G39",
      "group_name": "SSH 远程执行",
      "layer": 5,
      "implementation": "以 SshFileSystem 继承 dsh-fs 的 FileSystem seam，把 resolve/stat/lstat/readText/streamText/readBytes/listDir/writeText/editText 等全部文件系统原语转成 ctx.ssh.request('fs.*') 远程调用 (src/index.ts:20-95)。写入与编辑会先经 sandboxPolicy 解析执行策略再随请求下发，并把远端 RemoteOperationError 按错误码映射为本仓 FsError (src/index.ts:82-104)。sandboxMode 直接取 sandboxPolicy 的 defaultMode (src/index.ts:23)。",
      "provides": [
        "ctx.fs (SSH 远程 FileSystem seam 提供者 SshFileSystem，供文件系统消费方使用)"
      ],
      "path": "packages/ssh/fs-ssh",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-goal",
      "name": "@deepseek-ai/dsh-goal",
      "group": "G17",
      "group_name": "目标与计划",
      "layer": 5,
      "implementation": "GoalService 以会话日志为唯一持久源：每次变更把完整快照写成一个 goal/change 会话事件（src/index.ts:609-626），并由 goalProjectionDefinition 严格重放派生当前目标（src/index.ts:146-169）。fold.ts 提供纯函数式解码/校验/折叠，逐操作校验相位转移与修订号恰好加一（src/fold.ts:199-332）。进程本地的 activation（armed/disarmed）单独保存，变更时 emit 'goal/activation-changed'（src/index.ts:496-515）。invariant.ts 以独立增量折叠校验全量目标流的合法性（src/invariant.ts:40-80）。",
      "provides": [
        "ctx.goals (目标域服务 seam：create/edit/pause/resume/complete/block/clear/get/disarm + 远程绑定)",
        "goal 会话投影 ('goal' 投影键，含 seenGoalIds 与失败状态)",
        "goal/change 会话事件类型 (持久化目标变更载荷)",
        "goal/changed 与 goal/activation-changed 事件 (变更通知与进程本地激活边)",
        "goal-invariant 不变量伴随件 (目标流严格重放校验)"
      ],
      "path": "packages/goal/goal",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-hooks-codex",
      "name": "@deepseek-ai/dsh-hooks-codex",
      "group": "G19",
      "group_name": "Hooks 扩展",
      "layer": 5,
      "implementation": "把未改动的 Codex command hooks 桥接到 harness：SessionStart、UserPromptSubmit、PreToolUse/PostToolUse、Stop，仅同步 command 类型、正则匹配、snake_case payload 且 stdin 无尾换行（src/index.ts:119-176, 152）。config.ts 解析 Codex 五事件子集，跳过非 command 与 async hooks，并对非法 matcher 抛 SyntaxError（src/config.ts:43-85）。决策映射只保留阻断路径：工具与生命周期拦截点分别映射为 PreToolDecision/PostToolDecision 与 PreStepDecision（src/index.ts:191-276）。",
      "provides": [
        "Codex hooks 桥 (SessionStart/UserPromptSubmit/Pre+PostToolUse/Stop 到 harness 拦截点的决策映射)"
      ],
      "path": "packages/hooks/hooks-codex",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-jobs-local",
      "name": "@deepseek-ai/dsh-jobs-local",
      "group": "G22",
      "group_name": "作业调度",
      "layer": 5,
      "implementation": "以进程内内存实现 ctx.jobs 后台作业 seam：LocalJobRegistry 继承 JobRegistry 并用 Map 保存每条作业记录，OutputRing 提供 UTF-8 安全的有界输出环形缓冲与绝对偏移非消耗式读取 (src/ring.ts:38-113)，startPump 以有限轮询把作业的 pull 源排入环并在结算后做最终排空 (src/pump.ts:53-106)。JobEventHub 按注册 scope 分层路由注册/输出/进度/结算事件 (src/events.ts:43-93)。start/settle/kill/wait 处理 owner-session 隔离、每 owner 并发上限、首写胜出的结算与 teardown 级联取消 (src/index.ts:206-304, 577-607)。",
      "provides": [
        "ctx.jobs (进程内后台作业注册表实现，落实 dsh-jobs 定义的能力 seam，供 tool-jobs 等消费)",
        "ctx.jobs.events 事件流 (jobs.events.subscribe 按 scope/owner 过滤的 registered/output/progress/settled/removed 事件)"
      ],
      "path": "packages/jobs/jobs-local",
      "source_layer": "L1",
      "assembled_in": [
        "base",
        "sdk-minimal"
      ]
    },
    {
      "id": "dsh-llm-retry",
      "name": "@deepseek-ai/dsh-llm-retry",
      "group": "G23",
      "group_name": "LLM 适配",
      "layer": 5,
      "implementation": "在 agent loop 的 agent/request-error 恢复扩展点上实现按 provider 路由的模型请求重试：按 ResolvedRetryPolicy 的 normal/always 模式与可重试错误码判定是否重试，计算指数退避加抖动并做可取消等待 (src/index.ts:194-241, 59-64)。每次调度先 append 持久的 llm/retry 事件、等待成功后再记 llm/retry-started，并把每 provider/policy 的重试计数保存在 sessionProjections 的 llmRetry 状态中 (src/index.ts:125-138, 188-191)。invariant.ts 的 companion 校验这些持久记录与当前打开的 turn/step、路由 provider 与策略链一致 (src/invariant.ts:45-146)。",
      "provides": [
        "agent/request-error 恢复策略执行器 (按 provider 路由的退避重试，normal/always 两种模式)",
        "llm/retry 与 llm/retry-started 持久会话事件，以及 llmRetry session projection 状态"
      ],
      "path": "packages/llm/llm-retry",
      "source_layer": "L1",
      "assembled_in": [
        "base",
        "sdk-minimal"
      ]
    },
    {
      "id": "dsh-mcp-resources",
      "name": "@deepseek-ai/dsh-mcp-resources",
      "group": "G25",
      "group_name": "MCP 协议",
      "layer": 5,
      "implementation": "McpResourceRuntime 继承 Service 并声明 ctx.mcpResources，以 ScopedLayers/NamedEntries 按作用域存放各 MCP 连接的资源 provider；某作用域首个 provider 注册时挂载三条共享工具，末个移除时同步卸载（src/index.ts:36-119）。request() 先按 exec.agent 的可视作用域解析目标 server，找不到即报错，再把操作委托给 provider（src/index.ts:122-126）。tools.ts 定义 list_mcp_resources、list_mcp_resource_templates、read_mcp_resource 三工具并适配模型参数（src/tools.ts:31-63）；render.ts 以 JSON replacer 把 blob 二进制替换为描述文本，避免其进入模型历史（src/render.ts:16-23）。",
      "provides": [
        "ctx.mcpResources (作用域化 MCP 资源运行时，含三条 list/read 资源工具，src/index.ts:47-127)",
        "systemPrompt `mcp-resource-servers` 段（列出当前作用域可用资源服务器名，src/index.ts:59-71）"
      ],
      "path": "packages/mcp/mcp-resources",
      "source_layer": "L1",
      "assembled_in": [
        "base",
        "sdk-minimal"
      ]
    },
    {
      "id": "dsh-message-feedback",
      "name": "@deepseek-ai/dsh-message-feedback",
      "group": "G15",
      "group_name": "反馈通道",
      "layer": 5,
      "implementation": "把「已定稿助手消息」的评分/备注写入会话日志：MessageFeedbackService 暴露 Remote list/put/delete (src/index.ts:154-218)，以 per-session 串行队列在冷写路径上打开 sessionPersistence 句柄、读-比-写并广播 feedback/committed (src/index.ts:261-280)；put 前先校验目标消息确为 assistant/message 且版本匹配，未变则保留版本且不追加事件 (src/index.ts:170-185)。活会话路径直接追加并 flush 后再校验持久化前缀一致 (src/index.ts:231-259)。",
      "provides": [
        "ctx.messageFeedback (Host Remote：消息级评分与备注的 list/put/delete)",
        "feedback/committed 事件（冷路径持久化提交后广播）"
      ],
      "path": "packages/feedback/message-feedback",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-permission-presets",
      "name": "@deepseek-ai/dsh-permission-presets",
      "group": "G21",
      "group_name": "交互命令",
      "layer": 5,
      "implementation": "实现 ctx.permissionPresets 服务：以预设名→(sandbox 模式, approval 策略) 表把用户选择写穿到各自的规范 setter（src/index.ts:398-418）。注册 permissions Session 投影以折叠三个整值 knob 事件并派生当前预设（custom 兜底）（src/index.ts:237-244、348-361），/permission 命令是 Web 客户端的唯一写路径（src/index.ts:255-276）。会话创建时 pinInitialPermission 补齐缺失权限事实（src/index.ts:428-456），并支持 Auto 评审集成的 registerAuto 同步准入（src/index.ts:307-317）。",
      "provides": [
        "ctx.permissionPresets (权限预设服务：sandbox/approval 绑定切换 + permissions 投影 + /permission 命令，src/index.ts:180-479)"
      ],
      "path": "packages/interaction/permission-presets",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-ptc-runtime-node",
      "name": "@deepseek-ai/dsh-ptc-runtime-node",
      "group": "G28",
      "group_name": "代码执行运行时",
      "layer": 5,
      "implementation": "NodePtcRuntime 继承 PtcRuntime（注册 ctx.ptcRuntime），resolve() 解析 cwd 与超时预算并做上限夹取（src/index.ts:108-119），run()/execute() 用 stripTypeScriptTypes 剥离 TS 后在受限子进程中执行程序：经 ctx.sandbox.confine 包装 argv、经 ctx.subprocess.spawn 启动、经 JsonChannel 长度前缀控制帧做 boot/日志/绑定调用/完成握手，并由 OutputLedger 做合并字节上限（src/index.ts:126-354）。宿主绑定名先经 validateBindings 校验、去重并拒绝保留名（src/bindings.ts:10-51），控制帧的损失 JSON 快照与编解码在 json-wire.ts（src/json-wire.ts:150-419）与 channel.ts（src/channel.ts:16-140）。启动 bootstrap 参数由 launch.ts 依 dsh-fs 映射到执行世界（src/launch.ts:21-38），子进程入口 process-entry.ts 走 dsh-subprocess/control（src/process-entry.ts:2-5）。",
      "provides": [
        "ctx.ptcRuntime (PTC 代码执行运行时 seam 的 Node 进程实现)"
      ],
      "path": "packages/ptc-runtime/ptc-runtime-node",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-pwsh-sandbox",
      "name": "@deepseek-ai/dsh-pwsh-sandbox",
      "group": "G36",
      "group_name": "Shell 执行",
      "layer": 5,
      "implementation": "继承 PwshLocalExecutor，作为 ctx.shell 的沙箱化 PowerShell 执行器：resolve() 为每次调用盖上完整 sandboxPolicy (src/index.ts:92-94)。execute() 对受限模式调用 ctx.sandbox.confine(this.argv(spec)) 包装 pwsh argv，并按 confinement facts 分类 denial 与 runner 失败（runner 崩溃抛 SandboxUnavailableError），danger-full-access 直接执行 (src/index.ts:96-140, 161-196)。helpers.ts 镜像 bash-sandbox 的判定方言，含 ENOENT/EACCES 的 runner 归属规则与 fatal/informational 行分类 (src/helpers.ts:42-119)。",
      "provides": [
        "ctx.shell (沙箱约束版 PowerShell 执行器，经 ctx.sandbox.confine 包裹 pwsh 调用并上报 enforcement/denial 事实)"
      ],
      "path": "packages/shell/pwsh-sandbox",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-repeat-tool-reminder",
      "name": "@deepseek-ai/dsh-repeat-tool-reminder",
      "group": "G18",
      "group_name": "工具守卫",
      "layer": 5,
      "implementation": "以 agent 为键维护「同一工具 + 规范化参数」的连续重复链，在 tools/post-execute 瀑布点观察并追加提醒，而从不否决或改写调用（src/index.ts:196-231）。参数先做深键排序再序列化以形成链键（src/index.ts:96-112），命中 thresholds 时首档发柔性提醒、后续档位带截断的参数预览（src/index.ts:206-213, 125-128）。agent/pre-step 检测到真实用户消息即重置该 agent 的链（src/index.ts:236-239）。",
      "provides": [],
      "path": "packages/guard/repeat-tool-reminder",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-sdk-jsonrpc-server",
      "name": "@deepseek-ai/dsh-sdk-jsonrpc-server",
      "group": "G32",
      "group_name": "SDK 与协议",
      "layer": 5,
      "implementation": "以 JsonRpcLineTransport 在 stdio 上服务 JSON-RPC：apply() 构造 HarnessSdkJsonRpcServer 并注册 onRequest，initialize 前等待 loader 结算后才宣告就绪，shutdown 在写出响应后 flush/dispose 完整根 runtime 并 exit 0（src/index.ts:46-101）。stdout 专用于协议帧，server.ts 实现请求分发与 agent/session/attachment/llm/subagent 的会话装配（src/server.ts:8-18），并监听 session/event、agent/status、session/created、subagent/end 事件（src/server.ts:95-111）。",
      "provides": [
        "SDK JSON-RPC stdio 服务（HarnessSdkJsonRpcServer；initialize 就绪与 shutdown 全量关停）"
      ],
      "path": "packages/sdk/server",
      "source_layer": "L3",
      "assembled_in": [
        "sdk-app",
        "sdk-minimal"
      ]
    },
    {
      "id": "dsh-session-checkpoint-policy",
      "name": "@deepseek-ai/dsh-session-checkpoint-policy",
      "group": "G33",
      "group_name": "会话核心",
      "layer": 5,
      "implementation": "在三个副作用边界插入语义持久化检查点：llm/stream 在适配器派发首个 chunk 前先 ctx.sessions.flush 完整已记录请求前缀（src/index.ts:64-68,29-38）；tools/execute 对顶层工具调用在工具体执行前 flush，若已中止则返回规范的 TOOL_ABORTED_BEFORE_DISPATCH 错误结果（src/index.ts:70-75,41-50）；agent/pre-step 在下一步请求前持久化前一步提交（src/index.ts:79-82）。检查点失败在模型与工具副作用边界 fail-closed，不调用下游适配器/工具体。",
      "provides": [
        "语义持久化检查点策略（llm/tools/agent 边界强制 flush；无自有 ctx 服务）"
      ],
      "path": "packages/session/session-checkpoint-policy",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-session-reference",
      "name": "@deepseek-ai/dsh-session-reference",
      "group": "G08",
      "group_name": "上下文注入",
      "layer": 5,
      "implementation": "跨会话引用解析服务 SessionReferenceResolver（ctx.sessionReferenceResolver）：把宿主解析出的结构化会话引用读取为当前表面快照，经订阅 system-prompt/assemble 记录的最近路由计算模型相对字节预算，再把投影出的对话按字节上限保留/截断并渲染为不可信只读上下文（src/index.ts:127-142、src/index.ts:299-358、src/projection.ts:73-146）。在 agent/pre-step 前置监听中把直接用户消息里的规范 @[label](dsh-session:…) 提及替换为可读 @label，并在其后插入聚合的引用快照消息（src/index.ts:135-177、src/uri.ts:48-87）。被截断的预览会把完整转录喂给可选 spillStore，并附一条省略说明（src/spill.ts:23-50）。",
      "provides": [
        "ctx.sessionReferenceResolver (跨会话引用解析服务：读取他会话快照并按字节预算渲染为可信度受限的持久上下文)"
      ],
      "path": "packages/context/session-reference",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-session-title-all-prompts-llm",
      "name": "@deepseek-ai/dsh-session-title-all-prompts-llm",
      "group": "G33",
      "group_name": "会话核心",
      "layer": 5,
      "implementation": "函数插件向 ctx.sessionTitle 注册 automatic='all-prompts' 的 LLM 标题 provider，复用共享的 registerSessionTitleLlmProvider 与 Config 字段（src/index.ts:34-36），将全部人类消息交给给定 provider/model 路由生成标题。inject 声明 sessionTitle/llm/sessions 三项服务（src/index.ts:12）。",
      "provides": [
        "session-title all-prompts LLM provider（注册于 ctx.sessionTitle）"
      ],
      "path": "packages/session/session-title-all-prompts-llm",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-session-title-first-prompt-llm",
      "name": "@deepseek-ai/dsh-session-title-first-prompt-llm",
      "group": "G33",
      "group_name": "会话核心",
      "layer": 5,
      "implementation": "函数插件向 ctx.sessionTitle 注册 automatic='first-prompt' 的 LLM 标题 provider，复用共享的 registerSessionTitleLlmProvider 与 Config 字段（src/index.ts:34-40），仅取第一条人类消息（缺失即抛错）交给给定 provider/model 路由生成标题。inject 声明 sessionTitle/llm/sessions 三项服务（src/index.ts:12）。",
      "provides": [
        "session-title first-prompt LLM provider（注册于 ctx.sessionTitle）"
      ],
      "path": "packages/session/session-title-first-prompt-llm",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-spill-policy",
      "name": "@deepseek-ai/dsh-spill-policy",
      "group": "G38",
      "group_name": "溢出存储",
      "layer": 5,
      "implementation": "为工具结果与 PTC dispatch 日志挂载 token 预算保留策略：命中 tools/post-execute 与 tools/ptc-dispatch-log 时，若内容估算 token 超过 maxInlineTokens，则把完整文本（含图像附件可读路径）经 ctx.spillStore.saveText 落盘，再用 retainContent 保留头尾并按预算裁剪，末尾追加带 locator 与检索提示的省略通知 (src/index.ts:91-155, src/retention.ts:48-104, src/notice.ts:21-24)。图像定价缺失或保存失败时捕获异常并保持原始内联内容不改 (src/index.ts:56-75, src/index.ts:127-130)。",
      "provides": [],
      "path": "packages/spill/spill-policy",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-terminal",
      "name": "@deepseek-ai/dsh-terminal",
      "group": "G43",
      "group_name": "终端",
      "layer": 5,
      "implementation": "owner 作用域的持久 PTY 注册表：TerminalSessionService 注册 ctx.terminals（src/index.ts:105-118），管理 backend 注册（src/index.ts:125-137）、按精确 Agent owner 隔离的会话发布（src/index.ts:154-224）与 awaited 清理（src/index.ts:423-454）。服务只拥有 ids、发布、授权与清理，把终端机制留给 backend（src/types.ts:166-171），并以机器可路由的 TerminalError 暴露失败（src/index.ts:55-71）。",
      "provides": [
        "ctx.terminals（持久 PTY 会话 seam：backend 注册、owner 隔离 id、send/read/signal/close 与 awaited 清理）"
      ],
      "path": "packages/terminal/terminal",
      "source_layer": "L3",
      "assembled_in": [
        "sdk-minimal"
      ]
    },
    {
      "id": "dsh-time-context",
      "name": "@deepseek-ai/dsh-time-context",
      "group": "G08",
      "group_name": "上下文注入",
      "layer": 5,
      "implementation": "可选的请求时钟上下文：在 agent/pre-step 前置监听中按刷新间隔节流，向请求历史追加一条持久、来源归属的时间读数（turn/step、浏览器时区、格式化的时间戳与距上次的耗时）（src/index.ts:185-225、src/index.ts:100-115）。浏览器时区从本回合用户消息的 clientTimeZone 派生，唯一时区时用于渲染时间戳，混合/缺失时渲染澄清策略行（src/request-zone.ts:48-80、src/index.ts:203-214）。注册 sessionProjections 的 timeContext 投影折叠最近消息时刻与注入时刻，用于节流判定（src/index.ts:157-183）。另附 invariant companion 校验时间读数与回合位置/时间戳一致（src/invariant.ts:77-159）。",
      "provides": [
        "session projection 'timeContext' (持久化最近消息时刻与注入时刻，供刷新节流复用)"
      ],
      "path": "packages/context/time-context",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-tmux-context",
      "name": "@deepseek-ai/dsh-tmux-context",
      "group": "G08",
      "group_name": "上下文注入",
      "layer": 5,
      "implementation": "可选的 tmux 位置上下文：在 turn 的首个请求(step===1)时经 ctx.shell 执行一次 tmux display-message，并通过比对 pane 的 pane_tty 与本进程控制终端来确认真正运行于该 pane（避免继承 $TMUX_PANE 的假阳），失败/不在 tmux/无 shell 时静默 no-op（src/index.ts:120-168、src/index.ts:246-274）。渲染出的读数含稳定的 location 状态块；注册 tmuxContext 投影记录上次注入状态，仅在状态变化且超过可选 refreshIntervalMs 时才重新注入（src/index.ts:175-186、src/index.ts:230-263）。",
      "provides": [
        "session projection 'tmuxContext' (持久化最近一次 tmux 位置读数，供变更抑制复用)"
      ],
      "path": "packages/context/tmux-context",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-tool-bash",
      "name": "@deepseek-ai/dsh-tool-bash",
      "group": "G36",
      "group_name": "Shell 执行",
      "layer": 5,
      "implementation": "向模型注册 bash 工具作为 ctx.shell 的消费者：前台调用等待作业完成，有 ctx.jobs 时把进程注册为 job（run_in_background 立即返回 jobId，超时可按配置提升为后台）(src/index.ts:263-532)。execute 解析 per-call sandbox policy 与 workdir，经 ctx.shellEnv.collect 注入 DSH_* 环境，处理 sandbox_permissions/justification 的升级审批，再把 ShellRunResult 规范化渲染 (src/index.ts:478-528, src/render.ts:28-120)。background.ts 把 ShellProcess 适配为通用 job 的输出源与终态 (src/background.ts:44-129)。",
      "provides": [
        "模型工具 bash (前台/后台执行、可选 ctx.jobs 集成与沙箱升级审批)"
      ],
      "path": "packages/shell/tool-bash",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-tool-call-timeout-policy",
      "name": "@deepseek-ai/dsh-tool-call-timeout-policy",
      "group": "G18",
      "group_name": "工具守卫",
      "layer": 5,
      "implementation": "包装 tools/execute 瀑布点：读取工具声明的 timeoutsMs，用 dsh-timeout 的 deadline 为调用臂上截止并临时把 exec.signal 替换为派生的截止信号（src/index.ts:56-67）。委派下游后，若本插件自己的定时器胜出（按 TOOL_TIMEOUT code 作用域判定，避免误读嵌套的外层截止），用结构化 isError 结果替换返回值，最后在 finally 中恢复上游 signal（src/index.ts:68-79, 41-48）。",
      "provides": [
        "TOOL_TIMEOUT 结构化超时结果 (在 tools/execute 层把声明 timeoutMs 的调用映射为超时错误)"
      ],
      "path": "packages/guard/timeout-policy",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-tool-fs",
      "name": "@deepseek-ai/dsh-tool-fs",
      "group": "G16",
      "group_name": "文件系统",
      "layer": 5,
      "implementation": "注册模型面 read/read_image/write/edit 工具套件：apply() 校验四个读取上限后挂载 read 工具，并用 ctx.inject(['attachments']) 条件注册 read_image（无附件存储时不注册）(src/index.ts:54-72)；写与 edit 共用一个 FsSandboxController 处理升级广告、每调用策略解析与拒绝标记映射 (src/index.ts:76-78)。工具层只声明 schema、校验、读取窗口与格式化，把实际读写交给 ctx.fs (src/index.ts:1-5)。",
      "provides": [
        "工具 read / read_image / write / edit"
      ],
      "path": "packages/fs/tool-fs",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-tool-fs-search",
      "name": "@deepseek-ai/dsh-tool-fs-search",
      "group": "G16",
      "group_name": "文件系统",
      "layer": 5,
      "implementation": "以 npm 包内置的 ripgrep 二进制注册模型面 glob/grep 工具：两者均经 ctx.subprocess.spawn() 以固定 argv 模板运行 rg，工具层负责 schema、参数校验、argv 构造、结果解析、保留与格式化结果 spill (src/index.ts:1-27, 128-159)；不注入 fs 也不经 shell，ctx.spillStore 用 ctx.get() 机会式读取 (src/index.ts:17-19, 69-70)。glob/grep 在 tools/post-execute 上做格式化结果落盘 (src/glob.ts:355, src/grep.ts:342)。",
      "provides": [
        "工具 glob / grep"
      ],
      "path": "packages/fs/tool-fs-search",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-tool-jobs",
      "name": "@deepseek-ai/dsh-tool-jobs",
      "group": "G22",
      "group_name": "作业调度",
      "layer": 5,
      "implementation": "在 ctx.jobs 之上注册模型可见的 job_output/job_list/job_kill 三个工具 (src/index.ts:310-414)，并在加载时 attachController('tool-jobs') 让生产者可启动作业 (src/index.ts:247)。订阅 jobs 事件把未被模型取回的完成通知注入忙碌 owner 的下一步、或唤醒空闲 owner（受 maxConsecutiveWakes 约束）(src/index.ts:271-308)。按 job 的 outputLimitBytes 截断 job_output/job_kill 的模型可见内容 (src/index.ts:225-244)，render.ts 负责把读取增量渲染为 stdout/stderr 分区与 [status] 行 (src/render.ts:75-84)。",
      "provides": [],
      "path": "packages/jobs/tool-jobs",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-tool-lsp",
      "name": "@deepseek-ai/dsh-tool-lsp",
      "group": "G24",
      "group_name": "LSP 集成",
      "layer": 5,
      "implementation": "面向模型的 `lsp` 工具：apply() 校验配置后注册 systemPrompt 的 tool:lsp 指导段，并用 ctx.tools.register 注册一个含四种只读操作（goToDefinition/findReferences/goToImplementation/hover）的工具（src/index.ts:97-232）。execute() 经 parseLspArgs 把模型的一基 UTF-16 坐标转成 seam 的零基位置（src/render.ts:46-59），强制要求会话工作区 cwd 否则抛 LSP_WORKSPACE_REQUIRED（src/session-cwd.ts:15-16、src/index.ts:185-188），并调用 ctx.lsp.query 等待结果（src/index.ts:189-194）。render.ts 纯函数把结果按文件分组渲染、按 maxLocations/maxResultChars 截断，并把 file: URI 解析为工作区相对路径（src/render.ts:85-164）。",
      "provides": [
        "ctx.tools 的 `lsp` 工具（四操作精确代码导航，含一基/零基坐标换算与结果截断，src/index.ts:109-231）",
        "systemPrompt `tool:lsp` 段（何时用 lsp 而非文本检索的定位指导，src/index.ts:103-107）"
      ],
      "path": "packages/lsp/tool-lsp",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-tool-present",
      "name": "@deepseek-ai/dsh-tool-present",
      "group": "G11",
      "group_name": "交付物",
      "layer": 5,
      "implementation": "函数插件在 agent scope 注册模型可见工具 `present`，让模型把已存在的文件声明为最终交付物（src/index.ts:38-99）。`execute` 先校验存在 open turn（经 sessionProjections 的 `turnBoundary`）、文件数 1..maxFiles，再用 `ctx.fs.lstat/resolve/stat` 确认每个路径都是常规文件，否则报错（src/index.ts:76-97）。成功结果经 `tools/result` 监听器把 `deliverables/presented` 事件追加进 Session，文件内容仍留在源路径不被复制（src/index.ts:100-108、src/types.ts:12-16）。",
      "provides": [
        "工具 present (声明已存在文件为最终交付物)",
        "Session 事件 deliverables/presented"
      ],
      "path": "packages/deliverables/tool-present",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-tool-pwsh",
      "name": "@deepseek-ai/dsh-tool-pwsh",
      "group": "G36",
      "group_name": "Shell 执行",
      "layer": 5,
      "implementation": "向模型注册 pwsh 工具作为 ctx.shell 的 PowerShell 方言消费者：前台/后台执行、ctx.jobs 集成、DSH_* 环境注入、per-call sandbox policy 与升级审批、退出状态渲染均镜像 dsh-tool-bash (src/index.ts:212-544)。pwshDescription() 额外描述 Windows 沙箱下 ConstrainedLanguage 与命名管道 EPERM 边界 (src/index.ts:122-147)。background.ts 的进程→job 适配与 render.ts 的结果渲染故事与 bash 工具共用对称契约 (src/index.ts:276-379, 486-493)。",
      "provides": [
        "模型工具 pwsh (PowerShell 方言的前台/后台执行、ctx.jobs 集成与沙箱升级审批)"
      ],
      "path": "packages/shell/tool-pwsh",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-tool-session-query",
      "name": "@deepseek-ai/dsh-tool-session-query",
      "group": "G34",
      "group_name": "会话检索",
      "layer": 5,
      "implementation": "向模型注册五个会话检索工具（session_search/session_event_search/session_trace/session_event_trace/session_event_read），并注入 systemPrompt 章节引导用法 (src/index.ts:56-122)。operations.ts 在 workspace 授权下调用 ctx.sessionQuery 的 searchSessions/searchEvents/traceSession/traceEvent/readEvent，用 collectPages 翻页累积至 maxResults 并对本会话裁剪到当前 step 边界 (src/operations.ts:55-277)。workspace-access.ts 以调用者会话 cwd 为边界做目标授权与可见谱系投影，service-boundary.ts 把服务错误翻译为模型安全的 HarnessError 并记录诊断 (src/workspace-access.ts:75-135, src/service-boundary.ts:99-141)。",
      "provides": [
        "模型工具 session_search/session_event_search/session_trace/session_event_trace/session_event_read (workspace 授权的会话历史检索与读取)"
      ],
      "path": "packages/session-query/tool-session-query",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-tool-skill",
      "name": "@deepseek-ai/dsh-tool-skill",
      "group": "G37",
      "group_name": "技能",
      "layer": 5,
      "implementation": "注册面向模型的 skill 加载工具与持久化技能目录：defineTool 'skill' 经 ctx.skills 按 agent scope 查找并加载技能，正文渲染为 <skill_content> 块 (src/index.ts:81-161)。两个 agent/pre-step 监听器在决策后分别追加用户显式 /name 手势对应的技能注入（仅 user 来源消息可触发，src/index.ts:177-204），以及在工具对当前 agent 可见时，按目录条目摘要（sha256 digest 判重）发布或替换 session 技能目录消息 (src/index.ts:213-251, src/index.ts:328-378)。",
      "provides": [
        "skill 工具 (模型侧技能加载入口，加载完整技能指令)",
        "session 技能目录消息 (skill-catalog 来源的持久化目录，随技能变化发布/替换)"
      ],
      "path": "packages/skill/tool-skill",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-tool-str-replace-editor",
      "name": "@deepseek-ai/dsh-tool-str-replace-editor",
      "group": "G16",
      "group_name": "文件系统",
      "layer": 5,
      "implementation": "注册模型面 str_replace_editor 工具，支持 view/create/str_replace/insert 四类命令 (src/index.ts:429-430, 20-32)。每次读取或变更后 emit fs/observed 供观察策略记录 presence/absence (src/index.ts:110, 237, 272, 326)；变更前用 ctx.get('sandboxPolicy') 解析每调用策略并把 FS_SANDBOX_DENIED 映射为拒绝标记，构造期在 ctx.fs 受限但缺 sandboxPolicy 时报错 (src/index.ts:71-73, 249-270, 287-324, 364-366)。工具描述与输出经 maybeTruncate 按字符上限截断 (src/index.ts:34-38)。",
      "provides": [
        "工具 str_replace_editor (view / create / str_replace / insert)"
      ],
      "path": "packages/fs/tool-str-replace-editor",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-tool-todo",
      "name": "@deepseek-ai/dsh-tool-todo",
      "group": "G44",
      "group_name": "待办",
      "layer": 5,
      "implementation": "面向模型的整表替换 todo_write 工具：校验去空白、唯一 content 与 in_progress 策略（src/index.ts:80-100），并把 todo/write 快照 append 到调用 Agent 的 session（src/index.ts:199）。同时注册 sessionProjections 的 todos 投影（最新列表、turn/start 清零，src/index.ts:123-134），配套 invariant 伴生插件校验耐久日志的形状与 turn 边界（src/invariant.ts:24-58）。",
      "provides": [
        "工具 todo_write（注册 ctx.tools，src/index.ts:135）",
        "ctx.sessionProjections 的 todos 投影单元（src/index.ts:123）"
      ],
      "path": "packages/todo/tool-todo",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-tool-web",
      "name": "@deepseek-ai/dsh-tool-web",
      "group": "G47",
      "group_name": "Web 访问",
      "layer": 5,
      "implementation": "以函数插件在 ctx.tools 上注册模型可见的 web_search 与 web_fetch 工具：Config 控制启用项与上限，apply() 据配置分派到 applyWebSearchTool/applyWebFetchTool (src/index.ts:83-95)。web_fetch 经 ctx.web.fetch 抓取 URL，用 turndown + GFM 把 HTML 转为 markdown，并对深层嵌套 HTML 做深度守卫 (src/fetch.ts:25-95, 447-515)。web_search 校验查询上限后并发调用 ctx.web.search 并合并去重、按结果上限截断 (src/search.ts:231-377)。两者都注册 systemPrompt 信任提示（外部内容视为数据而非指令，src/trust.ts:7）并附可回放的结果卡片元数据。",
      "provides": [
        "tools.web_search (模型可见的联网搜索工具，经 ctx.web 执行)",
        "tools.web_fetch (模型可见的 URL 抓取并转 markdown 的工具)",
        "systemPrompt 章节 tool:web_search / tool:web_fetch (外部内容信任与引用指引)"
      ],
      "path": "packages/web/tool-web",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-tool-workspace-dependencies",
      "name": "@deepseek-ai/dsh-tool-workspace-dependencies",
      "group": "G37",
      "group_name": "技能",
      "layer": 5,
      "implementation": "注册只读工具 load_workspace_dependencies：校验 payload 的 runtime.json（parsePrimaryRuntime 把 legacy components 格式归一化为顶层版本与发行版映射）并返回捆绑 Python/Node/pnpm 的绝对路径与 Python 发行版版本 (src/index.ts:82-156)。配置 root 时经 installPrimaryRuntime 以 staging 复制 + previous 目录回滚实现原子安装，未配置时原地校验使用 (src/index.ts:204-233, src/index.ts:267-274)。",
      "provides": [
        "load_workspace_dependencies 工具 (返回捆绑 Python/Node/pnpm 绝对路径与捆绑发行版版本)"
      ],
      "path": "packages/skill/tool-workspace-dependencies",
      "source_layer": "L3",
      "assembled_in": [
        "sdk-app"
      ]
    },
    {
      "id": "dsh-user-questions",
      "name": "@deepseek-ai/dsh-user-questions",
      "group": "G21",
      "group_name": "交互命令",
      "layer": 5,
      "implementation": "实现 ctx.userQuestions 能力 seam 的服务定义：ask() 校验信号、非空问题与意图一致性，并确认传入 agent 是注册表的确切存活实例且为 runtime root（src/index.ts:86-151）。随后经作用域 waterfall user-questions/request 交给 UI 答案者，无答案者时 fail-closed（src/index.ts:130-150）。",
      "provides": [
        "ctx.userQuestions (人类问答服务 + user-questions/request 作用域 waterfall，src/index.ts:65-152)"
      ],
      "path": "packages/interaction/user-questions",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-web-search-deepseek",
      "name": "@deepseek-ai/dsh-web-search-deepseek",
      "group": "G47",
      "group_name": "Web 访问",
      "layer": 5,
      "implementation": "函数插件把 DeepSeekSearchProvider 注册进 ctx.web（id 'deepseek-official'，src/index.ts:127-131）。provider 调用 Anthropic 兼容 Messages API 并携带原生 web_search_20250305 服务端工具 (src/provider.ts:199-278)，把 web_search_tool_result 块与 text 引文按 URL 合并为规范化来源 (src/provider.ts:120-173)。凭证与端点由 resolveOptions 从 ctx.get('credentials')/launchEnvironmentOf 解析，并在派发前把无密请求写入调用方会话 (src/index.ts:93-124)。",
      "provides": [
        "ctx.web 的 search provider 'deepseek-official' (DeepSeek 官方联网搜索)"
      ],
      "path": "packages/web/web-search-deepseek",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-agent-preset",
      "name": "@deepseek-ai/dsh-agent-preset",
      "group": "G27",
      "group_name": "Agent 预设",
      "layer": 6,
      "implementation": "作为普通 Cordis 组合中的一行声明式预设：default-export AgentPreset，static inject=['agentPresets']，并设 EntryGroup.key=true 以在其插件激活前保留子表达式（src/index.ts:12-15、:25）。Config 用 schemastery 校验 id/name/description/order 与必填 plugins 数组（src/index.ts:16-23）。初始化时 [Service.init] 调用 ctx.agentPresets.register(this.config) 并把返回的注销器 yield 给 Cordis 以供回收（src/index.ts:27-29）。",
      "provides": [
        "预设声明行（把子插件清单注册进 ctx.agentPresets，src/index.ts:27-29）"
      ],
      "path": "packages/preset/agent-preset",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-command-goal",
      "name": "@deepseek-ai/dsh-command-goal",
      "group": "G17",
      "group_name": "目标与计划",
      "layer": 6,
      "implementation": "以纯函数 parseGoalCommand 解析 /goal 的人类语法（show/create/edit/pause/resume/clear），再由 executeGoalCommand 把这些控制动词映射到 ctx.goals 的 compare-and-set 变更并渲染直接 UI 输出（src/index.ts:35-45, 126-177）。命令对象携带的附件经 submitObjectiveAttachments 以模型可见的 user 消息形式在目标下一轮前投递（src/index.ts:117-123）。apply 在 ctx.commands 上注册 Codex 形状的 'goal' 命令（src/index.ts:190-197）。",
      "provides": [
        "/goal 人类命令 (注册进 commands 注册表，管理目标的创建/编辑/暂停/恢复/清除)"
      ],
      "path": "packages/goal/command-goal",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-compaction-basic",
      "name": "@deepseek-ai/dsh-compaction-basic",
      "group": "G07",
      "group_name": "上下文压缩",
      "layer": 6,
      "implementation": "压缩 seam 的基础后端实现 BasicCompactionEngine，继承 CompactionEngine 并实现 summarize/compactIfNeeded/compactRegion/compactNow 四个钩子（src/index.ts:113、src/index.ts:247、src/index.ts:269、src/index.ts:358、src/index.ts:383）。summarize 通过一次 ctx.llm.stream() 复用会话原有 system/tools/消息前缀做 KV-cache 友好的摘要调用（src/summarizer.ts:120-181）；region.ts 负责可压缩区间的选择、工具配对边界校验与 compaction/start→summary→end 的持久化事务（src/region.ts:117-155、src/region.ts:173-276）。apply 阶段注册 agent/pre-step 压力检测、agent/request-error 上下文溢出恢复（按 maxOverflowRetries 重试）等自动监听器（src/index.ts:148-235）。配置在加载期做严格校验并按路由模型解析阈值/保留/摘要预算（src/config.ts:68-110、src/config.ts:153-217）。",
      "provides": [
        "ctx.compaction (压缩 seam 的基础后端实现，提供基于 tokenMeter 压力测量的自动/手动压缩)"
      ],
      "path": "packages/compaction/compaction-basic",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-experimental-auto-review",
      "name": "@deepseek-ai/dsh-experimental-auto-review",
      "group": "G13",
      "group_name": "实验特性",
      "layer": 6,
      "implementation": "为 current-session-only 的 Auto 权限预设提供 LLM 授权门：在 `tools/pre-execute` 上 prepend 监听器，仅当 session 处于 AUTO_PRESET 且非 `run_code` 外层传输时介入（src/index.ts:686-721）。它把 provider/model/cwd/项目指令/过滤历史/待执行动作冻结为五段快照（src/index.ts:361-523），经 `ctx.llm.stream` 用固定 REVIEW_POLICY 请求 reviewer，并对返回 JSON 做严格 risk/decision 协议解析（src/index.ts:562-638）。deny 时按 approval policy 决定 ask 还是终态 deny，并注册 Auto 预设、卸载时把受影响 session 降级为 danger-full-access（src/index.ts:709-738）。",
      "provides": [
        "Auto 权限预设的按调用 LLM 审查门 (tools/pre-execute prepend 决策)"
      ],
      "path": "packages/experimental/auto-review",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-goal-round-driver",
      "name": "@deepseek-ai/dsh-goal-round-driver",
      "group": "G17",
      "group_name": "目标与计划",
      "layer": 6,
      "implementation": "在 agent 生命周期内自动驱动同一会话的目标续轮：readyToDrive 要求精确 live agent、状态 idle 且无竞争提示（src/index.ts:103-114），drive 在轮次预算内用 renderGoalRoundPrompt 生成模型可见续轮消息并 agent.followup 投递（src/index.ts:164-204）。pre-step 瀑布监听器用 validReservation 校验排队提示仍属于当前 live 修订，否则 reject 并 restoreOtherClaimed 恢复他人已认领消息（src/index.ts:344-425）。目标变更/暂停会取消 live turn 或 disarm 并进入持久化检查点（src/index.ts:282-293, 117-124）。",
      "provides": [
        "goal 自动续轮驱动 (按目标 activation/轮次上限投递 followup 并在 pre-step 拒绝过期续轮)",
        "goal-round-driver-invariant 不变量伴随件 (校验续轮提示词与目标流一致)"
      ],
      "path": "packages/goal/goal-round-driver",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-host-plugin-inventory",
      "name": "@deepseek-ai/dsh-host-plugin-inventory",
      "group": "G20",
      "group_name": "宿主服务",
      "layer": 6,
      "implementation": "以 TypertRemoteService 暴露只读 Remote 服务 ctx.pluginInventory，list() 每次直接读 Loader（src/index.ts:51-73）。readPluginInventory 遍历 ctx.loader.entries() 投影非 group 条目的 moduleName/enabled/fiberPhase 与可选本地化元数据，并可选拼入 agent preset 的 composition 行（src/index.ts:82-113）。Fiber 状态经运行时镜像表映射为稳定的 PluginFiberPhase（src/index.ts:30-48）。",
      "provides": [
        "ctx.pluginInventory (Remote list：当前 Loader 插件条目与 preset 组合快照，src/index.ts:51-73)"
      ],
      "path": "packages/host/plugin-inventory",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-mcp-client",
      "name": "@deepseek-ai/dsh-mcp-client",
      "group": "G25",
      "group_name": "MCP 协议",
      "layer": 6,
      "implementation": "外部 MCP 服务器桥接：apply() 先解析重连策略、以 WeakMap 按注册作用域预留 serverName 命名空间，再由 startConnection 建立受监督连接并 registerServerContext 发布资源与指令，最后 await ready 以在激活前完成首连与工具同步（src/index.ts:154-203、src/connection.ts:127-409）。syncTools 拉取 tools/list，并以 mcp__<serverName>__<rawName> 公开名注册到 ctx.tools；注册冲突整代回滚（全有或全无）（src/tools.ts:113-162）。transport.ts 按 config 构造 stdio（经 dsh-subprocess 擦洗父环境）或 Streamable HTTP 传输（src/transport.ts:21-46）。连接断开时按有界指数退避重启，超预算则注销工具（src/connection.ts:211-245）。",
      "provides": [
        "ctx.tools 的 mcp__<serverName>__<rawName> 工具集（外部 MCP 工具桥接，src/tools.ts:149-151）",
        "ctx.mcpResources 注册（把连接代次的资源访问暴露给资源工具，src/server-context.ts:28-31）",
        "systemPrompt `mcp:<server>` 段（服务端指令原文，src/server-context.ts:32-38）"
      ],
      "path": "packages/mcp/mcp-client",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-office-to-pdf",
      "name": "@deepseek-ai/dsh-office-to-pdf",
      "group": "G12",
      "group_name": "文档处理",
      "layer": 6,
      "implementation": "`OfficeToPdf` 继承 `TypertRemoteService`（服务名 officeToPdf），用 LibreOffice kit 把 Office 文档转 PDF：私有临时目录写入输入、`createConverter` 渲染，并对输出做大小上限与 `%PDF`/`%%EOF` 结构校验（src/index.ts:233-277、src/output.ts:13-39）。`ConversionQueue` 做有界准入、按内容 sha256 去重与 LRU 缓存、foreground/background 优先级、reader 取消与源字节预留（src/queue.ts:51-232）。`@Remote render()` 经 `workspaceFiles` 授权读取源文件、以 version 校验源未变，并把失败映射为稳定的 RemoteError（src/index.ts:159-231）。",
      "provides": [
        "ctx.officeToPdf (Office→PDF 转换与授权工作区文件渲染服务)",
        "Remote 域 officeToPdf (render/generation)"
      ],
      "path": "packages/document/office-to-pdf",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-plan-mode",
      "name": "@deepseek-ai/dsh-plan-mode",
      "group": "G26",
      "group_name": "规划模式",
      "layer": 6,
      "implementation": "PlanModeController 注册 `plan` 会话投影，折叠 command/run、command/done、plan/mode、request/header 事件以还原模式状态与待选意图（src/index.ts:137-169）。用户切换经 pendingIntents 暂存，仅在下一个被接受的 in-turn agent/pre-step 里 append plan/mode 并附模式切换叙述（src/index.ts:197-214、:419-454）。服务同时注册仅激活时渲染的 plan:policy 提示段（src/index.ts:217-225）、条件注入的 /plan on|off 命令（src/index.ts:230-276）与常驻 exit_plan_mode 工具——后者经 userQuestions 呈现计划评审，批准则排队退出（src/index.ts:278-366）。invariant.ts 校验 plan/mode 的 active 必须是布尔（src/invariant.ts:20-49）。",
      "provides": [
        "ctx.planMode (日志化计划协作状态控制器，src/index.ts:59-61、:176-469)",
        "sessionProjections `plan` 投影（cropped {active,pending}，src/index.ts:227、:137-169）",
        "ctx.tools 的 `exit_plan_mode` 工具（提交计划供用户评审，src/index.ts:278-366）",
        "ctx.commands 的 `/plan` 命令（on/off 与消息附带，条件注册，src/index.ts:230-276）",
        "systemPrompt `plan:policy` 段（部署自有计划指导，仅激活时渲染，src/index.ts:217-225）"
      ],
      "path": "packages/plan/plan-mode",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-plugin-package-inventory-deepseek",
      "name": "@deepseek-ai/dsh-plugin-package-inventory-deepseek",
      "group": "G23",
      "group_name": "LLM 适配",
      "layer": 6,
      "implementation": "在官方 DeepSeek 请求上贡献 dsh_plugin_packages 字段：收集 Loader 活跃且非结构化的条目，并按请求 agent 的 standing preset 追加其预设树条目 (src/index.ts:157-185, 138-149)。PackageIdentityResolver 为每个条目解析其 owning package 的 name/version 身份——bare 包按锚点定位 manifest，相对/绝对模块则向上查找最近 manifest，并对非包松散模块返回匿名 (src/index.ts:101-135, 54-98)。去重、按确定性文本序排序后经 ctx.deepseekLlmApiExtensions.register 注册字段的 prepare 逻辑 (src/index.ts:176-204)。",
      "provides": [
        "dsh_plugin_packages 请求字段贡献 (向 ctx.deepseekLlmApiExtensions 注册，携带当前活跃插件包的 name/version 清单)"
      ],
      "path": "packages/llm/plugin-package-inventory-deepseek",
      "source_layer": "L1",
      "assembled_in": [
        "base",
        "sdk-minimal"
      ]
    },
    {
      "id": "dsh-subagent",
      "name": "@deepseek-ai/dsh-subagent",
      "group": "G41",
      "group_name": "子代理",
      "layer": 6,
      "implementation": "定义子代理 seam 服务 ctx.subagents（SubagentRuntime）：命名 provider 注册表加 capability 校验的 start()、startContinuable()、sendMessage()、prompt/interruptByParent 远程面与 listChildren/listDescendants 发现 API (src/index.ts:199-661)。continuation.ts 管理可续子代理的稳定 id、descriptor 持久化、冷恢复与消息路由 (src/continuation.ts:82-550)；child-agent.ts 统一 in-process 子代理的深度、血缘、策略播种与作用域组合 (src/child-agent.ts:50-280)。catalog/projection 记录并投影父目录子项身份，lifecycle 统一发射 subagent/start|end 生命周期边 (src/catalog.ts:143-165, src/projection.ts:68-190, src/lifecycle.ts:101-219)。",
      "provides": [
        "ctx.subagents (子代理 seam 服务定义：命名 provider 注册表 + 启动/续跑/消息/中断/发现 API)"
      ],
      "path": "packages/subagent/subagent",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-terminal-bash",
      "name": "@deepseek-ai/dsh-terminal-bash",
      "group": "G43",
      "group_name": "终端",
      "layer": 6,
      "implementation": "本地持久 shell PTY backend：BashTerminalBackend 经 ctx.subprocess.spawnTerminal 拉起 bash/pwsh 交互会话（src/index.ts:201-230），并注册到 ctx.terminals（src/index.ts:237）。它结合 sandboxPolicy 生成 argv（src/index.ts:100-109）、设置受控提示符 PS1/PROMPT_COMMAND（src/index.ts:64-89），用 LocalPtySession 做有界输出、就绪判定与终端协议回复（src/session.ts:1-60）。",
      "provides": [
        "ctx.terminals 的 shell 后端（TerminalBackend 实现，默认 type shell，注册于 src/index.ts:237）"
      ],
      "path": "packages/terminal/terminal-bash",
      "source_layer": "L3",
      "assembled_in": [
        "sdk-minimal"
      ]
    },
    {
      "id": "dsh-tool-ask-user",
      "name": "@deepseek-ai/dsh-tool-ask-user",
      "group": "G21",
      "group_name": "交互命令",
      "layer": 6,
      "implementation": "作为 ctx.userQuestions 的模型侧 Consumer，用 defineTool 注册 ask_user_question 工具（参数为 questions 数组、输出为 answers），execute 调 ctx.userQuestions.ask 暂停直到 UI 作答，再把答案作为普通工具结果回灌模型循环（src/index.ts:18-99）。工具 schema 与渲染输出均为纯模型可见文本（src/index.ts:19-78）。",
      "provides": [
        "ask_user_question 模型工具 (向 ctx.userQuestions 发起人类问答，src/index.ts:19-99)"
      ],
      "path": "packages/interaction/tool-ask-user",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-tool-bash-persistent",
      "name": "@deepseek-ai/dsh-tool-bash-persistent",
      "group": "G36",
      "group_name": "Shell 执行",
      "layer": 6,
      "implementation": "向模型注册基于 PTY 的持久 bash 工具：每个 owner(Agent) 映射一个持久终端会话，命令用随机 nonce 的起止标记包裹后发送，轮询 scrollback 直到读到结束标记/超时/会话退出 (src/index.ts:297-390)。persistentShells() 管理按 owner 的创建/复用/重置与 fiber 处置清理，初始化时先发送 stty -echo 抑制回显 (src/index.ts:223-295)。输出按 maxOutputChars 截断（不切断代理对）并渲染退出码/超时/重置提示；同一 owner 的调用经队列串行化 (src/index.ts:58-221, 401-437)。",
      "provides": [
        "模型工具 bash (基于 owner 级 PTY 持久会话的持久 bash，状态跨调用保持)"
      ],
      "path": "packages/shell/tool-bash-persistent",
      "source_layer": "L3",
      "assembled_in": [
        "sdk-minimal"
      ]
    },
    {
      "id": "dsh-tool-cordis",
      "name": "@deepseek-ai/dsh-tool-cordis",
      "group": "G14",
      "group_name": "宿主扩展",
      "layer": 6,
      "implementation": "注册两个只读运行时 API 发现工具：cordis_inspect_list 返回 ctx.cordisInspect.list() 的全部 provider 目录 (src/index.ts:22-39)，cordis_inspect_query 按 platform/provider/method/input 执行只读查询并需 Agent 背书的会话 (src/index.ts:41-72)。host.ts 另把四个 Host Inspect provider 注册进 ctx.cordisInspect：Service/Event 基于生成的 api-catalog 静态目录，Config 从活 Loader 树投影 Config schema，Tool 返回当前 Agent 可见的工具 schema (src/host.ts:16-19, src/providers.ts:39-81, src/config.ts:98-119)。",
      "provides": [
        "工具 cordis_inspect_list / cordis_inspect_query",
        "Host Inspect provider：Service / Event / Config / Tool"
      ],
      "path": "packages/extensions/tool-cordis",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-tool-goal",
      "name": "@deepseek-ai/dsh-tool-goal",
      "group": "G17",
      "group_name": "目标与计划",
      "layer": 6,
      "implementation": "注册 get_goal/create_goal/update_goal 三个模型可调用工具，并向 systemPrompt 写入 tool:goal 策略节（src/index.ts:187-342）。authority.ts 在每次执行时要求精确 live 的调用 agent，并区分「直接人类输入」与「当前目标轮」两种权威（src/authority.ts:48-117）。update_goal 的 blocked 需满足配置的连续轮数阈值，且在目标轮内 complete/blocked 会 deferContext 注入收尾指令（src/index.ts:305-330）。",
      "provides": [
        "get_goal/create_goal/update_goal 模型工具 (定义并注册到 tools 注册表)",
        "tool:goal 系统提示词节 (目标工具策略与 blocked 阈值指引)"
      ],
      "path": "packages/goal/tool-goal",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-tool-pwsh-persistent",
      "name": "@deepseek-ai/dsh-tool-pwsh-persistent",
      "group": "G36",
      "group_name": "Shell 执行",
      "layer": 6,
      "implementation": "向模型注册基于 PTY 的持久 pwsh 工具，与 tool-bash-persistent 逐调用对称：按 owner(Agent) 维护持久 PowerShell 会话，用 nonce 标记包裹命令（quoteForPwsh 转义反引号、引号、`$`、换行与 ESC）后发送并轮询 (src/index.ts:81-99, 308-402)。persistentShells() 负责按 owner 的会话创建/复用/重置与 fiber 处置清理；executeCommand 处理超时、abort、会话退出与 stdin_read 的提前返回 (src/index.ts:245-306, 331-401)。输出按上限截断并渲染退出码/重置/超时提示 (src/index.ts:57-243)。",
      "provides": [
        "模型工具 pwsh (基于 owner 级 PTY 持久会话的持久 PowerShell，状态跨调用保持)"
      ],
      "path": "packages/shell/tool-pwsh-persistent",
      "source_layer": "L3",
      "assembled_in": [
        "sdk-minimal"
      ]
    },
    {
      "id": "dsh-tool-terminal",
      "name": "@deepseek-ai/dsh-tool-terminal",
      "group": "G43",
      "group_name": "终端",
      "layer": 6,
      "implementation": "六个面向模型的持久终端工具，用 defineTool 注册到 ctx.tools：terminal_open/send/read/signal/close/list（src/index.ts:163-403）。owner 身份取自工具执行 Agent（src/index.ts:118-121, 185），前台 send 等待就绪/静默/超时/退出（src/index.ts:280-283），后台 send 交给通用 ctx.jobs 管理（src/index.ts:251-278，src/background.ts:22-31），结果经 TextRetainer 做字节上限渲染（src/render.ts:3）。",
      "provides": [
        "工具 terminal_open / terminal_send / terminal_read / terminal_signal / terminal_close / terminal_list（注册到 ctx.tools，src/index.ts:163-403）"
      ],
      "path": "packages/terminal/tool-terminal",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-acp",
      "name": "@deepseek-ai/dsh-acp",
      "group": "G01",
      "group_name": "ACP 协议",
      "layer": 7,
      "implementation": "以 Cordis 函数插件把 ACP（Agent Client Protocol）服务端挂在 stdio JSON-RPC 上：apply() 先捕获注入的 sessionPersistence，构造 AcpSession 映射，并在 SDK 的 agent app 上注册 initialize/newSession/resumeSession/listSessions/closeSession/setSessionConfigOption/prompt/cancel 处理器 (src/index.ts:97-391)。每个会话由 AcpSession 组合一个未发布的 Agent（ctx.agents.create/resume，安装模型选择并挂载 ACP MCP 服务器）(src/session.ts:126-169)，再把已提交的 session 事件（assistant/message、tool/call、tool/result）投影为有序 ACP update 通知 (src/session.ts:345-389, src/updates.ts:16-85)。协议侧另有内容准入（文本/图片严格 base64 校验、拒绝 audio/resource 块）与模型/推理配置选项读写 (src/content.ts:123-204, src/model-control.ts:92-134)。权限请求走 approval/request waterfall，只提供一次性 allow/reject 选项，不推断持久授权 (src/index.ts:155-173)。",
      "provides": [
        "acp（自动化 ACP 服务端：JSON-RPC stdio 上的 initialize/newSession/resumeSession/listSessions/setSessionConfigOption/closeSession/prompt/cancel 方法族，供 dsh-subagent-acp 等程序化客户端驱动）",
        "被代理 Agent 的会话生命周期，以及 model 与 reasoning_effort 标准配置选项（configOptions）",
        "approval/request 一次性权限决策通道（allow-once / reject-once，不产生持久授权）"
      ],
      "path": "packages/acp/acp",
      "source_layer": "L3",
      "assembled_in": [
        "acp-app"
      ]
    },
    {
      "id": "dsh-api-session-controller",
      "name": "@deepseek-ai/dsh-api-session-controller",
      "group": "G02",
      "group_name": "API 网关与控制器",
      "layer": 7,
      "implementation": "SessionController 继承 TypertRemoteService 并以 namespace 'session' 注册，构造时装配 Agent 控制器、命令、控制态、历史与列表子模块，安装 modelSelection 投影，并挂载 SessionFileReferences/SessionMediaReferences/SessionSkillCatalog/ArchivedSessionGate 子插件 (src/index.ts:135-166)。Agent 的创建/续跑统一收敛到 ApiSessionAgentController（并发 resume 去重、子代理所有权、cwd/preset 冲突判定）(src/agent.ts:170-276, 444-495)。Remote 方法覆盖冷读（list/search/inspect/page/attachment/projections）、显式写（create/selectModel/rename/fork/prompt/updateQueue/cancel）与桌面打开（openWorkspacePath/workspacePathApplications/modelCatalog）(src/index.ts:251-522)。follow/control 两个 stream 分别提供会话日志快照+增量与 Host 级投影基线+替换帧 (src/history.ts:120+, src/control.ts:42-79)。同时监听 session/created|disposed、agent/created|disposed|status|error、session/event，对外发出 api-session/* 事件 (src/index.ts:167-198)。",
      "provides": [
        "ctx.remote.session（session 命名空间：list/search/create/selectModel/initializeDefaultModel/modelCatalog/rename/fork/prompt/attachment/updateQueue/cancel/page/follow/projections/control/openWorkspacePath/workspacePathApplications）",
        "sessionController（Host Session 业务 API：向其他 Host 域提供 resolveAgent / inspect）",
        "api-session/added|removed|status|error|activity 事件，以及客户端 Session 管理（manager/projection-store/notifier）"
      ],
      "path": "packages/api/session-controller",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-experimental-browser-use-stagehand-native",
      "name": "@deepseek-ai/dsh-experimental-browser-use-stagehand-native",
      "group": "G13",
      "group_name": "实验特性",
      "layer": 7,
      "implementation": "以 `SessionResources` 为每个 live Session 惰性拥有一个原生 Stagehand 浏览器运行时（launch 模式先 `launchChromium` 再连 CDP，attach 模式独占已有端点），并注册 `stagehand_navigate/tabs/screenshot/act/observe/extract` 工具（src/index.ts:84-164、166-209）。工具执行经 `tools/execute` 绑定到确切 live Agent，把调用方 signal 与 operation signal 串接后再走下一层（src/index.ts:192-209）；原生操作在 worker 内以 SDK `localBrowser.connect`+`Stagehand.create` 实现，含截图/自然语言 action（src/native.ts:95-159）。",
      "provides": [],
      "path": "packages/experimental/browser-use-stagehand-native",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-experimental-computer-use-cua-driver-mcp",
      "name": "@deepseek-ai/dsh-experimental-computer-use-cua-driver-mcp",
      "group": "G13",
      "group_name": "实验特性",
      "layer": 7,
      "implementation": "函数插件以 `dsh-mcp-client` 的 Config 连接已安装的 `cua-driver` MCP 可执行文件（stdio、failOnStartupError:true）（src/index.ts:52-61）。在一个 effect 中先 `ctx.computerUse.register('cua-driver-mcp')` 再以子插件启动 MCP client，并按顺序等待子进程彻底退出后再释放保留（src/index.ts:62-70）；启动/发现失败即回滚激活。",
      "provides": [],
      "path": "packages/experimental/computer-use-cua-driver-mcp",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-experimental-computer-use-cua-driver-native",
      "name": "@deepseek-ai/dsh-experimental-computer-use-cua-driver-native",
      "group": "G13",
      "group_name": "实验特性",
      "layer": 7,
      "implementation": "通过 in-process 原生 Cua Driver SDK 注册 `cua_driver_native__*` 工具：动态 `import('@trycua/cua-driver')`、`CuaDriver.create`、`listToolsJson` 解析工具目录并用 `createMcpToolDefinition` 适配（src/index.ts:88-118）。`tools/execute` 监听器把这些工具调用绑定到 lifetime signal 并跟踪 pending（src/index.ts:119-131），同时注册 computer-use systemPrompt guidance（src/index.ts:132-136）。卸载时 abort lifetime、等待 pending、`driver.shutdown()` 后 `uniffiDestroy()`（src/index.ts:59-78）。",
      "provides": [],
      "path": "packages/experimental/computer-use-cua-driver-native",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-hooks-claude-code",
      "name": "@deepseek-ai/dsh-hooks-claude-code",
      "group": "G19",
      "group_name": "Hooks 扩展",
      "layer": 7,
      "implementation": "把未改动的 Claude Code command hooks 桥接到 harness 拦截点：SessionStart、UserPromptSubmit、PreToolUse/PostToolUse、Stop、SubagentStart/Stop（src/index.ts:209-301）。config.ts 解析 CC 的 event→matcher-group 格式，仅保留 command 类型并对命令做 ${CLAUDE_PLUGIN_ROOT}/${CLAUDE_PROJECT_DIR} 替换（src/config.ts:78-122）。runPoint 对每个匹配 hook 记录 invoked/result 事件并调用 runHook，最后把合并结果映射为 PreStepDecision/PreToolDecision/PostToolDecision（src/index.ts:143-192, 225-271）。",
      "provides": [
        "Claude Code hooks 桥 (SessionStart/UserPromptSubmit/Pre+PostToolUse/Stop/SubagentStart+Stop 到 harness 拦截点的决策映射)"
      ],
      "path": "packages/hooks/hooks-claude-code",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-plugin-manager",
      "name": "@deepseek-ai/dsh-plugin-manager",
      "group": "G04",
      "group_name": "启动与插件管理",
      "layer": 7,
      "implementation": "`PluginManager extends TypertRemoteService` 以 `@Remote` 方法向前端暴露当前 profile 的插件/包管理 (src/index.ts:176-178)。它把 profile patch 与 manifest 组合成可寻址行，判定 protected/unaddressable/management-required 只读原因 (src/index.ts:256-272)，并以 `withFileLock`+`writeFileAtomic` 串行化 set/install/remove，失败或取消时回滚 `package.json`/`pnpm-lock.yaml` (src/index.ts:767-791, 697-713)。安装走 `runProfilePnpm` 并逐 registry 重试、做 GitHub 连通性预检与产物 bundle 校验 (src/index.ts:461-567)；`tools.ts` 另注册 `plugin_manager` 工具，经沙箱提权审批后调用同一服务 (src/tools.ts:18-91)。",
      "provides": [
        "ctx.pluginManager (当前 profile 的插件/包管理服务：listPlugins/listBundles/inspect/installBundle/removeBundle/setPluginEnabled/setBundleEnabled)",
        "plugin_manager 工具 (Agent 侧管理入口，含沙箱提权与审批)",
        "版本豁免管理 (listVersionExemptions/setVersionExemption)",
        "plugin-manager/install-log、plugin-manager/install-state、plugin-manager/changed 事件"
      ],
      "path": "packages/boot/plugin-manager",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-subagent-acp",
      "name": "@deepseek-ai/dsh-subagent-acp",
      "group": "G41",
      "group_name": "子代理",
      "layer": 7,
      "implementation": "以 AcpProvider 注册进程外 ACP 子代理 provider（默认名 acp），声明零启动能力，且只从 parent 读取会话 workspace cwd (src/index.ts:132-188)。start() 经 ctx.subprocess.spawn 启动子进程，run.ts 用官方 ACP SDK 完成 initialize、session.new、session.prompt 握手，并对子进程权限请求按配置自动拒绝或选择首个 allow 选项 (src/run.ts:337-618)。运行结果经 seam 的 settleRunResult/subprocessRunHandle 结算，dispose 走 stdin EOF→terminate 的协作式关闭阶梯 (src/run.ts:184-219, 598-618)。",
      "provides": [
        "ctx.subagents 注册的 provider `acp` (进程外 ACP 子代理执行能力)"
      ],
      "path": "packages/subagent/subagent-acp",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-subagent-claude-code",
      "name": "@deepseek-ai/dsh-subagent-claude-code",
      "group": "G41",
      "group_name": "子代理",
      "layer": 7,
      "implementation": "以 ClaudeCodeProvider 注册 provider claude-code，声明零启动能力并仅从 parent 读取 workspace cwd (src/index.ts:73-126)。start() 在父会话 workspace 中调用官方 @anthropic-ai/claude-agent-sdk 的 query()，并用自定义 spawnClaudeCodeProcess 把真实 CLI 进程托管到 ctx.subprocess (src/run.ts:316-377, 385-449)。只有严格 SDK success 才算完成，工具权限/MCP elicitation/用户对话框一律无人值守拒绝或取消，dispose 关闭 query 并终止整段进程 (src/run.ts:206-306, 571-586)。",
      "provides": [
        "ctx.subagents 注册的 provider `claude-code` (官方 Claude Agent SDK 进程外子代理)"
      ],
      "path": "packages/subagent/subagent-claude-code",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-subagent-codex",
      "name": "@deepseek-ai/dsh-subagent-codex",
      "group": "G41",
      "group_name": "子代理",
      "layer": 7,
      "implementation": "以 CodexProvider 注册 provider codex，声明零启动能力并只从 parent 读取 workspace cwd (src/index.ts:63-109)。start() 经 ctx.subprocess.spawn 启动包内 codex app-server --stdio，wire.ts 用共享 JsonRpcLineTransport 完成 initialize、创建 ephemeral thread 并驱动 turn (src/run.ts:225-301, src/wire.ts:192-374)。无人值守审批按 permissionMode 选择 cancel/decline，仅最终答案计入结果，失败按 stage/category 映射为固定诊断，dispose 关闭 wire 并终止进程 (src/wire.ts:571-630, src/run.ts:380-438)。",
      "provides": [
        "ctx.subagents 注册的 provider `codex` (Codex app-server 进程外子代理)"
      ],
      "path": "packages/subagent/subagent-codex",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-subagent-dsh-sdk",
      "name": "@deepseek-ai/dsh-subagent-dsh-sdk",
      "group": "G41",
      "group_name": "子代理",
      "layer": 7,
      "implementation": "以 SdkSubagentProvider 注册 provider dsh-sdk，仅支持 agentOptions 能力（provider/model/reasoning/maxTokens）(src/index.ts:110-175)。start() 经 @deepseek-ai/dsh-sdk-client 的 DeepSeekHarness 以 stdio JSON-RPC 启动带独立 profile/patch/dshHome 的嵌套 DSH 运行时，并用 scrubbedParentEnv 清洗环境 (src/run.ts:233-254)。握手成功后驱动 session.run，按子运行时的 turn/end 理由映射 stopReason，dispose 通过 harness.close() 关闭并回收 (src/run.ts:147-182, 307-358)。",
      "provides": [
        "ctx.subagents 注册的 provider `dsh-sdk` (嵌套 DSH 运行时进程外子代理)"
      ],
      "path": "packages/subagent/subagent-dsh-sdk",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-subagent-fork-in-process",
      "name": "@deepseek-ai/dsh-subagent-fork-in-process",
      "group": "G41",
      "group_name": "子代理",
      "layer": 7,
      "implementation": "以 ForkInProcessProvider 注册 in-process provider fork（默认名），支持全部启动能力且 inheritsParentContext=true (src/index.ts:63-83)。start() 取父会话最后一个 turn/end 之前的平衡前缀作为 seed，交给共享 in-process driver 执行 (src/index.ts:48-83)。prepareContinuable() 在创建时一次性捕获同一前缀，作为可续子代理的 seed，冷恢复时重放该前缀而非重新 fork (src/index.ts:85-91)。",
      "provides": [
        "ctx.subagents 注册的 provider `fork` (继承父会话已完成轮次的 in-process 子代理)"
      ],
      "path": "packages/subagent/subagent-fork-in-process",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-subagent-spawn-in-process",
      "name": "@deepseek-ai/dsh-subagent-spawn-in-process",
      "group": "G41",
      "group_name": "子代理",
      "layer": 7,
      "implementation": "以 SpawnInProcessProvider 注册 in-process provider spawn（默认名），支持全部启动能力且 inheritsParentContext=false (src/index.ts:41-59)。start() 不传 seed，直接调用共享 in-process driver 执行一个全新子代理 (src/index.ts:54-59)。prepareContinuable() 贡献空 spec（新子代理无继承历史），其后的生命周期全部由 continuation 管理器接管 (src/index.ts:61-65)。",
      "provides": [
        "ctx.subagents 注册的 provider `spawn` (全新 in-process 子代理)"
      ],
      "path": "packages/subagent/subagent-spawn-in-process",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-tool-subagent",
      "name": "@deepseek-ai/dsh-tool-subagent",
      "group": "G41",
      "group_name": "子代理",
      "layer": 7,
      "implementation": "注册 model 可见委派工具 subagent：按配置绑定一个 ctx.subagents provider，工具随 provider 出现/移除动态注册与注销，并据 inheritsParentContext 选择措辞 (src/index.ts:360-606)。execute() 解析子代理模型路由（可选 list_subagent_models 策略与 preflight），前台调用 await start() 并 settleForegroundRun，一次性后台走 ctx.jobs，可续后台走 startContinuable (src/index.ts:471-568)。model-selection*.ts 实现逐会话路由策略、持久化投影与发现工具，invariant 保证可选路由定义可重构 (src/model-selection.ts:99-196, src/model-selection-state.ts:37-81, src/invariant.ts:19-41)。",
      "provides": [
        "model 可见工具 `subagent` (经 provider 启动前/后台子代理)",
        "model 可见工具 `list_subagent_models` (子代理 LLM 路由发现)"
      ],
      "path": "packages/subagent/tool-subagent",
      "source_layer": "L1",
      "assembled_in": [
        "base",
        "web-app"
      ]
    },
    {
      "id": "dsh-tool-subagent-control",
      "name": "@deepseek-ai/dsh-tool-subagent-control",
      "group": "G41",
      "group_name": "子代理",
      "layer": 7,
      "implementation": "注册 model 可见控制工具 send_message 与 interrupt_agent，二者是 ctx.subagents.sendMessage()/interrupt() 的薄适配层，不含自身的生命周期路由 (src/index.ts:27-111)。send_message 用 markAdjacentAgentSendMessageTool 标注标准工具身份并投递消息 (src/index.ts:28-72)；interrupt_agent 以 {kind:'ancestor',agent:caller} 授权中断 (src/index.ts:74-111)。list-agents.ts 另注册 list_agents，将 children/descendants 投影为模型可见行，省略一次性子项并保留诊断 (src/list-agents.ts:59-177)。",
      "provides": [
        "model 可见工具 `send_message` / `interrupt_agent` (子代理控制薄适配)",
        "model 可见工具 `list_agents` (子代理发现，children/descendants)"
      ],
      "path": "packages/subagent/tool-subagent-control",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-workflow-ptc",
      "name": "@deepseek-ai/dsh-workflow-ptc",
      "group": "G49",
      "group_name": "工作流",
      "layer": 7,
      "implementation": "PtcWorkflowEngine 继承 dsh-workflow 的 WorkflowEngine 并注册为 ctx.workflowEngine (src/index.ts:102-189)。start() 先校验 meta（src/meta.ts:76-82）与脚本体可解析，再解析子代理 provider 与总子代理上限，构造 WorkerInit 与 PtcWorkflowRun (src/index.ts:133-174)。PtcWorkflowRun 通过注入的 ctx.ptcRuntime 在沙箱 Node 进程中执行脚本，VM 提供 agent/parallel/pipeline/phase/log 钩子并按调用方 Session 的文件策略约束 (src/host.ts:112-306, src/runtime.ts:56-367)。运行管理子代理的启动、结果、取消与释放，并在 start() 后发出 workflow/* 事件。",
      "provides": [
        "ctx.workflowEngine (基于共享沙箱 PTC 执行器的工作流引擎实现)"
      ],
      "path": "packages/workflow/workflow-ptc",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-client-ui-session",
      "name": "@deepseek-ai/dsh-client-ui-session",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 8,
      "implementation": "作为 Session Controller 与 React 选择器/槽作用域之间的适配层：apply 构造 UiSession，经 ctx.slots.provideRoot 发布根级标准来源 hooks（sessions、sessionStatus）与 keyedHooks.sessionRetainInfo，再 ctx.slots.installScope('session', adapter) 安装会话作用域适配器（src/client/index.ts:670-684）。UiSession 内部实现 useSession/useSessions/useSessionStatus/useSessionRetainInfo 的取值与相等性比较（index.ts:361-380、695-717），并把会话渲染区域绑定到 session-provider.tsx 的 renderSessionArea（index.ts:316）。",
      "provides": [
        "根级标准来源 hooks：useSessions / useSessionStatus / useSessionRetainInfo（含 sessionRetainInfo keyed hook）",
        "'session' 槽作用域适配器（ctx.slots.installScope，会话级槽的作用域与标准数据来源）",
        "会话渲染区域 renderArea（session-provider.tsx 的 renderSessionArea）",
        "uiSession.provide()（供域插件发布其会话级 pending-interaction 与状态）"
      ],
      "path": "packages/client/ui-session",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-schedule",
      "name": "@deepseek-ai/dsh-schedule",
      "group": "G31",
      "group_name": "定时调度",
      "layer": 8,
      "implementation": "ScheduleService（ctx.schedule）以 storageDomain 持久化 Host 级提醒任务，暴露 create/list/catalog/history/delete/update（部分 @Remote）并派生四条 agent 作用域工具 schedule_create/list/delete/update（src/index.ts:100-460, src/tools.ts:408-551）。ScheduleRuntime 持有单个定时器，扫描到期任务、经 sessionController.resolveAgent 恢复会话、以 producer kind 'schedule' 投递提醒消息并在 ctx.sessions.flush 确认后推进或退休任务（src/runtime.ts:44-165）。storage.ts 用严格 zod schema 定义 tasks 表与投递历史（src/storage.ts:37-60），domain.ts 负责纯递归/一次性规则与视图，invariant.ts 校验 schedule/change 事件流（src/invariant.ts:19-54）。",
      "provides": [
        "ctx.schedule (Host 级持久化提醒/定时任务的创建、检索、修改、删除与到期投递)"
      ],
      "path": "packages/schedule/schedule",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-tool-ralph",
      "name": "@deepseek-ai/dsh-tool-ralph",
      "group": "G49",
      "group_name": "工作流",
      "layer": 8,
      "implementation": "注册模型可见的 ralph 工具与专用 systemPrompt 章节 (src/index.ts:402-477)。execute 先校验调用方 agent，并要求子代理 provider 是「新鲜且支持结构化输出」的 (src/index.ts:218-230)，随后用固定的 RALPH_SCRIPT 通过 ctx.workflowEngine.start 启动工作流 (src/index.ts:445-453)。脚本每轮开一个无父上下文的新子代理，只传不可变目标与受 maxHandoffChars 限制的结构化 handoff，宿主侧再防御性解码每轮报告与终态 (src/index.ts:88-175, 244-331)。",
      "provides": [
        "tools.ralph (模型可见的 fresh-agent Ralph 循环工具)",
        "systemPrompt 章节 tool:ralph (仅显式请求时使用的使用策略)"
      ],
      "path": "packages/workflow/tool-ralph",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-tool-workflow",
      "name": "@deepseek-ai/dsh-tool-workflow",
      "group": "G49",
      "group_name": "工作流",
      "layer": 8,
      "implementation": "注册模型可见的 workflow 工具（默认名 workflow）与使用指引章节 (src/index.ts:315-483)。前台执行把脚本交给 ctx.workflowEngine.start 并 await result，非 completed 停止原因转为工具错误 (src/index.ts:433-479)；run_in_background 则把运行注册为 ctx.jobs 作业并立即返回 jobId (src/index.ts:262-313)。createWorkflowRecorder 把 workflow/* 事件折叠成 tool-workflow/* 会话记录 (src/index.ts:93-151)，record.ts 把进度镜像进作业输出环 (src/record.ts:37-63)，invariant.ts 作为伴生插件校验这些记录的持久化不变量 (src/invariant.ts:132-168)。",
      "provides": [
        "tools.workflow (模型可见的工作流编排工具，前台/后台两态)",
        "systemPrompt 章节 tool:workflow",
        "tool-workflow/* 会话事件 (持久化的工作流运行记录)",
        "invariants 伴生校验 (tool-workflow 记录折叠)"
      ],
      "path": "packages/workflow/tool-workflow",
      "source_layer": "L1",
      "assembled_in": [
        "base"
      ]
    },
    {
      "id": "dsh-api-remotes",
      "name": "@deepseek-ai/dsh-api-remotes",
      "group": "G02",
      "group_name": "API 网关与控制器",
      "layer": 9,
      "implementation": "Host 侧 apply() 把 remoteEventSource(ctx) 注册进 ctx.typertGateway.registerRemoteEvents，并用 ctx.effect 绑定其生命周期 (src/index.ts:40-45)。remoteEventSource 按 API_REMOTE_FORWARDED_EVENTS 白名单逐条挂 Cordis 监听：emit 型把参数经 assertJsonArgs 校验后入队，waterfall 型先校验请求携带的 Agent 与 carrierKeyOf(this) 一致，再经 forwardWaterfall 把 settle 交给 Gateway 关联 (src/index.ts:48-81, 134-158)。该白名单是唯一真相源，被 Host 转发循环与消费端 ctx.remote.$on 键面共同读取 (src/remote-events.ts:20-48)。client/index.ts 作为平台无关装配点，导入全部 Remote 命名空间并导出其类型面 (src/client/index.ts:3-100)。",
      "provides": [
        "ctx.remote 的命名空间装配（应用级远程 BFF 入口）",
        "API_REMOTE_FORWARDED_EVENTS 转发事件白名单（emit/waterfall 模式）与对应的 Host 事件源"
      ],
      "path": "packages/api/remotes",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-ui-settings",
      "name": "@deepseek-ai/dsh-client-ui-settings",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 10,
      "implementation": "提供共享的配置表单与 Host describe 镜像：apply 构造 SettingsSchemaService（ctx.settingsSchema，同步 schema 内省/校验）与 SettingsDescribeMirror（按 remote.$host.isLoopback 决定 host/memory 持久化模式），并在 settings/document-updated 与 connection/reset 时重新 load 镜像（src/client/index.ts:37-52）。随后 new ConfigForms(ctx, { mirror, schema, persistence }) 注册 ctx.configForms（src/client/index.ts:53、config-form.ts:266），为各域表单提供按命名空间的派生视图与串行写入（config-form.ts:50-90）。",
      "provides": [
        "ctx.configForms (ConfigForms 服务：按命名空间的配置表单派生视图、describe 镜像与串行写入)",
        "ctx.settingsSchema (SettingsSchemaService：schemastery schema 反序列化、校验与草稿编辑)",
        "SettingsDescribeMirror (Host 配置 describe 的共享镜像与失效订阅面)",
        "设置页各槽位契约类型（settings.launcher / settings.section / settings.general.item / settings.models.sign-in 等 OwnerProps）"
      ],
      "path": "packages/client/ui-settings",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-ui-tool",
      "name": "@deepseek-ai/dsh-client-ui-tool",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 10,
      "implementation": "注册整棵工具调用树与内建原子 toolview：apply 向 'conversation.chat.node' 注册 key='tool-call' 的 ToolCallTree，并声明子槽 'tool.call.toolview' 与参数前缀 hook（src/client/apply.ts:35-46）；随后用 ctx.plugin 挂载 bash/read/read-image/file-mutation/search/web/todo/details/ask-question 九个 toolview 模块（src/client/apply.ts:48-56）。各 toolview 模块各自通过 slots.inject/register 注册按工具名分发的 keyed 视图，模型层从原始 call/result 事件派生卡片。",
      "provides": [
        "slot conversation.chat.node key='tool-call' 的工具调用树渲染",
        "slot tool.call.toolview 的按工具名 keyed 视图（bash/read/read-image/file-mutation/search/web/todo/details/ask-question 等）",
        "子槽 tool.call.images 声明与 hooks.toolCallArgumentsPartial（准备阶段参数前缀订阅）"
      ],
      "path": "packages/client/ui-tool",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-cordis-client-runner",
      "name": "@deepseek-ai/dsh-cordis-client-runner",
      "group": "G14",
      "group_name": "宿主扩展",
      "layer": 10,
      "implementation": "浏览器半的动态包运行器：用 DynamicCordisPackageRunner 与 CordisRunOrchestrator 把模型写的前端源码经 closure→guard→module table→loader entry 装载成活的 cordis 插件，并把审批、宿主半调用、客户端代码拉取都折叠为 remote 调用 (src/client/index.ts:206-278)。运行结果面通过 ctx.provide('dynamicCordisRunner', face) 暴露活动运行、渲染失败、审批与快照 (src/client/index.ts:279-291)，页面激活时不预载任何动态包。另注册客户端 Cordis Inspect provider 并把 manifest 同步给宿主、路由 inspect 查询 (src/client/index.ts:190-204, 303-308)。",
      "provides": [
        "ctx.dynamicCordisRunner (客户端动态插件运行面：装载/停止浏览器半、审批、渲染失败上报与页面快照)",
        "ctx.cordisInspect (客户端 Inspect provider 注册与查询路由)"
      ],
      "path": "packages/extensions/cordis-client-runner",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-locale",
      "name": "@deepseek-ai/dsh-client-locale",
      "group": "G05",
      "group_name": "客户端运行时",
      "layer": 11,
      "implementation": "Host 半仅把 locale 偏好接到 settings 配置投影 (src/index.ts:30-31)。浏览器半 `LocaleRuntime` 维护语言目录、按 fallback 链解析词典并按 revision 发布不可变快照，`translate` 先查 entry 命名空间再查 common 命名空间，缺失回退到 key 本身 (src/client/index.ts:165-513)。激活时从 `__DSH_LOCALE__` 桥读取原生语言、注册内置 zh/en 词典、provide `locale` 服务并经 `installLocale` 合成渲染层 `t` 座位，最后把 Language 行注册进 settings General 槽 (src/client/index.ts:563-622)。",
      "provides": [
        "ctx.locale (LocaleRuntime：字典注册 register、绑定 bind、快照 getSnapshot/subscribe、setLocale/addLanguage)",
        "locale/change 事件与 LocaleFace (供渲染层合成 t 座位)",
        "Language 设置行 (settings.general.item 槽贡献)"
      ],
      "path": "packages/client/locale",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-shortcuts",
      "name": "@deepseek-ai/dsh-client-shortcuts",
      "group": "G05",
      "group_name": "客户端运行时",
      "layer": 12,
      "implementation": "Host 半把经过校验的键盘配置注入页面全局 `__DSH_SHORTCUTS_CONFIG__` (src/index.ts:15-19)。浏览器半 `ShortcutsService extends Service` 按环境（web/desktop）选择存储适配器与键盘适配器，建立 `ShortcutRegistry`，并暴露 register/registerFixed/observeFixedInput/describeBinding/edit 等命令面 (src/client/index.ts:27-75)。它订阅 locale 变化刷新按键标签，经固定输入监听器链带 consume 语义分发，Desktop 走原生键盘桥 (src/client/index.ts:74, 94-106, 62-63)。",
      "provides": [
        "ctx.shortcuts (窗口级应用命令注册表、生效键帽目录、编辑与描述绑定能力)",
        "固定快捷键输入观察通道 (observeFixedInput，带 consume 链)",
        "windows/desktop/web 多运行时的存储与键盘适配"
      ],
      "path": "packages/client/shortcuts",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-ui-cordis",
      "name": "@deepseek-ai/dsh-client-ui-cordis",
      "group": "G14",
      "group_name": "宿主扩展",
      "layer": 12,
      "implementation": "以 Web 客户端 Cordis 插件形式把动态插件（cordis_define / cordis_run）的 UI 接入客户端：apply() 先构造 CordisDynamicPort，经 ctx.remote.dynamicCordisRunner 读取库存并执行停止/移除 (src/client/index.ts:45-62)；随后建立 inventory，并订阅 remote 转发的 cordis/dynamic-package、cordis/dynamic-retract、cordis/request-run(-resolved) 事件触发刷新，且在连接重置时 reset+refresh (src/client/index.ts:75-84)。最后向 sidebar.footer.action 与 tool.call.toolview 分别注册 CordisPanel 与 cordis_define/cordis_run/cordis_stop/cordis_undefine 工具卡片 (src/client/index.ts:86-145)。",
      "provides": [
        "Web 客户端 UI 表面：在 sidebar.footer.action 注入 cordis 动态插件面板，在 tool.call.toolview 注入 cordis_define/cordis_run/cordis_stop/cordis_undefine 工具卡片"
      ],
      "path": "packages/extensions/ui-cordis",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-ui-settings-models",
      "name": "@deepseek-ai/dsh-client-ui-settings-models",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 12,
      "implementation": "浏览器半向 `settings.section` 注册 Models 页（id='models' order 10，声明 settings.models.provider-card 与 settings.models.footer 子槽，src/client/index.ts:136-146），并向 `settings.onboarding` 注册 welcome-notice（order -100）与 deepseek-official（order 0，声明 settings.models.sign-in 子槽）两个引导步骤（src/client/index.ts:147-159）。它经 `ctx.settingsSchema` 与 `ctx.configForms.describe()` 构造 ModelsSettingsStore/operations（src/client/index.ts:84-88），并订阅 settings/document-updated、credentials/record-updated、credentials/reference-updated、llm/adapters-updated 及 connection/reset 推送事件刷新（src/client/index.ts:121-134）。node half 监听 `webserver/index-inject` 把 credentialOnboarding 开关注入页面全局（src/index.ts:14-21）。",
      "provides": [
        "settings.section 条目 id='models' (order 10)：模型/供应商编辑页，声明 settings.models.provider-card（keyed）与 settings.models.footer（list）子槽",
        "settings.onboarding 条目 id='welcome-notice' (order -100) 与 id='deepseek-official' (order 0，声明 settings.models.sign-in 子槽)",
        "settings.models locale 命名空间字典（Models 页 + 产品引导文案）",
        "Host 侧页面全局 ONBOARDING_CONFIG_GLOBAL（credentialOnboarding 开关）"
      ],
      "path": "packages/client/ui-settings-models",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-ui-settings-plugins",
      "name": "@deepseek-ai/dsh-client-ui-settings-plugins",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 12,
      "implementation": "浏览器半向 `settings.section` 注册 Built-in plugins 导航条目（id='plugins' order 15，src/client/index.ts:76-84），并在注册项上声明子槽 `settings.plugins.tab`（list 类型，src/client/index.ts:83）。它把 tab 台账 `ctx.slots.entries('settings.plugins.tab')` 与 locale revision 组合成带缓存的 observable 快照（src/client/index.ts:42-72），使 language 切换时标签重解析。node half 为空 apply，仅用于出现在宿主 Loader（src/index.ts:11）。",
      "provides": [
        "settings.plugins locale 命名空间字典",
        "settings.section 条目 id='plugins' (order 15)：Built-in plugins 设置段外壳，声明 settings.plugins.tab (list) 子槽",
        "settings.plugins.tab 台账投影为有序 tab 条目 observable 源（标签 locale 跟随）"
      ],
      "path": "packages/client/ui-settings-plugins",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-ui-theme",
      "name": "@deepseek-ai/dsh-client-ui-theme",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 12,
      "implementation": "浏览器主题注册表：ThemeRuntime 持有 light/dark/system 偏好、字号与 token 覆盖层，用 prefers-color-scheme 解析 system，发布不可变 ThemeSnapshot 并 emit 'theme/change'（src/client/index.ts:159-360）。apply 安装全局 --dsw-* 样式表、创建 ThemeRuntime 并 ctx.provide('theme')，再向 settings.general.item 注册 appearance 与 font-size 两行（src/client/index.ts:429-478）。Host 半 src/index.ts 通过 webserver/index-inject 注入 boot 调色板与字号脚本，避免首屏闪色（src/index.ts:39-43）。",
      "provides": [
        "ctx.theme（主题服务：getTheme/setTheme/setFontSize/register/overrideTokens）",
        "事件 theme/change（主题或字号变更）",
        "slot settings.general.item 的 appearance 与 font-size 设置行",
        "Host 侧 webserver/index-inject 的 boot 主题行与 Config（preference/fontSize）"
      ],
      "path": "packages/client/ui-theme",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-ui-user-questions",
      "name": "@deepseek-ai/dsh-client-ui-user-questions",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 12,
      "implementation": "把 QuestionComposer 注册为 conversation.composer 链上的 selector 路由入口：选择器把 owner 货币收窄为 PendingQuestion 载体，并声明 conversation.plan-review.actions 子槽（src/client/index.ts:94-104）。用 ctx.uiSession.registerPendingInteraction 发布待处理交互（plan-review 优先级 2、普通问题 1）（src/client/index.ts:91-93），并通过 ctx.remote.$on('user-questions/request') 挂 waterfall 监听，按作答/取消/委托结算 PendingQuestion（src/client/index.ts:54-80,105-107）。",
      "provides": [
        "slot conversation.composer 的 question/plan-review 呈现与子槽 conversation.plan-review.actions",
        "SessionPendingInteractionMap 'question' 发布器（ctx.uiSession.registerPendingInteraction）",
        "remote 事件 user-questions/request 的客户端 waterfall 监听器"
      ],
      "path": "packages/client/ui-user-questions",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-ui-conversation",
      "name": "@deepseek-ai/dsh-client-ui-conversation",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 13,
      "implementation": "目标中立会话装配与输入核心：apply 建 UiConversation 与 InputHub，用 ctx.uiSession.provide 为每会话解析出 conversation/input hooks 与 inputActions (src/client/apply.ts:283-299)。骨架经 slots.registerFactory('conversation.content') 与 register('conversation.session'/'conversation.header'/'conversation.session.header'/'conversation.composer.bar') 声明整棵会话树及子槽 (src/client/apply.ts:308-529)。输入侧实现 Enter/Shift+Enter 等固定快捷键与停转快捷键 (src/client/apply.ts:236-265)，并实现文件选择/拖入的 addFiles 与 draft 上传（含 Desktop 桥 __DSH_HOST_PATHS__）(src/client/apply.ts:100-108, 459-497)。最后 ctx.plugin(ConversationController) 与 todoDockEntry/queueDockEntry (src/client/apply.ts:545-551)；宿主半暴露 busyEnter 设置字段 (src/index.ts:17-32)。",
      "provides": [
        "ctx.conversation (IConversation：按 session scope 寻址的会话动作与输入注册表)",
        "ctx.uiConversation (UiConversation：目标中立的会话注册表与每会话装配)",
        "槽位骨架：main#conversation、conversation.content(factory)、conversation.session、conversation.header、conversation.session.header、conversation.composer.bar",
        "子槽声明：conversation.view(list)、conversation.composer(chain)、conversation.input.attachments/overlay/permission/left/plan/right/model/activity、conversation.input.dock(list)、conversation.composer.dock(list)、conversation.hero.*",
        "ctx.uiSession 标准 hooks conversation/input 与 props inputActions",
        "settings.general.item#composer-enter (Enter 行为偏好)",
        "Locale 命名空间 conversation",
        "上抛 ConversationNodeDefinition/ConversationViewDefinition/ConversationStore/UiConversation/ConversationController 等公开类型与 createConversationStore/inspectRequestPrompt"
      ],
      "path": "packages/client/ui-conversation",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-ui-layout",
      "name": "@deepseek-ai/dsh-client-ui-layout",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 13,
      "implementation": "客户端 shell 插件：apply 里用一次 ctx.slots.register 把 AppFrame 装进内建 'root' 槽，并同时声明 sidebar/main/rightbar/shell.overlay/shell.leading 五个子槽与布局 store（src/client/index.ts:171-182），同时把 store 实例绑到 LayoutController 暴露 ctx.layout（src/client/index.ts:167-170）。LayoutController 只写 store 声明的动作集，提供主面板选择、右栏轨道/全屏上报与侧栏开关（src/client/service.ts:57-105）；AppFrame 用 ResizeObserver + rAF 测量 frame 宽度并解算三栏几何（src/client/AppFrame.tsx:139-163）。另一条 effect 把 ThemePresenter 挂上，用纯 DOM 写入把 ctx.theme 快照投到 document（src/client/index.ts:210-218、src/client/theme-presenter.ts:49-75）。",
      "provides": [
        "ctx.layout (面板布局/导航服务 ILayout：selectPanel / beginNavigation / toggleSidebar / openRightbar / closeRightbar)",
        "'root' 槽的 AppFrame 三栏框架（并声明 sidebar/main/rightbar/shell.overlay/shell.leading 子槽作为唯一渲染权威）",
        "hooks.usePanelInfo (根作用域主面板选择的可订阅源，随 provideRoot 发布)",
        "ctx.shortcuts 命令 sidebar.left.toggle（含桌面/Web 平台默认键位）",
        "主题 DOM 呈现（ThemePresenter：html color-scheme、body 暗色属性、alias token 变量、theme-color meta）"
      ],
      "path": "packages/client/ui-layout",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-ui-settings-general",
      "name": "@deepseek-ai/dsh-client-ui-settings-general",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 13,
      "implementation": "浏览器半渲染 `sidebar.settings` 槽位的设置外壳 SettingsRoot，并声明 settings.launcher/trigger/header/action/close/section/onboarding 等子槽（src/client/index.ts:198-212）；它把 `settings.section` 与 `settings.onboarding` 台账投影为有序导航行/步骤快照（src/client/index.ts:129-172）。无主设置项也在此注册：Developer Tools 行（src/client/index.ts:76-82）、Current version 行（src/client/index.ts:84-86）、仅在 loopback 连接下启用的本地设置文档动作（src/client/index.ts:102-104、220-228）、sidebar.toggle.badge 桌面更新指示（src/client/index.ts:92-95），以及 `settings.open` 快捷键（src/client/index.ts:179-196）。node half 定义 volatile 配置 welcomeNoticeVersion 并经 settings 服务 configure（src/index.ts:15-23）。",
      "provides": [
        "sidebar.settings 槽位占用者：设置面板外壳 SettingsRoot，声明 settings.launcher/trigger/header/action/close/section/onboarding 子槽",
        "settings.section 条目 id='general' (order 0) 及 settings.general.item 子槽（developer-tools order 15、current-version order 100）",
        "settings.trigger / settings.header / settings.close 单例实现与 settings.action 条目 id='open-document'",
        "sidebar.toggle.badge 槽的桌面更新徽标",
        "settings locale 命名空间字典（外壳 + General 文案）",
        "settings.open 快捷键命令（primary+,）",
        "Host 侧 settings 命名空间配置项 welcomeNoticeVersion（volatile）"
      ],
      "path": "packages/client/ui-settings-general",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-ui-shortcuts",
      "name": "@deepseek-ai/dsh-client-ui-shortcuts",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 13,
      "implementation": "浏览器半注册 `shortcuts` 字典后，先用 `ctx.shortcuts.registerFixed` 批量注册固定命令（src/client/index.ts:37-39），再把快捷键参考行注册进 Settings 的 `settings.general.item`（id='shortcuts' order 20，src/client/index.ts:42-45），并把参考浮层注册进 `shell.overlay`（src/client/index.ts:46-71）。同时注册 `shortcuts.open` 命令（primary+/）在 settings 与 shortcuts 两种模态间切换开合（src/client/index.ts:47-65）。一个 store 句柄在 apply 内创建并同时交给设置行与浮层两处注册（src/client/index.ts:31-33）。",
      "provides": [
        "shortcuts locale 命名空间字典",
        "settings.general.item 条目 id='shortcuts' (order 20)：General 设置中的快捷键参考入口行",
        "shell.overlay 条目 id='shortcuts'：快捷键参考浮层",
        "shortcuts.open 命令（primary+/）以及经 shortcuts.registerFixed 注册的固定命令集"
      ],
      "path": "packages/client/ui-shortcuts",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-ui-approval",
      "name": "@deepseek-ai/dsh-client-ui-approval",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 14,
      "implementation": "浏览器半实现 Remote Event 瀑布的一环：apply 取 ctx.uiSession.registerPendingInteraction 发布器 (src/client/index.ts:88-90)，向 'conversation.composer' 以 priority 1 注册接管面板并声明子槽 'conversation.approval.detail' (src/client/index.ts:91-103)。对 ctx.remote.$on('approval/request') 的每个请求构造 PendingApproval，把 sessionId 与 callId/reason/signal 投影成可回答项；未回答时用 delegate() 抛内部拒绝以回到瀑布 next() 继续 (src/client/index.ts:36-70, 104-106)。另在 shortcuts 注册固定 Enter=允许、Esc=拒绝，并注册 approval 字典 (src/client/index.ts:78-87)。宿主半为空 apply (src/index.ts:4)。",
      "provides": [
        "slot: conversation.composer (priority 1 的审批接管面板，选择函数匹配 PendingApproval)",
        "子槽声明: conversation.approval.detail (kind single, scope session)",
        "ctx.uiSession 待决交互类型 approval 的 PendingApproval 呈现与回答生命周期 (answer/delegate/abort/isDelegation)",
        "Locale 命名空间 approval (zh/en)",
        "快捷键 approval.allow (Enter) 与 approval.reject (Esc)",
        "导出 PendingApproval 类与 ApprovalComposerProps/ApprovalDecision/ApprovalDetailOwnerProps 类型 (供 ui-chat 的 ApprovalCommand 以 type-only 消费)"
      ],
      "path": "packages/client/ui-approval",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-ui-input-trigger",
      "name": "@deepseek-ai/dsh-client-ui-input-trigger",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 14,
      "implementation": "以 InputTriggerService(注册为 ctx.inputTriggers) 拥有 '/' 与 '@' 的触发检测、候选菜单与 pick 流水线 (src/client/index.ts:1-6, 59-61)。apply 用 ctx.inject(['slots','inputTriggers','sessions']) 后把 MenuView 以 order 0 注册进 'conversation.input.overlay'，注入面按 sessionId 经 sessions.scope 解出该会话 controller 的 menu/headers，并桥接 onPick/onCrumb/onHover/onDismiss 回调 (src/client/index.ts:62-86)。检测与菜单归约的纯函数契约在 src/core/contract.ts 与 src/types.ts，source 只能经 ctx.inputTriggers 注册 (src/client/index.ts:24-32)。宿主半为空 apply (src/index.ts:9)。",
      "provides": [
        "ctx.inputTriggers (InputTriggerService：触发检测、候选菜单、pick 流水线；source 注册唯一入口)",
        "slot: conversation.input.overlay#slash-menu (order 0 的候选菜单 MenuView)",
        "Locale 命名空间 slash.menu",
        "上抛 InputTriggerService/InputTriggerController 与 InputTriggerSource/TriggerChar/MenuState/PickOutcome 等大量公开类型与契约"
      ],
      "path": "packages/client/ui-input-trigger",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-ui-jobs",
      "name": "@deepseek-ai/dsh-client-ui-jobs",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 14,
      "implementation": "在会话头动作带注册一个后台作业列表入口：apply 注册 job 字典后，用 slots.inject 把 JobListAction 以 order 20 注册进 'conversation.session.header.actions'（排在 preset 标签之后）(src/client/index.ts:33-52)。注入面只经 ctx.jobs（jobs 客户端服务）取 hooks.jobs 与 watchRows/observe/kill，不自行持有传输状态；killJob 在返回前把注册表 id 以 JobId 品牌盖回 (src/client/index.ts:43-50)。宿主半为空 apply，仅作 Loader row (src/index.ts:9)。",
      "provides": [
        "slot: conversation.session.header.actions#job-list (order 20 的后台作业列表与流式记录面板)",
        "Locale 命名空间 job",
        "上抛 JobListActionProps/JobListInjected 类型"
      ],
      "path": "packages/client/ui-jobs",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-ui-sidebar",
      "name": "@deepseek-ai/dsh-client-ui-sidebar",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 14,
      "implementation": "浏览器半注册 `sidebar` 槽并声明 brand.mark/brand.name/toggle.badge/panellist/workspaces/settings/footer.action 子槽（src/client/index.ts:72-85）。它把 `sidebar.panellist` 台账投影为有序面板元数据快照，并在台账或 locale 变化时重算（src/client/index.ts:47-62）。注入面暴露 startSession（经 uiWorkspace 共享动作，src/client/index.ts:45、67）、toggleSidebar/selectPanel（经 ctx.layout，src/client/index.ts:68-69）与 shortcuts 目录（src/client/index.ts:70）；同一注入面还被 `shell.leading` 头部控件复用（src/client/index.ts:90-94）。node half 为空 apply（src/index.ts:4）。",
      "provides": [
        "sidebar locale 命名空间字典",
        "sidebar 槽位占用者（侧边栏外壳），声明 sidebar.brand.mark / sidebar.brand.name / sidebar.toggle.badge / sidebar.panellist / sidebar.workspaces / sidebar.settings / sidebar.footer.action 子槽",
        "shell.leading 槽的头部前置控件（折叠侧栏 / 新建会话，用于 macOS 隐藏侧栏场景）",
        "sidebar.panellist 台账投影为有序面板元数据 observable 源"
      ],
      "path": "packages/client/ui-sidebar",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-ui-sidebar-right",
      "name": "@deepseek-ai/dsh-client-ui-sidebar-right",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 14,
      "implementation": "浏览器半在 apply 顶层构造 SidebarRightTabRegistry，并分别经 `ctx.reflect.provide('sidebarRightTabs')` 与 `ctx.reflect.provide('sidebarRight')` 暴露 tab 类型注册表与导航面（src/client/index.ts:109、122-123），使其它包可注册而本包 effect 不作为其宿主。它声明 `rightbar` 槽（含 rightbar.session 及 keyed `sidebar.right.pane.tab`/`title` 与 list `sidebar.right.tab.menu.item` 子槽，src/client/index.ts:177-205），并在会话代际间对同一 store 做 adopt/forget（src/client/index.ts:140-159）。同一 store 还供 `conversation.session.header.corner` 展开按钮使用（src/client/index.ts:210-215），内建 `guide` tab 类型经同一公共两级路径注册（src/client/index.ts:176、224-240）。node half 为空 apply（src/index.ts:4）。",
      "provides": [
        "sidebarRight locale 命名空间字典",
        "ctx.sidebarRightTabs（右侧边栏 tab 类型注册表，任何包第二阶段注册的入口）",
        "ctx.sidebarRight（右侧边栏导航/展示面：openTab/openTabFromTarget/bind/splitPane/toggleFullscreen/commandTarget 等）",
        "rightbar 槽位占用者，声明 rightbar.session 及 sidebar.right.pane.tab（keyed）/ sidebar.right.pane.tab.title（keyed）/ sidebar.right.tab.menu.item（list）子槽",
        "conversation.session.header.corner 槽的展开按钮",
        "sidebarRightTabs 注册内建 'guide' tab 类型（含 sidebar.right.tab.guide.entry / sidebar.right.tab.guide 子槽）"
      ],
      "path": "packages/client/ui-sidebar-right",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-ui-trajectory",
      "name": "@deepseek-ai/dsh-client-ui-trajectory",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 14,
      "implementation": "注册 trajectory 会话视图标签与轨迹 Definition：apply 为每个 SessionBinding 构造 trajectory 的 ObservableSnapshot 源并 ctx.uiSession.provide hooks 'trajectory'（src/client/index.ts:49-78），依次注册 assistant/compaction/message/request-header/tool 五类 Definition（src/client/index.ts:69-74），最后向 'conversation.view' 注册 id='trajectory' 的 TrajectoryView 并声明子槽 conversation.trajectory.images（src/client/index.ts:79-112）。视图组件用 client-store 引擎与 ui-primitives 渲染虚拟行、表格与时间线。",
      "provides": [
        "slot conversation.view id='trajectory' 的轨迹视图与子槽 conversation.trajectory.images",
        "conversation 节点 Definitions（assistant-stream/compaction/message/request-header/tool）注册进 uiConversation.events",
        "uiSession hooks 'trajectory'（TrajectorySnapshot 观察源）"
      ],
      "path": "packages/client/ui-trajectory",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-ui-workspace",
      "name": "@deepseek-ai/dsh-client-ui-workspace",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 14,
      "implementation": "注册工作区浏览区与 Session 行动作：apply 创建 UiWorkspaceService 与视图 store，用 ctx.slots.provideRoot 提供全局 workspaces hook（src/client/index.ts:117-121），向 'sidebar.workspaces' 注册 WorkspaceBrowser 并声明 directoryFlow、会话菜单/行动作、行装饰等子槽（src/client/index.ts:257-277），向 'conversation.hero.workspace' 注册 WorkspacePicker（src/client/index.ts:307-315）。随后把 pin/rename/fork/archive 四个行动作、rename/archive 对话框与 toast 注入对应槽，并安装工作区快捷键（src/client/index.ts:200,282-306）。",
      "provides": [
        "slot sidebar.workspaces（WorkspaceBrowser）与子槽 directoryFlow/session.menu.item/session.row.action/session.row.leading/session.row.hover",
        "slot conversation.hero.workspace（WorkspacePicker）与子槽 conversation.hero.workspace.directoryFlow",
        "slot shell.overlay 的 session-rename / session-archive / row-toast 表面",
        "ctx.uiWorkspace 服务（会话导航、pin/archive/fork、目录选择与浏览）",
        "全局 useWorkspaces hook（slots.provideRoot）与工作区快捷键"
      ],
      "path": "packages/client/ui-workspace",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-ui-agent-preset",
      "name": "@deepseek-ai/dsh-client-ui-agent-preset",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 15,
      "implementation": "浏览器半用 AgentPresetSettingsController/AgentPresetSectionController/AgentPresetSeatController 三个控制器驱动同一份 preset 名册：apply 先把 ctx.configForms.developerTools 作为唯一门控（关闭时清空暂存并重算所有 seat）(src/client/index.ts:104-111)，再经 ctx.inject(['slots','conversation','sessions','uiWorkspace']) 向 'conversation.hero.agentPreset' 注册新会话 chip、向 'conversation.session.header.actions' 以 order -10 注册会话头只读标签 (src/client/index.ts:153-196)，最后以 order 20 向 'settings.section' 注册名册设置段 (src/client/index.ts:223-230)。名册与默认值经 ctx.remote 读取 settings、并在 settings/document-updated 与 connection/reset 时统一 refresh (src/client/index.ts:127-145)。宿主半为空 apply，仅让插件出现在 Loader (src/index.ts:9)。",
      "provides": [
        "slot: conversation.hero.agentPreset (新会话界面的 preset 选择 chip，注入 agentPresetSeat/developerTools hooks)",
        "slot: conversation.session.header.actions#agent-preset (order -10 的会话头只读 preset 标签)",
        "slot: settings.section#agent-presets (General settings 中的 preset 名册段：选择、设为默认、组合只读视图、进入 Creator)",
        "Locale 命名空间 settings.agentPreset (zh/en 字典，经 LocaleNamespaceMap 合并声明)",
        "导出类型 AgentPresetSeatState/AgentPresetSectionState/AgentPresetSettingsState 与 writeDefaultPreset"
      ],
      "path": "packages/client/ui-agent-preset",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-ui-brand-official",
      "name": "@deepseek-ai/dsh-client-ui-brand-official",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 15,
      "implementation": "官方品牌占位插件：apply 先在进程环境上判 DSH_CLIENT_BUILD_PROFILE !== 'official' 直接返回，非官方构建不注册任何东西 (src/client/index.ts:17)。官方构建下用嵌套 slots.inject 加 generator 一次性装配两个注册：'sidebar.brand.mark' 落 OfficialBrandMark、'sidebar.brand.name' 落 OfficialBrandName，任一失败则整体回滚 (src/client/index.ts:18-22)。conversation hero 品牌位不在此注册，仍走声明包的动画鱼回退。组件用 ui-primitives 渲染 (src/client/Brand.tsx:1)。",
      "provides": [
        "slot: sidebar.brand.mark (官方侧边栏品牌标志，仅 official 构建注册)",
        "slot: sidebar.brand.name (官方侧边栏品牌名，仅 official 构建注册)"
      ],
      "path": "packages/client/ui-brand-official",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-ui-commands",
      "name": "@deepseek-ai/dsh-client-ui-commands",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 15,
      "implementation": "以 CommandUiRuntime(Service，注册为 ctx.commandUi) 提供 '/' 命令面：构造时经 ctx.get('inputTriggers').registerSource 注册 trigger '/' 的 source，并建 CommandDirectory 做 capability-keyed 目录缓存、PopupSelectController 做每会话弹层 (src/client/service.ts:76-130)。候选合成把 Host 目录与客户端 contribution 按可用性合并、按 rankByName 排序，host 与 contribution 重名时 fail loud (src/client/service.ts:1-14, 97-128)。apply 注册 command 字典、ctx.plugin(CommandUiRuntime)，再把 PopupSelectView 以 order 1 放进 'conversation.input.overlay'，注入面按 sessionId 经 sessions.scope 解出该会话 popup (src/client/index.ts:58-75)。",
      "provides": [
        "ctx.commandUi (CommandUiRuntime：'/' 命令 source、客户端命令贡献注册表、每会话 popupSelect 控制器)",
        "slot: conversation.input.overlay#command-popup (order 1 的命令弹层 PopupSelectView)",
        "Locale 命名空间 command",
        "本地事件 command/executed(sessionId, name, result) 发射",
        "上抛 CommandUiRuntime/CommandDirectory/PopupSelectController/filterOptions 与 CommandUiContract/CommandContribution 等类型"
      ],
      "path": "packages/client/ui-commands",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-ui-directory-picker-browse",
      "name": "@deepseek-ai/dsh-client-ui-directory-picker-browse",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 15,
      "implementation": "浏览器半把应用内「选择工作区目录」对话框装进 ui-workspace 的两个 directory-flow 洞：apply 先事务式注册 zh/en 两份 directory-browser 字典（第二份失败则回滚第一份）(src/client/index.ts:32-76)，再用嵌套 slots.inject 加 generator 同时向 'conversation.hero.workspace.directoryFlow' 与 'sidebar.workspaces.directoryFlow' 注册同一个 BrowseDirectoryFlow (src/client/index.ts:86-94)。注入面把洞的 owner 会话适配到对话框：确认目录即 onPicked、关闭即 onCancel，listDirectory/createDirectory 转发 ctx.uiWorkspace (src/client/flow.ts:24-43, src/client/index.ts:78-82)。",
      "provides": [
        "slot: conversation.hero.workspace.directoryFlow (BrowseDirectoryFlow 应用内目录浏览对话框)",
        "slot: sidebar.workspaces.directoryFlow (同一对话框在侧边栏工作区流的占位)",
        "Locale 命名空间 directory-browser (zh/en 字典)",
        "组件 DirectoryBrowser (应用内目录浏览/新建文件夹对话框)"
      ],
      "path": "packages/client/ui-directory-picker-browse",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-client-ui-directory-picker-native",
      "name": "@deepseek-ai/dsh-client-ui-directory-picker-native",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 15,
      "implementation": "无渲染的原生目录流占位：apply 先读全局 globalThis.__DSH_DIRECTORY_PICKER__（Desktop preload 桥），存在则用 desktop.pick()，否则退回 ctx.uiWorkspace.pickDirectory() (src/client/index.ts:21-25)，再以 generator 事务式把 NativeDirectoryFlow 同时注册进 ui-workspace 的两个 directory-flow 洞 (src/client/index.ts:29-37)。组件本身返回 null，用 useRef 的 armed/alive 保证每次 open 上升沿只发起一次选取、只报告一次结果，卸载即整体丢弃结果 (src/client/flow.ts:25-64)。",
      "provides": [
        "slot: conversation.hero.workspace.directoryFlow (NativeDirectoryFlow 无渲染原生选择器占用)",
        "slot: sidebar.workspaces.directoryFlow (同上的侧边栏占位)",
        "组件 NativeDirectoryFlow (每次 open 恰发起一次原生/Host 目录选取)"
      ],
      "path": "packages/client/ui-directory-picker-native",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-client-ui-plugin-manager",
      "name": "@deepseek-ai/dsh-client-ui-plugin-manager",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 15,
      "implementation": "客户端半在 apply 中创建 PluginManagerController，订阅 Host 的 plugin-manager/changed、install-log、install-state 与 connection/reset 事件，仅在有快照时刷新（src/client/index.ts:85-92）。随后用 slots.inject('main') 注册 main 面板 'plugins'，并声明 plugins.item / bundle.activation / bundle.config / row.config / detail.* 等子槽作为页面配置扩展点（src/client/index.ts:100-120）；同时把 ctx.pluginNavigation 以 reflect.provide 暴露供跨插件打开某 bundle（src/client/index.ts:122-128），并把 Plugins 入口注册进 sidebar.panellist（index.ts:130）。Host 半 src/index.ts 默认导出 PluginRegistryProbe，用并行 HTTPS ping 探测 npm/npmmirror 注册表并缓存结果（src/index.ts:31-84）。",
      "provides": [
        "main 面板 'plugins'（PluginManagerPage，并声明 plugins.item / plugins.bundle.activation / plugins.bundle.config / plugins.row.config / plugins.detail.actions / plugins.detail.badge / plugins.detail.section 子槽）",
        "ctx.pluginNavigation.openBundle (跨插件导航并打开指定 bundle 详情视图)",
        "sidebar.panellist 条目 'plugins'（PluginsPanelIcon 侧栏入口）",
        "ctx.pluginRegistryProbe (Host 侧 PluginRegistryProbe Remote 服务：探测最快 npm 注册表)"
      ],
      "path": "packages/client/ui-plugin-manager",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-ui-reference",
      "name": "@deepseek-ai/dsh-client-ui-reference",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 15,
      "implementation": "注册一个 '@' 输入触发源：候选阶段先确保目标 Session 已 retain 且历史 open，再并行发起 fileReferences.list 与 sessionReferenceResolver.candidates（src/client/index.ts:60-76），失败通道降级为空集；随后分别映射文件候选（含目录 drill 语义与父目录描述，index.ts:212-242）与会话候选（区分子会话/普通会话并附工作区与相对时间，index.ts:244-260）。onPick 把候选 value 反解为 file/session：文件返回可插入引用文本，目录在 drill 动作下保留继续下钻（index.ts:96-135）；openReference 则经 sidebarRight.openResource 打开文件地址（index.ts:143-151）。最后经 inputTriggers.registerSource 挂载（index.ts:158）。",
      "provides": [
        "ctx.inputTriggers 的 '@' 参考源（@文件 / @会话统一候选、分组、相对时间与工作区标签）",
        "目录下钻的面包屑 header 与 drill 继续语义",
        "参考插入/剪贴板序列化 codec 与文件引用在右侧栏打开（openReference）"
      ],
      "path": "packages/client/ui-reference",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-ui-schedule",
      "name": "@deepseek-ai/dsh-client-ui-schedule",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 15,
      "implementation": "以一份 Host 任务目录 CatalogSource 为中心：manager 读 remote.schedule.catalog / delete 并订阅 schedule/changed 与 connection/reset（src/client/index.ts:96-104），删除结果经 shell.overlay 的全局 toast 播报（index.ts:112）。apply 注册日程任务 tab 页型与侧栏 detail 页（index.ts:155-166）、main 面板 'schedules' 与侧栏入口（index.ts:168/178），并注册 scheduleTurnDefinition 让 schedule_create 的产物在 Turn 末尾以卡片呈现（index.ts:188-205）。会话头部 utilities 用每 Session 的独立 source 列活跃提醒（index.ts:208-229），sidebar.session.row.leading/hover 则投影共享目录给工作区行标记与悬浮列表（index.ts:231-241）。任务创建卡另经 schedule_create 结果与右栏 detail 绑定（schedule-turn.ts / task-tab-bindings.ts）。",
      "provides": [
        "main 面板 'schedules'（TaskManagerPage 任务管理页）+ sidebar.panellist 条目 TaskManagerIcon",
        "ctx.sidebarRightTabs 的日程任务页型 + sidebar.right.pane.tab / pane.tab.title 的任务详情页与标题",
        "conversation.session.header.utilities 条目 'schedule-catalog'（会话头部提醒目录与删除）",
        "conversation.chat.turnTail 条目 'schedule-created'（schedule_create 结果卡）",
        "sidebar.session.row.leading 条目 'schedule-mark' 与 sidebar.session.row.hover 条目 'schedule-tasks'（会话行任务标记与悬浮列表）",
        "shell.overlay 条目 'schedule.delete-toast'（全局删除结果提示）"
      ],
      "path": "packages/client/ui-schedule",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-ui-sidebar-browser",
      "name": "@deepseek-ai/dsh-client-ui-sidebar-browser",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 15,
      "implementation": "浏览器半把 `browser` tab 类型注册进 `ctx.sidebarRightTabs`（src/client/index.ts:74），并按是否存在协议版本 1 的桌面 carrier 选择 iframe 或 Electron 页面实现（src/client/index.ts:69-72、97-101）。面板主体经键控槽 `sidebar.right.pane.tab` 注册 BrowserBody，按 sessionId 复用控制器并支持行动作重绑（src/client/index.ts:75-95），标题经 `sidebar.right.pane.tab.title` 注册 BrowserTitle（src/client/index.ts:102-104）；另在 shortcuts 服务可见时注册 `browser.new` 命令（src/client/index.ts:46-66）。node half 为空 apply。",
      "provides": [
        "sidebarBrowser locale 命名空间字典",
        "sidebarRightTabs 注册 'browser' tab 类型定义（并扩展 SidebarRightTabParamsMap.browser 参数，src/client/index.ts:32-37）",
        "sidebar.right.pane.tab 键控条目 key=BROWSER_ID：浏览器面板 body（iframe / Electron webview 两实现）",
        "sidebar.right.pane.tab.title 键控条目 key=BROWSER_ID：浏览器标签标题",
        "browser.new 快捷键命令（primary+T）"
      ],
      "path": "packages/client/ui-sidebar-browser",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-ui-sidebar-documentpreview",
      "name": "@deepseek-ai/dsh-client-ui-sidebar-documentpreview",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 15,
      "implementation": "浏览器半把 `text` tab 类型注册进 `ctx.sidebarRightTabs`（src/client/index.ts:93），并新建 DocumentPreviewRegistry 经 `ctx.reflect.provide('documentPreviews', ...)` 暴露为扩展点 seam（src/client/index.ts:90-92、54-58）。主体经键控槽 `sidebar.right.pane.tab` 注册 TextPreview 并声明 document 系列子槽（src/client/index.ts:103-117），标题经 `sidebar.right.pane.tab.title` 注册 TextTitle（src/client/index.ts:118-121）。随后依次装配 text/markdown/html/image/pdf/office/excel/code 八类渲染器（src/client/index.ts:122-129），每类都把定义注册进 documentPreviews 并注册 keyed 文档主体（如 src/client/code/index.ts:15-25）。node half 在 `webserver/index-inject` 时把校验过的预览配置注入页面全局（src/index.ts:14-16）。",
      "provides": [
        "sidebarDocumentPreview locale 命名空间字典",
        "ctx.documentPreviews（文件扩展名 → 文档渲染器定义注册表 seam，供各内建/外部预览类型注册）",
        "sidebarRightTabs 注册 'text' tab 类型定义（并扩展 SidebarRightResourceParamsMap.file 参数，src/client/index.ts:64-69）",
        "sidebar.right.pane.tab 键控条目 key=TEXTPREVIEW_ID：文档预览 body，声明 sidebar.right.tab.document / document.actions / document.unpreviewable / document.action 子槽",
        "sidebar.right.pane.tab.title 键控条目 key=TEXTPREVIEW_ID：预览标签标题",
        "内建 8 类文档渲染器（text / markdown / html / image / pdf / office / excel / code）",
        "Host 侧页面全局 __DSH_DOCUMENT_PREVIEW_CONFIG__（预览缓存配置）"
      ],
      "path": "packages/client/ui-sidebar-documentpreview",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-ui-sidebar-files",
      "name": "@deepseek-ai/dsh-client-ui-sidebar-files",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 15,
      "implementation": "浏览器半把 `files` tab 类型注册进 `ctx.sidebarRightTabs`（src/client/index.ts:67），并在 shortcuts 服务可见时注册 `workspace.files` 命令（primary+P，src/client/index.ts:46-66）。面板 body 经键控槽 `sidebar.right.pane.tab` 注册 FilesBody，其注入面由 `filesFace(createList(ctx.remote), createWatch(ctx.remote))` 组合（src/client/index.ts:70-75）；标题经 `sidebar.right.pane.tab.title` 注册 FilesTitle（src/client/index.ts:76-79）。node half 为空 apply。",
      "provides": [
        "sidebarFiles locale 命名空间字典",
        "sidebarRightTabs 注册 'files' tab 类型定义",
        "sidebar.right.pane.tab 键控条目 key=FILES_ID：工作区文件浏览 body",
        "sidebar.right.pane.tab.title 键控条目 key=FILES_ID：标签标题",
        "workspace.files 快捷键命令（primary+P）"
      ],
      "path": "packages/client/ui-sidebar-files",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-ui-sidebar-terminal",
      "name": "@deepseek-ai/dsh-client-ui-sidebar-terminal",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 15,
      "implementation": "浏览器端交互式终端插件：apply 在 ctx.sidebarRightTabs 注册 kind='terminal' 的多开标签类型（src/client/index.ts:71-74），并用 ctx.effect 订阅 sidebarRight.openTabs 快照做 retain/释放，保证只有打开的终端标签持有后台进程（src/client/index.ts:33-38）。它把 TerminalGuide、LazyTerminalBody、TerminalTitle 分别注入 sidebar.right.tab.guide.entry、sidebar.right.pane.tab、sidebar.right.pane.tab.title 三个座位（src/client/index.ts:86-101），并注册 'terminal.new' 快捷键与终端关闭处理器（src/client/index.ts:54-69,75-77）。",
      "provides": [
        "sidebarRightTabs 注册 'terminal' 标签类型（标题/引导图标/多开）",
        "slot sidebar.right.tab.guide.entry 的终端新建引导 (TerminalGuide)",
        "slot sidebar.right.pane.tab 的终端主体 (LazyTerminalBody，跟随 theme 快照)",
        "slot sidebar.right.pane.tab.title 的终端标题 (TerminalTitle)",
        "快捷键命令 terminal.new（Ctrl+`）与 'terminal' 关闭处理器"
      ],
      "path": "packages/client/ui-sidebar-terminal",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-ui-skill",
      "name": "@deepseek-ai/dsh-client-ui-skill",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 15,
      "implementation": "在输入触发菜单注册 '/' 的 skill 引用源：构造 InputTriggerSource（trigger='/'、name='skill'、order=2），实现 candidates/warm/lexicon/openReference/onPick（src/client/index.ts:159-226）。目录按 session 单飞缓存并调用 ctx.remote.skills.list RPC，先等待会话初始历史 open 成功（src/client/index.ts:107-141）。同时注册 'tool.call.toolview' 的 'skill' 键 toolview 与 'skill' 字典（src/client/index.ts:80-84），并在 agent-preset/selected 与 connection/reset 时失效缓存（src/client/index.ts:230-231）。",
      "provides": [
        "inputTriggers 源：trigger '/'，name 'skill'（候选/预热/词典/打开引用/选中回填）",
        "slot tool.call.toolview key='skill' 的 SkillRow 专用渲染",
        "locale 命名空间 'skill' 字典"
      ],
      "path": "packages/client/ui-skill",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-ui-subagent",
      "name": "@deepseek-ai/dsh-client-ui-subagent",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 15,
      "implementation": "子代理目录、导航与只读 composer 宿主：selectReadOnlySubagent 依据会话 subagent.address.mode 与 parentAvailable 判定是否接管 composer（src/client/index.ts:37-49），apply 经 ctx.slots.inject 向 conversation.session.header.lineage、conversation.session.header.actions、conversation.composer 三处注册组件并注入打开子会话/侧栏动作（src/client/index.ts:74-103）。sidebar-chat 子模块注册 'subagentchat' 资源协议、右侧栏标签类型、sidebar.chat.conversation 槽，并用 SessionProvider 绑定子会话渲染内嵌对话（src/client/sidebar-chat/index.tsx:176-201）。",
      "provides": [
        "slot conversation.session.header.lineage / conversation.session.header.actions 的子代理谱系与目录动作",
        "slot conversation.composer 的只读子代理 composer 接管",
        "资源协议 'subagentchat'（ResourceProvider）与 sidebarRightTabs kind 'subagentchat' 标签类型",
        "slot sidebar.right.pane.tab key '@deepseek-ai/dsh-client-ui-subagent' 与子槽 sidebar.chat.conversation"
      ],
      "path": "packages/client/ui-subagent",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-ui-workflow-run",
      "name": "@deepseek-ai/dsh-client-ui-workflow-run",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 15,
      "implementation": "注册 durable workflow-run 会话节点：apply 用 ctx.uiConversation.events.register 挂载 workflowRunDefinition（src/client/index.ts:27），并向 'conversation.chat.node' 注册 key='workflow-run' 的 WorkflowRunPanel，注入 openSession 用于打开成员子会话（src/client/index.ts:29-36）。workflow-definition.ts 从工具 workflow agent start/end 事件折叠出 phase/member 状态并产出 keyed Chat 数据（src/client/workflow-definition.ts:41-60）。",
      "provides": [
        "ConversationNodeDefinition 'workflow-run'（注册进 uiConversation.events）",
        "slot conversation.chat.node key='workflow-run' 的 WorkflowRunPanel 渲染",
        "ChatNodeDataMap 'workflow-run' 数据契约"
      ],
      "path": "packages/client/ui-workflow-run",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-experimental-client-ui-agent-team",
      "name": "@deepseek-ai/dsh-experimental-client-ui-agent-team",
      "group": "G13",
      "group_name": "实验特性",
      "layer": 15,
      "implementation": "Host 半边为空 `apply()`，行为完全在浏览器侧（src/index.ts:4）。Client 侧 `registerAgentTeamUi()` 注册 agent-team locale 字典，并把 Team 动作注入 conversation header 的 `conversation.session.header.actions` 槽（src/client/mount.ts:29-62）。打开成员时先用会话的 subagent address 归一到 Lead Session，再经 `uiWorkspace.openSession` 打开父会话或 continuable 子会话（src/client/mount.ts:32-51）。",
      "provides": [],
      "path": "packages/experimental/client-ui-agent-team",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-client-ui-chat",
      "name": "@deepseek-ai/dsh-client-ui-chat",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 16,
      "implementation": "Chat 目标插件：apply 先 registerConversationNodes 注册约 14 个 ConversationNodeDefinition 与 process 分组 (src/client/conversation-nodes/register.ts:22-38)，再由 registerChatNodeRenderers 把 'conversation.chat.node' 的 15 个 key（user/steering/context/turn-trigger/system-prompt/assistant-step/command/manual-compaction/compaction/model-retry/turn-error/turn-max-tokens/turn-process/turn-tail/unknown）注册为渲染器 (src/client/chat/register-node-renderers.ts:30-75)。apply 通过 ctx.uiSession.provide 暴露 chat hook 源 (src/client/apply.ts:111-114)，以 order 0 注册 'conversation.view#chat'（携 chatStore 与 conversation.chat.node/turnTail/assistant-actions 子槽）(src/client/apply.ts:177-258)，并在 shell.overlay 挂配额通知宿主、settings.general.item 挂 3 个偏好行、conversation.composer.dock 挂 StatsPills、conversation.approval.detail 挂 ApprovalCommand (src/client/apply.ts:263-286)。宿主半经 schemastery 暴露 transcriptView/performanceUsage/linkOpening 三个设置字段 (src/index.ts:18-39)。",
      "provides": [
        "conversation.view#chat (Chat 对话视图，order 0，label view.chat)",
        "conversation.chat.node 的 15 个 keyed 渲染器，及子槽 conversation.chat.turnTail / conversation.chat.assistant-actions / conversation.chat.commandview",
        "ctx.uiSession 标准 hooks.chat (框架 provide：Chat 快照源，EMPTY_CHAT_SNAPSHOT 兜底)",
        "slot: shell.overlay#chat.quota-notice (配额失败通知宿主，子槽 shell.quota-notice chain/root)",
        "slot: conversation.composer.dock#stats (StatsPills 用量统计)",
        "slot: conversation.approval.detail (ApprovalCommand：解析关联工具调用的命令)",
        "settings.general.item 三项：transcript-view / link-opening / performance-usage",
        "Locale 命名空间 chat (zh/en)",
        "上抛 ChatNodeDataMap/ChatNodeStore/ChatSnapshot/ChatFileMentions 等公开类型与 createChatStore/EMPTY_CHAT_SNAPSHOT/isRunningTool/isSettledTool"
      ],
      "path": "packages/client/ui-chat",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-ui-message-feedback",
      "name": "@deepseek-ai/dsh-client-ui-message-feedback",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 16,
      "implementation": "每个 Session 惰性构造一个 FeedbackSurface，把消息级反馈对象层与对话框控制器绑在一起：消息目标走 remote.messageFeedback.rate，Session 目标走 remote.sessionFeedback.record（src/client/surface.ts:14-38）。apply 中向 conversation.chat.assistant-actions 注册 Like/Dislike 条目（src/client/index.ts:98）、向 conversation.input.overlay 注册反馈对话框（src/client/index.ts:115），并以 ctx.provide('feedbackUi') 暴露给其他插件打开草稿（src/client/index.ts:88）。connect/reset 时只重取已读过的非冷反馈（src/client/index.ts:91-95），并通过 commandUi.decorate 挂 /feedback 命令装饰（src/client/index.ts:136）。对话框状态机由 FeedbackDialogController 用快照 store 维护，成功关草稿并发确认 toast、失败保留草稿并发布错误码（src/client/dialog.ts:87-115）。",
      "provides": [
        "ctx.feedbackUi (打开指定 Session 反馈草稿的服务，不直接提交)",
        "conversation.chat.assistant-actions 条目 'feedback'（MessageFeedbackActions 赞/踩控件）",
        "conversation.input.overlay 条目 'feedback-dialog'（FeedbackDialog 对话框与确认/失败 toast）",
        "commandUi 的 /feedback 命令装饰（裸调用打开对话框，带参仍走 Host 命令）"
      ],
      "path": "packages/client/ui-message-feedback",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-ui-model-selection",
      "name": "@deepseek-ai/dsh-client-ui-model-selection",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 16,
      "implementation": "先 ctx.plugin(ModelDirectoryResolver) 挂上 ctx.modelDirectories（src/client/index.ts:138），该服务用 WeakMap-with-values 为每个 Session 惰性建一个 ModelDirectory，并订阅 connection/reset 与 llm/adapters-updated 等事件刷新进程级目录（src/client/service.ts:46-73）。apply 再用同一目录注册两个入口：/model 的 commandUi popupSelect 装饰（src/client/index.ts:145）与 composer 的 conversation.input.model 座位（src/client/index.ts:182）。popup 选项由 optionsOf 拍平目录（失败组列出但不可选，src/client/index.ts:75-101），选择经 selectionOf 反解并按 session/selectModel 提交（src/client/index.ts:116-131）。",
      "provides": [
        "ctx.modelDirectories (ModelDirectoryResolver：每 Session 共享的模型目录解析服务)",
        "commandUi 的 /model popupSelect 装饰（列出 provider/model 行、当前项高亮、失败组只读）",
        "conversation.input.model 座位（composer 侧栏同名模型选择菜单，与 popup 共用同一 Session 目录状态）"
      ],
      "path": "packages/client/ui-model-selection",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-ui-permission-presets",
      "name": "@deepseek-ai/dsh-client-ui-permission-presets",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 16,
      "implementation": "apply 在 Host 的 /permission 命令上挂 popupSelect 装饰：选项读进程级权限目录 PermissionCatalogDirectory，当前值读 Session 的 permissions 投影（src/client/index.ts:176-195）；选择统一经本地 submit 提交 `/permission <preset>` 命令行，从而与 argued 路径写同一条链路（src/client/index.ts:122-131）。同目录也被 composer 的 conversation.input.permission 座位复用（src/client/index.ts:167），并由 PermissionPresetSettingsController 在 General 设置行写入 defaultPreset（含 revision 校验与 mirror 折叠，src/client/settings-store.ts:88-131）。Full access / Auto review 行带显式风险确认（src/client/index.ts:80-105）。",
      "provides": [
        "commandUi 的 /permission popupSelect 装饰（当前会话权限档位选择、Full access/Auto 风险确认）",
        "conversation.input.permission 座位（composer 权限档位菜单，与 popup 共用进程目录）",
        "settings.general.item 条目 'permission'（新会话默认权限档位的设置行）"
      ],
      "path": "packages/client/ui-permission-presets",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-ui-settings-agent-loop",
      "name": "@deepseek-ai/dsh-client-ui-settings-agent-loop",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 16,
      "implementation": "浏览器半在 apply 中注册 `settings.agentLoop` 字典并把 AgentLoopCardController 绑定到 Host 侧 `agent-loop` 设置命名空间的 staged form（src/client/index.ts:43-46）；待 Host 服务该命名空间后，经 `ctx.slots.inject('plugins.item')` 把卡片注册进 Plugins 页（src/client/index.ts:47-49）。控制器用 `settingsNumberField('maxParallelToolCalls')` 构造 SettingsFormModel，并把表单状态投影为 store 快照与 actions 注入面（src/client/agent-loop-card-controller.ts:44-59）。卡片按 `view === 'summary'` 输出一行描述，否则渲染只含并行工具调用上限的 SettingsForm（src/client/AgentLoopCard.tsx:20-40）。node half 为空 apply，仅用于让该插件出现在宿主 Loader（src/index.ts:10）。",
      "provides": [
        "settings.agentLoop locale 命名空间字典（zh/en 文案）",
        "plugins.item 槽位条目 id='agent-loop' (order 20)：agent 循环并行工具调用上限设置卡片",
        "AgentLoopCardFace 注入面（staged form actions + useAgentLoopCard 快照）"
      ],
      "path": "packages/client/ui-settings-agent-loop",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-ui-settings-plugin-inventory",
      "name": "@deepseek-ai/dsh-client-ui-settings-plugin-inventory",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 16,
      "implementation": "浏览器半把只读 Host 插件清单注册为 Plugins 设置段的 tab（`settings.plugins.tab` id='all' order 10，src/client/index.ts:56-63）。注入面提供 list()（经 `ctx.remote.pluginInventory.list()`，src/client/index.ts:37-43）、presetName()（经 agent-preset 字典解析内置预设名，src/client/index.ts:46-48）、resolveText 以及 clientSync 快照与重试（src/client/index.ts:49-54）。组件按 agent 预设组与全局平面两组渲染可折叠插件卡片，含搜索、启用状态标签与 Fiber 阶段指示（src/client/PluginInventorySettingsTab.tsx:236-579）。node half 为空 apply（src/index.ts:4）。",
      "provides": [
        "settings.pluginInventory locale 命名空间字典",
        "settings.plugins.tab 槽位条目 id='all' (order 10)：只读 Host 插件清单 tab（预设分组 + 全局平面 + 搜索 + 客户端模块同步状态）"
      ],
      "path": "packages/client/ui-settings-plugin-inventory",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-ui-settings-shell",
      "name": "@deepseek-ai/dsh-client-ui-settings-shell",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 16,
      "implementation": "浏览器半在 Host 服务 bash 或 pwsh 命名空间时，把 shell 设置卡片注册进 Plugins 页的 `plugins.item`（id='shell' order 10，src/client/index.ts:50-52）。它按实际服务的命名空间选择控制器（`served.has(PWSH_NS) ? pwsh : bash`，src/client/index.ts:51），两个 ShellCardController 各自绑定 `bash`/`pwsh` 命名空间的 staged form 并在 effect 中 dispose（src/client/index.ts:47-49）。node half 为空 apply（src/index.ts:10）。",
      "provides": [
        "settings.shell locale 命名空间字典",
        "plugins.item 槽位条目 id='shell' (order 10)：shell 执行器命令超时与单流输出上限设置卡片（按平台绑定 bash 或 pwsh 命名空间）"
      ],
      "path": "packages/client/ui-settings-shell",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-ui-settings-subagent",
      "name": "@deepseek-ai/dsh-client-ui-settings-subagent",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 16,
      "implementation": "浏览器半把 Subagent 设置页注册进 `plugins.item`（id='subagent' order 30，src/client/index.ts:85-92），页面把委派上限控制器（绑 `subagent` 命名空间）与模型选择控制器（绑 `subagent-model-selection` 命名空间）合成一个注入面（src/client/index.ts:62-69、91）。它订阅 Host 推送的 `llm/adapters-updated` 与 `settings/document-updated` 事件刷新模型目录（src/client/index.ts:72-79），并在 `connection/reset` 时重置连接态（src/client/index.ts:80-83）。node half 为空 apply（src/index.ts:11）。",
      "provides": [
        "settings.subagent locale 命名空间字典",
        "plugins.item 槽位条目 id='subagent' (order 30)：子代理委派上限 + 可选模型选择设置卡片",
        "subagent-card-controller 合成的注入面（limits face 与 model selection face 合一，一份保存）"
      ],
      "path": "packages/client/ui-settings-subagent",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-ui-settings-web-search",
      "name": "@deepseek-ai/dsh-client-ui-settings-web-search",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 16,
      "implementation": "浏览器半在 Host 服务 `web-search-deepseek` 命名空间时，把 Web Search 卡片注册进 `plugins.item`（id='web-search' order 40，src/client/index.ts:57-59）。控制器绑定该命名空间的 staged form（src/client/index.ts:48-49），并经 `ctx.remote.$on('credentials/reference-updated')` 在别处写入的密钥变更时刷新凭据态（src/client/index.ts:53-56）——注释说明这是该页能感知 Host 侧凭据更新的唯一信号。node half 为空 apply（src/index.ts:11）。",
      "provides": [
        "settings.webSearch locale 命名空间字典",
        "plugins.item 槽位条目 id='web-search' (order 40)：web 搜索提供者的 key / endpoint / 单次请求预算设置卡片"
      ],
      "path": "packages/client/ui-settings-web-search",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-experimental-client-ui-voice-input",
      "name": "@deepseek-ai/dsh-experimental-client-ui-voice-input",
      "group": "G13",
      "group_name": "实验特性",
      "layer": 16,
      "implementation": "Host 半边为空 `apply()`，行为在浏览器侧（src/index.ts:3）。Client 入口把生成的 speech Remote contribution 经 `ctx.remote.$mount` 挂载为实验命名空间，然后注册 UI（src/client/index.ts:13-14、src/client/mount.ts:60-65）：locale 字典、录音集合生命周期、readiness 观察、composer `conversation.input.activity` 的 VoiceInput 槽，以及 voice-input bundle 的配置/激活槽（src/client/mount.ts:19-51）。动作层把 transcribe/configure/prepare 委派给 `ctx.remote.speech`（src/client/mount.ts:33-40）。",
      "provides": [],
      "path": "packages/experimental/client-ui-voice-input",
      "source_layer": "L3",
      "assembled_in": []
    },
    {
      "id": "dsh-host-directory-picker-auto",
      "name": "@deepseek-ai/dsh-host-directory-picker-auto",
      "group": "G20",
      "group_name": "宿主服务",
      "layer": 16,
      "implementation": "在 apply() 中一次性采样宿主事实（绑定的 ctx.webServer.host、process.platform、SSH 启动、DISPLAY/WAYLAND_DISPLAY 与 Linux chooser 二进制），经 resolveDirectoryPickerBackend 纯函数判定该用 native 还是 browse 交互（src/index.ts:62-69、src/resolve.ts:49-55）。随后用 ctx.loader.create 把该交互的宿主后端包与客户端界面包作为真实 Loader 条目挂到内存根树，并按逆序 dispose 卸载（src/index.ts:70-103）。probe.ts 提供 canExecute/hasLinuxChooserBinary 探测 Linux 的 zenity/kdialog（src/probe.ts:20-44）。",
      "provides": [
        "自适应目录选择交互装配（按宿主事实在 loader 根树挂载 native/browse 的后端+客户端条目对，src/index.ts:88-94）"
      ],
      "path": "packages/host/directory-picker-auto",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-ui-attachment",
      "name": "@deepseek-ai/dsh-client-ui-attachment",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 17,
      "implementation": "纯呈现插件：apply 只依赖 slots，把 ComposerAttachments 注册进 'conversation.input.attachments'，把 MessageImages 分别注册进 'conversation.message.images'、'conversation.trajectory.images' 与 'tool.call.images' 四个洞 (src/client/index.ts:16-33)。拖拽逻辑是独立的文档级监听器 installDocumentDropEvents，以 dragDepth 计数判断拖入/拖出、用 webkitGetAsEntry 识别目录，并在 drop 时回调 onAddFiles(files, directories) (src/client/drop-events.ts:9-87)。图片渲染用 dsh-attachment 的 ImageAttachmentRef 与 primitives 完成 (src/MessageImage.tsx:2-5)。宿主半为空 apply (src/index.ts)。",
      "provides": [
        "slot: conversation.input.attachments (输入框附件条 ComposerAttachments)",
        "slot: conversation.message.images (消息图片画廊 MessageImages)",
        "slot: conversation.trajectory.images (轨迹视图图片画廊)",
        "slot: tool.call.images (工具调用图片画廊，复用消息画廊渲染器)",
        "组件 AttachmentRail/DropOverlay/FileCard 与文档级文件拖放监听器 installDocumentDropEvents"
      ],
      "path": "packages/client/ui-attachment",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-ui-deliverables",
      "name": "@deepseek-ai/dsh-client-ui-deliverables",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 17,
      "implementation": "浏览器半把交付物三面装进既有洞：在 'conversation.chat.turnTail' 注册 DeliverablesTail（变更文件卡与交付卡，子槽 deliverables.file.actions）(src/client/index.ts:61-81)，在 'tool.call.toolview' 以 key 'present' 注册 PresentRow (src/client/index.ts:82-84)，再在 sidebarRight 注册 changes-review tab 类型、在 'sidebar.right.pane.tab' 注册 ReviewTab（子槽 deliverables.review.file.actions）(src/client/index.ts:86-100)。最后 ctx.provide('chatFileMentions') 提供终版回复中对产出/交付文件的 inline-code 提及链接 (src/client/index.ts:101-112)。宿主半在 system-prompt 注册 Web 文件引用指引节，并由 present-open 提供已声明文件的鉴权 native open (src/index.ts:29-36)。",
      "provides": [
        "slot: conversation.chat.turnTail#dsh-client-ui-deliverables (变更文件卡与交付卡；子槽 deliverables.file.actions list/session)",
        "slot: tool.call.toolview#present (present 工具行 PresentRow)",
        "sidebarRightTabs 类型 changes-review + slot: sidebar.right.pane.tab#changes-review (ReviewTab；子槽 deliverables.review.file.actions list/session)",
        "服务 chatFileMentions (ctx.provide：终版 prose 的文件提及链接，Chat 视图经 ctx.get 消费，缺省即关断)",
        "Locale 命名空间 deliverables",
        "上抛 changesReviewAddress/parseChangesReviewAddress/CHANGES_REVIEW_ADDRESS 与 ChangesSummary/ChangesDiff 类型",
        "宿主侧 system-prompt 节 ui:deliverable-file-references (FILE_REFERENCE_PROMPT)"
      ],
      "path": "packages/client/ui-deliverables",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-ui-goal",
      "name": "@deepseek-ai/dsh-client-ui-goal",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 17,
      "implementation": "GoalBar 停靠条：apply 先在 ctx.uiConversation.events 注册 goal-command-input 定义、注册 goal 字典，再把 GoalCommandInputView 以 key 'command-input' 注册进 'conversation.chat.node' (src/client/index.ts:68-75)，并把 GoalDock 以 order 10 注册进 'conversation.input.dock' (src/client/index.ts:92-144)。注入面为每会话建 createGoalActivationSource（读 session.projections.faceOf('goal') 并订阅 goal/activation-changed 与 connection/reset），再经 ctx.remote.goals 暴露 edit/pause/resume/clear 四个携带投影 CAS ref 的改动动词 (src/client/index.ts:97-142; src/client/slots.ts:47-63)。宿主半为空 apply (src/index.ts:9)。",
      "provides": [
        "slot: conversation.chat.node#command-input (GoalCommandInputView)",
        "slot: conversation.input.dock#goal (order 10 的 GoalBar 停靠条)",
        "Locale 命名空间 goal",
        "会话投影响应面 hooks.goalActivation 与改动动词 onEdit/onPause/onResume/onClear (GoalBarInjected)",
        "SessionReferenceSourceMap 键 goalActivation (等待初始历史与 RPC 结果的活跃读取)",
        "上抛 GoalBar/GoalDock 组件与 GoalActionResult/GoalBarActions 类型"
      ],
      "path": "packages/client/ui-goal",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-ui-plan",
      "name": "@deepseek-ai/dsh-client-ui-plan",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 17,
      "implementation": "apply 先注册 planDefinition 为会话节点定义、注册 plan 资源 provider、再向 ctx.sidebarRightTabs 注册 plan/preview 页型（src/client/index.ts:63-71），使提交的计划可从日志重建为右侧预览。随后注册五个界面面：Turn 末尾的 PlanCards（src/client/index.ts:79）、review 动作（index.ts:97）、侧栏 pane.tab/title（index.ts:109/112）与 composer 的 PlanChip（index.ts:116）。计划身份由 submittedPlan 从 tool/call 或 PTC 事件解析出 callId 与首行标题（src/client/plan.ts:33-58），再用 dsh-resource://plan/... 地址编解码做持久化（src/client/plan.ts:65-107）；退出计划模式走 remote.commands.execute('/plan off')（src/client/index.ts:116-124）。",
      "provides": [
        "conversation.chat.turnTail 条目 PlanCards（Turn 末尾持久计划卡，读 'submitted-plan' Turn 数据源）",
        "conversation.plan-review.actions 条目 PlanReviewOpen（计划评审打开动作 + 评审窗口 store）",
        "conversation.input.plan 座位 PlanChip（composer 计划模式指示与退出）",
        "sidebar.right.pane.tab / sidebar.right.pane.tab.title 的 plan 预览页与标题",
        "ctx.uiConversation 的 plan 会话节点定义 + ctx.resources 的 plan 资源 provider + ctx.sidebarRightTabs 的 plan 页型"
      ],
      "path": "packages/client/ui-plan",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-ui-settings-account",
      "name": "@deepseek-ai/dsh-client-ui-settings-account",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 17,
      "implementation": "仅在桌面渲染器下生效（apply 开头检测 globalThis.dshDesktop，src/client/index.ts:42）。桌面半 src/index.ts 注册 webserver/index-inject 以注入联系方式配置（src/index.ts:50）。客户端核心是 account 状态流：订阅 ctx.remote.$stream({name:'account'})，逐帧 publish 账户视图并在首次登录成功时初始化默认模型（src/client/index.ts:150-176）；refresh 并行读 profile/balance，notices 控制器读/确认未通知奖励（index.ts:64-93）。UI 面注册 settings.launcher（AccountMenu）、settings.section（登录后才有 AccountSection，index.ts:265-282）、settings.models.sign-in 的 AccountOnboarding、shell.quota-notice 的 AccountQuotaNotice，以及桌面引导与原生平台 overlay（index.ts:230-260）。",
      "provides": [
        "settings.launcher 条目 AccountMenu（账户头像/菜单）",
        "settings.section 条目 'account'（仅凭据已存储时注册的账户设置区）",
        "settings.models.sign-in 条目 AccountOnboarding（登录/引导面板）",
        "shell.quota-notice 条目 AccountQuotaNotice（额度耗尽提示）",
        "shell.overlay 条目 'desktop-onboarding' 与 'account.platform-page'（桌面引导与原生平台页宿主）",
        "Host 侧账户联系信息配置注入（src/index.ts 的 webserver/index-inject）"
      ],
      "path": "packages/client/ui-settings-account",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-session-log-export",
      "name": "@deepseek-ai/dsh-session-log-export",
      "group": "G34",
      "group_name": "会话检索",
      "layer": 17,
      "implementation": "以 fflate 流式 Zip 把单个会话的逻辑日志（header 行 + 逐事件 JSONL）连同子会话与引用附件打包导出：serializeSessionLog/readSessionLogText 生成规范 JSONL，sessionLogZipEntries 按 zip 顺序产出根日志、子代理日志与 media/files 条目，streamSessionLogZip 用 ReadableStream + 背压闸门（ResponseCapacityGate）增量压缩并支持取消 (src/archive.ts:110-169, 347-404, 545-616)。Host 侧注册 /export 命令与 /api/session.export 的 GET/HEAD 路由，校验 sessionId/includeDescendants 并返回 400/404/500 (src/index.ts:78-168)。浏览器侧提供 ctx.sessionLogDownload 控制器并挂载会话头部菜单项，订阅 command/executed 在 /export 成功后触发下载 (src/client/index.ts:36-63)。",
      "provides": [
        "ctx.sessionLogDownload (浏览器端会话日志导出下载控制器，供会话头部动作与 /export 命令共享)",
        "Web /export 命令与 /api/session.export ZIP 下载路由 (Host 侧流式导出能力)"
      ],
      "path": "packages/session-query/session-log-export",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    },
    {
      "id": "dsh-client-ui-open-in-app",
      "name": "@deepseek-ai/dsh-client-ui-open-in-app",
      "group": "G06",
      "group_name": "客户端 UI 包",
      "layer": 18,
      "implementation": "apply 构造 OpenInAppController（加载 Host 应用列表/持久化选择）与 OpenInAppPathController（经 Session Remote 判定桌面可用性、查关联应用、执行 open/reveal），并把二者分发到五处槽（src/client/index.ts:123-125）。会话头部 utilities 槽注册「Open In...」分体按钮，注入应用列表/选择/启动进度 hooks 与图标 URL（src/client/index.ts:80-99）；侧栏文档预览的两个槽与 deliverables 两个槽注册路径动作，失败经 Toast 播报（src/client/open-failure-toast.tsx:4）。另注册 workspace.openLocal 快捷键，busy/无目标时给出阻塞原因（src/client/index.ts:59-77）。",
      "provides": [
        "conversation.session.header.utilities 条目 'open-in-app'（会话头部「在应用中打开」分体按钮）",
        "sidebar.right.tab.document.actions / sidebar.right.tab.document.unpreviewable 条目（文档预览的打开/定位路径动作）",
        "deliverables.file.actions / deliverables.review.file.actions 条目（交付与变更文件卡的路径动作）",
        "ctx.shortcuts 命令 workspace.openLocal（在本地应用中打开当前工作区）"
      ],
      "path": "packages/client/ui-open-in-app",
      "source_layer": "L2",
      "assembled_in": [
        "web-app"
      ]
    }
  ],
  "edges": [
    {
      "from": "cordis-plugin-group",
      "to": "cordis-plugin-loader",
      "mechanism": "E1",
      "evidence": "package.json:33 peerDep + src/index.ts:1 import Group",
      "purpose": "复用 Loader 的 Group 实现",
      "type_only": false
    },
    {
      "from": "cordis-plugin-include",
      "to": "cordis-plugin-loader",
      "mechanism": "E1+E2",
      "evidence": "package.json:33 peerDep + src/index.ts:1 import EntryGroup/EntryTree + src/index.ts:160 static inject=['loader']",
      "purpose": "继承 EntryTree/EntryGroup 并注入 loader 写入挂载结果",
      "type_only": false
    },
    {
      "from": "dsh-acp",
      "to": "dsh-agent",
      "mechanism": "E1+E2",
      "evidence": "src/session.ts:13 import + src/session.ts:128 ctx.agents.create",
      "purpose": "组合并驱动被代理 Agent，安装模型选择引用",
      "type_only": false
    },
    {
      "from": "dsh-acp",
      "to": "dsh-llm",
      "mechanism": "E1+E2",
      "evidence": "src/session.ts:14 import + src/index.ts:20 errorChain",
      "purpose": "构造用户消息、错误链与模型目录查询",
      "type_only": false
    },
    {
      "from": "dsh-acp",
      "to": "dsh-mcp-client",
      "mechanism": "E1+E2",
      "evidence": "src/mcp.ts:8 import + src/mcp.ts:32 agentCtx.plugin(McpClient, config)",
      "purpose": "把 ACP 声明的 MCP 服务器挂成 Agent 作用域 MCP 客户端",
      "type_only": false
    },
    {
      "from": "dsh-acp",
      "to": "dsh-session",
      "mechanism": "E1+E2",
      "evidence": "src/session.ts:15 import + src/index.ts:229 ctx.sessions.flush",
      "purpose": "会话身份、头与已提交事件的投影来源",
      "type_only": false
    },
    {
      "from": "dsh-acp",
      "to": "dsh-token-meter",
      "mechanism": "E2",
      "evidence": "src/updates.ts:6 import + src/updates.ts:95 ctx.get('tokenMeter')",
      "purpose": "向客户端上报上下文占用（usage_update）",
      "type_only": false
    },
    {
      "from": "dsh-acp",
      "to": "dsh-user-approval",
      "mechanism": "E2",
      "evidence": "src/index.ts:52 import + src/index.ts:155 ctx.on('approval/request')",
      "purpose": "声明合并权限 waterfall 并提供一次性决策",
      "type_only": false
    },
    {
      "from": "dsh-agent",
      "to": "dsh-invariants",
      "mechanism": "E1+E2",
      "evidence": "src/invariant.ts:4 import + src/invariant.ts:12 inject(['invariants']) + src/invariant.ts:32 register",
      "purpose": "作为 invariant companion 注册 agent 生命周期不变量",
      "type_only": false
    },
    {
      "from": "dsh-agent",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/model-selection.ts:14 import + package.json:42 peerDep",
      "purpose": "复用 LlmCallConfig/ReasoningEffortId 及 createUserMessage/boundContextSummary 生成模型切换通知",
      "type_only": true
    },
    {
      "from": "dsh-agent",
      "to": "dsh-scope",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:12 import scopeTarget + src/dispatch.ts:10",
      "purpose": "用 scopeTarget/Scoped 构建 agent 作用域载体",
      "type_only": false
    },
    {
      "from": "dsh-agent",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/index.ts:14 import type + src/types.ts:10",
      "purpose": "复用 SessionId/SessionEvent/SessionLogOffset 会话身份与日志词汇，并依赖 agent.session 语义",
      "type_only": true
    },
    {
      "from": "dsh-agent",
      "to": "dsh-session-projection",
      "mechanism": "E1",
      "evidence": "src/projection.ts:2 + src/types.ts:58 声明合并",
      "purpose": "向会话投影表声明 turnBoundary/inbox 投影条目",
      "type_only": true
    },
    {
      "from": "dsh-agent",
      "to": "dsh-system-prompt",
      "mechanism": "E1",
      "evidence": "src/dispatch.ts:12 import type AssembleContext + src/runtime-types.ts:17",
      "purpose": "assembleContextFor 返回 AssembleContext，并向该类型声明合并 agent 字段",
      "type_only": true
    },
    {
      "from": "dsh-agent",
      "to": "dsh-workspace",
      "mechanism": "E1+E2",
      "evidence": "src/archive-admission.ts:12 import type + src/archive-admission.ts:27,34 事件订阅",
      "purpose": "回答 workspace/session-activity 的 turn 家族，并在 workspace/session-stop 时取消运行中的 agent",
      "type_only": false
    },
    {
      "from": "dsh-agent-default-model",
      "to": "dsh-agent",
      "mechanism": "E1",
      "evidence": "package.json:34 peerDep + src/index.ts:12 import type ModelSelection",
      "purpose": "复用 Agent 侧的 ModelSelection 选择类型",
      "type_only": true
    },
    {
      "from": "dsh-agent-default-model",
      "to": "dsh-config-editor",
      "mechanism": "E1+E2",
      "evidence": "package.json:31 dependency + src/index.ts:14 import type + src/index.ts:85 ctx.get('configEditor')",
      "purpose": "将默认模型选择持久化写入 profile",
      "type_only": false
    },
    {
      "from": "dsh-agent-default-model",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "package.json:35 peerDep + src/index.ts:13 import ReasoningEffortId",
      "purpose": "把存储的 effort 字符串投影为适配器推理强度 id",
      "type_only": false
    },
    {
      "from": "dsh-agent-default-model",
      "to": "dsh-settings",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:6 import type + src/index.ts:60 ctx.inject(['settings'])",
      "purpose": "关闭 settings 自动模式并使默认模型从 settings 读取",
      "type_only": false
    },
    {
      "from": "dsh-agent-instructions",
      "to": "dsh-agent",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:14 import type Agent/PreStepDecision + src/index.ts:315 ctx.on('agent/pre-step') + src/state.ts:7 import type Agent",
      "purpose": "在 agent 步前把工作区指令上下文拼入请求消息序列，并读取 agent.session 的可见表面状态",
      "type_only": false
    },
    {
      "from": "dsh-agent-instructions",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/index.ts:15 import createUserMessage + src/state.ts:8 createUserMessage + src/state.ts:9 import type Message",
      "purpose": "把渲染后的指令文本构造成带 source 标记的 user 消息注入上下文",
      "type_only": false
    },
    {
      "from": "dsh-agent-instructions",
      "to": "dsh-session",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:16 import type Session/UserMessage + src/index.ts:184 type import + src/index.ts:307 ctx.on('session/event') + src/state.ts:10 import type Session/UserMessage",
      "purpose": "读写会话表面历史以判定指令是否已注入，并在 step/end 边界触发刷新",
      "type_only": false
    },
    {
      "from": "dsh-agent-instructions",
      "to": "dsh-session-projection",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:17 type-only import + src/index.ts:34 inject ['sessionProjections'] + src/index.ts:287 ctx.sessionProjections.stateOf(session, 'turnBoundary')",
      "purpose": "依赖 turnBoundary 投影判断当前步是否开放，决定指令刷新是立即排队还是延迟到步结束",
      "type_only": false
    },
    {
      "from": "dsh-agent-instructions",
      "to": "dsh-tools",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:18 import type ToolExecution/ToolExecutionResult/ToolExecutionToken + src/index.ts:343 ctx.on('tools/result')",
      "purpose": "从成功的 read/write/edit 工具结果中提取 file_path，把被触及路径转成指令刷新线索",
      "type_only": false
    },
    {
      "from": "dsh-agent-loop",
      "to": "dsh-agent",
      "mechanism": "E1+E2",
      "evidence": "src/agent.ts:18 import + src/index.ts:24 + src/index.ts:331 inject(['agents'])",
      "purpose": "实现 AgentFactory 并经 ctx.agents 工厂/注册表发布与登记 agent",
      "type_only": false
    },
    {
      "from": "dsh-agent-loop",
      "to": "dsh-invariants",
      "mechanism": "E1+E2",
      "evidence": "src/invariant.ts:8 import + src/invariant.ts:16 inject(['invariants']) + src/invariant.ts:65 register",
      "purpose": "注册 loop 请求可重建性不变量",
      "type_only": false
    },
    {
      "from": "dsh-agent-loop",
      "to": "dsh-llm",
      "mechanism": "E1+E2",
      "evidence": "src/agent.ts:19 import + src/index.ts:25 + src/index.ts:331 inject(['llm'])",
      "purpose": "构造并执行模型请求，复用 LlmCallConfig/PreparedLlmCall 等",
      "type_only": false
    },
    {
      "from": "dsh-agent-loop",
      "to": "dsh-scope",
      "mechanism": "E1+E2",
      "evidence": "src/agent.ts:28-29 import createScope + src/agent.ts:130 createScope(loopCtx, this)",
      "purpose": "为每个 agent 铸造作用域上下文",
      "type_only": false
    },
    {
      "from": "dsh-agent-loop",
      "to": "dsh-session",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:26-27 import + src/index.ts:331 inject(['sessions']) + src/index.ts:618-622 ctx.sessions.enter/announce",
      "purpose": "创建/恢复会话并把 agent 会话登记进 SessionStore",
      "type_only": false
    },
    {
      "from": "dsh-agent-loop",
      "to": "dsh-session-projection",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:30-31 import + src/index.ts:364-365 ctx.sessionProjections.register + src/index.ts:331 inject(['sessionProjections'])",
      "purpose": "注册 turnBoundary 与 inbox 投影定义",
      "type_only": false
    },
    {
      "from": "dsh-agent-loop",
      "to": "dsh-system-prompt",
      "mechanism": "E1+E2",
      "evidence": "src/agent.ts:32-33 import + src/index.ts:370-372 ctx.systemPrompt.variable + src/index.ts:331 inject(['systemPrompt'])",
      "purpose": "注册 provider/model/cwd 提示变量并驱动提示装配",
      "type_only": false
    },
    {
      "from": "dsh-agent-loop",
      "to": "dsh-tools",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:29 import + src/tool-calls.ts:17 + src/index.ts:331 inject(['tools'])",
      "purpose": "调度工具调用执行流水线",
      "type_only": false
    },
    {
      "from": "dsh-agent-preset",
      "to": "cordis-plugin-loader",
      "mechanism": "E1",
      "evidence": "src/index.ts:3 import EntryGroup",
      "purpose": "借用 EntryGroup 语义保留声明式子插件表达式",
      "type_only": false
    },
    {
      "from": "dsh-agent-preset",
      "to": "dsh-agent-preset-registry",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:5-6 type import PresetDefinition + src/index.ts:13 static inject 'agentPresets' + src/index.ts:28 ctx.agentPresets.register",
      "purpose": "把本行声明的预设定义提交给注册表激活",
      "type_only": false
    },
    {
      "from": "dsh-agent-preset-registry",
      "to": "cordis-plugin-include",
      "mechanism": "E1",
      "evidence": "src/index.ts:6 import entryListSchema",
      "purpose": "以 Loader dialect 序列化预设声明的 entry 列表供查看",
      "type_only": false
    },
    {
      "from": "dsh-agent-preset-registry",
      "to": "cordis-plugin-loader",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:52 inject 'loader' + src/composition-inventory.ts:3 EntryTree/isJsExpr + src/mount.ts:3 EntryTree + src/index.ts:137 this.owner.loader.await()",
      "purpose": "挂载、审计并定位预设的 Loader entry 树",
      "type_only": false
    },
    {
      "from": "dsh-agent-preset-registry",
      "to": "dsh-agent",
      "mechanism": "E1",
      "evidence": "src/index.ts:8 type import Agent + src/index.ts:325 agent.ctx、src/index.ts:326 agent.session",
      "purpose": "绑定并读取活动 Agent 的预设版次",
      "type_only": true
    },
    {
      "from": "dsh-agent-preset-registry",
      "to": "dsh-invariants",
      "mechanism": "E1+E2",
      "evidence": "src/invariant.ts:7 type InvariantInstaller + src/invariant.ts:68 ctx.invariants.register",
      "purpose": "注册预设隔离与 Agent 绑定不变式",
      "type_only": false
    },
    {
      "from": "dsh-agent-preset-registry",
      "to": "dsh-scope",
      "mechanism": "E1",
      "evidence": "src/index.ts:5 bindScopeParent/createScope/scopeOf + src/mount.ts:6 scopeOf/scopeParentOf",
      "purpose": "建立 Agent scope 与 preset standing scope 的父子绑定关系",
      "type_only": false
    },
    {
      "from": "dsh-agent-preset-registry",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/types.ts:2 type SessionId + src/index.ts:326 agent.session.append('agent-preset/selected')",
      "purpose": "把预设选择写入会话日志",
      "type_only": true
    },
    {
      "from": "dsh-agent-preset-registry",
      "to": "dsh-session-projection",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:66 ctx.sessionProjections.register + src/session.ts:17 type ProjectionDefinition + src/index.ts:321 stateOf",
      "purpose": "注册 agentPreset 投影并读取 turnBoundary 判定空会话",
      "type_only": false
    },
    {
      "from": "dsh-agent-preset-registry",
      "to": "dsh-settings",
      "mechanism": "E2",
      "evidence": "src/index.ts:10 type import + src/index.ts:67 ctx.inject(['settings'], ...) settings.configure({ auto: false })",
      "purpose": "关闭 settings 自动持久化以自管 selectedDefault",
      "type_only": false
    },
    {
      "from": "dsh-agent-preset-registry",
      "to": "dsh-system-prompt",
      "mechanism": "E1+E2",
      "evidence": "src/invariant.ts:10 type import + src/invariant.ts:48 ctx.on('system-prompt/assemble')",
      "purpose": "在模型组装水线校验 Agent 已加入某预设",
      "type_only": false
    },
    {
      "from": "dsh-agent-preset-registry",
      "to": "dsh-tools",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:11 type import + src/index.ts:308 this.owner.emit('tools/change')",
      "purpose": "预设重绑后通知工具目录变更",
      "type_only": false
    },
    {
      "from": "dsh-agent-tool-presentation",
      "to": "dsh-tools",
      "mechanism": "E1+E2",
      "evidence": "package.json:33 peerDep + src/index.ts:23 import type + src/index.ts:35 inject(['tools']) + src/index.ts:64 ctx.tools.presentAs",
      "purpose": "在 scope 上声明该组合的工具呈现模式",
      "type_only": false
    },
    {
      "from": "dsh-api-account-controller",
      "to": "dsh-agent",
      "mechanism": "E2",
      "evidence": "src/index.ts:5 import type {} + src/index.ts:82 ctx.agents.list()",
      "purpose": "枚举运行中的 Agent 以判断账号任务",
      "type_only": false
    },
    {
      "from": "dsh-api-gateway",
      "to": "dsh-client-connection",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:14 import + src/index.ts:233 connection.rpc.intercept",
      "purpose": "承载 /api RPC 与对等 Peer 身份",
      "type_only": false
    },
    {
      "from": "dsh-api-gateway",
      "to": "dsh-host-webserver",
      "mechanism": "E2",
      "evidence": "src/index.ts:16 import type + src/index.ts:261 webServer.registerUpgrade",
      "purpose": "注册 WebSocket upgrade 路由",
      "type_only": false
    },
    {
      "from": "dsh-api-job-controller",
      "to": "dsh-api-gateway",
      "mechanism": "E1",
      "evidence": "src/client/service.ts:11 import + src/client/model.ts:5 import",
      "purpose": "客户端 Remote 载体",
      "type_only": false
    },
    {
      "from": "dsh-api-job-controller",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/client/model.ts:12 import type SessionId",
      "purpose": "客户端会话身份类型",
      "type_only": true
    },
    {
      "from": "dsh-api-remotes",
      "to": "dsh-agent",
      "mechanism": "E1",
      "evidence": "src/index.ts:5 import type Agent",
      "purpose": "waterfall 请求携带的 Agent 类型",
      "type_only": true
    },
    {
      "from": "dsh-api-remotes",
      "to": "dsh-agent-preset-registry",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:4 import remote + src/client/index.ts:75 import types",
      "purpose": "装配 agent preset registry 命名空间",
      "type_only": false
    },
    {
      "from": "dsh-api-remotes",
      "to": "dsh-api-account-controller",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:6 import remote",
      "purpose": "装配 account 命名空间",
      "type_only": false
    },
    {
      "from": "dsh-api-remotes",
      "to": "dsh-api-gateway",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:6 import type + src/index.ts:42 ctx.typertGateway.registerRemoteEvents",
      "purpose": "注册转发事件源并使用客户端 Remote 载体",
      "type_only": false
    },
    {
      "from": "dsh-api-remotes",
      "to": "dsh-api-job-controller",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:23 import remote",
      "purpose": "装配 job 命名空间",
      "type_only": false
    },
    {
      "from": "dsh-api-remotes",
      "to": "dsh-api-session-controller",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:22 import remote + src/remote-events.ts:9 import remote-events",
      "purpose": "装配 session 命名空间与事件类型声明",
      "type_only": false
    },
    {
      "from": "dsh-api-remotes",
      "to": "dsh-api-settings-controller",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:7 import remote",
      "purpose": "装配 settings/credentials 命名空间",
      "type_only": false
    },
    {
      "from": "dsh-api-remotes",
      "to": "dsh-api-terminal-controller",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:25 import remote",
      "purpose": "装配 terminal 命名空间",
      "type_only": false
    },
    {
      "from": "dsh-api-remotes",
      "to": "dsh-api-workspace-controller",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:24 import remote",
      "purpose": "装配 workspace 命名空间",
      "type_only": false
    },
    {
      "from": "dsh-api-remotes",
      "to": "dsh-api-workspace-files",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:26 import remote",
      "purpose": "装配 workspaceFiles 命名空间",
      "type_only": false
    },
    {
      "from": "dsh-api-remotes",
      "to": "dsh-client-connection",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:88 import types",
      "purpose": "客户端连接类型再导出",
      "type_only": true
    },
    {
      "from": "dsh-api-remotes",
      "to": "dsh-client-file-upload",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:19 import remote + src/client/index.ts:51 import remote",
      "purpose": "装配文件上传命名空间",
      "type_only": false
    },
    {
      "from": "dsh-api-remotes",
      "to": "dsh-client-ui-plugin-manager",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:14 import remote + src/client/index.ts:37 import remote",
      "purpose": "装配插件管理 UI 探针命名空间",
      "type_only": false,
      "soft": true
    },
    {
      "from": "dsh-api-remotes",
      "to": "dsh-command-feedback",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:18 import remote + src/client/index.ts:50 import remote",
      "purpose": "装配命令反馈命名空间",
      "type_only": false
    },
    {
      "from": "dsh-api-remotes",
      "to": "dsh-commands",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:5 import remote + src/client/index.ts:71 import types",
      "purpose": "装配 commands 命名空间与事件签名",
      "type_only": false
    },
    {
      "from": "dsh-api-remotes",
      "to": "dsh-cordis-host-runner",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:12 import remote + src/client/index.ts:94 import remote",
      "purpose": "装配动态包运行器命名空间",
      "type_only": false
    },
    {
      "from": "dsh-api-remotes",
      "to": "dsh-goal",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:9 import remote + src/client/index.ts:43 import remote",
      "purpose": "装配 goal 命名空间",
      "type_only": false
    },
    {
      "from": "dsh-api-remotes",
      "to": "dsh-host-plugin-inventory",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:15 import remote + src/client/index.ts:38 import types",
      "purpose": "装配插件清单命名空间",
      "type_only": false
    },
    {
      "from": "dsh-api-remotes",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:11 import remote + src/client/index.ts:74 import types",
      "purpose": "装配 llm 命名空间",
      "type_only": false
    },
    {
      "from": "dsh-api-remotes",
      "to": "dsh-message-feedback",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:16 import remote + src/client/index.ts:48 import remote",
      "purpose": "装配消息反馈命名空间",
      "type_only": false
    },
    {
      "from": "dsh-api-remotes",
      "to": "dsh-office-to-pdf",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:8 import remote + src/client/index.ts:45 import remote",
      "purpose": "装配 office-to-pdf 命名空间",
      "type_only": false
    },
    {
      "from": "dsh-api-remotes",
      "to": "dsh-permission-presets",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:17 import remote + src/remote-events.ts:11 import types",
      "purpose": "装配权限预设命名空间与事件",
      "type_only": false
    },
    {
      "from": "dsh-api-remotes",
      "to": "dsh-plugin-manager",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:13 import remote + src/remote-events.ts:12 import types",
      "purpose": "装配插件管理命名空间与事件",
      "type_only": false
    },
    {
      "from": "dsh-api-remotes",
      "to": "dsh-schedule",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:10 import remote + src/client/index.ts:44 import remote",
      "purpose": "装配 schedule 命名空间",
      "type_only": false
    },
    {
      "from": "dsh-api-remotes",
      "to": "dsh-scope",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:13 import carrierKeyOf + package.json peerDependencies dsh-scope",
      "purpose": "从 waterfall 的 this 提取 carrier Agent 作用域",
      "type_only": false
    },
    {
      "from": "dsh-api-remotes",
      "to": "dsh-session-reference",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:20 import remote + src/client/index.ts:52 import remote",
      "purpose": "装配会话引用命名空间",
      "type_only": false
    },
    {
      "from": "dsh-api-remotes",
      "to": "dsh-settings",
      "mechanism": "E1",
      "evidence": "src/index.ts:28 import types",
      "purpose": "设置事件类型声明",
      "type_only": true
    },
    {
      "from": "dsh-api-remotes",
      "to": "dsh-subagent",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:21 import remote + src/client/index.ts:53 import remote",
      "purpose": "装配 subagent 命名空间与客户端类型",
      "type_only": false
    },
    {
      "from": "dsh-api-remotes",
      "to": "dsh-user-approval",
      "mechanism": "E1",
      "evidence": "src/index.ts:29 import type {}",
      "purpose": "审批 waterfall 事件签名",
      "type_only": true
    },
    {
      "from": "dsh-api-remotes",
      "to": "dsh-user-questions",
      "mechanism": "E1",
      "evidence": "src/index.ts:30 import type {}",
      "purpose": "用户提问 waterfall 事件签名",
      "type_only": true
    },
    {
      "from": "dsh-api-session-controller",
      "to": "dsh-agent",
      "mechanism": "E1+E2",
      "evidence": "src/agent.ts:5 import + src/agent.ts:437 ctx.agents.resume",
      "purpose": "Agent 创建/续跑与模型选择安装",
      "type_only": false
    },
    {
      "from": "dsh-api-session-controller",
      "to": "dsh-agent-default-model",
      "mechanism": "E2",
      "evidence": "src/agent.ts:9 import type {} + src/index.ts:302 ctx.agentDefaultModel.saveSelection",
      "purpose": "读取/保存部署默认模型",
      "type_only": false
    },
    {
      "from": "dsh-api-session-controller",
      "to": "dsh-agent-preset-registry",
      "mechanism": "E2",
      "evidence": "src/agent.ts:10 import + src/agent.ts:385 ctx.get('agentPresets')",
      "purpose": "解析并挂载 Agent 预设",
      "type_only": false
    },
    {
      "from": "dsh-api-session-controller",
      "to": "dsh-api-gateway",
      "mechanism": "E1+E2",
      "evidence": "src/client/scope.ts:4 import + src/client/sessions/manager.ts:15 import",
      "purpose": "客户端 Remote 载体与失败类型",
      "type_only": false
    },
    {
      "from": "dsh-api-session-controller",
      "to": "dsh-client-connection",
      "mechanism": "E1",
      "evidence": "src/media-references.ts:10 import + src/client/index.ts:5 import",
      "purpose": "媒体引用与客户端连接",
      "type_only": true
    },
    {
      "from": "dsh-api-session-controller",
      "to": "dsh-client-file-upload",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:10 import + src/index.ts:140 ctx.fileUploads.registerAgentResolver",
      "purpose": "上传收据解析与 Agent 解析登记",
      "type_only": false
    },
    {
      "from": "dsh-api-session-controller",
      "to": "dsh-commands",
      "mechanism": "E1+E2",
      "evidence": "src/commands.ts + src/client/sessions/remotes.ts:9 import types",
      "purpose": "命令注册表会话侧表面",
      "type_only": false
    },
    {
      "from": "dsh-api-session-controller",
      "to": "dsh-llm",
      "mechanism": "E1+E2",
      "evidence": "src/commands.ts:17 import + src/catalog.ts:24 ctx.llm.listProviders",
      "purpose": "消息构造、assistant 流与模型目录",
      "type_only": false
    },
    {
      "from": "dsh-api-session-controller",
      "to": "dsh-scope",
      "mechanism": "E1",
      "evidence": "src/skill-catalog.ts:7 import",
      "purpose": "作用域工具",
      "type_only": true
    },
    {
      "from": "dsh-api-session-controller",
      "to": "dsh-session",
      "mechanism": "E1+E2",
      "evidence": "src/agent.ts:12 import + src/agent.ts:189 ctx.sessions.get",
      "purpose": "会话身份、事件与 fork 种子",
      "type_only": false
    },
    {
      "from": "dsh-api-session-controller",
      "to": "dsh-session-projection",
      "mechanism": "E1+E2",
      "evidence": "src/agent.ts:286 ctx.sessionProjections.stateOf + src/control.ts:22 onChanged",
      "purpose": "会话投影状态与增量",
      "type_only": false
    },
    {
      "from": "dsh-api-session-controller",
      "to": "dsh-session-projection-cache",
      "mechanism": "E1",
      "evidence": "src/list.ts:8 import type {}",
      "purpose": "投影缓存类型面",
      "type_only": true
    },
    {
      "from": "dsh-api-session-controller",
      "to": "dsh-session-title",
      "mechanism": "E1+E2",
      "evidence": "src/commands.ts:22 import + src/client/sessions/manager.ts:23",
      "purpose": "会话标题命令与客户端投影",
      "type_only": false
    },
    {
      "from": "dsh-api-session-controller",
      "to": "dsh-settings",
      "mechanism": "E2",
      "evidence": "src/catalog.ts:5 import type {} + package.json peerDependencies dsh-settings(optional)",
      "purpose": "设置域参与模型/凭证表面",
      "type_only": false
    },
    {
      "from": "dsh-api-session-controller",
      "to": "dsh-skill",
      "mechanism": "E1",
      "evidence": "src/skill-catalog.ts:6 import",
      "purpose": "会话技能目录",
      "type_only": false
    },
    {
      "from": "dsh-api-session-controller",
      "to": "dsh-subagent",
      "mechanism": "E1+E2",
      "evidence": "src/history.ts:19 import + src/client/sessions/manager.ts:3 import",
      "purpose": "子代理所有权与客户端地址类型",
      "type_only": false
    },
    {
      "from": "dsh-api-session-controller",
      "to": "dsh-typert-registry",
      "mechanism": "E1",
      "evidence": "src/agent.ts:16 import type {}",
      "purpose": "Typert 注册表类型",
      "type_only": true
    },
    {
      "from": "dsh-api-session-controller",
      "to": "dsh-workspace",
      "mechanism": "E1+E2",
      "evidence": "src/archived-session-gate.ts:13 import + src/index.ts:111 inject 'workspaceRegistry'",
      "purpose": "工作区注册表与归档会话门控",
      "type_only": false
    },
    {
      "from": "dsh-api-settings-controller",
      "to": "dsh-settings",
      "mechanism": "E2",
      "evidence": "src/index.ts:14 import type + src/index.ts:217 ctx.get('settings')",
      "purpose": "设置 seam：describe/update/replace/mutate/prepareDocument",
      "type_only": false
    },
    {
      "from": "dsh-api-terminal-controller",
      "to": "dsh-agent",
      "mechanism": "E1",
      "evidence": "src/index.ts:4 import type Agent",
      "purpose": "Remote 方法以 Agent 作为 Session 所有者参数",
      "type_only": true
    },
    {
      "from": "dsh-api-terminal-controller",
      "to": "dsh-api-gateway",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:5 import + src/client/model.ts:5 import",
      "purpose": "客户端 Remote 载体",
      "type_only": false
    },
    {
      "from": "dsh-api-terminal-controller",
      "to": "dsh-sandbox-policy",
      "mechanism": "E2",
      "evidence": "src/index.ts:6 import type {} + src/index.ts:335 agent.ctx.get('sandboxPolicy')",
      "purpose": "取工作目录与沙箱工作区根",
      "type_only": false
    },
    {
      "from": "dsh-api-terminal-controller",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/index.ts:5 import type SessionId + src/client/bindings.ts:2 import",
      "purpose": "会话身份类型",
      "type_only": true
    },
    {
      "from": "dsh-api-workspace-controller",
      "to": "dsh-api-gateway",
      "mechanism": "E1",
      "evidence": "src/client/model.ts:5 import",
      "purpose": "客户端 Remote 载体",
      "type_only": false
    },
    {
      "from": "dsh-api-workspace-controller",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/types.ts:8 import type",
      "purpose": "会话身份类型",
      "type_only": true
    },
    {
      "from": "dsh-api-workspace-controller",
      "to": "dsh-storage-domain",
      "mechanism": "E1",
      "evidence": "src/feed.ts:5 import type DomainChanged",
      "purpose": "domain/changed 事件类型",
      "type_only": true
    },
    {
      "from": "dsh-api-workspace-controller",
      "to": "dsh-workspace",
      "mechanism": "E1+E2",
      "evidence": "src/commands.ts:4 import + src/index.ts:52 static inject 'workspaceRegistry'",
      "purpose": "工作区注册表 seam（全部命令与状态源）",
      "type_only": false
    },
    {
      "from": "dsh-api-workspace-files",
      "to": "dsh-api-gateway",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:9 import + src/client/remote.ts:6 import",
      "purpose": "客户端 Remote 载体",
      "type_only": true
    },
    {
      "from": "dsh-api-workspace-files",
      "to": "dsh-client-resources",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:10 import + src/client/provider.ts:24 import",
      "purpose": "客户端 file 资源 provider 注册",
      "type_only": true
    },
    {
      "from": "dsh-api-workspace-files",
      "to": "dsh-sandbox-policy",
      "mechanism": "E2",
      "evidence": "src/index.ts:27 import type {} + src/index.ts:188 static inject 'sandboxPolicy'",
      "purpose": "会话无 cwd 时的工作区根回退",
      "type_only": false
    },
    {
      "from": "dsh-api-workspace-files",
      "to": "dsh-session",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:28 import + src/index.ts:209 scope.sessions.get(sessionId)",
      "purpose": "把会话身份解析为工作区根",
      "type_only": false
    },
    {
      "from": "dsh-authorization",
      "to": "dsh-invariants",
      "mechanism": "E1+E2",
      "evidence": "src/invariant.ts:7 import InvariantInstaller + src/invariant.ts:14 inject ['invariants'] + src/invariant.ts:45 register",
      "purpose": "注册 single-flight 释放不变式，检测 settled 后 key 残留 in-flight",
      "type_only": false
    },
    {
      "from": "dsh-authorization",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/index.ts:31 import HarnessError",
      "purpose": "AuthorizationError 复用 HarnessError 稳定错误分类",
      "type_only": false
    },
    {
      "from": "dsh-bash-sandbox",
      "to": "dsh-bash-local",
      "mechanism": "E1",
      "evidence": "src/index.ts:25-26 import LocalBashExecutor 及 Config; src/index.ts:45 class extends LocalBashExecutor; package.json:31 peerDep",
      "purpose": "复用本地 bash 的执行生命周期、输出与 deadline 机制",
      "type_only": false
    },
    {
      "from": "dsh-bash-sandbox",
      "to": "dsh-sandbox-policy",
      "mechanism": "E2",
      "evidence": "src/index.ts:24 import type {}; src/index.ts:46 inject ['sandboxPolicy']; src/index.ts:72 ctx.sandboxPolicy.defaultMode",
      "purpose": "读取部署默认沙箱模式并解析每次调用的完整策略",
      "type_only": false
    },
    {
      "from": "dsh-client-connection",
      "to": "dsh-host-webserver",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:8 + src/index.ts:139 ctx.inject(['webServer']) + src/index.ts:158 webCtx.webServer.register",
      "purpose": "把 /api 路由和 recovery 注入表挂到 Web carrier 上",
      "type_only": false
    },
    {
      "from": "dsh-client-connection",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/client/api.ts:13-14",
      "purpose": "共享 LLM 相关品牌与类型，用于客户端 API 类型面",
      "type_only": true
    },
    {
      "from": "dsh-client-connection",
      "to": "dsh-scope",
      "mechanism": "E1",
      "evidence": "src/operator-peer.ts:10",
      "purpose": "构造 OperatorPeer 的作用域语义",
      "type_only": false
    },
    {
      "from": "dsh-client-connection",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/client/api.ts:12",
      "purpose": "共享客户端 SessionId/SessionEvent/StreamChunk 等协议类型",
      "type_only": true
    },
    {
      "from": "dsh-client-file-upload",
      "to": "dsh-agent",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:5 + src/index.ts:58 static inject 'agents' + src/index.ts:199 ctx.agents.get",
      "purpose": "以接收 Agent 及其 session 作为上传暂存的作用域与生命周期主体",
      "type_only": false
    },
    {
      "from": "dsh-client-file-upload",
      "to": "dsh-client-connection",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:7 + src/index.ts:58 inject 'connection' + src/index.ts:73 ctx.connection.fetch.register",
      "purpose": "在 Connection 的 fetch 注册表上挂原始字节上传路由",
      "type_only": false
    },
    {
      "from": "dsh-client-file-upload",
      "to": "dsh-commands",
      "mechanism": "E2",
      "evidence": "src/index.ts:8 + src/index.ts:58 inject 'commands' + src/index.ts:69 ctx.commands.registerFileReceiptResolver",
      "purpose": "让命令 prompt 能解析上传 receipt 为文件引用",
      "type_only": false
    },
    {
      "from": "dsh-client-file-upload",
      "to": "dsh-scope",
      "mechanism": "E1",
      "evidence": "src/index.ts:9",
      "purpose": "用 scopeOf 校验操作发生在目标 Agent 自身作用域内",
      "type_only": false
    },
    {
      "from": "dsh-client-file-upload",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/index.ts:10 + src/client/contract.ts:1 + src/http-route.ts:4",
      "purpose": "以 SessionId 寻址会话并观察 session/event 退役 receipt",
      "type_only": true
    },
    {
      "from": "dsh-client-hmr",
      "to": "dsh-client-modules",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:15 + src/index.ts:27 inject 'clientModules' + src/index.ts:148 ctx.clientModules.onGraphChanged",
      "purpose": "读取客户端模块图与 artifact 基线，并把重建事件反馈回图",
      "type_only": false
    },
    {
      "from": "dsh-client-hmr",
      "to": "dsh-host-webserver",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:16 + src/index.ts:27 inject 'webServer' + src/index.ts:181 ctx.webServer.register",
      "purpose": "挂载 /plugins/events SSE 路由",
      "type_only": false
    },
    {
      "from": "dsh-client-hmr",
      "to": "dsh-invariants",
      "mechanism": "E2",
      "evidence": "src/invariant.ts:7 + src/invariant.ts:14 inject 'invariants' + src/invariant.ts:59 ctx.invariants.register",
      "purpose": "注册包级不变量，检查 bundle 监视器不被泄漏",
      "type_only": false
    },
    {
      "from": "dsh-client-locale",
      "to": "dsh-client-ui-primitives",
      "mechanism": "E1",
      "evidence": "src/client/LanguageRow.tsx:9",
      "purpose": "Language 行复用共享 UI 原语",
      "type_only": false
    },
    {
      "from": "dsh-client-locale",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:18 + src/client/index.ts:554 inject 'slots' + src/client/index.ts:588 ctx.slots.installLocale",
      "purpose": "提供 ctx.slots 服务并安装 LocaleFace 供渲染机器合成 t 座位",
      "type_only": false
    },
    {
      "from": "dsh-client-locale",
      "to": "dsh-client-ui-settings",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:15 + src/client/index.ts:554 inject 'configForms' + src/client/index.ts:577 ctx.configForms.get",
      "purpose": "经 configForms 读取持久语言偏好并把 Language 行注册进设置区",
      "type_only": false
    },
    {
      "from": "dsh-client-locale",
      "to": "dsh-settings",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:2 + src/index.ts:31 ctx.inject(['settings']).settings.configure",
      "purpose": "声明 locale 命名空间的 settings 配置面（auto:false）",
      "type_only": false
    },
    {
      "from": "dsh-client-modules",
      "to": "cordis-plugin-loader",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:34 + src/index.ts:597 static inject 'loader' + src/index.ts:639 ctx.loader.entries()",
      "purpose": "以 Loader 行为输入扫描 dsh.client 声明并解析包真实位置",
      "type_only": false
    },
    {
      "from": "dsh-client-modules",
      "to": "dsh-host-webserver",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:35 + src/index.ts:653 ctx.inject(['webServer']) + src/index.ts:649 webCtx.webServer.register",
      "purpose": "注册 /plugins bundle 路由并向 index 注入启动脚本与全局图",
      "type_only": false
    },
    {
      "from": "dsh-client-modules",
      "to": "dsh-invariants",
      "mechanism": "E2",
      "evidence": "src/invariant.ts:8 + src/invariant.ts:15 inject 'invariants' + src/invariant.ts:44 ctx.invariants.register",
      "purpose": "注册包级不变量，校验模块注册表随 fiber 释放而清理",
      "type_only": false
    },
    {
      "from": "dsh-client-resources",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:7",
      "purpose": "类型面激活 ctx.slots 服务合并，参与渲染机器组装",
      "type_only": true
    },
    {
      "from": "dsh-client-shortcuts",
      "to": "dsh-client-locale",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:4 + src/client/index.ts:28 static inject 'locale' + src/client/index.ts:74 ctx.locale.subscribe",
      "purpose": "本地化键帽标签并在语言切换时刷新目录",
      "type_only": false
    },
    {
      "from": "dsh-client-shortcuts",
      "to": "dsh-client-ui-primitives",
      "mechanism": "E1",
      "evidence": "src/client/dom.ts:2 + src/client/native.ts:2",
      "purpose": "复用 UI 原语渲染/呈现键帽",
      "type_only": false
    },
    {
      "from": "dsh-client-shortcuts",
      "to": "dsh-host-webserver",
      "mechanism": "E2",
      "evidence": "src/index.ts:5 + src/index.ts:16 ctx.on('webserver/index-inject')",
      "purpose": "把键盘配置注入到服务的页面 index",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-agent-preset",
      "to": "dsh-agent-preset-registry",
      "mechanism": "E1",
      "evidence": "src/client/AgentPresetLabel.tsx:17 import @deepseek-ai/dsh-agent-preset-registry/types + src/client/locales.ts:114-115",
      "purpose": "消费 preset 组合类型与 display 文案",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-agent-preset",
      "to": "dsh-api-remotes",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:26-28 ctx.remote merge + src/client/index.ts:136 ctx.remote.$on('settings/document-updated')",
      "purpose": "读取 preset 名册并订阅设置文档变更",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-agent-preset",
      "to": "dsh-api-session-controller",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:20-21 SessionBinding 类型 + src/client/index.ts:83-86 ctx.sessions.binding/retainInfo",
      "purpose": "按会话解析 binding 与保留态以决定 seat 归属",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-agent-preset",
      "to": "dsh-client-locale",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:24-25 ctx.locale merge + src/client/index.ts:122 ctx.locale.register('settings.agentPreset')",
      "purpose": "注册并绑定 settings.agentPreset 字典",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-agent-preset",
      "to": "dsh-client-ui-conversation",
      "mechanism": "E1+E2",
      "evidence": "src/client/AgentPresetLabel.tsx:16 import @deepseek-ai/dsh-client-ui-conversation/client + src/client/index.ts:153 ctx.inject(['slots','conversation',...])",
      "purpose": "获取 conversation.hero.*/session.header.actions 槽声明与 conversation 作用域",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-agent-preset",
      "to": "dsh-client-ui-primitives",
      "mechanism": "E1",
      "evidence": "src/client/AgentPresetLabel.tsx:14 import @deepseek-ai/dsh-client-ui-primitives",
      "purpose": "复用基础 UI 组件渲染 chip 与设置行",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-agent-preset",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:31 import @deepseek-ai/dsh-client-ui-renderer/client",
      "purpose": "引入 ctx.slots 服务声明",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-agent-preset",
      "to": "dsh-client-ui-settings",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:30 SlotMap merge + src/client/index.ts:223 ctx.slots.inject('settings.section')",
      "purpose": "向设置壳注册 agent-presets 段",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-agent-preset",
      "to": "dsh-client-ui-workspace",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:32-33 ctx.uiWorkspace merge + src/client/index.ts:174 scope.uiWorkspace.startSession()",
      "purpose": "Creator 模式起草后落到新会话",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-agent-preset",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:22 import SessionId from @deepseek-ai/dsh-session/types",
      "purpose": "会话标识类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-approval",
      "to": "dsh-api-remotes",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:3 ctx.remote merge + src/client/index.ts:104 ctx.remote.$on('approval/request')",
      "purpose": "订阅审批请求瀑布",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-approval",
      "to": "dsh-api-session-controller",
      "mechanism": "E2",
      "evidence": "src/client/index.ts:4 + src/client/index.ts:43 ctx.sessions.scopeOf(owner)",
      "purpose": "把 Remote 监听者 owner 解析成会话 id",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-approval",
      "to": "dsh-client-locale",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:9 + src/client/index.ts:78 ctx.locale.register(NS)",
      "purpose": "注册 approval 字典与 resolveText",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-approval",
      "to": "dsh-client-shortcuts",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:10 ShortcutCommandId + src/client/index.ts:81-86 scope.shortcuts.registerFixed",
      "purpose": "注册 Enter/Esc 固定审批快捷键",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-approval",
      "to": "dsh-client-ui-conversation",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:5 ComposerChainProps + src/client/index.ts:91 ctx.slots.inject('conversation.composer')",
      "purpose": "占用会话编辑器槽位以接管审批",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-approval",
      "to": "dsh-client-ui-primitives",
      "mechanism": "E1",
      "evidence": "src/client/ApprovalPanel.tsx:3 import @deepseek-ai/dsh-client-ui-primitives",
      "purpose": "审批面板复用基础组件",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-approval",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:6 import @deepseek-ai/dsh-client-ui-renderer/client",
      "purpose": "引入 slots 服务声明",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-approval",
      "to": "dsh-client-ui-session",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:7 PendingInteractionPublisher + src/client/index.ts:88 ctx.uiSession.registerPendingInteraction",
      "purpose": "发布待决交互供会话 UI 呈现",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-approval",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/client/contract/slots.ts:2 import ToolCallId from @deepseek-ai/dsh-llm",
      "purpose": "关联工具调用标识类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-approval",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/client/contract/slots.ts:3 import SessionId from @deepseek-ai/dsh-session/types",
      "purpose": "会话标识类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-attachment",
      "to": "dsh-client-ui-chat",
      "mechanism": "E1+E2",
      "evidence": "src/client/MessageImages.tsx:1 import @deepseek-ai/dsh-client-ui-chat/client + src/client/index.ts:3 type merge",
      "purpose": "依赖 Chat 视图声明的 conversation.message.images 槽",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-attachment",
      "to": "dsh-client-ui-conversation",
      "mechanism": "E1+E2",
      "evidence": "src/client/drop-events.ts:2 ComposerAttachmentsProps + src/client/index.ts:16-27 ctx.slots.inject('conversation.*')",
      "purpose": "占据 composer/message/trajectory 图片槽位",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-attachment",
      "to": "dsh-client-ui-primitives",
      "mechanism": "E1",
      "evidence": "src/FileCard.tsx:1 import @deepseek-ai/dsh-client-ui-primitives",
      "purpose": "附件卡片与图片画廊的基础组件",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-attachment",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:5 merge + src/client/index.ts:16 ctx.slots.inject",
      "purpose": "引入并驱动槽位注册服务",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-attachment",
      "to": "dsh-client-ui-tool",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:6 merge + src/client/index.ts:30 ctx.slots.inject('tool.call.images')",
      "purpose": "占据工具调用图片槽",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-attachment",
      "to": "dsh-client-ui-trajectory",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:7 merge + src/client/index.ts:24 ctx.slots.inject('conversation.trajectory.images')",
      "purpose": "占据轨迹视图图片槽",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-brand-official",
      "to": "dsh-client-ui-primitives",
      "mechanism": "E1",
      "evidence": "src/client/Brand.tsx:1 import @deepseek-ai/dsh-client-ui-primitives",
      "purpose": "品牌标志与品牌名的呈现组件",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-brand-official",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:3 merge + src/client/index.ts:18 ctx.slots.inject",
      "purpose": "引入并驱动槽位注册服务",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-brand-official",
      "to": "dsh-client-ui-sidebar",
      "mechanism": "E1+E2",
      "evidence": "src/client/Brand.tsx:2 import @deepseek-ai/dsh-client-ui-sidebar/client + src/client/index.ts:18-21 ctx.slots.inject('sidebar.brand.*')",
      "purpose": "占据侧边栏品牌槽位",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-chat",
      "to": "dsh-agent",
      "mechanism": "E1",
      "evidence": "src/client/chat/ChatView.tsx:8 import @deepseek-ai/dsh-agent/types",
      "purpose": "agent 相关类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-chat",
      "to": "dsh-api-remotes",
      "mechanism": "E1",
      "evidence": "src/client/apply.ts:4 import @deepseek-ai/dsh-api-remotes/client",
      "purpose": "引入 ctx.remote 与转发事件声明",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-chat",
      "to": "dsh-api-session-controller",
      "mechanism": "E1+E2",
      "evidence": "src/client/apply.ts:5 SessionBinding + src/client/apply.ts:190 ctx.sessions.binding(sessionId)",
      "purpose": "按会话解析 binding 与事件源",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-chat",
      "to": "dsh-client-locale",
      "mechanism": "E1+E2",
      "evidence": "src/client/apply.ts:16 merge + src/client/apply.ts:116 ctx.locale.register(NS)",
      "purpose": "注册 chat 字典并绑定 t",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-chat",
      "to": "dsh-client-ui-approval",
      "mechanism": "E1",
      "evidence": "src/client/chat/ApprovalCommand.tsx:3 import type @deepseek-ai/dsh-client-ui-approval/client",
      "purpose": "消费 conversation.approval.detail 槽的 owner 契约",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-chat",
      "to": "dsh-client-ui-conversation",
      "mechanism": "E1+E2",
      "evidence": "src/client/apply.ts:6 ctx.uiConversation + src/client/apply.ts:177 ctx.slots.inject('conversation.view')",
      "purpose": "消耗 conversation 视图与节点注册表，注册 Chat 视图",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-chat",
      "to": "dsh-client-ui-input-trigger",
      "mechanism": "E1",
      "evidence": "src/client/apply.ts:11 merge + src/client/apply.ts:225 ctx.get('inputTriggers')",
      "purpose": "技能引用经触发管线打开",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-chat",
      "to": "dsh-client-ui-layout",
      "mechanism": "E1",
      "evidence": "src/client/apply.ts:18 merge + src/client/contract/slots.ts:15",
      "purpose": "Chat 面板布局约束",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-chat",
      "to": "dsh-client-ui-primitives",
      "mechanism": "E1",
      "evidence": "src/client/chat/AssistantMarkdown.tsx:4-5 + src/client/chat/ContextBody.tsx:8",
      "purpose": "聊天行/卡片的基础组件",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-chat",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1",
      "evidence": "src/client/apply.ts:19 merge",
      "purpose": "引入 slots 服务声明",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-chat",
      "to": "dsh-client-ui-session",
      "mechanism": "E1+E2",
      "evidence": "src/client/apply.ts:20 merge + src/client/apply.ts:111 ctx.uiSession.provide",
      "purpose": "向会话 UI 提供 chat hooks 标准位",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-chat",
      "to": "dsh-client-ui-settings",
      "mechanism": "E1+E2",
      "evidence": "src/client/apply.ts:21 merge + src/client/apply.ts:132 slots.inject('settings.general.item')",
      "purpose": "注册 Chat 三项 General 设置行",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-chat",
      "to": "dsh-client-ui-sidebar-browser",
      "mechanism": "E1",
      "evidence": "src/client/apply.ts:10 merge",
      "purpose": "浏览器 tab 类型声明",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-chat",
      "to": "dsh-client-ui-sidebar-documentpreview",
      "mechanism": "E1+E2",
      "evidence": "src/client/apply.ts:13 file 路由参数类型 + src/client/apply.ts:218 openResource",
      "purpose": "文件行号导航参数类型",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-chat",
      "to": "dsh-client-ui-sidebar-right",
      "mechanism": "E2",
      "evidence": "src/client/apply.ts:9 + src/client/apply.ts:218-229 ctx.sidebarRight.openResource/openTab",
      "purpose": "文件与外链送入右侧栏",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-chat",
      "to": "dsh-client-ui-workspace",
      "mechanism": "E2",
      "evidence": "src/client/apply.ts:22 + src/client/apply.ts:249 ctx.uiWorkspace.openSession",
      "purpose": "分叉后打开新会话",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-chat",
      "to": "dsh-commands",
      "mechanism": "E1",
      "evidence": "src/client/conversation-nodes/command.ts:7 import @deepseek-ai/dsh-commands/types",
      "purpose": "命令节点数据",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-chat",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/client/conversation-nodes/assistant.ts:6 + src/client/contract/slots.ts:2",
      "purpose": "assistant 消息/品牌类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-chat",
      "to": "dsh-llm-retry",
      "mechanism": "E1",
      "evidence": "src/client/conversation-nodes/assistant.ts:7 + retry.ts:5",
      "purpose": "模型重试节点与 turn 过程融合",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-chat",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/client/apply.ts:8 SessionId + src/client/contract/slots.ts:3",
      "purpose": "会话事件与标识类型",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-chat",
      "to": "dsh-session-stats",
      "mechanism": "E1",
      "evidence": "src/client/chat/StatsPills.tsx:13 import @deepseek-ai/dsh-session-stats/client",
      "purpose": "统计胶囊数据源",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-chat",
      "to": "dsh-session-turn-outline",
      "mechanism": "E1",
      "evidence": "src/client/chat/turn-rail-items.ts:9 import @deepseek-ai/dsh-session-turn-outline/client",
      "purpose": "轮次导航轨条目",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-chat",
      "to": "dsh-settings",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:2 import @deepseek-ai/dsh-settings + src/index.ts:38 ctx.inject(['settings'])",
      "purpose": "宿主侧投影 Chat 偏好为设置表单字段",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-chat",
      "to": "dsh-token-meter",
      "mechanism": "E1",
      "evidence": "src/client/chat/StatsPills.tsx:14 + src/client/conversation-nodes/turn-tail.ts:7",
      "purpose": "token 计量显示",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-chat",
      "to": "dsh-tools",
      "mechanism": "E1",
      "evidence": "src/client/conversation-nodes/tool.ts:7 + src/client/model/tool-call-tree.ts:2",
      "purpose": "工具调用节点与调用树",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-commands",
      "to": "dsh-api-remotes",
      "mechanism": "E1+E2",
      "evidence": "src/client/service.ts:19 + src/client/service.ts:108 ctx.remote.commands.list + src/client/service.ts:129 connection/reset",
      "purpose": "拉取 Host 命令目录并订阅变更",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-commands",
      "to": "dsh-api-session-controller",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:9 ISessions + src/client/service.ts:98 this.sessions()",
      "purpose": "按会话解析 scope 与 using",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-commands",
      "to": "dsh-client-locale",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:15 + src/client/index.ts:59 ctx.locale.register('command')",
      "purpose": "注册命令字典",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-commands",
      "to": "dsh-client-ui-conversation",
      "mechanism": "E2",
      "evidence": "src/client/index.ts:13 SlotMap merge + src/client/index.ts:64 slots.inject('conversation.input.overlay')",
      "purpose": "占据输入浮层槽位",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-commands",
      "to": "dsh-client-ui-input-trigger",
      "mechanism": "E1+E2",
      "evidence": "src/client/contract.ts:8 + src/client/service.ts:113-115 ctx.get('inputTriggers').registerSource",
      "purpose": "把 '/' 命令面注册成触发源",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-commands",
      "to": "dsh-client-ui-primitives",
      "mechanism": "E1",
      "evidence": "src/client/PopupSelectView.tsx:13 import + src/client/service.ts:26 rankByName",
      "purpose": "命令弹层组件与候选排序函数",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-commands",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:16 merge",
      "purpose": "引入 slots 服务声明",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-commands",
      "to": "dsh-client-ui-session",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:17 merge",
      "purpose": "会话 UI 声明合并",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-commands",
      "to": "dsh-commands",
      "mechanism": "E1",
      "evidence": "src/client/directory.ts:8-12 + src/client/service.ts:20 CommandResult",
      "purpose": "命令目录与结果类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-commands",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/client/directory.ts:9 import SessionId",
      "purpose": "会话标识类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-conversation",
      "to": "dsh-agent",
      "mechanism": "E1",
      "evidence": "src/client/contract/input.ts:10 + src/client/input/hub.ts:16",
      "purpose": "agent/initiator 类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-conversation",
      "to": "dsh-api-session-controller",
      "mechanism": "E1+E2",
      "evidence": "src/client/apply.ts:4 + src/client/apply.ts:130-137 scopedConversation(sessions, id)",
      "purpose": "按会话解析 scope 与 conversation 服务",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-conversation",
      "to": "dsh-api-workspace-controller",
      "mechanism": "E1",
      "evidence": "src/client/contract/slots.ts:6 + src/client/skeleton/ConversationContent.tsx:4",
      "purpose": "工作区状态以渲染工作区标题",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-conversation",
      "to": "dsh-client-file-upload",
      "mechanism": "E2",
      "evidence": "src/client/contract/slots.ts:5 + src/client/service.ts:19",
      "purpose": "浏览器 Worker 文件上传服务",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-conversation",
      "to": "dsh-client-locale",
      "mechanism": "E1+E2",
      "evidence": "src/client/apply.ts:10 merge + src/client/apply.ts:159 ctx.locale.register(NS)",
      "purpose": "注册 conversation 字典",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-conversation",
      "to": "dsh-client-shortcuts",
      "mechanism": "E1+E2",
      "evidence": "src/client/apply.ts:14 ShortcutCommandId + src/client/apply.ts:236 ctx.inject(['shortcuts'])",
      "purpose": "注册输入与停转固定快捷键",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-conversation",
      "to": "dsh-client-ui-layout",
      "mechanism": "E1",
      "evidence": "src/client/contract/slots.ts:15 import @deepseek-ai/dsh-client-ui-layout/client",
      "purpose": "会话内容布局约束",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-conversation",
      "to": "dsh-client-ui-primitives",
      "mechanism": "E1",
      "evidence": "src/client/apply.ts:5 IconPaperclipOutlineRegular",
      "purpose": "composer 图标与基础组件",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-conversation",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1",
      "evidence": "src/client/apply.ts:11 merge",
      "purpose": "引入 slots 服务声明",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-conversation",
      "to": "dsh-client-ui-session",
      "mechanism": "E1+E2",
      "evidence": "src/client/apply.ts:12 merge + src/client/apply.ts:283 ctx.uiSession.provide",
      "purpose": "向会话 UI provide 会话/输入 hooks",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-conversation",
      "to": "dsh-client-ui-settings",
      "mechanism": "E1+E2",
      "evidence": "src/client/apply.ts:13 merge + src/client/input/submission-policy.ts:9 configForms",
      "purpose": "读取 Enter 行为等运行时设置",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-conversation",
      "to": "dsh-commands",
      "mechanism": "E1",
      "evidence": "src/client/contract/records.ts:5 import @deepseek-ai/dsh-commands",
      "purpose": "命令记录节点类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-conversation",
      "to": "dsh-goal",
      "mechanism": "E1",
      "evidence": "src/client/skeleton/InputBar.tsx:26 import @deepseek-ai/dsh-goal",
      "purpose": "目标模式输入提示",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-conversation",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/client/contract/records.ts:6-7 + src/client/conversation/assembler.ts:4",
      "purpose": "LLM 消息/请求检查类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-conversation",
      "to": "dsh-llm-retry",
      "mechanism": "E1",
      "evidence": "src/client/contract/records.ts:9 import @deepseek-ai/dsh-llm-retry",
      "purpose": "重试记录节点类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-conversation",
      "to": "dsh-plan-mode",
      "mechanism": "E1",
      "evidence": "src/client/skeleton/InputBar.tsx:24 import @deepseek-ai/dsh-plan-mode",
      "purpose": "计划模式输入提示",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-conversation",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/client/apply.ts:8 SessionId",
      "purpose": "会话标识类型",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-conversation",
      "to": "dsh-settings",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:2 import @deepseek-ai/dsh-settings + src/index.ts:31 settings.configure",
      "purpose": "宿主侧投影 busyEnter 为设置字段",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-conversation",
      "to": "dsh-token-meter",
      "mechanism": "E1",
      "evidence": "src/client/context-occupancy.ts:1 import @deepseek-ai/dsh-token-meter/client",
      "purpose": "上下文占用计量显示",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-conversation",
      "to": "dsh-tool-todo",
      "mechanism": "E1+E2",
      "evidence": "src/client/contract/records.ts:10 + src/client/apply.ts:550 ctx.plugin(todoDockEntry)",
      "purpose": "Todo 记录与 Todo 停靠面板",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-conversation",
      "to": "dsh-workspace",
      "mechanism": "E1",
      "evidence": "src/client/contract/slots.ts:17 + src/client/skeleton/ConversationContent.tsx:3",
      "purpose": "工作区实体类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-cordis",
      "to": "dsh-api-remotes",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:75-80 ctx.remote.$on + src/client/CordisPanel.tsx:13 import",
      "purpose": "经 Remote 命名空间同步宿主侧 cordis 事件与库存",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-cordis",
      "to": "dsh-client-locale",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:43 ctx.locale.register + src/client/index.ts:6 import",
      "purpose": "注册本插件的 zh/en 文案字典",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-cordis",
      "to": "dsh-client-ui-primitives",
      "mechanism": "E1",
      "evidence": "src/client/CordisPreparingRow.tsx:3 import",
      "purpose": "复用客户端基础 UI 原子组件",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-cordis",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:9 import",
      "purpose": "接入客户端渲染面类型与能力",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-cordis",
      "to": "dsh-client-ui-session",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:10 import",
      "purpose": "接入会话 UI 集成面",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-cordis",
      "to": "dsh-client-ui-sidebar",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:86 sidebar.footer.action 注册 + src/client/CordisPanel.tsx:11 import",
      "purpose": "把 cordis 面板挂载到侧边栏页脚动作位",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-cordis",
      "to": "dsh-client-ui-tool",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:117-136 tool.call.toolview 注册 + src/client/CordisActionRow.tsx:7 import",
      "purpose": "为 cordis_* 工具调用提供 tool view 卡片渲染",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-cordis",
      "to": "dsh-cordis-client-runner",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:66 ctx.dynamicCordisRunner + src/client/CordisPanel.tsx:12 import",
      "purpose": "读取客户端运行面快照并驱动审批、启动与停止",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-cordis",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:4 SessionId 类型 import",
      "purpose": "以 SessionId 标识会话作用域的运行卡片",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-deliverables",
      "to": "dsh-api-remotes",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:13 import @deepseek-ai/dsh-api-remotes/client",
      "purpose": "引入 ctx.remote 与事件声明",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-deliverables",
      "to": "dsh-api-session-controller",
      "mechanism": "E2",
      "evidence": "src/present-open.ts:23 ctx.sessionController",
      "purpose": "解析会话与其工作目录以做原生打开",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-deliverables",
      "to": "dsh-api-workspace-files",
      "mechanism": "E2",
      "evidence": "src/present-open.ts:119 ctx.workspaceFiles",
      "purpose": "读取工作区文件内容",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-deliverables",
      "to": "dsh-client-connection",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:14 + src/present-open.ts:21 ctx.connection",
      "purpose": "原生打开请求经连接层发送",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-deliverables",
      "to": "dsh-client-locale",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:16 + src/client/index.ts:60 ctx.locale.register(NS)",
      "purpose": "注册 deliverables 字典",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-deliverables",
      "to": "dsh-client-ui-chat",
      "mechanism": "E1+E2",
      "evidence": "src/client/Deliverables.tsx:3 ChatFileMentions 类型 + src/client/index.ts:15 import ChatFileMentions",
      "purpose": "依赖 Chat 声明的 conversation.chat.turnTail 与 assistant-actions 槽",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-deliverables",
      "to": "dsh-client-ui-conversation",
      "mechanism": "E2",
      "evidence": "src/client/index.ts:17 + src/client/index.ts:59 ctx.uiConversation.events.register",
      "purpose": "注册交付物 ConversationNode 定义",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-deliverables",
      "to": "dsh-client-ui-dockkit",
      "mechanism": "E1",
      "evidence": "src/client/review-store.ts:8 import type TabId from @deepseek-ai/dsh-client-ui-dockkit",
      "purpose": "review tab 的 TabId 类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-deliverables",
      "to": "dsh-client-ui-primitives",
      "mechanism": "E1",
      "evidence": "src/client/Deliverables.tsx:4 + src/client/FileDiff.tsx:4-5",
      "purpose": "卡片与 diff 视图基础组件",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-deliverables",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:18 merge",
      "purpose": "引入 slots 服务声明",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-deliverables",
      "to": "dsh-client-ui-settings",
      "mechanism": "E2",
      "evidence": "src/client/index.ts:20 + src/client/index.ts:70 ctx.configForms.developerTools",
      "purpose": "开发者工具开关控制 diff 展示",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-deliverables",
      "to": "dsh-client-ui-sidebar-right",
      "mechanism": "E2",
      "evidence": "src/client/index.ts:19 + src/client/index.ts:77 ctx.sidebarRight.openResource",
      "purpose": "打开 changes-review 资源 tab",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-deliverables",
      "to": "dsh-client-ui-tool",
      "mechanism": "E2",
      "evidence": "src/client/PresentRow.tsx:4 + src/client/index.ts:82 ctx.slots.inject('tool.call.toolview')",
      "purpose": "present 工具行视图",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-deliverables",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/presented.ts:4 import @deepseek-ai/dsh-llm",
      "purpose": "presented 结果的消息类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-deliverables",
      "to": "dsh-sandbox-policy",
      "mechanism": "E2",
      "evidence": "src/present-open.ts:121 ctx.sandboxPolicy",
      "purpose": "native open 前校验沙箱策略",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-deliverables",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/changes.ts:2 import SessionId + src/client/turn-deliverables.ts:7",
      "purpose": "会话标识与事件类型",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-deliverables",
      "to": "dsh-system-prompt",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:9 import @deepseek-ai/dsh-system-prompt + src/index.ts:31 ctx.systemPrompt.section",
      "purpose": "注册 Web 文件引用指引节",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-deliverables",
      "to": "dsh-tool-present",
      "mechanism": "E1",
      "evidence": "src/client/turn-deliverables.ts:11 + src/presented.ts:2",
      "purpose": "present 工具结果数据",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-deliverables",
      "to": "dsh-workspace-changes",
      "mechanism": "E1",
      "evidence": "src/changes.ts:3 import @deepseek-ai/dsh-workspace-changes/types + src/index.ts:10",
      "purpose": "工作区变更记录/差异类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-directory-picker-browse",
      "to": "dsh-api-remotes",
      "mechanism": "E1",
      "evidence": "src/client/DirectoryBrowser.tsx:43 import DirectoryListing from @deepseek-ai/dsh-api-remotes/client + src/client/flow.ts:8",
      "purpose": "目录列举结果类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-directory-picker-browse",
      "to": "dsh-client-locale",
      "mechanism": "E2",
      "evidence": "src/client/DirectoryBrowser.tsx:44 Translate + src/client/index.ts:70 ctx.locale.register",
      "purpose": "注册并绑定对话框字典",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-directory-picker-browse",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E2",
      "evidence": "src/client/index.ts:15 merge + src/client/index.ts:86 ctx.slots.inject",
      "purpose": "注册槽位占用",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-directory-picker-browse",
      "to": "dsh-client-ui-workspace",
      "mechanism": "E1+E2",
      "evidence": "src/client/flow.ts:11 DirectoryFlowOwnerProps + src/client/index.ts:79-80 ctx.uiWorkspace.listDirectory/createDirectory",
      "purpose": "占据目录流洞并驱动枚举/创建原语",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-directory-picker-native",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E2",
      "evidence": "src/client/index.ts:6 merge + src/client/index.ts:29 ctx.slots.inject",
      "purpose": "注册槽位占用",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-directory-picker-native",
      "to": "dsh-client-ui-workspace",
      "mechanism": "E1+E2",
      "evidence": "src/client/flow.ts:9 DirectoryFlowOwnerProps + src/client/index.ts:24 ctx.uiWorkspace.pickDirectory",
      "purpose": "占据目录流洞并驱动 Host OS 选择器",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-dockkit",
      "to": "dsh-client-ui-primitives",
      "mechanism": "E1",
      "evidence": "src/components/FloatLayer.tsx:19 + src/components/TabMenu.tsx:17-21 + src/components/TabPanel.tsx:26",
      "purpose": "菜单/面板等基础组件",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-goal",
      "to": "dsh-api-remotes",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:15 ctx.remote merge + src/client/index.ts:112-140 ctx.remote.goals.get/edit/pause/resume/clear",
      "purpose": "目标 Remote 读取与 CAS 改动",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-goal",
      "to": "dsh-api-session-controller",
      "mechanism": "E2",
      "evidence": "src/client/index.ts:17 merge + src/client/index.ts:98-107 sessions.binding/using",
      "purpose": "保留会话并在初始历史打开后访问 Host",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-goal",
      "to": "dsh-client-locale",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:23 merge + src/client/index.ts:69 ctx.locale.register(NS)",
      "purpose": "注册 goal 字典",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-goal",
      "to": "dsh-client-ui-chat",
      "mechanism": "E2",
      "evidence": "src/client/index.ts:19 merge + src/client/index.ts:71 slots.inject('conversation.chat.node')",
      "purpose": "依赖 Chat 声明的 conversation.chat.node 槽",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-goal",
      "to": "dsh-client-ui-conversation",
      "mechanism": "E2",
      "evidence": "src/client/index.ts:21 merge + src/client/index.ts:68 ctx.uiConversation.events.register",
      "purpose": "注册 goal 命令输入节点定义并占用 input.dock 槽",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-goal",
      "to": "dsh-client-ui-primitives",
      "mechanism": "E1",
      "evidence": "src/client/GoalCommandInputView.tsx:2 import @deepseek-ai/dsh-client-ui-primitives",
      "purpose": "命令输入视图基础组件",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-goal",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:25 merge",
      "purpose": "引入 slots 服务声明",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-goal",
      "to": "dsh-client-ui-session",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:27 merge (useProjection 标准位)",
      "purpose": "声明 Session 标准 useProjection 座位",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-goal",
      "to": "dsh-commands",
      "mechanism": "E1",
      "evidence": "src/client/goal-command-input.ts:2-3 import @deepseek-ai/dsh-commands",
      "purpose": "goal 命令输入节点类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-goal",
      "to": "dsh-goal",
      "mechanism": "E1",
      "evidence": "src/client/GoalBar.tsx:12 + src/client/slots.ts:12 import GoalProjection/GoalId from @deepseek-ai/dsh-goal/client",
      "purpose": "目标投影与目标标识类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-goal",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:12 import SessionId from @deepseek-ai/dsh-session/types",
      "purpose": "会话标识类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-input-trigger",
      "to": "dsh-api-session-controller",
      "mechanism": "E2",
      "evidence": "src/client/index.ts:10 merge + src/client/index.ts:73 sessions.scope(sessionId)",
      "purpose": "把槽 frame 的 sessionId 解析成会话作用域",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-input-trigger",
      "to": "dsh-client-locale",
      "mechanism": "E2",
      "evidence": "src/client/index.ts:8 merge + src/client/index.ts:61 ctx.locale.register('slash.menu')",
      "purpose": "注册并观察菜单字典",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-input-trigger",
      "to": "dsh-client-ui-conversation",
      "mechanism": "E2",
      "evidence": "src/client/slots.ts:2 + src/core/contract.ts:7 (conversation.input.overlay 槽)",
      "purpose": "依赖 Conversation 声明的输入浮层槽",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-input-trigger",
      "to": "dsh-client-ui-primitives",
      "mechanism": "E1",
      "evidence": "src/client/MenuView.tsx:15 import @deepseek-ai/dsh-client-ui-primitives",
      "purpose": "候选菜单列表基础组件",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-input-trigger",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:11 merge",
      "purpose": "引入 slots 服务声明",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-input-trigger",
      "to": "dsh-client-ui-session",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:12 merge",
      "purpose": "会话 UI 声明合并",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-input-trigger",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/client/controller.ts:15 + src/types.ts:15",
      "purpose": "会话标识/上下文类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-jobs",
      "to": "dsh-api-job-controller",
      "mechanism": "E2",
      "evidence": "src/client/JobListAction.tsx:2 + src/client/index.ts:11 (ctx.jobs 服务来源)",
      "purpose": "作业注册表、观察流与 kill 的客户端服务",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-jobs",
      "to": "dsh-client-locale",
      "mechanism": "E2",
      "evidence": "src/client/index.ts:12 + src/client/index.ts:34 ctx.locale.register(NS)",
      "purpose": "注册作业字典",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-jobs",
      "to": "dsh-client-ui-conversation",
      "mechanism": "E2",
      "evidence": "src/client/JobListAction.tsx:10 + src/client/index.ts:36 (conversation.session.header.actions 槽声明方)",
      "purpose": "依赖 Conversation 声明的会话头动作槽",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-jobs",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:13 merge",
      "purpose": "引入 slots 服务声明",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-jobs",
      "to": "dsh-client-ui-session",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:14 merge",
      "purpose": "会话 UI 声明合并",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-jobs",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/client/JobListAction.tsx:3 import SessionId from @deepseek-ai/dsh-session",
      "purpose": "会话标识类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-layout",
      "to": "dsh-client-locale",
      "mechanism": "E2",
      "evidence": "src/client/index.ts:11 import type + src/client/index.ts:152 ctx.locale.register / index.ts:153 ctx.locale.bind",
      "purpose": "注册并绑定 shortcuts.layout 文案命名空间",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-layout",
      "to": "dsh-client-shortcuts",
      "mechanism": "E2",
      "evidence": "src/client/index.ts:20 import type + src/client/index.ts:183 ctx.shortcuts.register",
      "purpose": "注册侧栏切换快捷键命令",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-layout",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:12 import type + src/client/index.ts:168 ctx.slots.entries('main')",
      "purpose": "ctx.slots 渲染组合注册表由 ui-renderer 提供，layout 借此注册/查询槽",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-layout",
      "to": "dsh-client-ui-session",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:13 import type {}",
      "purpose": "引入 ui-session 的声明合并（Session 标准来源类型面）",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-layout",
      "to": "dsh-client-ui-theme",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:14 import type + src/client/index.ts:212 ctx.theme.getTheme / index.ts:213 ctx.on('theme/change')",
      "purpose": "读取主题快照并订阅主题变化以投影到 DOM",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-message-feedback",
      "to": "dsh-api-remotes",
      "mechanism": "E1+E2",
      "evidence": "src/client/controller.ts:11 import + src/client/surface.ts:27 ctx.remote.messageFeedback",
      "purpose": "调用 messageFeedback/sessionFeedback Remote 记录反馈",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-message-feedback",
      "to": "dsh-client-locale",
      "mechanism": "E2",
      "evidence": "src/client/index.ts:20 import type + src/client/index.ts:69 ctx.locale.register(NS)",
      "purpose": "注册 feedback 字典",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-message-feedback",
      "to": "dsh-client-ui-chat",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:23 import type {}",
      "purpose": "引入 ui-chat 的类型面（对话内容与标准来源）",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-message-feedback",
      "to": "dsh-client-ui-commands",
      "mechanism": "E2",
      "evidence": "src/client/index.ts:18 import type + src/client/index.ts:136 scope.commandUi.decorate",
      "purpose": "挂 /feedback 命令装饰",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-message-feedback",
      "to": "dsh-client-ui-conversation",
      "mechanism": "E2",
      "evidence": "src/client/index.ts:16 import type + src/client/index.ts:98/index.ts:115 slots.inject",
      "purpose": "使用 ui-conversation 声明的 assistant-actions 与 input.overlay 槽",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-message-feedback",
      "to": "dsh-client-ui-primitives",
      "mechanism": "E1",
      "evidence": "src/client/FeedbackDialog.tsx:13 import + src/client/MessageFeedbackActions.tsx:13",
      "purpose": "复用 ui-primitives 的 Toast/Button 等控件",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-message-feedback",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:22 import type + src/client/index.ts:60 inject 'slots'",
      "purpose": "ctx.slots 槽注册表由 ui-renderer 提供",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-message-feedback",
      "to": "dsh-client-ui-session",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:24 import type {}",
      "purpose": "引入 ui-session 的 Session 标准来源类型面",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-message-feedback",
      "to": "dsh-command-feedback",
      "mechanism": "E1",
      "evidence": "src/client/FeedbackDialog.tsx:14 import + src/client/surface.ts:15",
      "purpose": "反馈记录与分类的协议类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-message-feedback",
      "to": "dsh-message-feedback",
      "mechanism": "E1",
      "evidence": "src/client/MessageFeedbackActions.tsx:14 import + src/client/slots.ts:16",
      "purpose": "消息反馈评分/视图协议类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-message-feedback",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:12 import type { SessionId }",
      "purpose": "会话身份类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-model-selection",
      "to": "dsh-api-remotes",
      "mechanism": "E1+E2",
      "evidence": "src/client/catalog.ts:4 import + src/client/service.ts:53 ctx.remote.$on",
      "purpose": "读模型目录 Remote 与转发事件",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-model-selection",
      "to": "dsh-api-session-controller",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:14-15 import + src/client/service.ts:17-18 import",
      "purpose": "Session 绑定/投影与 session Remote 控制器面",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-model-selection",
      "to": "dsh-client-locale",
      "mechanism": "E2",
      "evidence": "src/client/index.ts:21 import type + src/client/index.ts:132 ctx.locale.register(NS)",
      "purpose": "注册 model 文案命名空间",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-model-selection",
      "to": "dsh-client-ui-commands",
      "mechanism": "E2",
      "evidence": "src/client/index.ts:17 import type + src/client/index.ts:145 command.register",
      "purpose": "注册 /model 命令的 popupSelect 交互",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-model-selection",
      "to": "dsh-client-ui-conversation",
      "mechanism": "E2",
      "evidence": "src/client/index.ts:19 import type + src/client/index.ts:182 scope.slots.inject('conversation.input.model')",
      "purpose": "使用 ui-conversation 声明的 input.model 座位",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-model-selection",
      "to": "dsh-client-ui-primitives",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:25 import { IconDataOutlineRegular } + src/client/ModelSelect.tsx:22",
      "purpose": "复用图标与 MenuSurface 控件",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-model-selection",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:22 import type + src/client/index.ts:123 inject 'slots'",
      "purpose": "ctx.slots 槽注册表",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-model-selection",
      "to": "dsh-client-ui-session",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:23 import type {}",
      "purpose": "Session 标准来源类型面",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-model-selection",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/client/service.ts:18 import type { SessionId }",
      "purpose": "会话身份类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-open-in-app",
      "to": "dsh-api-gateway",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:14 import type {}",
      "purpose": "引入 gateway 客户端的 ctx.remote 声明合并",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-open-in-app",
      "to": "dsh-api-remotes",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:15 import type + src/client/open-path.ts:6 import",
      "purpose": "ctx.remote 与 Remote 结果类型",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-open-in-app",
      "to": "dsh-api-session-controller",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:16 import remote + src/client/open-path.ts:7 import types",
      "purpose": "调用 session Remote 打开工作区路径/查询关联应用",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-open-in-app",
      "to": "dsh-client-locale",
      "mechanism": "E2",
      "evidence": "src/client/index.ts:9 import + src/client/index.ts:50 ctx.locale.register(NS)",
      "purpose": "注册 open-in-app 文案",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-open-in-app",
      "to": "dsh-client-shortcuts",
      "mechanism": "E2",
      "evidence": "src/client/index.ts:7 import + src/client/index.ts:59 ctx.shortcuts.register",
      "purpose": "注册 workspace.openLocal 快捷键命令",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-open-in-app",
      "to": "dsh-client-ui-conversation",
      "mechanism": "E2",
      "evidence": "src/client/OpenInAppAction.tsx:3 import + src/client/index.ts:80 slots.inject('conversation.session.header.utilities')",
      "purpose": "使用 ui-conversation 声明的会话头部槽",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-open-in-app",
      "to": "dsh-client-ui-deliverables",
      "mechanism": "E2",
      "evidence": "src/client/FileRouteAction.tsx:3 import type + src/client/index.ts:116/index.ts:119 slots.inject",
      "purpose": "使用 deliverables 声明的文件动作槽",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-open-in-app",
      "to": "dsh-client-ui-layout",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:11 import type + src/client/index.ts:53 ctx.layout.panelInfo",
      "purpose": "读主面板选择以判断当前无全局面板时才有打开目标",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-open-in-app",
      "to": "dsh-client-ui-primitives",
      "mechanism": "E1",
      "evidence": "src/client/open-failure-toast.tsx:4 import + src/client/OpenTargetButton.tsx:6",
      "purpose": "复用 Toast/图标/按钮控件",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-open-in-app",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:10 import type + src/client/index.ts:39 inject 'slots'",
      "purpose": "ctx.slots 槽注册表",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-open-in-app",
      "to": "dsh-client-ui-session",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:12 import type {}",
      "purpose": "Session 标准来源类型面",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-open-in-app",
      "to": "dsh-client-ui-sidebar-documentpreview",
      "mechanism": "E2",
      "evidence": "src/client/index.ts:13 import type + src/client/index.ts:104 slots.inject('sidebar.right.tab.document.actions')",
      "purpose": "使用文档预览声明的路径动作槽",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-open-in-app",
      "to": "dsh-host-open-in-app",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:17 import { OPEN_IN_APP_ICON_PREFIX_ROUTE }",
      "purpose": "复用 Host 侧共用的图标路由前缀常量",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-permission-presets",
      "to": "dsh-api-remotes",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:20 import + src/client/settings-store.ts:124 ctx.remote.settings",
      "purpose": "写 defaultPreset 与读 Session 投影",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-permission-presets",
      "to": "dsh-api-session-controller",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:19 import type { SessionFace }",
      "purpose": "Session 外观与命令执行类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-permission-presets",
      "to": "dsh-client-connection",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:24 import type {} + src/client/catalog.ts:4 import type { ConnectionHandle }",
      "purpose": "目录结算以连接世代为围栏",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-permission-presets",
      "to": "dsh-client-locale",
      "mechanism": "E2",
      "evidence": "src/client/index.ts:26 import + src/client/index.ts:117 ctx.locale.register",
      "purpose": "注册 permission.access 与设置行文案",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-permission-presets",
      "to": "dsh-client-ui-commands",
      "mechanism": "E2",
      "evidence": "src/client/index.ts:35 import type + src/client/index.ts:176 command.decorate",
      "purpose": "装饰 /permission 命令为 popup 选择器",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-permission-presets",
      "to": "dsh-client-ui-conversation",
      "mechanism": "E2",
      "evidence": "src/client/index.ts:31 import type + src/client/index.ts:167 slots.inject('conversation.input.permission')",
      "purpose": "使用 ui-conversation 声明的权限座位",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-permission-presets",
      "to": "dsh-client-ui-input-trigger",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:36 import type { ClientSessionContext }",
      "purpose": "命令/座位回调的会话上下文类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-permission-presets",
      "to": "dsh-client-ui-primitives",
      "mechanism": "E1",
      "evidence": "src/client/PermissionSelect.tsx:8 import + src/client/PermissionRow.tsx:12",
      "purpose": "复用 Menu/Select/图标控件",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-permission-presets",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:29 import type + src/client/index.ts:158 slots.inject",
      "purpose": "ctx.slots 槽注册表",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-permission-presets",
      "to": "dsh-client-ui-session",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:30 import type {}",
      "purpose": "Session 标准来源类型面",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-permission-presets",
      "to": "dsh-client-ui-settings",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:28 import + src/client/index.ts:148 ctx.configForms.describe()",
      "purpose": "设置行使用 ui-settings 的 configForms/describe 面",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-permission-presets",
      "to": "dsh-permission-presets",
      "mechanism": "E1+E2",
      "evidence": "src/client/catalog.ts:6 import + src/client/PermissionSelect.tsx:12 import",
      "purpose": "权限目录/选项与预设协议（Host client 面）",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-plan",
      "to": "dsh-api-remotes",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:2 import + src/client/index.ts:64 ctx.remote.session",
      "purpose": "ctx.remote 与 Remote 转发事件面",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-plan",
      "to": "dsh-api-session-controller",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:13 import remote + src/client/plan-resource.ts:3 import types",
      "purpose": "Session 地址与投影类型",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-plan",
      "to": "dsh-client-locale",
      "mechanism": "E2",
      "evidence": "src/client/index.ts:8 import type + src/client/index.ts:59 ctx.locale.register(NS)",
      "purpose": "注册 plan 文案",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-plan",
      "to": "dsh-client-resources",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:17 import type + src/client/index.ts:64 ctx.resources.register",
      "purpose": "注册计划资源 provider",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-plan",
      "to": "dsh-client-ui-chat",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:14 import type {} + src/client/plan-definition.ts:3 import type { ChatNode }",
      "purpose": "Chat 节点类型与标准来源面",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-plan",
      "to": "dsh-client-ui-conversation",
      "mechanism": "E2",
      "evidence": "src/client/index.ts:6 import type + src/client/index.ts:79 slots.inject('conversation.chat.turnTail')",
      "purpose": "使用会话 UI 的 Turn 末尾槽与 uiConversation 事件注册面",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-plan",
      "to": "dsh-client-ui-primitives",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:18 import { extractMarkdownPlainText } + src/client/PlanCard.tsx:3",
      "purpose": "复用 Markdown/图标/纯文本提取",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-plan",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:11 import type + src/client/index.ts:52 inject 'slots'",
      "purpose": "ctx.slots 槽注册表",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-plan",
      "to": "dsh-client-ui-session",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:12 import type + src/client/index.ts:80 ctx.sessions.binding",
      "purpose": "Session 绑定解析与标准来源",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-plan",
      "to": "dsh-client-ui-sidebar-right",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:16 import type + src/client/index.ts:74 ctx.sidebarRight.openResource",
      "purpose": "打开计划资源与注册预览页型",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-plan",
      "to": "dsh-client-ui-user-questions",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:15 import type + src/client/PlanCard.tsx:10 import type {}",
      "purpose": "计划卡复用 user-questions 的类型面/交互",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-plan",
      "to": "dsh-plan-mode",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:10 import type {}",
      "purpose": "引入 plan SessionProjectionMap 声明以使用投影",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-plan",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/client/plan.ts:3 import type { SessionId }",
      "purpose": "会话身份类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-plan",
      "to": "dsh-tools",
      "mechanism": "E1",
      "evidence": "src/client/plan-definition.ts:2 import type",
      "purpose": "工具结果类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-plugin-manager",
      "to": "dsh-api-remotes",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:19 import + src/client/manager-store.ts:607 ctx.remote",
      "purpose": "调用 pluginManager 等 Remote 并订阅 Host 事件",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-plugin-manager",
      "to": "dsh-client-locale",
      "mechanism": "E2",
      "evidence": "src/client/index.ts:10 import + src/client/index.ts:75 ctx.locale.register(NS)",
      "purpose": "注册 pluginManager 文案",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-plugin-manager",
      "to": "dsh-client-ui-layout",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:15 import type { MainPanelId } + src/client/index.ts:119 ctx.layout.panelInfo",
      "purpose": "注册 main 面板并订阅主面板切换重置视图",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-plugin-manager",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:17 import type + src/client/index.ts:67 inject 'slots'",
      "purpose": "ctx.slots 槽注册表",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-plugin-manager",
      "to": "dsh-client-ui-settings",
      "mechanism": "E1+E2",
      "evidence": "src/client/manager-store.ts:32 import + src/client/manager-store.ts:543 ctx.configForms",
      "purpose": "插件配置页复用 ui-settings 的 configForms",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-plugin-manager",
      "to": "dsh-client-ui-sidebar",
      "mechanism": "E2",
      "evidence": "src/client/index.ts:16 import type + src/client/index.ts:130 slots.inject('sidebar.panellist')",
      "purpose": "使用 ui-sidebar 声明的面板列表槽",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-plugin-manager",
      "to": "dsh-plugin-manager",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:22 import types + src/client/manager-store.ts:28 import '/registry'",
      "purpose": "插件管理 Remote 与 registry 协议类型",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-reference",
      "to": "dsh-api-remotes",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:17 import type + src/client/index.ts:71 ctx.remote.fileReferences.list",
      "purpose": "文件与会话候选的 Remote 查询",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-reference",
      "to": "dsh-api-session-controller",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:11 import type { ISessions } + src/client/index.ts:53 ctx.get('sessions')",
      "purpose": "retain 会话并用 using() 挂参考候选数据源",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-reference",
      "to": "dsh-client-locale",
      "mechanism": "E2",
      "evidence": "src/client/index.ts:19 import type + src/client/index.ts:51 ctx.locale.register(NS)",
      "purpose": "注册 reference 文案",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-reference",
      "to": "dsh-client-ui-input-trigger",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:26 import type + src/client/index.ts:158 inputTriggers.registerSource",
      "purpose": "注册 '@' 触发源并消费其 Source/Crumb 契约",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-reference",
      "to": "dsh-client-ui-primitives",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:23 import { relativeTime }",
      "purpose": "会话候选相对时间展示",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-reference",
      "to": "dsh-client-ui-sidebar-right",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:20 import type + src/client/index.ts:149 ctx.sidebarRight.openResource",
      "purpose": "在右侧栏打开被引用的文件",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-reference",
      "to": "dsh-session-reference",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:29 import type",
      "purpose": "会话引用候选类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-renderer",
      "to": "dsh-invariants",
      "mechanism": "E1+E2",
      "evidence": "src/invariant.ts:12 import + src/invariant.ts:19 inject ['invariants']",
      "purpose": "注册渲染器拥有的运行时不变式检查",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-schedule",
      "to": "dsh-api-remotes",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:41 import + src/client/index.ts:93 ctx.remote",
      "purpose": "ctx.remote 与 Remote 事件面",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-schedule",
      "to": "dsh-api-session-controller",
      "mechanism": "E1+E2",
      "evidence": "src/client/session-link.ts:2 import + src/client/index.ts:136 ctx.sessions",
      "purpose": "会话定位与打开状态判定",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-schedule",
      "to": "dsh-api-workspace-controller",
      "mechanism": "E1",
      "evidence": "src/client/session-link.ts:3 import",
      "purpose": "工作区状态以判定会话是否可跳转",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-schedule",
      "to": "dsh-client-connection",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:42 import type {}",
      "purpose": "连接世代相关类型面",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-schedule",
      "to": "dsh-client-locale",
      "mechanism": "E2",
      "evidence": "src/client/index.ts:32 import + src/client/index.ts:89-90 ctx.locale.register",
      "purpose": "注册 schedule.catalog 与 schedule.manager 文案",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-schedule",
      "to": "dsh-client-ui-conversation",
      "mechanism": "E2",
      "evidence": "src/client/index.ts:33 import type + src/client/index.ts:188 ctx.uiConversation.events.register",
      "purpose": "注册 Turn 级日程定义并渲染 Turn 末尾卡",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-schedule",
      "to": "dsh-client-ui-layout",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:40 import type + src/client/DeleteToast.tsx:13",
      "purpose": "读主面板选择并复用布局类型",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-schedule",
      "to": "dsh-client-ui-primitives",
      "mechanism": "E1",
      "evidence": "src/client/CatalogFeedback.tsx:3 import + src/client/DeleteToast.tsx:11",
      "purpose": "复用按钮/图标/toast 等控件",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-schedule",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:34 import type + src/client/index.ts:87 inject 'slots'",
      "purpose": "ctx.slots 槽注册表",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-schedule",
      "to": "dsh-client-ui-session",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:35 import type {}",
      "purpose": "Session 标准来源类型面",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-schedule",
      "to": "dsh-client-ui-sidebar",
      "mechanism": "E2",
      "evidence": "src/client/index.ts:36 import type + src/client/index.ts:178 slots.inject('sidebar.panellist')",
      "purpose": "向侧栏面板列表注册任务入口",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-schedule",
      "to": "dsh-client-ui-sidebar-right",
      "mechanism": "E2",
      "evidence": "src/client/index.ts:37 import type + src/client/index.ts:153 ctx.sidebarRight.tabsIn",
      "purpose": "注册任务详情页型并打开详情 tab",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-schedule",
      "to": "dsh-client-ui-tool",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:38 import type + src/client/ScheduleCreateCard.tsx:3",
      "purpose": "复用工具视图类型/卡片",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-schedule",
      "to": "dsh-client-ui-workspace",
      "mechanism": "E2",
      "evidence": "src/client/index.ts:39 import type + src/client/index.ts:137 ctx.uiWorkspace.openSession",
      "purpose": "从任务卡跳转到原始会话",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-schedule",
      "to": "dsh-schedule",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:44 import + src/client/index.ts:97 ctx.remote.schedule.catalog()",
      "purpose": "读/写/删 Host 日程任务与投递历史",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-schedule",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:43 import type + src/client/schedule-turn.ts:12 import surface",
      "purpose": "会话身份与 surface 类型",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-session",
      "to": "dsh-api-remotes",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:14 import type {}",
      "purpose": "ctx.remote 声明合并",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-session",
      "to": "dsh-api-session-controller",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:12 import { ISessions, ... } + src/client/index.ts:2-11 import",
      "purpose": "消费 Session Controller 的列表/绑定/快照与投影接口",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-session",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:29 import type {}",
      "purpose": "引入 ctx.slots 服务声明合并",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-session",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:13 import type { SessionId }",
      "purpose": "会话身份类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-settings",
      "to": "dsh-api-remotes",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:5 import + src/client/index.ts:43 ctx.remote.$on('settings/document-updated')",
      "purpose": "读配置 describe 与写 settings 命名空间",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings",
      "to": "dsh-settings",
      "mechanism": "E1",
      "evidence": "src/index.ts:2 import + src/client/config-form.ts:27 import type",
      "purpose": "设置命名空间与 wire 类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-settings-account",
      "to": "dsh-api-remotes",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:10 import + src/client/index.ts:107 ctx.remote.account.getProfile",
      "purpose": "调用 account/session Remote 与订阅转发事件",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-account",
      "to": "dsh-client-locale",
      "mechanism": "E2",
      "evidence": "src/client/index.ts:4 import + src/client/index.ts:44 ctx.locale.register('settings.account')",
      "purpose": "注册账户文案",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-account",
      "to": "dsh-client-ui-chat",
      "mechanism": "E1+E2",
      "evidence": "src/client/AccountQuotaNotice.tsx:5 import + src/client/index.ts:2 import type { TranscriptViewMode }",
      "purpose": "复用 chat 的类型面并写 ui-chat 设置（transcriptView/performanceUsage）",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-account",
      "to": "dsh-client-ui-layout",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:9 import type + src/client/AccountPlatformHost.tsx:2 import",
      "purpose": "壳层布局类型面",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-settings-account",
      "to": "dsh-client-ui-primitives",
      "mechanism": "E1",
      "evidence": "src/client/AccountAvatar.tsx:3 import + src/client/AccountMenu.tsx:5",
      "purpose": "复用按钮/图标等控件",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-account",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:6 import type + src/client/index.ts:40 inject 'slots'",
      "purpose": "ctx.slots 槽注册表",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-account",
      "to": "dsh-client-ui-settings",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:5 import + src/client/index.ts:213 ctx.configForms.get",
      "purpose": "读/写 onboarding 等设置命名空间",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-account",
      "to": "dsh-client-ui-settings-models",
      "mechanism": "E1",
      "evidence": "src/client/AccountOnboarding.tsx:4 import",
      "purpose": "登录引导复用模型设置区类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-settings-account",
      "to": "dsh-client-ui-theme",
      "mechanism": "E1+E2",
      "evidence": "src/client/AccountSection.tsx:7 import + src/client/index.ts:180 ctx.theme.getTheme",
      "purpose": "主题区分账户界面外观",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-account",
      "to": "dsh-host-webserver",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:3 import + src/index.ts:50 ctx.on('webserver/index-inject')",
      "purpose": "向 webserver 注入账户联系方式配置",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-account",
      "to": "dsh-settings",
      "mechanism": "E1",
      "evidence": "src/index.ts:4 import",
      "purpose": "Host 侧设置命名空间类型/接口",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-settings-agent-loop",
      "to": "dsh-client-locale",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:9 type-only import + src/client/index.ts:43 ctx.locale.bind(NS)",
      "purpose": "注册并绑定本页文案字典",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-agent-loop",
      "to": "dsh-client-ui-plugin-manager",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:14 type-only import + src/client/index.ts:47-48 向 plugins.item 注册条目",
      "purpose": "Plugins 页拥有 plugins.item 槽位，本包向其贡献页面",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-agent-loop",
      "to": "dsh-client-ui-primitives",
      "mechanism": "E1",
      "evidence": "src/client/AgentLoopCard.tsx:4 import SettingsForm/SettingsValueField",
      "purpose": "复用共享设置表单原语渲染数值字段",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-agent-loop",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:15 type-only import",
      "purpose": "引入 ctx.slots 的 SlotRegistry Context 合并",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-settings-agent-loop",
      "to": "dsh-client-ui-settings",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:12 type-only import + src/client/index.ts:45 ctx.configForms.get(AGENT_LOOP_NS)",
      "purpose": "经 configForms 服务取得 agent-loop 命名空间的设置表单 scope",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-general",
      "to": "dsh-api-remotes",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:12 type-only import + src/client/index.ts:102 ctx.remote.$host.isLoopback",
      "purpose": "判断 loopback 以决定是否注册本地设置文档动作",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-general",
      "to": "dsh-client-connection",
      "mechanism": "E1+E2",
      "evidence": "src/client/shell-contract.ts:9 import type ConnectionState + src/client/index.ts:88 ctx.get('connection')",
      "purpose": "取连接状态用于重连入口与桌面更新徽标",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-general",
      "to": "dsh-client-locale",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:21 type-only import + src/client/index.ts:100 ctx.locale.bind(NS)",
      "purpose": "注册 settings 字典并投影本地化标签",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-general",
      "to": "dsh-client-shortcuts",
      "mechanism": "E1+E2",
      "evidence": "src/client/shell-contract.ts:20 import type ShortcutCatalogEntry + src/client/index.ts:126 ctx.shortcuts.catalog, src/client/index.ts:179 ctx.shortcuts.register",
      "purpose": "注册设置打开命令并展示快捷键目录",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-general",
      "to": "dsh-client-ui-primitives",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:15 import closeTopModal",
      "purpose": "复用共享原语关闭顶层模态并渲染设置行",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-general",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:22 type-only import",
      "purpose": "引入 ctx.slots 合并",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-settings-general",
      "to": "dsh-client-ui-session",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:23 type-only import",
      "purpose": "引入会话标准 props 合并（设置外壳在会话上下文渲染）",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-settings-general",
      "to": "dsh-client-ui-settings",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:19 type-only import + src/client/index.ts:103 ctx.configForms.describe()",
      "purpose": "设置槽声明与 configForms 镜像由 ui-settings 提供",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-general",
      "to": "dsh-client-ui-sidebar",
      "mechanism": "E1",
      "evidence": "src/client/shell-contract.ts:15 type-only import（SlotMap 'sidebar.settings'）",
      "purpose": "引用 sidebar 的 SlotMap 与 owner props 类型以渲染该槽占位",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-settings-general",
      "to": "dsh-settings",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:2 type-only import + src/index.ts:23 ctx.inject(['settings']) → child.settings.configure",
      "purpose": "Host 侧把欢迎版本配置挂到 settings 服务",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-models",
      "to": "dsh-api-remotes",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:17 type-only import + src/client/index.ts:124-127 ctx.remote.$on(...)",
      "purpose": "订阅 Host 推送的设置/凭据/适配器失效事件",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-models",
      "to": "dsh-client-locale",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:13 type-only import + src/client/index.ts:91 ctx.locale.bind(NS)",
      "purpose": "注册并绑定 settings.models 字典",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-models",
      "to": "dsh-client-ui-primitives",
      "mechanism": "E1",
      "evidence": "src/client/ModelsSection.tsx:26 import",
      "purpose": "复用共享 UI 原语渲染模型编辑器",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-models",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:14 type-only import",
      "purpose": "引入 ctx.slots 合并",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-settings-models",
      "to": "dsh-client-ui-settings",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:11 type-only import + src/client/index.ts:88 ctx.configForms.describe()",
      "purpose": "设置槽声明、settingsSchema/configForms 镜像由 ui-settings 提供",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-models",
      "to": "dsh-host-webserver",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:4 type-only import + src/index.ts:15 ctx.on('webserver/index-inject')",
      "purpose": "Host 侧向浏览器页面注入引导配置全局",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-plugin-inventory",
      "to": "dsh-agent-preset-registry",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:12 import { presetDisplayText }",
      "purpose": "复用共享的预设显示名折叠逻辑",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-plugin-inventory",
      "to": "dsh-api-remotes",
      "mechanism": "E1+E2",
      "evidence": "src/client/PluginInventorySettingsTab.tsx:4 import type PluginInventorySnapshot + src/client/index.ts:38 ctx.remote.pluginInventory.list()",
      "purpose": "获取 Host 插件清单快照",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-plugin-inventory",
      "to": "dsh-client-locale",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:3 type-only import + src/client/index.ts:34 ctx.locale.register",
      "purpose": "注册并绑定本 tab 文案",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-plugin-inventory",
      "to": "dsh-client-modules",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:4 type-only import + src/client/index.ts:52 ctx.modules.entries.state",
      "purpose": "读取客户端模块加载状态并触发重试",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-plugin-inventory",
      "to": "dsh-client-ui-agent-preset",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:10 type-only import + src/client/index.ts:46 ctx.locale.bind('settings.agentPreset')",
      "purpose": "借用预设字典解析内置 agent 预设显示名",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-plugin-inventory",
      "to": "dsh-client-ui-primitives",
      "mechanism": "E1",
      "evidence": "src/client/PluginInventorySettingsTab.tsx:13 import Menu/StateDot/Tag",
      "purpose": "复用菜单、状态点与标签原语",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-settings-plugin-inventory",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:7 type-only import",
      "purpose": "引入 ctx.slots 合并",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-settings-plugin-inventory",
      "to": "dsh-client-ui-settings",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:6 type-only import + 经 settings.plugins.tab 槽协作（src/client/index.ts:56）",
      "purpose": "复用 Plugins 设置段的 tab 槽声明",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-plugins",
      "to": "dsh-client-locale",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:11 type-only import + src/client/index.ts:36 ctx.locale.bind(NS)",
      "purpose": "注册并绑定本段文案，并订阅 locale revision",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-plugins",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:16 type-only import",
      "purpose": "引入 ctx.slots 合并",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-settings-plugins",
      "to": "dsh-client-ui-settings",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:15 type-only import + 经 settings.section 槽协作（src/client/index.ts:76）",
      "purpose": "复用设置外壳的 section 槽声明",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-shell",
      "to": "dsh-client-locale",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:10 type-only import + src/client/index.ts:44 ctx.locale.bind(NS)",
      "purpose": "注册并绑定本页文案",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-shell",
      "to": "dsh-client-ui-plugin-manager",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:15 type-only import + src/client/index.ts:50-51 向 plugins.item 注册",
      "purpose": "Plugins 页拥有 plugins.item 槽位",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-shell",
      "to": "dsh-client-ui-primitives",
      "mechanism": "E1",
      "evidence": "src/client/ShellCard.tsx:4 import + src/client/locales.ts:3 import",
      "purpose": "复用共享设置表单原语",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-shell",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:16 type-only import",
      "purpose": "引入 ctx.slots 合并",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-settings-shell",
      "to": "dsh-client-ui-settings",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:13 type-only import + src/client/index.ts:47 ctx.configForms.get(BASH_NS)",
      "purpose": "经 configForms 取得 shell 命名空间的表单 scope",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-subagent",
      "to": "dsh-api-remotes",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:18 type-only import + src/client/index.ts:73 ctx.remote.$on('llm/adapters-updated')",
      "purpose": "订阅 Host 推送的适配器/设置失效事件",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-subagent",
      "to": "dsh-client-locale",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:10 type-only import + src/client/index.ts:60 ctx.locale.bind(NS)",
      "purpose": "注册并绑定本页文案",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-subagent",
      "to": "dsh-client-ui-plugin-manager",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:15 type-only import + src/client/index.ts:86 向 plugins.item 注册",
      "purpose": "Plugins 页拥有 plugins.item 槽位",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-subagent",
      "to": "dsh-client-ui-primitives",
      "mechanism": "E1",
      "evidence": "src/client/SubagentLimitsFields.tsx:4 import + src/client/locales.ts:3 import",
      "purpose": "复用共享设置字段原语",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-subagent",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:16 type-only import",
      "purpose": "引入 ctx.slots 合并",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-settings-subagent",
      "to": "dsh-client-ui-settings",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:13 type-only import + src/client/index.ts:62-65 ctx.configForms.get(...)",
      "purpose": "经 configForms 取得两个命名空间的表单 scope",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-web-search",
      "to": "dsh-api-remotes",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:18 type-only import + src/client/index.ts:54 ctx.remote.$on('credentials/reference-updated')",
      "purpose": "订阅 Host 推送的凭据失效事件以刷新密钥态",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-web-search",
      "to": "dsh-client-locale",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:10 type-only import + src/client/index.ts:46 ctx.locale.bind(NS)",
      "purpose": "注册并绑定本页文案",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-web-search",
      "to": "dsh-client-ui-plugin-manager",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:15 type-only import + src/client/index.ts:57-58 向 plugins.item 注册",
      "purpose": "Plugins 页拥有 plugins.item 槽位",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-web-search",
      "to": "dsh-client-ui-primitives",
      "mechanism": "E1",
      "evidence": "src/client/WebSearchCard.tsx:8 import + src/client/locales.ts:3 import",
      "purpose": "复用共享设置表单原语",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-web-search",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:16 type-only import",
      "purpose": "引入 ctx.slots 合并",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-settings-web-search",
      "to": "dsh-client-ui-settings",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:13 type-only import + src/client/index.ts:48 ctx.configForms.get(WEB_SEARCH_NS)",
      "purpose": "经 configForms 取得命名空间的表单 scope",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-shortcuts",
      "to": "dsh-client-locale",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:5 type-only import + src/client/index.ts:29 ctx.locale.register, src/client/index.ts:30 ctx.locale.bind('shortcuts')",
      "purpose": "注册并绑定本包文案",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-shortcuts",
      "to": "dsh-client-shortcuts",
      "mechanism": "E1+E2",
      "evidence": "src/client/Editor.tsx:6 import (client) + src/client/index.ts:34 ctx.shortcuts.edit, src/client/index.ts:38 ctx.shortcuts.registerFixed",
      "purpose": "注册命令/固定命令并读写快捷键目录与配置",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-shortcuts",
      "to": "dsh-client-ui-layout",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:7 type-only import",
      "purpose": "引入 layout 的 Context/SlotMap 合并",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-shortcuts",
      "to": "dsh-client-ui-primitives",
      "mechanism": "E1",
      "evidence": "src/client/Editor.tsx:4 import + src/client/index.ts:4 import closeTopModal",
      "purpose": "复用编辑器/菜单原语并关闭顶层模态",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-shortcuts",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:6 type-only import",
      "purpose": "引入 ctx.slots 合并",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-shortcuts",
      "to": "dsh-client-ui-settings",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:8 type-only import + src/client/index.ts:42 向 settings.general.item 注册",
      "purpose": "引入设置域槽声明，General 段的 item 槽由其外壳渲染",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-sidebar",
      "to": "dsh-api-workspace-controller",
      "mechanism": "E1",
      "evidence": "src/client/contract/slots.ts:12 import type WorkspaceId",
      "purpose": "startSession 的 workspace 参数类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-sidebar",
      "to": "dsh-client-locale",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:7 type-only import + src/client/index.ts:46 ctx.locale.register",
      "purpose": "注册并绑定 sidebar 文案，并订阅 locale 变化重算面板标签",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-sidebar",
      "to": "dsh-client-shortcuts",
      "mechanism": "E1+E2",
      "evidence": "src/client/contract/slots.ts:13 import type ShortcutCatalogEntry + src/client/index.ts:70 ctx.shortcuts.catalog",
      "purpose": "把快捷键目录快照交给侧边栏展示",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-sidebar",
      "to": "dsh-client-ui-layout",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:5 import type MainPanelId + src/client/index.ts:68 ctx.layout.toggleSidebar",
      "purpose": "经布局服务切换/选择面板并引用面板 id 类型",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-sidebar",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:9 type-only import",
      "purpose": "引入 ctx.slots 合并",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-sidebar",
      "to": "dsh-client-ui-session",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:11 type-only import",
      "purpose": "引入会话标准 props 合并",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-sidebar-browser",
      "to": "dsh-api-workspace-controller",
      "mechanism": "E1+E2",
      "evidence": "src/client/electron/workspace.ts:2 import (client) + src/client/index.ts:98 ctx.inject(['workspaces'])",
      "purpose": "经 workspace 服务把浏览器页面映射到工作区",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-sidebar-browser",
      "to": "dsh-client-locale",
      "mechanism": "E1+E2",
      "evidence": "src/client/definition.tsx:3 import + src/client/index.ts:45 ctx.locale.bind(namespace)",
      "purpose": "注册并绑定本 tab 文案",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-sidebar-browser",
      "to": "dsh-client-shortcuts",
      "mechanism": "E1+E2",
      "evidence": "src/client/definition.tsx:2 import (client) + src/client/index.ts:47 ctx.shortcuts.register",
      "purpose": "注册新建浏览器标签命令并声明其可用性",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-sidebar-browser",
      "to": "dsh-client-ui-dockkit",
      "mechanism": "E1",
      "evidence": "src/client/browser/BrowserController.ts:3 import + src/client/browser/store.ts:3 import",
      "purpose": "复用 dock 标签/布局原语",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-sidebar-browser",
      "to": "dsh-client-ui-primitives",
      "mechanism": "E1",
      "evidence": "src/client/definition.tsx:4 import + src/client/view/BrowserTitle.tsx:3 import",
      "purpose": "复用共享 UI 原语",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-sidebar-browser",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:5 type-only import",
      "purpose": "引入 ctx.slots 合并",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-sidebar-browser",
      "to": "dsh-client-ui-session",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:6 type-only import",
      "purpose": "引入会话标准 props 合并",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-sidebar-browser",
      "to": "dsh-client-ui-sidebar-right",
      "mechanism": "E1+E2",
      "evidence": "src/client/definition.tsx:5 import (client) + src/client/index.ts:74 ctx.sidebarRightTabs.register",
      "purpose": "把 tab 类型与 body/title 注册进右侧边栏的两级公共路径",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-sidebar-documentpreview",
      "to": "dsh-api-gateway",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:20 import (client)",
      "purpose": "引入网关客户端面与其类型合并",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-sidebar-documentpreview",
      "to": "dsh-api-remotes",
      "mechanism": "E1+E2",
      "evidence": "src/client/failure-line.ts:8 import (client) + src/client/index.ts:98 ctx.remote",
      "purpose": "经 remote 面读取工作区文件字节与分页文本",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-sidebar-documentpreview",
      "to": "dsh-api-workspace-files",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:21-22 import (/remote, /client) + src/client/document/resource-group.ts:3 import (/types)",
      "purpose": "工作区文件读取的类型与 remote 调用签名",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-sidebar-documentpreview",
      "to": "dsh-client-locale",
      "mechanism": "E1+E2",
      "evidence": "src/client/failure-line.ts:9 import + src/client/index.ts:94 ctx.locale.register",
      "purpose": "注册并绑定预览文案",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-sidebar-documentpreview",
      "to": "dsh-client-resources",
      "mechanism": "E1+E2",
      "evidence": "src/client/document/resource-group.ts:2 import (client) + src/client/index.ts:100 ctx.resources",
      "purpose": "借用资源模型登记/固定被预览的文件资源",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-sidebar-documentpreview",
      "to": "dsh-client-ui-dockkit",
      "mechanism": "E1",
      "evidence": "src/client/document/tab-lifetime.ts:3 import",
      "purpose": "标签生命周期与 dock 原语",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-sidebar-documentpreview",
      "to": "dsh-client-ui-primitives",
      "mechanism": "E1",
      "evidence": "src/client/LoadingIndicator.tsx:4 import + src/client/code/index.ts:3 import",
      "purpose": "复用加载指示与代码高亮扩展名等共享原语",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-sidebar-documentpreview",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:17 type-only import",
      "purpose": "引入 ctx.slots 合并",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-sidebar-documentpreview",
      "to": "dsh-client-ui-session",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:18 type-only import",
      "purpose": "引入会话标准 props 合并",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-sidebar-documentpreview",
      "to": "dsh-client-ui-settings",
      "mechanism": "E1+E2",
      "evidence": "src/client/html/index.ts:8 import (client) + src/client/html/index.ts:35 ctx.configForms",
      "purpose": "html 预览经设置服务注册其配置表单",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-sidebar-documentpreview",
      "to": "dsh-client-ui-sidebar-right",
      "mechanism": "E1+E2",
      "evidence": "src/client/definition.ts:11 import (client) + src/client/index.ts:93 ctx.sidebarRightTabs.register",
      "purpose": "经两级公共路径把预览类型、body 与标题注册进右侧边栏",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-sidebar-documentpreview",
      "to": "dsh-host-webserver",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:3 type-only import + src/index.ts:14 ctx.on('webserver/index-inject')",
      "purpose": "Host 侧向浏览器页面注入预览配置全局",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-sidebar-documentpreview",
      "to": "dsh-office-to-pdf",
      "mechanism": "E1",
      "evidence": "src/client/office/cache.ts:2 import (/types) + src/client/office/index.ts:5 import (/remote)",
      "purpose": "office 文档转 PDF 渲染",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-sidebar-documentpreview",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/client/face.ts:21 import (/types)",
      "purpose": "会话 id 等类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-sidebar-files",
      "to": "dsh-api-remotes",
      "mechanism": "E1+E2",
      "evidence": "src/client/FilesBody.tsx:14 import (client) + src/client/index.ts:71 ctx.remote",
      "purpose": "经 remote 面列目录/订阅文件变更",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-sidebar-files",
      "to": "dsh-api-workspace-files",
      "mechanism": "E1",
      "evidence": "src/client/FilesBody.tsx:21 import (/types)",
      "purpose": "工作区文件条目类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-sidebar-files",
      "to": "dsh-client-locale",
      "mechanism": "E1+E2",
      "evidence": "src/client/definition.tsx:10 import + src/client/index.ts:45 ctx.locale.bind(NS)",
      "purpose": "注册并绑定本 tab 文案",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-sidebar-files",
      "to": "dsh-client-shortcuts",
      "mechanism": "E1+E2",
      "evidence": "src/client/definition.tsx:8 import (client) + src/client/index.ts:47 ctx.shortcuts.register",
      "purpose": "注册打开文件面板命令",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-sidebar-files",
      "to": "dsh-client-ui-dockkit",
      "mechanism": "E1",
      "evidence": "src/client/face.ts:23 import",
      "purpose": "标签/dock 原语",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-sidebar-files",
      "to": "dsh-client-ui-primitives",
      "mechanism": "E1",
      "evidence": "src/client/FilesTitle.tsx:8 import",
      "purpose": "复用共享 UI 原语",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-sidebar-files",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:16 type-only import",
      "purpose": "引入 ctx.slots 合并",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-sidebar-files",
      "to": "dsh-client-ui-session",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:17 type-only import",
      "purpose": "引入会话标准 props 合并",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-sidebar-files",
      "to": "dsh-client-ui-sidebar-right",
      "mechanism": "E1+E2",
      "evidence": "src/client/definition.tsx:9 import (client) + src/client/index.ts:67 ctx.sidebarRightTabs.register",
      "purpose": "把 tab 类型、body 与标题注册进右侧边栏",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-sidebar-files",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/client/face.ts:24 import (/types)",
      "purpose": "会话 id 类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-sidebar-right",
      "to": "dsh-api-session-controller",
      "mechanism": "E1",
      "evidence": "src/client/session-view.ts:2 import (client)",
      "purpose": "会话视图类型（SidebarSessionViews 消费 SessionManager）",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-sidebar-right",
      "to": "dsh-client-locale",
      "mechanism": "E1+E2",
      "evidence": "src/client/contract/slots.ts:28 import + src/client/index.ts:134 ctx.locale.register",
      "purpose": "注册并绑定本包文案",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-sidebar-right",
      "to": "dsh-client-resources",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:27 import (client) + src/client/index.ts:120 ctx.resources.pin",
      "purpose": "把 tab 资源登记/固定到资源模型",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-sidebar-right",
      "to": "dsh-client-shortcuts",
      "mechanism": "E1+E2",
      "evidence": "src/client/contract/slots.ts:23 import (client) + src/client/index.ts:135 registerSidebarShortcuts(ctx.shortcuts, ...)",
      "purpose": "注册右栏快捷键并读取快捷键目录",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-sidebar-right",
      "to": "dsh-client-ui-conversation",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:32 import (client)",
      "purpose": "注册会话头部角槽需要其槽声明合并",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-sidebar-right",
      "to": "dsh-client-ui-dockkit",
      "mechanism": "E1",
      "evidence": "src/client/contract/slots.ts:29 import (client) + src/client/index.ts:47 import type TabId",
      "purpose": "dock 布局/标签 id 与纯规划器",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-sidebar-right",
      "to": "dsh-client-ui-layout",
      "mechanism": "E1+E2",
      "evidence": "src/client/contract/slots.ts:25 import (client) + src/client/index.ts:160 const layout: ILayout = ctx.layout",
      "purpose": "经布局服务开合/全屏右栏面板",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-sidebar-right",
      "to": "dsh-client-ui-primitives",
      "mechanism": "E1",
      "evidence": "src/client/shell/ExpandButton.tsx:19 import",
      "purpose": "复用共享 UI 原语",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-sidebar-right",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:28 type-only import",
      "purpose": "引入 ctx.slots 合并",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-sidebar-right",
      "to": "dsh-client-ui-session",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:29 type-only import",
      "purpose": "引入会话标准 props 合并",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-sidebar-right",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/client/focus.ts:3 import (/types)",
      "purpose": "SessionId 等类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-sidebar-terminal",
      "to": "dsh-api-terminal-controller",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:7 import type + src/client/index.ts:34 ctx.webTerminals.retainTabs",
      "purpose": "通过 ctx.webTerminals 服务管理 Web 终端视图、shell 启动与关闭",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-sidebar-terminal",
      "to": "dsh-client-locale",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:10 + src/client/index.ts:53 ctx.locale.bind",
      "purpose": "注册并绑定终端字典命名空间 sidebarTerminal",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-sidebar-terminal",
      "to": "dsh-client-shortcuts",
      "mechanism": "E1+E2",
      "evidence": "src/client/TerminalGuide.tsx:3 + src/client/index.ts:54 ctx.shortcuts.register",
      "purpose": "注册 terminal.new 快捷键并读取快捷键目录",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-sidebar-terminal",
      "to": "dsh-client-ui-conversation",
      "mechanism": "E1",
      "evidence": "src/client/TerminalRecovery.tsx:4 import type",
      "purpose": "引入会话头部动作槽类型，用于终端恢复入口（当前 index 中已注释）",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-sidebar-terminal",
      "to": "dsh-client-ui-layout",
      "mechanism": "E1",
      "evidence": "src/client/TerminalCleanup.tsx:6 import type",
      "purpose": "引入 shell.overlay 槽类型，用于清理失败提示（当前 index 中已注释）",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-sidebar-terminal",
      "to": "dsh-client-ui-primitives",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:13 PluginArtworkTerminal",
      "purpose": "复用终端图标原语",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-sidebar-terminal",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:9 import type",
      "purpose": "拉入 SlotRegistry 服务合并类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-sidebar-terminal",
      "to": "dsh-client-ui-session",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:11 import type",
      "purpose": "拉入会话 UI 服务的类型合并",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-sidebar-terminal",
      "to": "dsh-client-ui-sidebar-right",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:5 import + src/client/index.ts:40 ctx.sidebarRight.tabDomain",
      "purpose": "注册终端标签类型、读取 occurrence 参数并注册关闭处理器",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-sidebar-terminal",
      "to": "dsh-client-ui-theme",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:12 import type + src/client/index.ts:83-84 ctx.theme.getTheme",
      "purpose": "终端配色跟随全局主题快照，订阅 theme/change",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-sidebar-terminal",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:6 SessionId",
      "purpose": "会话标识类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-skill",
      "to": "dsh-api-remotes",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:37 import + src/client/index.ts:86 ctx.remote.skills",
      "purpose": "调用 skills/list 与订阅 agent-preset/selected",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-skill",
      "to": "dsh-api-session-controller",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:38 import + src/client/index.ts:115 sessions.using",
      "purpose": "按 session 保留引用，等待初始历史就绪后取目录",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-skill",
      "to": "dsh-client-locale",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:44 + src/client/index.ts:80 ctx.locale.register",
      "purpose": "注册 skill 字典",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-skill",
      "to": "dsh-client-ui-input-trigger",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:40 import type + src/client/index.ts:227-238 registerSource",
      "purpose": "注册斜杠菜单的 skill 候选源",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-skill",
      "to": "dsh-client-ui-primitives",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:42 rankByName",
      "purpose": "候选按名称排序（与命令组一致）",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-skill",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:46 import type",
      "purpose": "拉入 SlotRegistry 服务合并类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-skill",
      "to": "dsh-client-ui-sidebar-right",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:35 import type + src/client/index.ts:203 ctx.sidebarRight.openResource",
      "purpose": "点击 skill 引用时在侧栏打开其文件资源",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-skill",
      "to": "dsh-client-ui-tool",
      "mechanism": "E1",
      "evidence": "src/client/SkillRow.tsx:5 ToolCallViewProps",
      "purpose": "复用 tool.call.toolview 的 props 类型契约",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-skill",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:39 SessionId",
      "purpose": "会话标识类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-subagent",
      "to": "dsh-client-locale",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:11 + src/client/index.ts:56 ctx.locale.register",
      "purpose": "注册 subagent 字典",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-subagent",
      "to": "dsh-client-resources",
      "mechanism": "E1+E2",
      "evidence": "src/client/sidebar-chat/index.tsx:6 import type + src/client/sidebar-chat/index.tsx:178 ctx.resources.register",
      "purpose": "注册 subagentchat 资源提供者",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-subagent",
      "to": "dsh-client-ui-chat",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:12 import type",
      "purpose": "引入 ChatConversationViewNode 等聊天节点类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-subagent",
      "to": "dsh-client-ui-conversation",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:5 import + src/client/sidebar-chat/index.tsx:7 ConversationViewsProps",
      "purpose": "复用 ComposerChainProps/ConversationViewsProps 与内嵌 conversation slot",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-subagent",
      "to": "dsh-client-ui-primitives",
      "mechanism": "E1",
      "evidence": "src/client/SubagentHeaderLineage.tsx:12",
      "purpose": "复用图标、Tooltip、StateDot 等原语",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-subagent",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:13 import type",
      "purpose": "拉入渲染/槽服务类型合并",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-subagent",
      "to": "dsh-client-ui-session",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:14 import type",
      "purpose": "拉入会话 UI 服务类型合并",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-subagent",
      "to": "dsh-client-ui-sidebar-right",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:15 + src/client/sidebar-chat/index.tsx:181 sidebarRightTabs.register",
      "purpose": "打开子代理侧栏资源并注册 subagentchat 标签类型",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-subagent",
      "to": "dsh-client-ui-workspace",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:16 import type + src/client/index.ts:62 ctx.uiWorkspace.openSession",
      "purpose": "把子代理会话打开为主视图导航",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-subagent",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:4 SessionId",
      "purpose": "会话标识类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-subagent",
      "to": "dsh-subagent",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:3 SubagentAddress",
      "purpose": "子代理地址/模式类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-subagent",
      "to": "dsh-token-meter",
      "mechanism": "E1",
      "evidence": "src/client/SubagentHeaderLineage.tsx:15 import type",
      "purpose": "引入 token-meter 客户端类型合并（谱系行展示计量）",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-theme",
      "to": "dsh-client-locale",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:16 + src/client/index.ts:435 ctx.locale.register",
      "purpose": "注册 settings.theme 字典",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-theme",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:18 import type",
      "purpose": "拉入 SlotRegistry 服务合并类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-theme",
      "to": "dsh-client-ui-settings",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:14 import type + src/client/index.ts:431 ctx.configForms.get",
      "purpose": "读取/持久化主题偏好并注册 settings.general.item 槽",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-theme",
      "to": "dsh-host-webserver",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:9 import type + src/index.ts:41 ctx.on('webserver/index-inject')",
      "purpose": "向 HTML index 注入 boot 主题样式与脚本",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-theme",
      "to": "dsh-settings",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:2 import type + src/index.ts:40 child.settings.configure",
      "purpose": "Host 侧设置作用域配置（关闭自动保存）",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-tool",
      "to": "dsh-api-remotes",
      "mechanism": "E1+E2",
      "evidence": "src/client/apply.ts:3 import + src/client/apply.ts:31 ctx.remote.$host",
      "purpose": "提供 Host home 事实用于 POSIX ~ 显示",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-tool",
      "to": "dsh-client-locale",
      "mechanism": "E1",
      "evidence": "src/client/contract/slots.ts:11 import type",
      "purpose": "引入本地化命名空间类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-tool",
      "to": "dsh-client-ui-chat",
      "mechanism": "E1",
      "evidence": "src/client/contract/slots.ts:9 import type",
      "purpose": "复用 AssistantChatData/ToolResultNode 等工具视图数据契约",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-tool",
      "to": "dsh-client-ui-conversation",
      "mechanism": "E1",
      "evidence": "src/client/apply.ts:6 import + src/client/apply.ts:10",
      "purpose": "引入 MessageImageLoader/OpenFileOptions 与 conversation 节点类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-tool",
      "to": "dsh-client-ui-primitives",
      "mechanism": "E1",
      "evidence": "src/client/tool/models/tool-call-model.ts:12 + src/client/tool/toolviews/todo-row.tsx:2",
      "purpose": "复用对话卡片原语与标签",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-tool",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1",
      "evidence": "src/client/apply.ts:7 import type",
      "purpose": "拉入槽/渲染服务类型合并",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-tool",
      "to": "dsh-client-ui-session",
      "mechanism": "E1",
      "evidence": "src/client/apply.ts:8 import type",
      "purpose": "拉入会话 UI 服务类型合并",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-tool",
      "to": "dsh-spill-policy",
      "mechanism": "E1",
      "evidence": "src/client/tool/models/inspection-details-model.ts:3 + terminal-card-model.ts:5",
      "purpose": "渲染输出溢出/截断提示 notice",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-tool",
      "to": "dsh-tools",
      "mechanism": "E1",
      "evidence": "src/client/tool/models/todo-history.ts:2 import type",
      "purpose": "复用工具类型（todo 历史）",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-trajectory",
      "to": "dsh-agent",
      "mechanism": "E1",
      "evidence": "src/client/trajectory-message-definitions.ts:6 import type",
      "purpose": "引入 agent 类型用于消息定义",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-trajectory",
      "to": "dsh-api-session-controller",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:7 import + src/client/index.ts:89 ctx.sessions.binding",
      "purpose": "读取会话 binding 与分页 loadOlder",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-trajectory",
      "to": "dsh-client-locale",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:11 + src/client/index.ts:62 ctx.locale.register",
      "purpose": "注册 trajectory 字典",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-trajectory",
      "to": "dsh-client-ui-conversation",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:14 import + src/client/index.ts:53 ctx.uiConversation.binding",
      "purpose": "读取 trajectory target 并注册 conversation view Definition",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-trajectory",
      "to": "dsh-client-ui-primitives",
      "mechanism": "E1",
      "evidence": "src/client/TrajectoryTable.tsx:25 + TrajectoryTimeline.tsx:7",
      "purpose": "复用表格、时间线等展示原语",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-trajectory",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:15 import type",
      "purpose": "拉入槽/渲染服务类型合并",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-trajectory",
      "to": "dsh-client-ui-session",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:16 import type + src/client/index.ts:75 ctx.uiSession.provide",
      "purpose": "向会话 UI 提供 trajectory hook",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-trajectory",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/client/trajectory-assistant-definition.ts:7-8 + src/client/trajectory-event-projection.ts:3",
      "purpose": "投影 assistant 流事件与 LLM 类型",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-trajectory",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:9 SessionId",
      "purpose": "会话标识类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-trajectory",
      "to": "dsh-tools",
      "mechanism": "E1",
      "evidence": "src/client/trajectory-tool-definition.ts:6 import type",
      "purpose": "工具类型用于工具轨迹定义",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-user-questions",
      "to": "dsh-api-remotes",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:16 import + src/client/index.ts:105 ctx.remote.$on",
      "purpose": "订阅 Host 的 user-questions/request waterfall",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-user-questions",
      "to": "dsh-api-session-controller",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:17 import + src/client/index.ts:61 sessions.scopeOf",
      "purpose": "把请求归属到具体会话作用域",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-user-questions",
      "to": "dsh-client-locale",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:23 + src/client/index.ts:89 ctx.locale.register",
      "purpose": "注册 question 字典",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-user-questions",
      "to": "dsh-client-ui-conversation",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:18 ComposerChainProps",
      "purpose": "接入 conversation.composer 链与 matched 货币",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-user-questions",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:19 import type",
      "purpose": "拉入槽/渲染服务类型合并",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-user-questions",
      "to": "dsh-client-ui-session",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:20 import type + src/client/index.ts:91 ctx.uiSession.registerPendingInteraction",
      "purpose": "发布待处理问题交互并供 Session UI 消费",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-user-questions",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/client/contract/slots.ts:4 ToolCallId",
      "purpose": "引入品牌化 ToolCallId 用于重开计划",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-user-questions",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/client/contract/slots.ts:5 SessionId",
      "purpose": "会话标识类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-user-questions",
      "to": "dsh-user-questions",
      "mechanism": "E1",
      "evidence": "src/client/contract/slots.ts:8 AskUserQuestionItem/Answer",
      "purpose": "复用 Host 侧问题结构与答案类型",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-workflow-run",
      "to": "dsh-api-session-controller",
      "mechanism": "E1",
      "evidence": "src/client/WorkflowRunPanel.tsx:10 SessionListState/SessionTarget",
      "purpose": "读取会话列表状态与导航目标类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-workflow-run",
      "to": "dsh-client-locale",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:5 + src/client/index.ts:28 ctx.locale.register",
      "purpose": "注册 workflowRun 字典",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-workflow-run",
      "to": "dsh-client-ui-chat",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:6 + src/client/workflow-definition.ts:4",
      "purpose": "引入 keyed Chat 节点渲染契约",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-workflow-run",
      "to": "dsh-client-ui-conversation",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:7 import + src/client/index.ts:27 ctx.uiConversation.events.register",
      "purpose": "注册会话节点定义并读取 ConversationNodeContext",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-workflow-run",
      "to": "dsh-client-ui-primitives",
      "mechanism": "E1",
      "evidence": "src/client/WorkflowRunPanel.tsx:9 DisclosureRow/StateDot",
      "purpose": "复用折叠行与状态点原语",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-workflow-run",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:8 import type",
      "purpose": "拉入槽/渲染服务类型合并",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-workflow-run",
      "to": "dsh-client-ui-session",
      "mechanism": "E1",
      "evidence": "src/client/WorkflowRunPanel.tsx:13 + src/client/index.ts:9",
      "purpose": "引入会话状态快照与 UI 服务类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-workflow-run",
      "to": "dsh-client-ui-workspace",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:10 import type + src/client/index.ts:34 ctx.uiWorkspace.openSession",
      "purpose": "从工作流面板导航到成员会话",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-workflow-run",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/client/workflow-definition.ts:5 SessionId",
      "purpose": "成员子会话标识类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-workflow-run",
      "to": "dsh-tool-workflow",
      "mechanism": "E1",
      "evidence": "src/client/workflow-definition.ts:8 ToolWorkflowAgentStartData/EndData",
      "purpose": "解析工具侧工作流成员事件数据",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-workspace",
      "to": "dsh-agent",
      "mechanism": "E1",
      "evidence": "src/client/session-actions/ArchiveSession.tsx:12 import type",
      "purpose": "引入 agent 活动类型用于归档确认",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-workspace",
      "to": "dsh-api-remotes",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:19 import + src/client/index.ts:118 ctx.remote.directoryPicker",
      "purpose": "Host 目录选择器与 $host 事实",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-workspace",
      "to": "dsh-api-session-controller",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:20 import + src/client/index.ts:106 ctx.get('sessions')",
      "purpose": "会话列表、rename、search 与引用保留",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-workspace",
      "to": "dsh-api-workspace-controller",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:29 import + src/client/index.ts:107 ctx.get('workspaces')",
      "purpose": "读写工作区实体与快照（create/rename/delete/pin）",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-workspace",
      "to": "dsh-client-locale",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:31 + src/client/index.ts:121 ctx.locale.register",
      "purpose": "注册 workspace 字典",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-workspace",
      "to": "dsh-client-shortcuts",
      "mechanism": "E1+E2",
      "evidence": "src/client/contract/slots.ts:53 + src/client/index.ts:249 ctx.shortcuts.catalog",
      "purpose": "注册/读取工作区快捷键命令",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-workspace",
      "to": "dsh-client-ui-conversation",
      "mechanism": "E1",
      "evidence": "src/client/contract/slots.ts:47 import type",
      "purpose": "引入 conversation.hero.workspace 槽声明类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-workspace",
      "to": "dsh-client-ui-layout",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:34 import type + src/client/navigation.ts:204 ctx.layout.beginNavigation",
      "purpose": "导航取消信号与面板选择",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-workspace",
      "to": "dsh-client-ui-primitives",
      "mechanism": "E1",
      "evidence": "src/client/rows/Rows.tsx:24 + src/client/session-actions/RenameSession.tsx:8",
      "purpose": "复用菜单项、对话框等原语",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-workspace",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:33 import type",
      "purpose": "拉入槽/渲染服务类型合并",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-workspace",
      "to": "dsh-client-ui-session",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:36 import type",
      "purpose": "拉入会话根标准 hook 类型合并",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-workspace",
      "to": "dsh-client-ui-sidebar",
      "mechanism": "E1",
      "evidence": "src/client/contract/slots.ts:46 import type",
      "purpose": "引入 sidebar.workspaces 等槽的声明类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-workspace",
      "to": "dsh-schedule",
      "mechanism": "E1",
      "evidence": "src/client/session-actions/ArchiveSession.tsx:14 import type",
      "purpose": "归档前检查会话是否有计划任务",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-workspace",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:26 SessionId",
      "purpose": "会话标识类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-workspace",
      "to": "dsh-subagent",
      "mechanism": "E1",
      "evidence": "src/client/navigation.ts:13 SubagentAddress",
      "purpose": "导航到子代理会话地址",
      "type_only": true
    },
    {
      "from": "dsh-client-web",
      "to": "cordis-plugin-loader",
      "mechanism": "E1+E2",
      "evidence": "src/boot-client.ts:8 + src/boot-client.ts:38 ctx.plugin(Loader) + src/boot-client.ts:40 loader.internal",
      "purpose": "在浏览器端挂载 Loader 并逐行激活客户端插件",
      "type_only": false
    },
    {
      "from": "dsh-client-web",
      "to": "dsh-client-modules",
      "mechanism": "E1",
      "evidence": "src/boot.ts:11 + src/boot-client.ts:9",
      "purpose": "以客户端模块系统作为 loader.internal 并消费其 manifest/图",
      "type_only": true
    },
    {
      "from": "dsh-client-web",
      "to": "dsh-client-ui-dockkit",
      "mechanism": "E1",
      "evidence": "src/seed.ts:17",
      "purpose": "种子静态模块表内联 dockkit 布局库",
      "type_only": false
    },
    {
      "from": "dsh-client-web",
      "to": "dsh-client-ui-primitives",
      "mechanism": "E1",
      "evidence": "src/seed.ts:16",
      "purpose": "种子静态模块表内联 UI 原语库",
      "type_only": false
    },
    {
      "from": "dsh-client-web",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1+E2",
      "evidence": "src/mount.ts:7 + src/mount.ts:20 ctx.inject(['uiRenderer'])",
      "purpose": "交接挂载点给 UI 渲染器，随其替换重挂",
      "type_only": false
    },
    {
      "from": "dsh-client-web",
      "to": "dsh-host-webserver",
      "mechanism": "E1",
      "evidence": "src/apply-injections.ts:7",
      "purpose": "消费 webserver index 注入表以应用脚本/全局注入",
      "type_only": true
    },
    {
      "from": "dsh-command-compact",
      "to": "dsh-commands",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:7 import CommandDefinitionId + src/index.ts:9 import type CommandInvocation/CommandResult + src/index.ts:12 inject 'commands' + src/index.ts:101 ctx.commands.register",
      "purpose": "承载 `/compact` 命令的注册面与命令调用/结果类型，命令必须注册进 commands 注册表才能被人类命令适配器看见",
      "type_only": false
    },
    {
      "from": "dsh-command-feedback",
      "to": "dsh-commands",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:41 inject ['commands'] + src/index.ts:12 import",
      "purpose": "注册 /feedback 命令定义并与命令适配器对接",
      "type_only": false
    },
    {
      "from": "dsh-command-feedback",
      "to": "dsh-session",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:86 static inject ['sessions'] + src/index.ts:14 import",
      "purpose": "向活会话追加 feedback/record 日志事件",
      "type_only": false
    },
    {
      "from": "dsh-command-goal",
      "to": "dsh-commands",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:7-8 import (CommandDefinitionId, CommandInvocation) + src/index.ts:14 inject ['commands','goals'] + src/index.ts:191 ctx.commands.register",
      "purpose": "把 /goal 命令注册进命令注册表并复用其调用/结果类型",
      "type_only": false
    },
    {
      "from": "dsh-command-goal",
      "to": "dsh-goal",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:9-10 import (GoalError, GoalPhase/GoalRef/GoalView) + src/index.ts:135 ctx.goals.get + src/index.ts:150 ctx.goals.create",
      "purpose": "通过目标域服务读写持久化目标并捕获 GoalError",
      "type_only": false
    },
    {
      "from": "dsh-command-goal",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/index.ts:11 import createUserMessage",
      "purpose": "为目标附件构造模型可见的用户消息",
      "type_only": false
    },
    {
      "from": "dsh-commands",
      "to": "dsh-agent",
      "mechanism": "E1",
      "evidence": "package.json:56 peerDep + src/index.ts:8 type import Agent",
      "purpose": "命令以 agent 及其 session 为作用域与日志目标",
      "type_only": true
    },
    {
      "from": "dsh-commands",
      "to": "dsh-invariants",
      "mechanism": "E1+E2",
      "evidence": "package.json:59 peerDep + src/invariant.ts:9 import; src/invariant.ts:67 ctx.invariants.register",
      "purpose": "注册命令生命周期配对不变量",
      "type_only": false
    },
    {
      "from": "dsh-commands",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "package.json:60 peerDep + src/index.ts:11 import FileBlock/ImageBlock",
      "purpose": "附件以 LLM 块类型参与模型可见输入",
      "type_only": true
    },
    {
      "from": "dsh-commands",
      "to": "dsh-scope",
      "mechanism": "E1+E2",
      "evidence": "package.json:61 peerDep + src/index.ts:12-13 import NamedEntries/ScopedLayers; src/index.ts:264 ScopedLayers",
      "purpose": "全局与 agent 作用域的命令分层",
      "type_only": false
    },
    {
      "from": "dsh-commands",
      "to": "dsh-session",
      "mechanism": "E1+E2",
      "evidence": "package.json:62 peerDep + src/index.ts:14-15、src/invariant.ts:8 import; src/index.ts:373 session.append",
      "purpose": "把命令运行生命周期写入会话日志",
      "type_only": false
    },
    {
      "from": "dsh-compaction-basic",
      "to": "dsh-agent",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:15 import type Agent/PreStepDecision + src/index.ts:158 ctx.on('agent/pre-step') + src/index.ts:178 ctx.on('agent/status') + src/index.ts:190 ctx.on('agent/request-error') + src/index.ts:390 agent.runMaintenance",
      "purpose": "在 agent 的步边界与请求错误扩展点上挂自动压缩与溢出恢复，并借 agent.runMaintenance 预约空闲会话的手动压缩",
      "type_only": false
    },
    {
      "from": "dsh-compaction-basic",
      "to": "dsh-commands",
      "mechanism": "E1",
      "evidence": "src/index.ts:16 import type CommandId + src/region.ts:18 import type CommandId + src/region.ts:392 sourceCommandId",
      "purpose": "手动命令发起的压缩需把发起命令身份写进压缩生命周期事件用于呈现关联",
      "type_only": true
    },
    {
      "from": "dsh-compaction-basic",
      "to": "dsh-compaction-tool-result-pruner",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:18 type-only import (makes sibling service available to ctx.get) + src/index.ts:292 this.ctx.get('toolResultPruner') + src/index.ts:295 prune.pruneSession",
      "purpose": "可选地先执行无模型工具结果裁剪降低压力，再决定是否摘要；缺少该插件时保持可独立组合",
      "type_only": false
    },
    {
      "from": "dsh-compaction-basic",
      "to": "dsh-llm",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:12 import CONTEXT_WINDOW_EXCEEDED_CODE + src/index.ts:114 inject 'llm' + src/index.ts:304 ctx.llm.resolveModelInfo + src/summarizer.ts:163 ctx.llm.stream + src/region.ts:19 createUserMessage/errorChain",
      "purpose": "解析路由模型上下文容量以计算压力阈值，并通过 llm 流式调用执行摘要、构造备份检查点消息",
      "type_only": false
    },
    {
      "from": "dsh-compaction-basic",
      "to": "dsh-session",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:11 import type Session/SessionSeq + src/index.ts:114 inject 'sessions' + src/index.ts:184 ctx.on('session/event') + src/index.ts:411 ctx.sessions.flush + src/region.ts:22 import SessionSeq/Session/SessionEvent",
      "purpose": "直接读写会话表面的追加/替换事务与事件流，并在手动压缩后通过 sessions.flush 做持久化检查点",
      "type_only": false
    },
    {
      "from": "dsh-compaction-basic",
      "to": "dsh-token-meter",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:114 inject 'tokenMeter' + src/index.ts:277 ctx.tokenMeter.measure + src/region.ts:21 import type TokenMeasurement/TokenMeter + src/region.ts:417 meter.estimateMessage",
      "purpose": "用统一 token 计量器测量表面压力、估算摘要替换体积，并驱动所有保留与收缩定价决策",
      "type_only": false
    },
    {
      "from": "dsh-compaction-image-offload",
      "to": "dsh-agent",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:13 import type RequestErrorAction + src/index.ts:19 inject 'agents' + src/index.ts:27 ctx.on('agent/request-error')",
      "purpose": "在 agent 请求错误扩展点上拦截图像卸载失败并返回 retry 动作，发起一次表面修复后的重试",
      "type_only": false
    },
    {
      "from": "dsh-compaction-image-offload",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/index.ts:14 import IMAGE_OFFLOAD_REQUIRED_CODE/LlmError + src/image-offload.ts:3 import type ContentBlock + src/project-message.ts:3 import type ContentBlock/Message + src/projection.ts:3 import type Message",
      "purpose": "识别适配器上报的 IMAGE_OFFLOAD_REQUIRED 失败码，并按 dsh-llm 的内容块/消息类型改写图像块",
      "type_only": false
    },
    {
      "from": "dsh-compaction-image-offload",
      "to": "dsh-session",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:19 inject 'sessions' + src/index.ts:26 ctx.sessions.registerMessageProjection + src/image-offload.ts:4 import type Session/SessionSeq + src/projection.ts:4-5 subpath 类型 import",
      "purpose": "在会话表面上追加 image/offload 事件并注册纯函数消息投影，使卸载决策可重放且不改动节点身份",
      "type_only": false
    },
    {
      "from": "dsh-compaction-tool-result-pruner",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/index.ts:9 import freezeMessage + src/index.ts:10 import type ContentBlock + src/types.ts:1 import type ToolCallId",
      "purpose": "构造不可变的替换工具结果消息并复用其内容块/调用 id 类型",
      "type_only": false
    },
    {
      "from": "dsh-compaction-tool-result-pruner",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/index.ts:11 import type Session/SessionEvent/SessionSeq/ToolResultMessage + src/types.ts:2 import type SessionSeq + src/index.ts:160 session.append('compaction/prune')",
      "purpose": "读取当前表面节点并按 surfaceOp 替换/追加会话事件，实现可重放的裁剪事务",
      "type_only": true
    },
    {
      "from": "dsh-compaction-tool-result-pruner",
      "to": "dsh-token-meter",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:15 type-only import + src/index.ts:47 static inject ['tokenMeter'] + src/index.ts:163 this.ctx.tokenMeter.estimateMessage",
      "purpose": "为每个被遮蔽节点计价以写入影子价格事件，使纯消费者无需保留逐节点状态即可扣减",
      "type_only": false
    },
    {
      "from": "dsh-config-editor",
      "to": "cordis-plugin-include",
      "mechanism": "E1",
      "evidence": "src/index.ts:6",
      "purpose": "复用 entryListSchema 与 PatchOptions 类型解析 profile patch 的 entry 列表",
      "type_only": false
    },
    {
      "from": "dsh-config-editor",
      "to": "cordis-plugin-loader",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:8 + src/index.ts:27 static inject 'loader'",
      "purpose": "读取 loader.entries() 定位可编辑行，并在写盘后走正常 Loader 重载路径",
      "type_only": false
    },
    {
      "from": "dsh-config-editor",
      "to": "dsh-hmr",
      "mechanism": "E2",
      "evidence": "src/index.ts:9 (type merge) + src/index.ts:140-141 ctx.get('hmr').runExclusive",
      "purpose": "配置写入与 HMR 模块/配置重载串行化，避免编辑过程与热重载竞态",
      "type_only": false
    },
    {
      "from": "dsh-cordis-client-runner",
      "to": "cordis-plugin-loader",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:182 inject 'loader' + src/client/runtime.ts:18 import",
      "purpose": "把求值后的动态包注册为 loader entry 并管理其生命周期",
      "type_only": false
    },
    {
      "from": "dsh-cordis-client-runner",
      "to": "dsh-api-remotes",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:211-277 ctx.remote.* 调用 + src/client/index.ts:17 import",
      "purpose": "跨平面调用宿主半运行、获取客户端代码与上报失败",
      "type_only": false
    },
    {
      "from": "dsh-cordis-client-runner",
      "to": "dsh-client-modules",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:182 inject 'modules' + src/client/runtime.ts:23 import",
      "purpose": "提供浏览器侧模块系统以装载动态包入口",
      "type_only": false
    },
    {
      "from": "dsh-cordis-client-runner",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:182 inject 'slots' + src/client/guard.ts:18 import",
      "purpose": "用 slot 注册表承接动态半向 UI 的贡献",
      "type_only": false
    },
    {
      "from": "dsh-cordis-client-runner",
      "to": "dsh-client-ui-theme",
      "mechanism": "E1",
      "evidence": "src/client/guard.ts:19 import + src/client/providers.ts:6 import",
      "purpose": "动态半渲染时读取主题令牌",
      "type_only": true
    },
    {
      "from": "dsh-cordis-host-runner",
      "to": "dsh-agent",
      "mechanism": "E1",
      "evidence": "src/index.ts:10 import + src/inspect-registry.ts:5 import",
      "purpose": "Inspect 查询与运行请求以 Agent 为其作用域主体",
      "type_only": true
    },
    {
      "from": "dsh-cordis-host-runner",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/index.ts:11 createUserMessage + src/guard.ts:21 import",
      "purpose": "运行结果以用户消息源写入会话",
      "type_only": false
    },
    {
      "from": "dsh-cordis-host-runner",
      "to": "dsh-scope",
      "mechanism": "E1",
      "evidence": "src/guard.ts:18 import",
      "purpose": "校验动态包作用域与守卫条件",
      "type_only": false
    },
    {
      "from": "dsh-cordis-host-runner",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/registry.ts:7 import + src/types.ts:7 import",
      "purpose": "运行与库存行以 SessionId 关联会话",
      "type_only": true
    },
    {
      "from": "dsh-cordis-host-runner",
      "to": "dsh-tools",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:130 static inject ['tools'] + src/guard.ts:19 import",
      "purpose": "动态包经 harness 注册的工具须落入 tools 注册表",
      "type_only": false
    },
    {
      "from": "dsh-deepseek-account-platform",
      "to": "dsh-authorization",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:12 import AuthorizationSession + src/index.ts:85 inject + src/index.ts:138 registerFlow + src/index.ts:413 begin",
      "purpose": "把浏览器 PKCE 登录注册为授权流程并驱动一次尝试",
      "type_only": false
    },
    {
      "from": "dsh-deepseek-account-platform",
      "to": "dsh-host-webserver",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:4 import type {} from '@deepseek-ai/dsh-host-webserver' + src/index.ts:510 ctx.get('webServer') + src/index.ts:526 webServer.register",
      "purpose": "注册 /oauth/callback 路由接收浏览器回调",
      "type_only": false
    },
    {
      "from": "dsh-experimental-auto-review",
      "to": "dsh-agent",
      "mechanism": "E1",
      "evidence": "src/index.ts:12 import type { Agent } + src/index.ts:361 agent",
      "purpose": "读取会话 surface、header 与 cwd 构造审查快照",
      "type_only": true
    },
    {
      "from": "dsh-experimental-auto-review",
      "to": "dsh-agent-instructions",
      "mechanism": "E1",
      "evidence": "src/index.ts:13 import type {} from '@deepseek-ai/dsh-agent-instructions'",
      "purpose": "识别项目指令来源并归入 constraint 角色",
      "type_only": true
    },
    {
      "from": "dsh-experimental-auto-review",
      "to": "dsh-llm",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:22 import BlockAssembler/GenerateOptions 等 + src/index.ts:126 inject + src/index.ts:637 ctx.llm.stream",
      "purpose": "用当前请求路由调用 reviewer 模型并解析流式块",
      "type_only": false
    },
    {
      "from": "dsh-experimental-auto-review",
      "to": "dsh-permission-presets",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:24 import AUTO_PRESET + src/index.ts:126 inject + src/index.ts:680 permissionPresets + src/index.ts:723 registerAuto",
      "purpose": "注册 Auto 预设并读取/设置当前 session 预设",
      "type_only": false
    },
    {
      "from": "dsh-experimental-auto-review",
      "to": "dsh-session",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:25 import type { SessionEvent } + src/index.ts:126 inject 'sessions' + src/index.ts:730 ctx.sessions.list",
      "purpose": "读取会话事件日志并对受影响会话降级",
      "type_only": false
    },
    {
      "from": "dsh-experimental-auto-review",
      "to": "dsh-subagent",
      "mechanism": "E1",
      "evidence": "src/index.ts:26 import type {} from '@deepseek-ai/dsh-subagent'",
      "purpose": "解析子 Agent 的直接父指令初始提示边界",
      "type_only": true
    },
    {
      "from": "dsh-experimental-auto-review",
      "to": "dsh-tools",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:32 import RUN_CODE_NAME/PreToolDecision + src/index.ts:126 inject 'tools' + src/index.ts:686 tools/pre-execute",
      "purpose": "在工具执行前介入并返回 allow/deny/ask/cancel 决策",
      "type_only": false
    },
    {
      "from": "dsh-experimental-auto-review",
      "to": "dsh-user-approval",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:27 import type {} from '@deepseek-ai/dsh-user-approval' + src/index.ts:126 inject 'approval' + src/index.ts:710 overrideOf",
      "purpose": "按 approval policy 决定 reviewer deny 是 ask 还是终态 deny",
      "type_only": false
    },
    {
      "from": "dsh-experimental-browser-use-chrome-devtools-mcp",
      "to": "dsh-agent",
      "mechanism": "E2",
      "evidence": "src/index.ts:11 inject ['browserUse','agents','tools','systemPrompt']",
      "purpose": "按 live Agent 建立 Session 作用域",
      "type_only": false
    },
    {
      "from": "dsh-experimental-browser-use-chrome-devtools-mcp",
      "to": "dsh-system-prompt",
      "mechanism": "E2",
      "evidence": "src/index.ts:11 inject ['browserUse','agents','tools','systemPrompt']",
      "purpose": "在 system prompt 中声明浏览器能力",
      "type_only": false
    },
    {
      "from": "dsh-experimental-browser-use-chrome-devtools-mcp",
      "to": "dsh-tools",
      "mechanism": "E2",
      "evidence": "src/index.ts:11 inject ['browserUse','agents','tools','systemPrompt']",
      "purpose": "把 MCP 工具注册进工具注册表",
      "type_only": false
    },
    {
      "from": "dsh-experimental-browser-use-playwright-mcp",
      "to": "dsh-agent",
      "mechanism": "E2",
      "evidence": "src/index.ts:12 inject ['browserUse','agents','tools','systemPrompt']",
      "purpose": "按 live Agent 建立 Session 作用域",
      "type_only": false
    },
    {
      "from": "dsh-experimental-browser-use-playwright-mcp",
      "to": "dsh-system-prompt",
      "mechanism": "E2",
      "evidence": "src/index.ts:12 inject ['browserUse','agents','tools','systemPrompt']",
      "purpose": "在 system prompt 中声明浏览器能力",
      "type_only": false
    },
    {
      "from": "dsh-experimental-browser-use-playwright-mcp",
      "to": "dsh-tools",
      "mechanism": "E2",
      "evidence": "src/index.ts:12 inject ['browserUse','agents','tools','systemPrompt']",
      "purpose": "把 MCP 工具注册进工具注册表",
      "type_only": false
    },
    {
      "from": "dsh-experimental-browser-use-stagehand-native",
      "to": "dsh-agent",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:16 import type {} from '@deepseek-ai/dsh-agent' + src/index.ts:25 inject + src/index.ts:185 requireInitiator",
      "purpose": "按 owner Agent 隔离浏览器运行时并注入 initiator",
      "type_only": false
    },
    {
      "from": "dsh-experimental-browser-use-stagehand-native",
      "to": "dsh-mcp-client",
      "mechanism": "E1",
      "evidence": "src/index.ts:10 import createMcpToolDefinition + src/index.ts:179 createMcpToolDefinition",
      "purpose": "把原生方法适配为 MCP 形状的工具定义",
      "type_only": false
    },
    {
      "from": "dsh-experimental-browser-use-stagehand-native",
      "to": "dsh-system-prompt",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:18 import type {} + src/index.ts:25 inject + src/index.ts:191 systemPrompt.section",
      "purpose": "注入 Stagehand 使用与安全 guidance",
      "type_only": false
    },
    {
      "from": "dsh-experimental-browser-use-stagehand-native",
      "to": "dsh-tools",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:19 import type {} + src/index.ts:25 inject + src/index.ts:179 tools.register + src/index.ts:192 tools/execute",
      "purpose": "注册浏览器工具并接管其执行信号",
      "type_only": false
    },
    {
      "from": "dsh-experimental-client-ui-agent-team",
      "to": "dsh-api-session-controller",
      "mechanism": "E1+E2",
      "evidence": "src/client/TeamAction.tsx:8 import '@deepseek-ai/dsh-api-session-controller/client' + src/client/mount.ts:4 import + src/client/mount.ts:21 inject 'sessions'",
      "purpose": "读取会话绑定与保留信息定位 Lead/子会话",
      "type_only": false
    },
    {
      "from": "dsh-experimental-client-ui-agent-team",
      "to": "dsh-client-locale",
      "mechanism": "E1+E2",
      "evidence": "src/client/mount.ts:7 import '@deepseek-ai/dsh-client-locale/client' + src/client/mount.ts:21 inject 'locale' + src/client/mount.ts:30 locale.register",
      "purpose": "注册中英文 Team 文案字典",
      "type_only": false
    },
    {
      "from": "dsh-experimental-client-ui-agent-team",
      "to": "dsh-client-ui-conversation",
      "mechanism": "E1",
      "evidence": "src/client/TeamAction.tsx:16 import '@deepseek-ai/dsh-client-ui-conversation/client' + src/client/mount.ts:6 import",
      "purpose": "在会话头部动作区渲染 Team 入口",
      "type_only": true
    },
    {
      "from": "dsh-experimental-client-ui-agent-team",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1",
      "evidence": "src/client/mount.ts:8 import '@deepseek-ai/dsh-client-ui-renderer/client'",
      "purpose": "让注册的组件被渲染管线识别",
      "type_only": true
    },
    {
      "from": "dsh-experimental-client-ui-agent-team",
      "to": "dsh-client-ui-workspace",
      "mechanism": "E1+E2",
      "evidence": "src/client/mount.ts:9 import '@deepseek-ai/dsh-client-ui-workspace/client' + src/client/mount.ts:21 inject 'uiWorkspace' + src/client/mount.ts:42 openSession",
      "purpose": "切换/打开成员会话视图",
      "type_only": false
    },
    {
      "from": "dsh-experimental-client-ui-agent-team",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/client/TeamAction.tsx:3 import SessionId + src/client/mount.ts:5 import '@deepseek-ai/dsh-session/types'",
      "purpose": "使用会话 id 类型与快照字段",
      "type_only": true
    },
    {
      "from": "dsh-experimental-client-ui-voice-input",
      "to": "dsh-api-gateway",
      "mechanism": "E1",
      "evidence": "src/client/readiness.ts:3 import '@deepseek-ai/dsh-api-gateway/client'",
      "purpose": "经网关检测语音后端可用性",
      "type_only": false
    },
    {
      "from": "dsh-experimental-client-ui-voice-input",
      "to": "dsh-api-remotes",
      "mechanism": "E1+E2",
      "evidence": "src/client/mount.ts:3 import '@deepseek-ai/dsh-api-remotes/client' + src/client/mount.ts:17 inject 'remote' + src/client/mount.ts:61 remote.$mount",
      "purpose": "在 Client 注册实验 Remote 贡献",
      "type_only": false
    },
    {
      "from": "dsh-experimental-client-ui-voice-input",
      "to": "dsh-client-locale",
      "mechanism": "E1+E2",
      "evidence": "src/client/mount.ts:5 import '@deepseek-ai/dsh-client-locale/client' + src/client/mount.ts:17 inject 'locale' + src/client/mount.ts:20 locale.register",
      "purpose": "注册语音相关中英文文案",
      "type_only": false
    },
    {
      "from": "dsh-experimental-client-ui-voice-input",
      "to": "dsh-client-ui-conversation",
      "mechanism": "E1",
      "evidence": "src/client/VoiceInput.tsx:4 import '@deepseek-ai/dsh-client-ui-conversation/client' + src/client/mount.ts:7 import",
      "purpose": "在输入区渲染麦克风控件",
      "type_only": true
    },
    {
      "from": "dsh-experimental-client-ui-voice-input",
      "to": "dsh-client-ui-plugin-manager",
      "mechanism": "E1+E2",
      "evidence": "src/client/VoiceSetupDialog.tsx:4 import '@deepseek-ai/dsh-client-ui-plugin-manager/client' + src/client/mount.ts:17 inject 'pluginNavigation' + src/client/mount.ts:26 openBundle",
      "purpose": "跳转到 voice-input 插件 bundle 进行模型准备",
      "type_only": false
    },
    {
      "from": "dsh-experimental-client-ui-voice-input",
      "to": "dsh-client-ui-primitives",
      "mechanism": "E1",
      "evidence": "src/client/PreparationCard.tsx:3 + src/client/VoiceInput.tsx:13 + src/client/VoiceSetupDialog.tsx:2 import '@deepseek-ai/dsh-client-ui-primitives'",
      "purpose": "复用基础 UI 组件",
      "type_only": false
    },
    {
      "from": "dsh-experimental-client-ui-voice-input",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1",
      "evidence": "src/client/mount.ts:6 import '@deepseek-ai/dsh-client-ui-renderer/client'",
      "purpose": "让注册组件进入渲染管线",
      "type_only": true
    },
    {
      "from": "dsh-experimental-client-ui-voice-input",
      "to": "dsh-experimental-api-speech-to-text",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:3 import '@deepseek-ai/dsh-experimental-api-speech-to-text/remote' + src/client/mount.ts:4 import",
      "purpose": "挂载并调用 speech Remote 命名空间",
      "type_only": false
    },
    {
      "from": "dsh-experimental-computer-use-cua-driver-mcp",
      "to": "dsh-mcp-client",
      "mechanism": "E1",
      "evidence": "src/index.ts:10 import * as McpClient + src/index.ts:53 McpClient.Config",
      "purpose": "承载 MCP 连接（发现/执行/重连）并作为子插件生命周期",
      "type_only": false
    },
    {
      "from": "dsh-experimental-computer-use-cua-driver-mcp",
      "to": "dsh-tools",
      "mechanism": "E2",
      "evidence": "src/index.ts:17 inject ['computerUse','tools']",
      "purpose": "MCP 工具注册进工具注册表的前提服务",
      "type_only": false
    },
    {
      "from": "dsh-experimental-computer-use-cua-driver-native",
      "to": "dsh-mcp-client",
      "mechanism": "E1",
      "evidence": "src/index.ts:9 import createMcpToolDefinition + src/index.ts:103 createMcpToolDefinition",
      "purpose": "把原生工具目录适配为 MCP 形状工具定义",
      "type_only": false
    },
    {
      "from": "dsh-experimental-computer-use-cua-driver-native",
      "to": "dsh-system-prompt",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:13 import type {} from '@deepseek-ai/dsh-system-prompt' + src/index.ts:20 inject 'systemPrompt' + src/index.ts:132 systemPrompt.section",
      "purpose": "注入桌面操作 guidance 段落",
      "type_only": false
    },
    {
      "from": "dsh-experimental-computer-use-cua-driver-native",
      "to": "dsh-tools",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:14 import type {} from '@deepseek-ai/dsh-tools' + src/index.ts:20 inject 'tools' + src/index.ts:117 tools.register + src/index.ts:119 tools/execute",
      "purpose": "注册原生工具并接管其执行信号",
      "type_only": false
    },
    {
      "from": "dsh-experimental-inspector",
      "to": "dsh-host-webserver",
      "mechanism": "E1+E2",
      "evidence": "src/host/plugin.ts:4 import type { IndexInjection } + src/index.ts:63 inject ['webServer'] + src/host/plugin.ts:49 webserver/index-inject",
      "purpose": "向页面注入 Client bootstrap 并在 webserver 生命周期内启动",
      "type_only": false
    },
    {
      "from": "dsh-experimental-tool-agent-team",
      "to": "dsh-agent",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:5 import type { Agent } + src/index.ts:14 inject 'agents' + src/index.ts:412 ctx.agents.list",
      "purpose": "枚举/跟踪 Agent 并在其 scope 内注册工具",
      "type_only": false
    },
    {
      "from": "dsh-experimental-tool-agent-team",
      "to": "dsh-system-prompt",
      "mechanism": "E2",
      "evidence": "src/index.ts:14 inject ['agents','agentTeams','tools','systemPrompt'] + src/index.ts:169 systemPrompt.section",
      "purpose": "注入 Team 协作策略段落",
      "type_only": false
    },
    {
      "from": "dsh-experimental-tool-agent-team",
      "to": "dsh-tools",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:8-9 import defineTool/InferValue + src/index.ts:14 inject 'tools' + src/index.ts:175 tools.register",
      "purpose": "注册模型可见工具并声明输出 schema",
      "type_only": false
    },
    {
      "from": "dsh-experimental-webworker-runtime",
      "to": "dsh-api-gateway",
      "mechanism": "E1",
      "evidence": "src/worker-host.ts:26 import type { TypertGateway }",
      "purpose": "把 typert 流经 tunnel 转发到页面",
      "type_only": true
    },
    {
      "from": "dsh-experimental-webworker-runtime",
      "to": "dsh-client-connection",
      "mechanism": "E1",
      "evidence": "src/worker-host.ts:27 import type { HostConnectionHandle }",
      "purpose": "从树中取得共享 fetch handler 供 tunnel 直连",
      "type_only": true
    },
    {
      "from": "dsh-experimental-webworker-runtime",
      "to": "dsh-client-file-upload",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:12 import '@deepseek-ai/dsh-client-file-upload/types'",
      "purpose": "复用文件上传类型于 Worker 传输层",
      "type_only": true
    },
    {
      "from": "dsh-experimental-webworker-runtime",
      "to": "dsh-client-web",
      "mechanism": "E1",
      "evidence": "src/client/apply-injections.ts:2 import '@deepseek-ai/dsh-client-web/injections'",
      "purpose": "复用 Client web 侧的 index injection 定义",
      "type_only": false
    },
    {
      "from": "dsh-experimental-webworker-runtime",
      "to": "dsh-host-webserver",
      "mechanism": "E1",
      "evidence": "src/client/client.ts:8 import '@deepseek-ai/dsh-host-webserver'",
      "purpose": "使用 webserver 采集 index injections 作为 boot payload",
      "type_only": true
    },
    {
      "from": "dsh-file-reference-local",
      "to": "dsh-agent",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:9 import type Agent + src/index.ts:45 static inject ['agents'] + src/index.ts:91 ctx.agents.list + src/index.ts:92-93 ctx.on('agent/created'/'agent/disposed')",
      "purpose": "按 agent 维护搜索索引与提示词 fiber 生命周期，并用 agent 的会话 cwd 作为搜索根",
      "type_only": false
    },
    {
      "from": "dsh-file-reference-local",
      "to": "dsh-session",
      "mechanism": "E2",
      "evidence": "src/index.ts:98 ctx.on('session/event', ...) + src/index.ts:100 ctx.agents.get(session.id)",
      "purpose": "订阅会话事件流以在工具结果提交后失效文件索引",
      "type_only": false
    },
    {
      "from": "dsh-file-reference-local",
      "to": "dsh-tools",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:14 type-only import + src/index.ts:73 agent.ctx.tools.get('read', agent) + src/index.ts:98 ctx.on('session/event') tool-result invalidate",
      "purpose": "仅在 read 工具存在时展示 @ 提示词，并在工具结果后使工作区索引失效",
      "type_only": false
    },
    {
      "from": "dsh-fs-sandbox",
      "to": "dsh-fs-local",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:30 LocalFileSystem import + src/index.ts:55 extends LocalFileSystem",
      "purpose": "继承本地实现以复用原子写与编辑临界区",
      "type_only": false
    },
    {
      "from": "dsh-fs-sandbox",
      "to": "dsh-sandbox-policy",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:56 inject ['sandboxPolicy'] + src/index.ts:36 import",
      "purpose": "解析每调用会话的沙箱模式与工作区根",
      "type_only": false
    },
    {
      "from": "dsh-fs-ssh",
      "to": "dsh-sandbox-policy",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:7 (type import) + src/index.ts:21 (static inject ['ssh','sandboxPolicy']) + src/index.ts:23 (ctx.sandboxPolicy.defaultMode)",
      "purpose": "读取默认沙箱模式并在写/编辑时解析策略",
      "type_only": false
    },
    {
      "from": "dsh-goal",
      "to": "dsh-agent",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:12-13 import (agentEvents, Agent) + src/index.ts:241 inject ['agents','sessionProjections'] + src/index.ts:470 ctx.agents.get",
      "purpose": "以 agent 为键持有运行时激活状态、校验 live 身份并订阅 agent/created",
      "type_only": false
    },
    {
      "from": "dsh-goal",
      "to": "dsh-invariants",
      "mechanism": "E1+E2",
      "evidence": "src/invariant.ts:4 import InvariantInstaller + src/invariant.ts:14 inject ['invariants'] + src/invariant.ts:80 ctx.invariants.register",
      "purpose": "注册目标流不变量校验伴随件",
      "type_only": false
    },
    {
      "from": "dsh-goal",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/fold.ts:3 import MessageSource + src/runtime.ts:3 import HarnessError",
      "purpose": "目标消息来源类型合并与 GoalError 的错误基类",
      "type_only": false
    },
    {
      "from": "dsh-goal",
      "to": "dsh-scope",
      "mechanism": "E1",
      "evidence": "src/domain.ts:114 import('@deepseek-ai/dsh-scope').Scoped + package.json peerDependencies",
      "purpose": "goal/changed 事件按 agent 作用域分发的类型约束",
      "type_only": false
    },
    {
      "from": "dsh-goal",
      "to": "dsh-session",
      "mechanism": "E1+E2",
      "evidence": "src/fold.ts:4 import SessionEvent + src/index.ts:14-15 import SessionSeq/Session + src/index.ts:613 agent.session.append('goal/change', change)",
      "purpose": "以会话事件日志作为目标状态的唯一持久来源",
      "type_only": false
    },
    {
      "from": "dsh-goal",
      "to": "dsh-session-projection",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:17-18 import (ProjectionDefinition) + src/index.ts:258 ctx.sessionProjections.register(goalProjectionDefinition) + src/index.ts:477 ctx.sessionProjections.stateOf(session,'goal')",
      "purpose": "注册并读取 'goal' 会话投影以派生当前目标",
      "type_only": false
    },
    {
      "from": "dsh-goal-round-driver",
      "to": "dsh-agent",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:9 import (Agent, PreStepDecision) + src/index.ts:98 ctx.agents.get + src/index.ts:192 agent.followup",
      "purpose": "经 agent 生命周期/收件箱投递续轮消息并参与 pre-step 决策",
      "type_only": false
    },
    {
      "from": "dsh-goal-round-driver",
      "to": "dsh-goal",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:10 import (GoalMessageSource/GoalRef/GoalView) + src/index.ts:19 inject ['agents','goals','sessions'] + src/index.ts:99 ctx.goals.get",
      "purpose": "读取目标状态、disarm/block/pause 并在续轮消息上标注目标来源",
      "type_only": false
    },
    {
      "from": "dsh-goal-round-driver",
      "to": "dsh-invariants",
      "mechanism": "E1+E2",
      "evidence": "src/invariant.ts:6 import InvariantInstaller + src/invariant.ts:15 inject ['invariants'] + src/invariant.ts:85 ctx.invariants.register",
      "purpose": "注册续轮提示词不变量伴随件",
      "type_only": false
    },
    {
      "from": "dsh-goal-round-driver",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/index.ts:11-12 import (createUserMessage, ContentBlock) + src/prompt.ts:3 import ContentBlock",
      "purpose": "构造模型可见的续轮用户消息与提示块",
      "type_only": false
    },
    {
      "from": "dsh-goal-round-driver",
      "to": "dsh-session",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:13 import (Session, SessionEvent) + src/index.ts:145 ctx.sessions.flush(agent.session) + src/index.ts:318 ctx.on('session/event')",
      "purpose": "会话持久化检查点与基于事件流的轮次状态跟踪",
      "type_only": false
    },
    {
      "from": "dsh-hmr",
      "to": "cordis-plugin-include",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:6 + src/index.ts:288-298 include.refresh()",
      "purpose": "识别 include 配置树并触发其增量刷新，区分配置文件与模块变更",
      "type_only": false
    },
    {
      "from": "dsh-hmr",
      "to": "cordis-plugin-loader",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:5 + src/index.ts:86-87 @Inject('loader')",
      "purpose": "经 loader.internal 访问 Node ModuleLoader(loadCache)并重建插件 fiber",
      "type_only": false
    },
    {
      "from": "dsh-hmr",
      "to": "cordis-plugin-timer",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:13 + src/index.ts:87 @Inject('timer') + src/index.ts:268 ctx.debounce",
      "purpose": "提供 ctx.debounce，把同一批文件变更合并成一次重载事务",
      "type_only": false
    },
    {
      "from": "dsh-hook-protocol",
      "to": "dsh-invariants",
      "mechanism": "E1+E2",
      "evidence": "src/invariant.ts:5 import InvariantInstaller + src/invariant.ts:13 inject ['invariants'] + src/invariant.ts:122 ctx.invariants.register",
      "purpose": "注册 hook 事件配对不变量伴随件",
      "type_only": false
    },
    {
      "from": "dsh-hook-protocol",
      "to": "dsh-session",
      "mechanism": "E1+E2",
      "evidence": "src/events.ts:9 import Session + src/events.ts:76 session.append('hook/invoked', ...)",
      "purpose": "追加 hook/invoked、hook/result 持久会话事件",
      "type_only": false
    },
    {
      "from": "dsh-hooks-claude-code",
      "to": "dsh-agent",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:14 import (Agent, PreStepDecision, TurnBoundaryProjection) + src/index.ts:209 ctx.on('agent/created') + src/index.ts:214 agent.inject",
      "purpose": "在 agent 生命周期与步进点注入上下文并映射 hook 决策",
      "type_only": false
    },
    {
      "from": "dsh-hooks-claude-code",
      "to": "dsh-hook-protocol",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:27-39 import (runHook, mergeHookOutputs, appendHookInvoked, ...) + src/index.ts:169 runHook(...) + src/config.ts:9 import matcherDiagnostic",
      "purpose": "复用共享的 hook 执行/解析/合并/持久事件与 matcher 校验",
      "type_only": false
    },
    {
      "from": "dsh-hooks-claude-code",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/index.ts:16-17 import (createUserMessage, ContextFormed) + src/index.ts:24 import (ContentBlock, MessageSource)",
      "purpose": "构造注入模型的上下文消息及其来源标签",
      "type_only": false
    },
    {
      "from": "dsh-hooks-claude-code",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/index.ts:25 import UserMessage",
      "purpose": "hook 上下文消息使用的会话消息类型",
      "type_only": true
    },
    {
      "from": "dsh-hooks-claude-code",
      "to": "dsh-session-projection",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:15 import type {} + src/index.ts:318 ctx.sessionProjections.stateOf(agent.session,'turnBoundary')",
      "purpose": "读取 turnBoundary 投影获取 open turn 号以记录 hook 事件",
      "type_only": false
    },
    {
      "from": "dsh-hooks-claude-code",
      "to": "dsh-subagent",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:42 import SubagentRunId + src/index.ts:287 ctx.on('subagent/start') + src/index.ts:297 ctx.on('subagent/end')",
      "purpose": "把子代理 start/end 映射到 SubagentStart/SubagentStop hook",
      "type_only": false
    },
    {
      "from": "dsh-hooks-claude-code",
      "to": "dsh-tools",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:26 import (PostToolDecision, PreToolDecision, ToolExecution, ToolExecutionResult) + src/index.ts:244 ctx.on('tools/pre-execute') + src/index.ts:253 ctx.on('tools/post-execute')",
      "purpose": "在工具执行前后拦截点运行 hook 并映射为工具决策",
      "type_only": false
    },
    {
      "from": "dsh-hooks-codex",
      "to": "dsh-agent",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:17 import (Agent, PreStepDecision) + src/index.ts:191 ctx.on('agent/created') + src/index.ts:205 ctx.on('agent/pre-step')",
      "purpose": "在 agent 生命周期与步进点注入上下文并映射 hook 决策",
      "type_only": false
    },
    {
      "from": "dsh-hooks-codex",
      "to": "dsh-hook-protocol",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:30-42 import (runHook, mergeHookOutputs, appendHookInvoked, ...) + src/index.ts:147 runHook(...) + src/config.ts:8 import matcherDiagnostic",
      "purpose": "复用共享的 hook 执行/解析/合并/持久事件与 matcher 校验",
      "type_only": false
    },
    {
      "from": "dsh-hooks-codex",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/index.ts:19-20 import (createUserMessage, ContextFormed) + src/index.ts:27 import (ContentBlock, MessageSource)",
      "purpose": "构造注入模型的上下文消息及其来源标签",
      "type_only": false
    },
    {
      "from": "dsh-hooks-codex",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/index.ts:28 import UserMessage",
      "purpose": "hook 上下文消息使用的会话消息类型",
      "type_only": true
    },
    {
      "from": "dsh-hooks-codex",
      "to": "dsh-session-projection",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:18 import type {} + src/index.ts:288 ctx.sessionProjections.stateOf(agent.session,'turnBoundary')",
      "purpose": "读取 turnBoundary 投影获取 turn_id 以记录 hook 事件",
      "type_only": false
    },
    {
      "from": "dsh-hooks-codex",
      "to": "dsh-tools",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:29 import (PostToolDecision, PreToolDecision, ToolExecution, ToolExecutionResult) + src/index.ts:231 ctx.on('tools/pre-execute') + src/index.ts:240 ctx.on('tools/post-execute')",
      "purpose": "在工具执行前后拦截点运行 hook 并映射为工具决策",
      "type_only": false
    },
    {
      "from": "dsh-host-directory-picker-auto",
      "to": "dsh-client-ui-directory-picker-browse",
      "mechanism": "E1+E2",
      "evidence": "package.json:32 peerDep + src/index.ts:52 SURFACE_PACKAGES.browse; src/index.ts:89 ctx.loader.create",
      "purpose": "browse 交互的客户端界面条目",
      "type_only": false
    },
    {
      "from": "dsh-host-directory-picker-auto",
      "to": "dsh-client-ui-directory-picker-native",
      "mechanism": "E1+E2",
      "evidence": "package.json:33 peerDep + src/index.ts:51 SURFACE_PACKAGES.native; src/index.ts:89 ctx.loader.create",
      "purpose": "native 交互的客户端界面条目",
      "type_only": false
    },
    {
      "from": "dsh-host-directory-picker-auto",
      "to": "dsh-host-directory-picker-browse",
      "mechanism": "E1+E2",
      "evidence": "package.json:34 peerDep + src/index.ts:40 BACKEND_PACKAGES.browse; src/index.ts:89 ctx.loader.create",
      "purpose": "browse 交互的宿主后端条目",
      "type_only": false
    },
    {
      "from": "dsh-host-directory-picker-auto",
      "to": "dsh-host-directory-picker-native",
      "mechanism": "E1+E2",
      "evidence": "package.json:35 peerDep + src/index.ts:39 BACKEND_PACKAGES.native; src/index.ts:89 ctx.loader.create",
      "purpose": "native 交互的宿主后端条目",
      "type_only": false
    },
    {
      "from": "dsh-host-directory-picker-auto",
      "to": "dsh-host-webserver",
      "mechanism": "E1+E2",
      "evidence": "package.json:36 peerDep + src/index.ts:17 type import; src/index.ts:64 ctx.webServer.host",
      "purpose": "读取生效绑定 host 作为后端判定事实",
      "type_only": false
    },
    {
      "from": "dsh-host-frontend-static",
      "to": "dsh-client-connection",
      "mechanism": "E1+E2",
      "evidence": "package.json:31 peerDep + src/index.ts:20 type import; src/index.ts:136 ctx.connection.authorizeIndex",
      "purpose": "对 index 响应执行浏览器鉴权",
      "type_only": false
    },
    {
      "from": "dsh-host-frontend-static",
      "to": "dsh-host-webserver",
      "mechanism": "E1+E2",
      "evidence": "package.json:30 peerDep + src/index.ts:21 type import; src/index.ts:118 ctx.webServer.renderIndex、:121 registerFallback",
      "purpose": "占用其 fallback 座位并渲染 index 注入",
      "type_only": false
    },
    {
      "from": "dsh-host-open-in-app",
      "to": "dsh-client-connection",
      "mechanism": "E2",
      "evidence": "src/index.ts:47 inject=['webServer','connection','subprocess'] + src/index.ts:186 ctx.connection.requestRejection",
      "purpose": "每条路由的信任栅栏与浏览器鉴权",
      "type_only": false
    },
    {
      "from": "dsh-host-open-in-app",
      "to": "dsh-host-webserver",
      "mechanism": "E1+E2",
      "evidence": "package.json:50 devDep + src/index.ts:27 type import; src/index.ts:193/206/241 ctx.webServer.register",
      "purpose": "承载 apps/icon/open 三条路由",
      "type_only": false
    },
    {
      "from": "dsh-host-plugin-inventory",
      "to": "dsh-agent-preset-registry",
      "mechanism": "E1+E2",
      "evidence": "package.json:51 peerDep + src/index.ts:6 type import; src/index.ts:97 ctx.get('agentPresets')、:100 compositionInventory",
      "purpose": "读取 agent preset 组合清单并投影其行",
      "type_only": false
    },
    {
      "from": "dsh-jobs-local",
      "to": "dsh-agent",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:15 import type Agent + src/index.ts:359 ctx.get('agents')",
      "purpose": "把作业 owner 会话解析为活 Agent 实例并挂接其 scope 清理，实现按 owner 归属与生命周期取消",
      "type_only": false
    },
    {
      "from": "dsh-jobs-local",
      "to": "dsh-scope",
      "mechanism": "E1",
      "evidence": "src/events.ts:9 import ScopedLayers/scopeOf",
      "purpose": "用 scope 分层存放控制器与订阅，使每 owner 的读与通知相对化",
      "type_only": false
    },
    {
      "from": "dsh-jobs-local",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/index.ts:17 import type SessionId",
      "purpose": "以会话 id 做作业访问隔离鉴权（assertAccess 越权拒绝）",
      "type_only": true
    },
    {
      "from": "dsh-llm",
      "to": "dsh-invariants",
      "mechanism": "E1+E2",
      "evidence": "src/invariant.ts:4 import type InvariantInstaller + src/invariant.ts:112 ctx.invariants.register",
      "purpose": "注册 llm 包拥有的流协议与注册表不变量 companion",
      "type_only": false
    },
    {
      "from": "dsh-llm-deepseek-account",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/index.ts:4 import ACCOUNT_QUOTA_EXCEEDED_CODE/LlmError/QUOTA_EXCEEDED_CODE",
      "purpose": "复用 provider 无关的错误码与错误类型表达鉴权/配额失败",
      "type_only": false
    },
    {
      "from": "dsh-llm-deepseek-api-key",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/index.ts:3 import assertUsableApiKey/LlmError",
      "purpose": "复用共享的 API key 可用性校验与错误类型",
      "type_only": false
    },
    {
      "from": "dsh-llm-pi-ai",
      "to": "dsh-authorization",
      "mechanism": "E1+E2",
      "evidence": "src/login.ts:12 import type AuthorizationMethod + src/login.ts:138 ctx.authorization.registerFlow",
      "purpose": "把 pi-ai 的登录会话翻译成 harness 中立的通知/提问流程",
      "type_only": false
    },
    {
      "from": "dsh-llm-pi-ai",
      "to": "dsh-llm",
      "mechanism": "E1+E2",
      "evidence": "src/adapter.ts:41 import LlmAdapter/attributionHeaders + src/index.ts:94 inject llm + src/index.ts:302 ctx.llm.registerAdapter",
      "purpose": "实现并注册 llm seam 适配器，复用其错误类型、图像投影与目录 API",
      "type_only": false
    },
    {
      "from": "dsh-llm-pi-ai",
      "to": "dsh-settings",
      "mechanism": "E1",
      "evidence": "src/index.ts:57 import type {} from '@deepseek-ai/dsh-settings'",
      "purpose": "激活 settings 服务声明，使插件可按设置命名空间配置 provider 路由",
      "type_only": true
    },
    {
      "from": "dsh-llm-retry",
      "to": "dsh-agent",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:12 import type Agent/RequestErrorAction + src/index.ts:22 inject agents",
      "purpose": "在 agent 请求错误恢复点上裁决是否重试，并把重试写入 agent.session",
      "type_only": false
    },
    {
      "from": "dsh-llm-retry",
      "to": "dsh-invariants",
      "mechanism": "E1+E2",
      "evidence": "src/invariant.ts:7 import type InvariantInstaller + src/invariant.ts:178 ctx.invariants.register",
      "purpose": "注册包拥有的重试持久事件不变量 companion",
      "type_only": false
    },
    {
      "from": "dsh-llm-retry",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/index.ts:13 import type LlmFailure/ResolvedRetryPolicy + src/types.ts:1 import from dsh-llm/types",
      "purpose": "消费 provider 中立失败事实与已解析的重试策略类型",
      "type_only": true
    },
    {
      "from": "dsh-llm-retry",
      "to": "dsh-session",
      "mechanism": "E1+E2",
      "evidence": "src/history.ts:3 import type SessionEvent + src/invariant.ts:160 ctx.sessions.list",
      "purpose": "向会话日志追加持久重试事件并回放校验既有记录",
      "type_only": false
    },
    {
      "from": "dsh-llm-retry",
      "to": "dsh-session-projection",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:14 import type {} + src/index.ts:125 ctx.sessionProjections.register",
      "purpose": "注册 llmRetry projection 以在重试间保持每 provider/策略的尝试计数",
      "type_only": false
    },
    {
      "from": "dsh-mcp-client",
      "to": "dsh-llm",
      "mechanism": "E1+E2",
      "evidence": "src/tools.ts:21 type ContentBlock + src/tools.ts:358 ctx.get('llm')、src/tools.ts:364 llm.resolveModelInfo",
      "purpose": "校验当前模型路由声明了图像输入能力",
      "type_only": false
    },
    {
      "from": "dsh-mcp-client",
      "to": "dsh-mcp-resources",
      "mechanism": "E1+E2",
      "evidence": "src/server-context.ts:8 type McpResourceProvider + src/server-context.ts:29 ctx.inject(['mcpResources'])",
      "purpose": "向资源运行时发布本连接的资源请求能力",
      "type_only": false
    },
    {
      "from": "dsh-mcp-client",
      "to": "dsh-scope",
      "mechanism": "E1",
      "evidence": "src/index.ts:18 scopeOf",
      "purpose": "按注册作用域隔离 serverName 与 Agent 级命名空间复用",
      "type_only": false
    },
    {
      "from": "dsh-mcp-client",
      "to": "dsh-system-prompt",
      "mechanism": "E1+E2",
      "evidence": "src/server-context.ts:9 type import + src/server-context.ts:32 inner.systemPrompt.section",
      "purpose": "把服务端 attributed instructions 写入系统提示段",
      "type_only": false
    },
    {
      "from": "dsh-mcp-client",
      "to": "dsh-tools",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:24 type import + src/index.ts:34 inject 'tools' + src/tools.ts:150 ctx.tools.register",
      "purpose": "把发现的 MCP 工具注册进 harness 工具运行时",
      "type_only": false
    },
    {
      "from": "dsh-mcp-resources",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/render.ts:7 type ContentBlock",
      "purpose": "把资源结果投影为核心内容块",
      "type_only": true
    },
    {
      "from": "dsh-mcp-resources",
      "to": "dsh-scope",
      "mechanism": "E1",
      "evidence": "src/index.ts:8 createScope/NamedEntries/ScopedLayers/scopeOf",
      "purpose": "按 Agent 作用域分层保存与合并资源 provider",
      "type_only": false
    },
    {
      "from": "dsh-mcp-resources",
      "to": "dsh-system-prompt",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:11 type import + src/index.ts:59 ctx.inject(['systemPrompt'])",
      "purpose": "发布资源服务器清单提示段",
      "type_only": false
    },
    {
      "from": "dsh-mcp-resources",
      "to": "dsh-tools",
      "mechanism": "E1+E2",
      "evidence": "src/tools.ts:8 import defineTool + src/index.ts:49 static inject ['tools'] + src/tools.ts:33 ctx.tools.register",
      "purpose": "注册并注销三条共享资源工具",
      "type_only": false
    },
    {
      "from": "dsh-message-feedback",
      "to": "dsh-command-feedback",
      "mechanism": "E1",
      "evidence": "src/index.ts:12 FEEDBACK_CATEGORIES import + src/types.ts:11 import",
      "purpose": "复用同一反馈类别常量集",
      "type_only": false
    },
    {
      "from": "dsh-message-feedback",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/types.ts:9 import",
      "purpose": "关联消息反馈与 LLM 消息标识契约",
      "type_only": true
    },
    {
      "from": "dsh-message-feedback",
      "to": "dsh-session",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:119 inject ['sessionPersistence','sessions'] + src/index.ts:13 import",
      "purpose": "读取/追加会话事件并定位活会话",
      "type_only": false
    },
    {
      "from": "dsh-office-to-pdf",
      "to": "dsh-api-workspace-files",
      "mechanism": "E1+E2",
      "evidence": "src/types.ts:2 import WorkspaceFileBytes + src/index.ts:9 import + src/index.ts:187 ctx.get('workspaceFiles')",
      "purpose": "按 Session 授权读取/校验源文件元数据",
      "type_only": false
    },
    {
      "from": "dsh-permission-presets",
      "to": "dsh-commands",
      "mechanism": "E1+E2",
      "evidence": "package.json:57 peerDep + src/index.ts:19、:33 import; src/index.ts:255 ctx.inject(['commands'])、:256 commands.register",
      "purpose": "以 /permission 命令暴露唯一写路径",
      "type_only": false
    },
    {
      "from": "dsh-permission-presets",
      "to": "dsh-invariants",
      "mechanism": "E1+E2",
      "evidence": "package.json:58 peerDep + src/invariant.ts:5 import; src/invariant.ts:43 ctx.invariants.register",
      "purpose": "注册 preset 事件可解析性不变量",
      "type_only": false
    },
    {
      "from": "dsh-permission-presets",
      "to": "dsh-sandbox-policy",
      "mechanism": "E1+E2",
      "evidence": "package.json:60 peerDep + src/index.ts:25 import setSandboxMode/SANDBOX_MODES; src/index.ts:410 setSandboxMode",
      "purpose": "按预设写穿 sandbox/mode 规范 setter",
      "type_only": false
    },
    {
      "from": "dsh-permission-presets",
      "to": "dsh-session",
      "mechanism": "E1+E2",
      "evidence": "package.json:61 peerDep + src/index.ts:23 import Session; src/index.ts:416 session.append('permission/preset')",
      "purpose": "记录预设选择与会话权限覆盖",
      "type_only": false
    },
    {
      "from": "dsh-permission-presets",
      "to": "dsh-session-projection",
      "mechanism": "E1+E2",
      "evidence": "package.json:62 peerDep + src/index.ts:32 type import; src/index.ts:237 ctx.sessionProjections.register",
      "purpose": "注册 permissions 会话投影",
      "type_only": false
    },
    {
      "from": "dsh-permission-presets",
      "to": "dsh-settings",
      "mechanism": "E1+E2",
      "evidence": "package.json:82 devDep + src/index.ts:14 type import; src/index.ts:210 ctx.inject(['settings']) 配置 auto 默认",
      "purpose": "为 defaultPreset 提供用户设置默认值",
      "type_only": false
    },
    {
      "from": "dsh-permission-presets",
      "to": "dsh-user-approval",
      "mechanism": "E1+E2",
      "evidence": "package.json:64 peerDep + src/index.ts:29-30 import setApprovalPolicy/APPROVAL_POLICIES; src/index.ts:272 ctx.approval.setPolicy、:399 setApprovalPolicy",
      "purpose": "按预设写穿 approval 策略",
      "type_only": false
    },
    {
      "from": "dsh-persona",
      "to": "dsh-system-prompt",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:18-19 import PERSONA_PREFIX_SECTION/PERSONA_SUFFIX_SECTION + src/index.ts:27 inject 'systemPrompt' + src/index.ts:63 ctx.systemPrompt.section",
      "purpose": "注册 persona 段落并抑制运行时上下文",
      "type_only": false
    },
    {
      "from": "dsh-plan-mode",
      "to": "dsh-agent",
      "mechanism": "E1",
      "evidence": "src/index.ts:29 type import Agent/PreStepDecision + src/index.ts:202 agent.session",
      "purpose": "阅读并驱动 Agent 的会话与预备步决策",
      "type_only": true
    },
    {
      "from": "dsh-plan-mode",
      "to": "dsh-commands",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:35 type import CommandDefinitionId + src/types.ts:11 CommandId + src/index.ts:230 ctx.inject(['commands'])",
      "purpose": "注册 /plan 命令并关联命令生命周期事件",
      "type_only": false
    },
    {
      "from": "dsh-plan-mode",
      "to": "dsh-invariants",
      "mechanism": "E1+E2",
      "evidence": "src/invariant.ts:5 type InvariantInstaller + src/invariant.ts:49 ctx.invariants.register",
      "purpose": "注册 plan/mode 载荷校验不变式",
      "type_only": false
    },
    {
      "from": "dsh-plan-mode",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/index.ts:30 import createUserMessage + src/index.ts:31 type ContextFormed",
      "purpose": "构造模式切换的用户叙述消息",
      "type_only": false
    },
    {
      "from": "dsh-plan-mode",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/index.ts:32 type Session/UserMessage + src/invariant.ts:4 + src/index.ts:434 session.append('plan/mode')",
      "purpose": "追加 plan/mode 事件供投影折叠与恢复",
      "type_only": true
    },
    {
      "from": "dsh-plan-mode",
      "to": "dsh-session-projection",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:36-37 type import ProjectionDefinition + src/index.ts:227 ctx.sessionProjections.register + src/index.ts:374 stateOf",
      "purpose": "注册 plan 投影并读取 plan/turnBoundary 状态",
      "type_only": false
    },
    {
      "from": "dsh-plan-mode",
      "to": "dsh-tools",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:33 import defineTool + src/index.ts:177 inject 'tools' + src/index.ts:278 ctx.tools.register",
      "purpose": "注册常驻的 exit_plan_mode 工具",
      "type_only": false
    },
    {
      "from": "dsh-plan-mode",
      "to": "dsh-user-questions",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:34 import UserQuestionError + src/index.ts:303 ctx.get('userQuestions')",
      "purpose": "呈现计划评审问答通道",
      "type_only": false
    },
    {
      "from": "dsh-plugin-manager",
      "to": "cordis-plugin-include",
      "mechanism": "E1",
      "evidence": "src/index.ts:10 + src/operations.ts:7",
      "purpose": "解析/生成 profile patch 的 PatchOptions 行结构",
      "type_only": true
    },
    {
      "from": "dsh-plugin-manager",
      "to": "cordis-plugin-loader",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:9 + src/index.ts:177 static inject 'loader'",
      "purpose": "读取活动 Loader 行以判定可寻址性与 bundle 贡献是否在用",
      "type_only": false
    },
    {
      "from": "dsh-plugin-manager",
      "to": "dsh-hmr",
      "mechanism": "E2",
      "evidence": "src/index.ts:20 (type merge) + src/index.ts:757-759 ctx.get('hmr').runExclusive",
      "purpose": "配置写入与热重载串行化，并在无 HMR 时降级为 restart-required",
      "type_only": false
    },
    {
      "from": "dsh-plugin-manager",
      "to": "dsh-host-plugin-inventory",
      "mechanism": "E1",
      "evidence": "src/index.ts:13 + src/types.ts:4-6",
      "purpose": "读取运行时插件清单与 entryId 映射，供 listPlugins 对齐",
      "type_only": false
    },
    {
      "from": "dsh-plugin-manager",
      "to": "dsh-sandbox-policy",
      "mechanism": "E2",
      "evidence": "src/tools.ts:5 + src/tools.ts:13 inject + src/tools.ts:38 ctx.sandboxPolicy.resolve",
      "purpose": "解析会话沙箱模式，决定管理操作是否需要 danger-full-access 提权",
      "type_only": false
    },
    {
      "from": "dsh-plugin-manager",
      "to": "dsh-tools",
      "mechanism": "E1+E2",
      "evidence": "src/tools.ts:9 + src/tools.ts:13 inject 'tools' + src/tools.ts:19 ctx.tools.register",
      "purpose": "注册面向模型的 plugin_manager 工具",
      "type_only": false
    },
    {
      "from": "dsh-plugin-manager",
      "to": "dsh-user-approval",
      "mechanism": "E2",
      "evidence": "src/tools.ts:6 + src/tools.ts:42 ctx.get('approval')",
      "purpose": "对提权的管理动作要求用户审批",
      "type_only": false
    },
    {
      "from": "dsh-plugin-package-inventory-deepseek",
      "to": "dsh-agent",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:16 import type {} + src/index.ts:29 inject agents + src/index.ts:165 ctx.agents.get",
      "purpose": "按请求会话定位 agent，以追加其 standing preset 的活跃条目",
      "type_only": false
    },
    {
      "from": "dsh-plugin-package-inventory-deepseek",
      "to": "dsh-agent-preset-registry",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:19 import type {} + src/index.ts:169 dynamic import standingMountFor + src/index.ts:164 ctx.get('agentPresets')",
      "purpose": "查询 agent 的 standing preset 挂载树以纳入预设内活跃插件包",
      "type_only": false
    },
    {
      "from": "dsh-plugin-package-inventory-deepseek",
      "to": "dsh-deepseek-llm-api-extensions",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:17 import type {} + src/index.ts:29 inject deepseekLlmApiExtensions + src/index.ts:196 ctx.deepseekLlmApiExtensions.register",
      "purpose": "把插件包清单作为独立顶层字段注册进 DeepSeek 请求扩展注册表",
      "type_only": false
    },
    {
      "from": "dsh-plugin-package-inventory-deepseek",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/index.ts:18 import type SessionId",
      "purpose": "以 SessionId 类型标识请求所属会话",
      "type_only": true
    },
    {
      "from": "dsh-ptc-runtime-node",
      "to": "dsh-sandbox-policy",
      "mechanism": "E2",
      "evidence": "src/index.ts:12 type import + src/index.ts:53 static inject + src/index.ts:97,110 ctx.sandboxPolicy",
      "purpose": "读取部署/会话沙箱策略作为执行的文件效应边界",
      "type_only": false
    },
    {
      "from": "dsh-pwsh-sandbox",
      "to": "dsh-pwsh-local",
      "mechanism": "E1",
      "evidence": "src/index.ts:28-29 import PwshLocalExecutor 及 Config; src/index.ts:52 class extends PwshLocalExecutor; package.json:31 peerDep",
      "purpose": "复用本地 pwsh 的 argv、执行生命周期与输出机制",
      "type_only": false
    },
    {
      "from": "dsh-pwsh-sandbox",
      "to": "dsh-sandbox-policy",
      "mechanism": "E2",
      "evidence": "src/index.ts:27 import type {}; src/index.ts:53 inject ['sandboxPolicy']; src/index.ts:79 ctx.sandboxPolicy.defaultMode",
      "purpose": "读取部署默认沙箱模式并解析每次调用的完整策略",
      "type_only": false
    },
    {
      "from": "dsh-repeat-tool-reminder",
      "to": "dsh-agent",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:11 import (Agent, PreStepDecision) + src/index.ts:236-237 ctx.on('agent/pre-step') + chains.delete(agent)",
      "purpose": "以 agent 为键维护重复链并在用户插话时重置",
      "type_only": false
    },
    {
      "from": "dsh-repeat-tool-reminder",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/index.ts:12-13 import createUserMessage + src/index.ts:20 import MessageSource",
      "purpose": "构造模型可见的提醒消息及其生产者来源标签",
      "type_only": false
    },
    {
      "from": "dsh-repeat-tool-reminder",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/index.ts:21 import UserMessage",
      "purpose": "提醒消息所使用的会话消息类型",
      "type_only": true
    },
    {
      "from": "dsh-repeat-tool-reminder",
      "to": "dsh-tools",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:22 import (PostToolDecision, ToolExecution) + src/index.ts:220 ctx.on('tools/post-execute')",
      "purpose": "订阅工具执行后瀑布点以观察重复调用并附加提醒",
      "type_only": false
    },
    {
      "from": "dsh-sandbox-local",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/index.ts:39 type import",
      "purpose": "引用 SessionId 品牌以按会话/工作区对标记临时授权",
      "type_only": true
    },
    {
      "from": "dsh-sandbox-policy",
      "to": "dsh-agent",
      "mechanism": "E1",
      "evidence": "src/index.ts:27 type import",
      "purpose": "合并 agent 请求上下文事件类型以取到会话",
      "type_only": true
    },
    {
      "from": "dsh-sandbox-policy",
      "to": "dsh-invariants",
      "mechanism": "E1+E2",
      "evidence": "src/invariant.ts:5 import + src/invariant.ts:13 inject + src/invariant.ts:43 ctx.invariants.register",
      "purpose": "注册本包事件字段的运行时不变式检查",
      "type_only": false
    },
    {
      "from": "dsh-sandbox-policy",
      "to": "dsh-session",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:29 import + src/session-mode.ts:21 import + src/invariant.ts:25 ctx.sessions",
      "purpose": "读取会话 cwd/日志并在事件上声明 sandbox/mode 事件类型",
      "type_only": false
    },
    {
      "from": "dsh-sandbox-policy",
      "to": "dsh-session-projection",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:30 type import + src/index.ts:119 static inject + src/index.ts:133 register",
      "purpose": "把 sandboxMode 作为投影单元注册并读取会话模式覆盖",
      "type_only": false
    },
    {
      "from": "dsh-sandbox-policy",
      "to": "dsh-system-prompt",
      "mechanism": "E2",
      "evidence": "src/index.ts:31 type import + src/index.ts:141-144 systemPrompt.context",
      "purpose": "向模型请求注入解析后的文件策略文本",
      "type_only": false
    },
    {
      "from": "dsh-schedule",
      "to": "dsh-agent",
      "mechanism": "E1+E2",
      "evidence": "src/tools.ts:7 import + src/index.ts:170 ctx.agents.roots",
      "purpose": "把工具注册绑定到根 agent 的作用域与会话",
      "type_only": false
    },
    {
      "from": "dsh-schedule",
      "to": "dsh-api-session-controller",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:7 type import + src/runtime.ts:10 import + src/runtime.ts:101 ctx.sessionController.resolveAgent",
      "purpose": "在到期投递时恢复/激活目标会话",
      "type_only": false
    },
    {
      "from": "dsh-schedule",
      "to": "dsh-invariants",
      "mechanism": "E1+E2",
      "evidence": "src/invariant.ts:8 import + src/invariant.ts:63 ctx.invariants.register",
      "purpose": "注册 schedule/change 事件流的运行时不变式",
      "type_only": false
    },
    {
      "from": "dsh-schedule",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/runtime.ts:2-3 import + src/storage.ts:4 import",
      "purpose": "构造 schedule 来源的用户消息并标记 MessageId 品牌",
      "type_only": false
    },
    {
      "from": "dsh-schedule",
      "to": "dsh-session",
      "mechanism": "E1+E2",
      "evidence": "src/domain.ts:7-8 import + src/storage.ts:3 import + src/index.ts:96 ctx.sessions + src/runtime.ts:124 ctx.sessions.flush",
      "purpose": "以会话作为投递目标并强制送达前持久化",
      "type_only": false
    },
    {
      "from": "dsh-schedule",
      "to": "dsh-storage-domain",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:6 import + src/storage.ts:5 import + src/index.ts:126 ctx.storageDomain.open",
      "purpose": "把任务与投递历史持久化到 schedule 存储域",
      "type_only": false
    },
    {
      "from": "dsh-schedule",
      "to": "dsh-tools",
      "mechanism": "E1+E2",
      "evidence": "src/tools.ts:9-10 import + src/index.ts:101 static inject",
      "purpose": "用 defineTool 向 agent 作用域注册四个 schedule 工具",
      "type_only": false
    },
    {
      "from": "dsh-schedule",
      "to": "dsh-workspace",
      "mechanism": "E1",
      "evidence": "src/index.ts:9 type import + src/types.ts:11 import",
      "purpose": "以 SessionActivity 类型参与工作区归档准入与停止判定",
      "type_only": true
    },
    {
      "from": "dsh-scope",
      "to": "dsh-invariants",
      "mechanism": "E1+E2",
      "evidence": "package.json:35 peerDep + src/invariant.ts:4 import + src/invariant.ts:13 inject(['invariants']) + src/invariant.ts:41 register",
      "purpose": "注册作用域派发关系的运行时不变量",
      "type_only": false
    },
    {
      "from": "dsh-sdk-jsonrpc-server",
      "to": "dsh-agent",
      "mechanism": "E1+E2",
      "evidence": "src/server.ts:11 import + src/index.ts:22 static inject (agents)",
      "purpose": "经 agent 工厂创建/管理 SDK 会话 agent",
      "type_only": false
    },
    {
      "from": "dsh-sdk-jsonrpc-server",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/server.ts:13 import",
      "purpose": "处理模型请求/流相关能力",
      "type_only": false
    },
    {
      "from": "dsh-sdk-jsonrpc-server",
      "to": "dsh-llm-deepseek-api-key",
      "mechanism": "E1",
      "evidence": "src/server.ts:18 import",
      "purpose": "接入 DeepSeek API key 凭据 seam",
      "type_only": false
    },
    {
      "from": "dsh-sdk-jsonrpc-server",
      "to": "dsh-scope",
      "mechanism": "E1",
      "evidence": "src/server.ts:14 import",
      "purpose": "使用作用域能力装配 SDK 运行时",
      "type_only": false
    },
    {
      "from": "dsh-sdk-jsonrpc-server",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/server.ts:15 import",
      "purpose": "投影会话事件与生命周期到 SDK 结果",
      "type_only": true
    },
    {
      "from": "dsh-sdk-jsonrpc-server",
      "to": "dsh-subagent",
      "mechanism": "E1",
      "evidence": "src/server.ts:16-17 import",
      "purpose": "暴露/跟踪子代理并处理 subagent/end",
      "type_only": true
    },
    {
      "from": "dsh-session",
      "to": "dsh-invariants",
      "mechanism": "E1+E2",
      "evidence": "session/package.json:52 devDep + src/invariant.ts:10 import + src/invariant.ts:20 inject(['invariants']) + src/invariant.ts:258 register",
      "purpose": "注册会话日志关系不变量",
      "type_only": false
    },
    {
      "from": "dsh-session",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/index.ts:15,23,31 + src/types.ts:2-16 + package.json:58 dependency",
      "purpose": "复用 llm 消息/工具/请求头等类型与派生消息词汇",
      "type_only": false
    },
    {
      "from": "dsh-session",
      "to": "dsh-scope",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:13-14 import scopeOf/scopeTarget + src/index.ts:426 scopeTarget 构造 carrier + package.json:50 peerDep",
      "purpose": "为会话构造作用域路由载体并读取上下文作用域",
      "type_only": false
    },
    {
      "from": "dsh-session-checkpoint-policy",
      "to": "dsh-agent",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:11 import + src/index.ts:79 agent/pre-step",
      "purpose": "在每步请求前持久化前一步结果",
      "type_only": false
    },
    {
      "from": "dsh-session-checkpoint-policy",
      "to": "dsh-llm",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:9 import + src/index.ts:18 static inject + src/index.ts:64 llm/stream",
      "purpose": "在模型流请求边界做检查点",
      "type_only": false
    },
    {
      "from": "dsh-session-checkpoint-policy",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/index.ts:8 import",
      "purpose": "引用 Session 类型并对其调用 flush",
      "type_only": true
    },
    {
      "from": "dsh-session-checkpoint-policy",
      "to": "dsh-tools",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:10 import + src/index.ts:18 static inject + src/index.ts:70 tools/execute",
      "purpose": "在工具执行边界做检查点并复用中止错误码",
      "type_only": false
    },
    {
      "from": "dsh-session-log-deepseek",
      "to": "dsh-deepseek-llm-api-extensions",
      "mechanism": "E2",
      "evidence": "src/index.ts:12 type import + src/index.ts:36 static inject + src/index.ts:186 ctx.deepseekLlmApiExtensions.register",
      "purpose": "把 dsh_session_log 字段注册到官方 DeepSeek 请求扩展点",
      "type_only": false
    },
    {
      "from": "dsh-session-log-deepseek",
      "to": "dsh-invariants",
      "mechanism": "E1+E2",
      "evidence": "src/invariant.ts:6 import + src/invariant.ts:75 ctx.invariants.register",
      "purpose": "注册水位字段的运行时不变式",
      "type_only": false
    },
    {
      "from": "dsh-session-log-deepseek",
      "to": "dsh-session",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:13 import + src/index.ts:36 static inject (sessions) + src/index.ts:190 ctx.sessions.get",
      "purpose": "从会话日志读取待上传事件并追加接受水位事件",
      "type_only": false
    },
    {
      "from": "dsh-session-log-export",
      "to": "dsh-client-locale",
      "mechanism": "E2",
      "evidence": "src/client/index.ts:30 inject ['locale']; src/client/index.ts:40 ctx.locale.register",
      "purpose": "注册 session-log-download 命名空间的中英文字典",
      "type_only": false
    },
    {
      "from": "dsh-session-log-export",
      "to": "dsh-client-ui-commands",
      "mechanism": "E2",
      "evidence": "src/client/index.ts:6 import; src/client/index.ts:48 ctx.on('command/executed')",
      "purpose": "订阅 /export 命令执行成功事件以启动浏览器下载",
      "type_only": false
    },
    {
      "from": "dsh-session-log-export",
      "to": "dsh-client-ui-conversation",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:7 import; src/client/Dialog.tsx:16 PropsRuntime<'conversation.session.header.utilities'>",
      "purpose": "声明会话头部工具插槽的运行时 props 类型",
      "type_only": true
    },
    {
      "from": "dsh-session-log-export",
      "to": "dsh-client-ui-message-feedback",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:10 import; src/client/index.ts:60 ctx.get('feedbackUi')",
      "purpose": "探测 feedbackUi 可用性并在下拉菜单中提供反馈入口",
      "type_only": false
    },
    {
      "from": "dsh-session-log-export",
      "to": "dsh-client-ui-primitives",
      "mechanism": "E1",
      "evidence": "src/client/HeaderAction.tsx:6 import; src/client/Dialog.tsx:3 import",
      "purpose": "复用 Button/Menu/Modal 等基础组件渲染菜单与下载弹窗",
      "type_only": false
    },
    {
      "from": "dsh-session-log-export",
      "to": "dsh-client-ui-renderer",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:8 import",
      "purpose": "沿用客户端渲染层的类型环境",
      "type_only": true
    },
    {
      "from": "dsh-session-log-export",
      "to": "dsh-client-ui-session",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:9 import",
      "purpose": "沿用会话视图的类型环境",
      "type_only": true
    },
    {
      "from": "dsh-session-log-export",
      "to": "dsh-commands",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:4,8 import; src/index.ts:41 inject ['commands']; src/index.ts:79 ctx.commands.register",
      "purpose": "注册 Web /export 命令作为导出入口",
      "type_only": false
    },
    {
      "from": "dsh-session-log-export",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/archive.ts:30,32 import; package.json:46 peerDep",
      "purpose": "使用 SessionId/SessionHeader/SessionEvent/SessionStore 类型与 SESSION_FORMAT_VERSION 序列化日志",
      "type_only": false
    },
    {
      "from": "dsh-session-persistence-jsonl",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/generation.ts:30 import + src/storage.ts:13 import",
      "purpose": "复用消息组装/流展开与 errorChain 工具",
      "type_only": false
    },
    {
      "from": "dsh-session-persistence-jsonl",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/index.ts:36 import + src/lease.ts:36 import + src/catalog-migration.ts:9 import",
      "purpose": "复用 SESSION_FORMAT_VERSION、SessionId/SessionLogOffset 与 Session 类型",
      "type_only": false
    },
    {
      "from": "dsh-session-projection",
      "to": "dsh-session",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:22 import + src/index.ts:209,220 ctx.on session/created/session/event",
      "purpose": "以会话日志为唯一输入驱动投影并读取 seq/header 元数据",
      "type_only": false
    },
    {
      "from": "dsh-session-projection-cache",
      "to": "dsh-session",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:22 import + src/spec.ts:16 import + src/index.ts:266 ctx.sessions.flush",
      "purpose": "以会话身份/日志水位作为缓存行匹配依据并做持久化屏障",
      "type_only": false
    },
    {
      "from": "dsh-session-projection-cache",
      "to": "dsh-session-projection",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:33 type import + src/index.ts:105 static inject + src/index.ts:204 ctx.sessionProjections.viewCheckpoint",
      "purpose": "对注册单元做 checkpoint/restore/hydrate 并查看缓存行",
      "type_only": false
    },
    {
      "from": "dsh-session-projection-cache",
      "to": "dsh-storage-domain",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:34 type import + src/spec.ts:18 import + src/index.ts:118 ctx.storageDomain.open",
      "purpose": "以域表承载每会话一条检查点记录",
      "type_only": false
    },
    {
      "from": "dsh-session-query-sqlite",
      "to": "dsh-session",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:8,12 import; src/index.ts:204 static inject ['sessions']; src/index.ts:503 this.ctx.sessions.list(); package.json:30 peerDep",
      "purpose": "读取 live 会话（ctx.sessions）并用 SessionHeader/SessionId/SessionSeq 类型构建索引",
      "type_only": false
    },
    {
      "from": "dsh-session-reference",
      "to": "dsh-agent",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:10 import type Agent/PreStepDecision + src/index.ts:135 ctx.on('agent/pre-step')",
      "purpose": "在 agent 步前把会话引用上下文拼入直接用户消息之后",
      "type_only": false
    },
    {
      "from": "dsh-session-reference",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/index.ts:12 import createUserMessage/freezeMessage/LlmError + src/index.ts:13 import type ContentBlock/LlmResolvedModelInfo/UserMessage + src/types.ts:8-9 子路径类型 import",
      "purpose": "构造引用上下文 user 消息、冻结直接消息，并识别 NO_ADAPTER 以回退默认字节预算",
      "type_only": false
    },
    {
      "from": "dsh-session-reference",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/index.ts:14 import type SessionId + src/projection.ts:7-8 import SessionSeq/类型 + src/spill.ts:3 import type SessionId + src/types.ts:10 + src/uri.ts:4",
      "purpose": "使用会话 id / 序列号等不透明标识类型区分源会话与捕获位置",
      "type_only": false
    },
    {
      "from": "dsh-session-reference",
      "to": "dsh-session-projection",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:17 import type ProjectionSnapshot + src/index.ts:248 this.ctx.get('sessionProjections') + src/index.ts:250 projections.snapshot(attached, ['title','subagent'])",
      "purpose": "从 title/subagent 投影快照派生候选的提及标签与显示标题，避免折叠整个日志",
      "type_only": false
    },
    {
      "from": "dsh-session-reference",
      "to": "dsh-session-projection-cache",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:18 type-only import + src/index.ts:251 this.ctx.get('sessionProjectionCache')?.cachedSnapshot",
      "purpose": "对冷会话从持久投影缓存回答标题，无需打开其日志",
      "type_only": false
    },
    {
      "from": "dsh-session-reference",
      "to": "dsh-session-title",
      "mechanism": "E1",
      "evidence": "src/index.ts:19 type-only import (title projection key merge)",
      "purpose": "引入 title 投影键的类型合并以读取会话标题作为提及标签",
      "type_only": true
    },
    {
      "from": "dsh-session-reference",
      "to": "dsh-subagent",
      "mechanism": "E1",
      "evidence": "src/index.ts:20 type-only import (subagent label projection)",
      "purpose": "引入 subagent 投影值的类型以优先使用子代理创建标签作为显示标题",
      "type_only": true
    },
    {
      "from": "dsh-session-reference",
      "to": "dsh-system-prompt",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:21 type-only import + src/index.ts:127 ctx.on('system-prompt/assemble', {prepend:true})",
      "purpose": "在系统提示装配完成后捕获 provider/model 变量作为引用字节预算的模型来源",
      "type_only": false
    },
    {
      "from": "dsh-session-stats",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/projection.ts:27 import",
      "purpose": "复用 assistantStreamFirstTokenTime 计算首 token 延迟",
      "type_only": false
    },
    {
      "from": "dsh-session-stats",
      "to": "dsh-session-projection",
      "mechanism": "E1+E2",
      "evidence": "src/projection.ts:28 import + src/index.ts:20 static inject + src/index.ts:28 ctx.sessionProjections.register",
      "purpose": "把 sessionStats 单元注册到投影注册表并交付客户端视图",
      "type_only": false
    },
    {
      "from": "dsh-session-telemetry-otel",
      "to": "dsh-command-feedback",
      "mechanism": "E1",
      "evidence": "src/index.ts:18 type import",
      "purpose": "声明 feedback/record 等事件类型以判定授权事件",
      "type_only": true
    },
    {
      "from": "dsh-session-telemetry-otel",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/index.ts:29 import",
      "purpose": "以 APP_IDENTITY 作为 OTel Resource 的 service.name/version",
      "type_only": false
    },
    {
      "from": "dsh-session-telemetry-otel",
      "to": "dsh-message-feedback",
      "mechanism": "E1",
      "evidence": "src/index.ts:19 type import",
      "purpose": "声明 feedback/message-put/delete 事件类型以判定本会话反馈",
      "type_only": true
    },
    {
      "from": "dsh-session-telemetry-otel",
      "to": "dsh-session",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:20 import + src/index.ts:157 static inject (sessions) + src/index.ts:246 ctx.on session/event",
      "purpose": "监听会话事件以判定 feedback 授权并捕获历史",
      "type_only": false
    },
    {
      "from": "dsh-session-title",
      "to": "dsh-agent",
      "mechanism": "E1",
      "evidence": "src/index.ts:21 type import",
      "purpose": "合并 agent 相关事件/上下文类型",
      "type_only": true
    },
    {
      "from": "dsh-session-title",
      "to": "dsh-invariants",
      "mechanism": "E1+E2",
      "evidence": "src/invariant.ts:8 import + src/invariant.ts:81 ctx.invariants.register",
      "purpose": "注册 session/title 事件来源与 messageSeqs 关系的运行时不变式",
      "type_only": false
    },
    {
      "from": "dsh-session-title",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/index.ts:11-12 import",
      "purpose": "判定 agent 循环请求并读取 model 路由以驱动生成",
      "type_only": false
    },
    {
      "from": "dsh-session-title",
      "to": "dsh-session",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:18 import + src/types.ts:14 import + src/index.ts:403 ctx.sessions.get",
      "purpose": "以会话日志为标题真相源并声明 session/title 事件类型",
      "type_only": false
    },
    {
      "from": "dsh-session-title",
      "to": "dsh-session-projection",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:19-20 import + src/index.ts:296 static inject + src/index.ts:338,545 ctx.sessionProjections",
      "purpose": "注册 title/titleInput 单元并读取 titleInput 与 turnBoundary 状态",
      "type_only": false
    },
    {
      "from": "dsh-session-title-all-prompts-llm",
      "to": "dsh-llm",
      "mechanism": "E2",
      "evidence": "src/index.ts:12 static inject (llm)",
      "purpose": "经 llm 服务调用模型生成标题",
      "type_only": false
    },
    {
      "from": "dsh-session-title-all-prompts-llm",
      "to": "dsh-session",
      "mechanism": "E2",
      "evidence": "src/index.ts:12 static inject (sessions)",
      "purpose": "读取会话上下文以生成标题",
      "type_only": false
    },
    {
      "from": "dsh-session-title-all-prompts-llm",
      "to": "dsh-session-title",
      "mechanism": "E2",
      "evidence": "src/index.ts:12 static inject (sessionTitle)",
      "purpose": "向标题服务注册 all-prompts provider",
      "type_only": false
    },
    {
      "from": "dsh-session-title-first-prompt-llm",
      "to": "dsh-llm",
      "mechanism": "E2",
      "evidence": "src/index.ts:12 static inject (llm)",
      "purpose": "经 llm 服务调用模型生成标题",
      "type_only": false
    },
    {
      "from": "dsh-session-title-first-prompt-llm",
      "to": "dsh-session",
      "mechanism": "E2",
      "evidence": "src/index.ts:12 static inject (sessions)",
      "purpose": "读取会话上下文以生成标题",
      "type_only": false
    },
    {
      "from": "dsh-session-title-first-prompt-llm",
      "to": "dsh-session-title",
      "mechanism": "E2",
      "evidence": "src/index.ts:12 static inject (sessionTitle)",
      "purpose": "向标题服务注册 first-prompt provider",
      "type_only": false
    },
    {
      "from": "dsh-session-turn-outline",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/projection.ts:24 import + src/types.ts:10 import",
      "purpose": "复用 SessionSeq 与 SessionEvent 类型锚定轮次边界",
      "type_only": false
    },
    {
      "from": "dsh-session-turn-outline",
      "to": "dsh-session-projection",
      "mechanism": "E1+E2",
      "evidence": "src/projection.ts:25 import + src/index.ts:20 static inject + src/index.ts:28 ctx.sessionProjections.register",
      "purpose": "把 turnOutline 单元注册到投影注册表并交付客户端视图",
      "type_only": false
    },
    {
      "from": "dsh-settings",
      "to": "dsh-config-editor",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:9 import type {}; src/index.ts:224 static inject ['configEditor']; src/index.ts:292 ctx.configEditor.documentPath",
      "purpose": "通过配置编辑器枚举 profile 条目并对其原始文档执行 edit/写回",
      "type_only": false
    },
    {
      "from": "dsh-shell-env",
      "to": "dsh-tools",
      "mechanism": "E1",
      "evidence": "src/index.ts:16 import type { ToolExecution }; package.json:34 peerDep",
      "purpose": "按一次工具执行上下文解析并贡献环境变量",
      "type_only": true
    },
    {
      "from": "dsh-skill",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "package.json:31 peerDep + src/index.ts:14 import type",
      "purpose": "声明合并 dsh-llm 的 MessageSourceMap 以注册 'skill-invocation' 消息来源类型 (src/index.ts:154-159)",
      "type_only": true
    },
    {
      "from": "dsh-skill",
      "to": "dsh-scope",
      "mechanism": "E1",
      "evidence": "package.json:32 peerDep + src/index.ts:16-17 import",
      "purpose": "复用 ScopedLayers/NamedEntries/scopeOf/scopeChainOf 实现按 agent scope 分层的注册表与缓存键 (src/index.ts:362-371)",
      "type_only": false
    },
    {
      "from": "dsh-skill-badge",
      "to": "dsh-skill",
      "mechanism": "E1+E2",
      "evidence": "package.json:30 peerDep + src/index.ts:10-15 import + src/index.ts:55 inject['skills'] + src/index.ts:59 ctx.skills.registerProvider",
      "purpose": "向技能注册表注册 bundled provider，并复用其 BUNDLED_SKILL_RANK 与 SkillCandidate/SkillProvider 契约",
      "type_only": false
    },
    {
      "from": "dsh-skill-filesystem",
      "to": "dsh-skill",
      "mechanism": "E1+E2",
      "evidence": "package.json:32 peerDep + src/index.ts:23-34 import + src/index.ts:46 inject['skills'] + src/index.ts:136 ctx.skills.registerProvider",
      "purpose": "实现并注册文件系统技能提供者，复用其 rank 常量、候选/定义与观察结果类型契约",
      "type_only": false
    },
    {
      "from": "dsh-skill-office",
      "to": "dsh-skill",
      "mechanism": "E1+E2",
      "evidence": "package.json:30 peerDep + src/index.ts:10 import + src/index.ts:35 inject['skills'] + src/index.ts:96 ctx.skills.registerProvider",
      "purpose": "向技能注册表注册 office bundled provider，并复用其 BUNDLED_SKILL_RANK 与 SkillCandidate/SkillProvider 契约",
      "type_only": false
    },
    {
      "from": "dsh-spill-policy",
      "to": "dsh-llm",
      "mechanism": "E1+E2",
      "evidence": "package.json:35 peerDep + src/index.ts:10-11 import + src/index.ts:65 ctx.get('llm').imageRequestPricing",
      "purpose": "按当前模型路由估算图像 token 定价，并构造 PTC 图像结果的 additionalContexts 用户消息 (src/index.ts:144)",
      "type_only": false
    },
    {
      "from": "dsh-spill-policy",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "package.json:37 peerDep + src/types.ts:13 import type",
      "purpose": "溢出归属 session id 的类型来源 (src/types.ts:16-25)",
      "type_only": true
    },
    {
      "from": "dsh-spill-policy",
      "to": "dsh-token-meter",
      "mechanism": "E1",
      "evidence": "package.json:43 peerDep + src/index.ts:12 import",
      "purpose": "用 estimateContent 估算文本/内容 token 以决定溢出并计算头尾保留预算",
      "type_only": false
    },
    {
      "from": "dsh-spill-policy",
      "to": "dsh-tools",
      "mechanism": "E1+E2",
      "evidence": "package.json:39 peerDep + src/index.ts:14 import type + src/index.ts:33 inject['tools'] + src/index.ts:133,152 events",
      "purpose": "挂载工具结果后处理与 PTC dispatch 日志的 token 保留策略",
      "type_only": false
    },
    {
      "from": "dsh-storage-domain",
      "to": "dsh-invariants",
      "mechanism": "E1+E2",
      "evidence": "src/invariant.ts:13 (import type InvariantFailure, InvariantInstaller) + src/invariant.ts:21 (inject ['invariants']) + src/invariant.ts:67 (ctx.invariants.register)",
      "purpose": "注册 domain/changed 与内存状态一致性不变量",
      "type_only": false
    },
    {
      "from": "dsh-storage-domain",
      "to": "dsh-storage",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:12 (import storageBackendServiceKey) + src/index.ts:44 (inject ['storage']) + src/index.ts:108-117 (ctx.storage.backend.get / kv.open) + src/index.ts:228 (domainCtx.storage.mount)",
      "purpose": "作为存储中枢的 domain 数据形态，经后端路由打开域单元",
      "type_only": false
    },
    {
      "from": "dsh-storage-json",
      "to": "dsh-storage",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:12-13 (import StorageError/UNIT_NAME_RE/storageBackendServiceKey 与类型) + src/index.ts:20 (inject ['storage']) + src/index.ts:112 (ctx.storage.backend.register('json'))",
      "purpose": "向存储中枢注册 json 后端并提供 kv facet",
      "type_only": false
    },
    {
      "from": "dsh-storage-sqlite",
      "to": "dsh-storage",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:11-12 (import StorageError/UNIT_NAME_RE/storageBackendServiceKey 与类型) + src/index.ts:21 (inject ['storage']) + src/index.ts:161 (ctx.storage.backend.register('sqlite')) + src/schema.ts:12 (import StorageError)",
      "purpose": "向存储中枢注册 sqlite 后端并提供 kv facet",
      "type_only": false
    },
    {
      "from": "dsh-subagent",
      "to": "dsh-agent",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:40 (import type Agent) + src/child-agent.ts:12 (import type Agent,AgentOptions,CreateAgentOptions) + src/index.ts:217 (ctx.inject(['agents'])) + src/continuation.ts:210 (ctx.agents.get)",
      "purpose": "创建与检索子 Agent、读取其会话与状态",
      "type_only": false
    },
    {
      "from": "dsh-subagent",
      "to": "dsh-agent-preset-registry",
      "mechanism": "E1+E2",
      "evidence": "src/child-agent.ts:29 (type import) + src/child-agent.ts:205 (ctx.get('agentPresets')?.composeFrom)",
      "purpose": "让子代理加入父的 preset 组合",
      "type_only": false
    },
    {
      "from": "dsh-subagent",
      "to": "dsh-invariants",
      "mechanism": "E1+E2",
      "evidence": "src/invariant.ts:4 (import type InvariantFailure, InvariantInstaller) + src/invariant.ts:12 (inject ['invariants']) + src/invariant.ts:92 (ctx.invariants.register)",
      "purpose": "注册 provider 注册表与 start/end 配对不变量",
      "type_only": false
    },
    {
      "from": "dsh-subagent",
      "to": "dsh-llm",
      "mechanism": "E1+E2",
      "evidence": "src/descriptor.ts:26 (import type ReasoningEffortId) + src/assistant-output.ts:13 (import joinAssistantStreamText) + src/continuation.ts:515 (ctx.get('llm'))",
      "purpose": "内容块/流文本处理、推理强度与模型图像能力查询",
      "type_only": false
    },
    {
      "from": "dsh-subagent",
      "to": "dsh-permission-presets",
      "mechanism": "E1+E2",
      "evidence": "src/child-agent.ts:23 (type import) + src/child-agent.ts:250 (ctx.get('permissionPresets')?.current)",
      "purpose": "继承 auto/full-access 权限预设身份",
      "type_only": false
    },
    {
      "from": "dsh-subagent",
      "to": "dsh-sandbox-policy",
      "mechanism": "E1+E2",
      "evidence": "src/child-agent.ts:21 (type import) + src/child-agent.ts:253 (ctx.get('sandboxPolicy')?.overrideOf)",
      "purpose": "捕获父会话沙箱覆盖并播种给子代理",
      "type_only": false
    },
    {
      "from": "dsh-subagent",
      "to": "dsh-scope",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:36-37 (import scopeTarget, Scoped) + src/index.ts:216 (scopeTarget(this, parent))",
      "purpose": "按委派父级做作用域过滤的事件派发",
      "type_only": false
    },
    {
      "from": "dsh-subagent",
      "to": "dsh-session",
      "mechanism": "E1+E2",
      "evidence": "src/descriptor.ts:25 (import type SessionEvent) + src/types.ts:15 (import type SessionEvent,SessionId) + src/list-children.ts:69 (ctx.get('sessions'))",
      "purpose": "读写会话事件、会话 id 与会话注册表",
      "type_only": false
    },
    {
      "from": "dsh-subagent",
      "to": "dsh-session-projection",
      "mechanism": "E1+E2",
      "evidence": "src/catalog.ts:17 (import type ProjectionDefinition) + src/index.ts:228 (ctx.inject(['sessionProjections'])) + src/index.ts:230 (projections.register)",
      "purpose": "注册父目录、身份与时长投影",
      "type_only": false
    },
    {
      "from": "dsh-subagent",
      "to": "dsh-system-prompt",
      "mechanism": "E1+E2",
      "evidence": "src/child-agent.ts:15 (type import) + src/child-agent.ts:206 (childCtx.systemPrompt.context)",
      "purpose": "为子代理注册委派作用域上下文与 persona 段",
      "type_only": false
    },
    {
      "from": "dsh-subagent",
      "to": "dsh-tools",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:38 (import assertObjectJsonSchema) + src/types.ts:16 (import type ObjectJsonSchema,ToolRestriction) + src/continuation.ts:179 (ctx.get('tools')?.get('send_message'))",
      "purpose": "校验输出 schema、工具过滤与判定标准 send_message 工具",
      "type_only": false
    },
    {
      "from": "dsh-subagent",
      "to": "dsh-user-approval",
      "mechanism": "E1+E2",
      "evidence": "src/child-agent.ts:22 (type import) + src/child-agent.ts:254 (ctx.get('approval'))",
      "purpose": "将子代理审批策略固定为 never",
      "type_only": false
    },
    {
      "from": "dsh-subagent",
      "to": "dsh-workspace",
      "mechanism": "E1+E2",
      "evidence": "src/archive-admission.ts:13 (import type SessionActivity, SessionActivityItem) + src/archive-admission.ts:23 (ctx.on('workspace/session-activity')) + src/archive-admission.ts:30 (ctx.on('workspace/session-stop'))",
      "purpose": "响应工作区归档准入与活动上报",
      "type_only": false
    },
    {
      "from": "dsh-subagent-acp",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/run.ts:19 (import type ContentBlock)",
      "purpose": "使用内容块类型",
      "type_only": true
    },
    {
      "from": "dsh-subagent-acp",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/run.ts:21 (import type SessionId)",
      "purpose": "品牌化父命名空间的 run/子会话 id",
      "type_only": true
    },
    {
      "from": "dsh-subagent-acp",
      "to": "dsh-subagent",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:14-19 (import 类型) + src/index.ts:24 (inject ['subagents','subprocess']) + src/index.ts:205 (ctx.subagents.registerProvider) + src/run.ts:22 (import settleRunResult, subprocessRunHandle)",
      "purpose": "复用 seam 契约并注册 acp provider",
      "type_only": false
    },
    {
      "from": "dsh-subagent-claude-code",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/run.ts:18 (import type ContentBlock)",
      "purpose": "使用内容块类型",
      "type_only": true
    },
    {
      "from": "dsh-subagent-claude-code",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/run.ts:20 (import type SessionId)",
      "purpose": "品牌化 run id",
      "type_only": true
    },
    {
      "from": "dsh-subagent-claude-code",
      "to": "dsh-subagent",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:12-19 (import NO_START_CAPABILITIES, resolveChildCwd, 类型) + src/index.ts:31 (inject ['subagents','subprocess']) + src/index.ts:151 (ctx.subagents.registerProvider)",
      "purpose": "复用 seam 契约与共享辅助并注册 provider",
      "type_only": false
    },
    {
      "from": "dsh-subagent-codex",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/run.ts:15 (import type ContentBlock)",
      "purpose": "使用内容块类型",
      "type_only": true
    },
    {
      "from": "dsh-subagent-codex",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/run.ts:16 (import type SessionId)",
      "purpose": "品牌化 run id",
      "type_only": true
    },
    {
      "from": "dsh-subagent-codex",
      "to": "dsh-subagent",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:12-19 (import NO_START_CAPABILITIES, resolveChildCwd, 类型) + src/index.ts:31 (inject ['subagents','subprocess']) + src/index.ts:135 (ctx.subagents.registerProvider)",
      "purpose": "复用 seam 契约与共享辅助并注册 provider",
      "type_only": false
    },
    {
      "from": "dsh-subagent-dsh-sdk",
      "to": "dsh-agent",
      "mechanism": "E1",
      "evidence": "src/index.ts:18 (import type AgentOptions)",
      "purpose": "解析并合并子代理 route 选项",
      "type_only": true
    },
    {
      "from": "dsh-subagent-dsh-sdk",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/run.ts:23 (import type ContentBlock, ReasoningEffortId)",
      "purpose": "内容块与推理强度类型",
      "type_only": true
    },
    {
      "from": "dsh-subagent-dsh-sdk",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/run.ts:24 (import type SessionEvent, SessionId, TurnEndReason)",
      "purpose": "读取子会话事件与终态理由",
      "type_only": true
    },
    {
      "from": "dsh-subagent-dsh-sdk",
      "to": "dsh-subagent",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:19-20 (import NO_START_CAPABILITIES, resolveChildCwd, validateConfiguredCwd, 类型) + src/index.ts:31 (inject ['subagents']) + src/index.ts:199 (ctx.subagents.registerProvider)",
      "purpose": "复用 seam 契约与共享辅助并注册 provider",
      "type_only": false
    },
    {
      "from": "dsh-subagent-fork-in-process",
      "to": "dsh-agent",
      "mechanism": "E1",
      "evidence": "src/index.ts:13 (import type Agent)",
      "purpose": "从父 Agent 会话日志切取 seed",
      "type_only": true
    },
    {
      "from": "dsh-subagent-fork-in-process",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/index.ts:12 (import type SessionEvent)",
      "purpose": "seed 事件的会话事件类型",
      "type_only": true
    },
    {
      "from": "dsh-subagent-fork-in-process",
      "to": "dsh-subagent",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:14-20 (import 类型) + src/index.ts:28 (static inject ['subagents']) + src/index.ts:95 (ctx.subagents.registerProvider)",
      "purpose": "实现并注册 fork provider",
      "type_only": false
    },
    {
      "from": "dsh-subagent-spawn-in-process",
      "to": "dsh-subagent",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:14-16 (import 类型) + src/index.ts:22 (static inject ['subagents']) + src/index.ts:69 (ctx.subagents.registerProvider)",
      "purpose": "实现并注册 spawn provider",
      "type_only": false
    },
    {
      "from": "dsh-subprocess-ssh",
      "to": "dsh-subprocess-local",
      "mechanism": "E1",
      "evidence": "src/index.ts:7 (import OutputCollector from '@deepseek-ai/dsh-subprocess-local/output')",
      "purpose": "复用本地输出收集器实现远程收集快照",
      "type_only": false
    },
    {
      "from": "dsh-system-prompt",
      "to": "dsh-invariants",
      "mechanism": "E1+E2",
      "evidence": "src/invariant.ts:4 import + src/invariant.ts:13 inject(['invariants']) + src/invariant.ts:60 register",
      "purpose": "注册提示装配结果合法性不变量",
      "type_only": false
    },
    {
      "from": "dsh-system-prompt",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/index.ts:11 import type ContextSnapshotSection/ToolSchema",
      "purpose": "复用工具 schema 与上下文快照类型",
      "type_only": true
    },
    {
      "from": "dsh-system-prompt",
      "to": "dsh-scope",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:9-10 import AnonymousEntries/NamedEntries/ScopedLayers/scopeTarget",
      "purpose": "以作用域层存储并合并各作用域的提示贡献",
      "type_only": false
    },
    {
      "from": "dsh-terminal",
      "to": "dsh-agent",
      "mechanism": "E1+E2",
      "evidence": "package.json:30 peerDep + src/index.ts:8 import Agent + src/index.ts:319 ctx.get('agents')",
      "purpose": "以精确 Agent 作为会话 owner，并绑定其生命周期做 cleanup",
      "type_only": false
    },
    {
      "from": "dsh-terminal-bash",
      "to": "dsh-agent",
      "mechanism": "E1+E2",
      "evidence": "package.json:30 peerDep + src/index.ts:8 import Agent + src/index.ts:37 ensureSandboxModeFence(owner)",
      "purpose": "以会话 owner Agent 及其 session 做沙箱模式护栏",
      "type_only": false
    },
    {
      "from": "dsh-terminal-bash",
      "to": "dsh-pwsh-local",
      "mechanism": "E1",
      "evidence": "package.json:41 dep + src/config.ts:4 import resolvePwshPath + src/index.ts:16 import ENCODING_PREAMBLE",
      "purpose": "pwsh 方言的可执行路径解析与 UTF-8 前置",
      "type_only": false
    },
    {
      "from": "dsh-terminal-bash",
      "to": "dsh-sandbox-policy",
      "mechanism": "E1+E2",
      "evidence": "package.json:33 peerDep + src/index.ts:14 type-only import + src/index.ts:27 inject ['sandboxPolicy']",
      "purpose": "解析当前会话的沙箱执行策略",
      "type_only": false
    },
    {
      "from": "dsh-terminal-bash",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "package.json:34 peerDep + src/index.ts:9 import Session/SessionEvent",
      "purpose": "订阅 session/event 校验 sandbox 模式切换",
      "type_only": true
    },
    {
      "from": "dsh-terminal-bash",
      "to": "dsh-session-projection",
      "mechanism": "E1+E2",
      "evidence": "package.json:37 peerDep + src/index.ts:15 type-only import + src/index.ts:27 inject ['sessionProjections']",
      "purpose": "读取 sandboxMode 投影以校验模式切换",
      "type_only": false
    },
    {
      "from": "dsh-terminal-bash",
      "to": "dsh-terminal",
      "mechanism": "E1+E2",
      "evidence": "package.json:31 peerDep + src/index.ts:10-11 import + src/index.ts:237 ctx.terminals.registerBackend",
      "purpose": "向 PTY seam 注册 backend 并复用其类型与 TerminalError",
      "type_only": false
    },
    {
      "from": "dsh-time-context",
      "to": "dsh-agent",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:11 import type Agent/PreStepDecision + src/index.ts:185 ctx.on('agent/pre-step', {prepend:true})",
      "purpose": "在 agent 步前注入时间上下文读数，并读取 turn/step 位置",
      "type_only": false
    },
    {
      "from": "dsh-time-context",
      "to": "dsh-invariants",
      "mechanism": "E1+E2",
      "evidence": "src/invariant.ts:5 import type InvariantFailure/InvariantInstaller + src/invariant.ts:25 inject ['invariants'] + src/invariant.ts:194 ctx.invariants.register",
      "purpose": "注册包级不变量，校验时间读数格式、位置与时间戳在加载与派发时可重放一致",
      "type_only": false
    },
    {
      "from": "dsh-time-context",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/index.ts:12 import createUserMessage + src/index.ts:13 import type ContextFormed + src/index.ts:20 import type UserMessage + src/request-zone.ts:3 import type UserMessage",
      "purpose": "构造带来源标记的时间快照 user 消息，并复用消息来源合并类型",
      "type_only": false
    },
    {
      "from": "dsh-time-context",
      "to": "dsh-session",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:21 import SessionSeq + src/invariant.ts:4 import type Session/SessionEvent + src/index.ts:89 agent.session.eventAt(SessionSeq(seq))",
      "purpose": "倒序读取会话历史以收集本回合已进入的用户消息并定位回合起点",
      "type_only": false
    },
    {
      "from": "dsh-time-context",
      "to": "dsh-session-projection",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:22 type-only import + src/index.ts:53 inject ['agents','sessionProjections'] + src/index.ts:157 ctx.sessionProjections.register + src/index.ts:192 ctx.sessionProjections.stateOf",
      "purpose": "注册并读取 timeContext 投影以驱动注入节流，且向 SessionProjectionStateMap 做类型合并",
      "type_only": false
    },
    {
      "from": "dsh-tmux-context",
      "to": "dsh-agent",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:24 import type PreStepDecision + src/index.ts:246 ctx.on('agent/pre-step', {prepend:true})",
      "purpose": "在 agent 步前注入 tmux 位置上下文，并读取 turn/step 位置",
      "type_only": false
    },
    {
      "from": "dsh-tmux-context",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/index.ts:27 import createUserMessage + src/index.ts:28 import type ContextFormed",
      "purpose": "构造带来源标记的 tmux 位置快照 user 消息，并复用消息来源合并类型",
      "type_only": false
    },
    {
      "from": "dsh-tmux-context",
      "to": "dsh-session-projection",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:25 type-only import + src/index.ts:44 inject ['agents','sessionProjections'] + src/index.ts:230 ctx.sessionProjections.register + src/index.ts:254 ctx.sessionProjections.stateOf",
      "purpose": "注册并读取 tmuxContext 投影以判断位置是否变化、是否超过刷新间隔",
      "type_only": false
    },
    {
      "from": "dsh-token-meter",
      "to": "dsh-compaction-image-offload",
      "mechanism": "E1",
      "evidence": "src/index.ts:8 import from '@deepseek-ai/dsh-compaction-image-offload/projection'",
      "purpose": "激活 image/offload 事件投影声明以在折价时标记已卸载图像",
      "type_only": true
    },
    {
      "from": "dsh-token-meter",
      "to": "dsh-llm",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:10 import assembleAssistantStream + src/index.ts:11 import type TokenUsage + src/index.ts:197 ctx.get('llm')",
      "purpose": "读取路由图像定价与文件请求文本，并重组 assistant 流以估算 provider 输出",
      "type_only": false
    },
    {
      "from": "dsh-token-meter",
      "to": "dsh-llm-retry",
      "mechanism": "E1",
      "evidence": "src/turn-usage.ts:3 import from '@deepseek-ai/dsh-llm-retry/types' + src/usage-projection.ts:7 import type {}",
      "purpose": "识别 llm/retry-started 以正确区分一次 Turn 内的多次尝试",
      "type_only": true
    },
    {
      "from": "dsh-token-meter",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/types.ts:8 import type SessionEvent + src/index.ts:19 import canonicalHeader/isSurfaceEvent/SessionSeq",
      "purpose": "读取持久会话事件序列并做 surface 判定与表头规范化",
      "type_only": false
    },
    {
      "from": "dsh-token-meter",
      "to": "dsh-session-projection",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:27 import type {} + src/index.ts:106 static inject sessionProjections + src/index.ts:114 ctx.sessionProjections.register",
      "purpose": "注册三个投影单元并读取其在会话上的状态",
      "type_only": false
    },
    {
      "from": "dsh-tool-ask-user",
      "to": "dsh-agent",
      "mechanism": "E1",
      "evidence": "package.json:30 peerDep（execute 的 exec.agent 来自工具执行上下文，src/index.ts:88）",
      "purpose": "工具执行携带的 agent 身份",
      "type_only": false
    },
    {
      "from": "dsh-tool-ask-user",
      "to": "dsh-tools",
      "mechanism": "E1+E2",
      "evidence": "package.json:31 peerDep + src/index.ts:10 import defineTool; src/index.ts:19 ctx.tools.register",
      "purpose": "注册模型可用工具",
      "type_only": false
    },
    {
      "from": "dsh-tool-ask-user",
      "to": "dsh-user-questions",
      "mechanism": "E1+E2",
      "evidence": "package.json:32 peerDep + src/index.ts:11 side-effect type import; src/index.ts:80 ctx.userQuestions.ask",
      "purpose": "调用人类问答能力 seam",
      "type_only": false
    },
    {
      "from": "dsh-tool-bash",
      "to": "dsh-agent",
      "mechanism": "E1",
      "evidence": "src/index.ts:21 import type { Agent }; package.json:30 peerDep",
      "purpose": "读取调用者 Agent 会话以解析 workdir 与作业归属",
      "type_only": true
    },
    {
      "from": "dsh-tool-bash",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/index.ts:20 import HarnessError; package.json:33 peerDep",
      "purpose": "用 HarnessError/TOOL_ABORTED 表达工具中止",
      "type_only": false
    },
    {
      "from": "dsh-tool-bash",
      "to": "dsh-sandbox-policy",
      "mechanism": "E2",
      "evidence": "src/index.ts:27 import type { SandboxPolicyService }; src/index.ts:215 ctx.get('sandboxPolicy'); src/index.ts:221 sandboxPolicy.resolve",
      "purpose": "解析调用会话的完整沙箱执行策略",
      "type_only": false
    },
    {
      "from": "dsh-tool-bash",
      "to": "dsh-shell-env",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:24 import type {}; src/index.ts:34 inject ['shellEnv']; src/index.ts:489 ctx.shellEnv.collect(exec)",
      "purpose": "为每次执行收集受信任 DSH_* 环境变量",
      "type_only": false
    },
    {
      "from": "dsh-tool-bash",
      "to": "dsh-system-prompt",
      "mechanism": "E2",
      "evidence": "src/index.ts:34 inject ['systemPrompt']; src/index.ts:257 ctx.systemPrompt.section",
      "purpose": "注入 bash 交叉调用指引段落",
      "type_only": false
    },
    {
      "from": "dsh-tool-bash",
      "to": "dsh-tools",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:18-19 import defineTool/TOOL_ABORTED; src/index.ts:34 inject ['tools']; src/index.ts:540 ctx.tools.register",
      "purpose": "注册 bash 工具定义并消费工具运行上下文",
      "type_only": false
    },
    {
      "from": "dsh-tool-bash",
      "to": "dsh-user-approval",
      "mechanism": "E2",
      "evidence": "src/index.ts:23 import type {}; src/index.ts:247 ctx.get('approval')",
      "purpose": "把沙箱升级请求路由到用户审批通道",
      "type_only": false
    },
    {
      "from": "dsh-tool-bash-persistent",
      "to": "dsh-agent",
      "mechanism": "E1",
      "evidence": "src/index.ts:9 import type { Agent }; package.json:29 peerDep",
      "purpose": "以 Agent 为 owner 隔离持久 shell 并读取其会话 cwd",
      "type_only": true
    },
    {
      "from": "dsh-tool-bash-persistent",
      "to": "dsh-terminal",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:11 import type { TerminalSessionId }; src/index.ts:441 inject ['terminals']; src/index.ts:257 ctx.terminals.spawn",
      "purpose": "经 owner 级 PTY 服务创建/发送/读取/终止持久 shell 会话",
      "type_only": false
    },
    {
      "from": "dsh-tool-bash-persistent",
      "to": "dsh-tools",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:13 import defineTool; src/index.ts:441 inject ['tools']; src/index.ts:413 ctx.tools.register",
      "purpose": "注册持久 bash 工具定义",
      "type_only": false
    },
    {
      "from": "dsh-tool-call-timeout-policy",
      "to": "dsh-tools",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:16 import ToolExecutionResult + src/index.ts:31 inject ['tools'] + src/index.ts:56-57 ctx.on('tools/execute') + ctx.tools.get",
      "purpose": "包装工具执行瀑布点并读取工具声明的超时预算",
      "type_only": false
    },
    {
      "from": "dsh-tool-cordis",
      "to": "cordis-plugin-loader",
      "mechanism": "E1",
      "evidence": "src/config.ts:4 import",
      "purpose": "Config provider 遍历 Loader entry 树并解析条目",
      "type_only": true
    },
    {
      "from": "dsh-tool-cordis",
      "to": "dsh-agent",
      "mechanism": "E1",
      "evidence": "src/index.ts:3 import",
      "purpose": "查询需以 Agent 为其作用域主体",
      "type_only": true
    },
    {
      "from": "dsh-tool-cordis",
      "to": "dsh-cordis-host-runner",
      "mechanism": "E1+E2",
      "evidence": "src/providers.ts:4 import + src/index.ts:10 cordisInspect 由该包提供",
      "purpose": "消费宿主 Inspect 注册表以注册 provider 与执行查询",
      "type_only": false
    },
    {
      "from": "dsh-tool-cordis",
      "to": "dsh-tools",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:10 inject ['tools','cordisInspect'] + src/index.ts:5 import",
      "purpose": "defineTool 注册工具并用 ctx.tools 读取 Agent 可见 schema",
      "type_only": false
    },
    {
      "from": "dsh-tool-fs",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/read-image.ts:18 import",
      "purpose": "图像以 LLM 可消费的内容部件返回",
      "type_only": true
    },
    {
      "from": "dsh-tool-fs",
      "to": "dsh-sandbox-policy",
      "mechanism": "E1",
      "evidence": "src/sandbox.ts:17 import",
      "purpose": "解析每调用沙箱策略并映射拒绝错误",
      "type_only": true
    },
    {
      "from": "dsh-tool-fs",
      "to": "dsh-system-prompt",
      "mechanism": "E2",
      "evidence": "src/index.ts:22 inject 'systemPrompt' + src/edit.ts:76 ctx.systemPrompt",
      "purpose": "向系统提示注入工具使用指引",
      "type_only": false
    },
    {
      "from": "dsh-tool-fs",
      "to": "dsh-tools",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:22 inject ['tools','fs','systemPrompt'] + src/read.ts:8 import",
      "purpose": "通过工具注册表发布文件系统工具",
      "type_only": false
    },
    {
      "from": "dsh-tool-fs",
      "to": "dsh-user-approval",
      "mechanism": "E1",
      "evidence": "src/index.ts:10 import",
      "purpose": "沙箱升级等敏感操作走用户审批",
      "type_only": true
    },
    {
      "from": "dsh-tool-fs-search",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/search-core.ts:25 import",
      "purpose": "搜索结果以 LLM 可消费的内容部件返回",
      "type_only": false
    },
    {
      "from": "dsh-tool-fs-search",
      "to": "dsh-system-prompt",
      "mechanism": "E2",
      "evidence": "src/index.ts:70 inject 'systemPrompt' + src/glob.ts:297 ctx.systemPrompt",
      "purpose": "向系统提示注入搜索工具使用指引",
      "type_only": false
    },
    {
      "from": "dsh-tool-fs-search",
      "to": "dsh-tools",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:70 inject ['tools','systemPrompt','subprocess'] + src/search-core.ts:30 import",
      "purpose": "通过工具注册表发布 glob/grep 工具",
      "type_only": false
    },
    {
      "from": "dsh-tool-goal",
      "to": "dsh-agent",
      "mechanism": "E1+E2",
      "evidence": "src/authority.ts:4 import Agent + src/authority.ts:53 ctx.agents.get + src/authority.ts:81 ctx.agents.roots",
      "purpose": "校验调用 agent 的 live 身份与 root 归属以判定人类权威",
      "type_only": false
    },
    {
      "from": "dsh-tool-goal",
      "to": "dsh-goal",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:9-10 import (GoalId, GoalRef, GoalView) + src/authority.ts:113 ctx.goals.get + src/index.ts:225 ctx.goals.create",
      "purpose": "通过目标域服务执行工具操作并读取 CAS 引用",
      "type_only": false
    },
    {
      "from": "dsh-tool-goal",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/index.ts:11 import (boundContextSummary, createUserMessage, HarnessError) + src/wrapup.ts:3 import ContentBlock",
      "purpose": "构造收尾上下文消息与结构化工具错误",
      "type_only": false
    },
    {
      "from": "dsh-tool-goal",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/authority.ts:7 import (SessionEvent, SessionSeq)",
      "purpose": "权威判定所需的会话事件与序列号类型",
      "type_only": true
    },
    {
      "from": "dsh-tool-goal",
      "to": "dsh-session-projection",
      "mechanism": "E1+E2",
      "evidence": "src/authority.ts:9 import type {} + src/authority.ts:35 ctx.sessionProjections.stateOf(agent.session,'turnBoundary')",
      "purpose": "读取 turnBoundary 投影确定开放轮的起始序列号",
      "type_only": false
    },
    {
      "from": "dsh-tool-goal",
      "to": "dsh-system-prompt",
      "mechanism": "E2",
      "evidence": "src/index.ts:29 inject [...'systemPrompt'] + src/index.ts:189-191 ctx.systemPrompt.section/getSectionOrder",
      "purpose": "注册目标工具策略段并按序插入系统提示词",
      "type_only": false
    },
    {
      "from": "dsh-tool-goal",
      "to": "dsh-tools",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:19-20 import (defineTool, GenericCallView) + src/index.ts:29 inject ['agents','goals','tools','systemPrompt','sessionProjections'] + src/index.ts:195 ctx.tools.register",
      "purpose": "以 defineTool 定义并注册三个目标工具",
      "type_only": false
    },
    {
      "from": "dsh-tool-jobs",
      "to": "dsh-agent",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:20 import type Agent + src/index.ts:212 ctx.on('agent/inbox/claimed')",
      "purpose": "把完成通知投递到 owner Agent（inject/followup）并据其 input 重置唤醒预算",
      "type_only": false
    },
    {
      "from": "dsh-tool-jobs",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/index.ts:13 import createUserMessage/boundContextSummary",
      "purpose": "构造带来源标记的用户消息作为完成通知并做长度约束",
      "type_only": false
    },
    {
      "from": "dsh-tool-jobs",
      "to": "dsh-system-prompt",
      "mechanism": "E2",
      "evidence": "src/index.ts:31 inject systemPrompt + src/index.ts:250 ctx.systemPrompt.section",
      "purpose": "注入 tool:jobs 段系统提示，指导模型跟踪/收集后台作业",
      "type_only": false
    },
    {
      "from": "dsh-tool-jobs",
      "to": "dsh-tools",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:16 import defineTool + src/index.ts:31 inject tools + src/index.ts:310 ctx.tools.register",
      "purpose": "以上游工具定义注册三个作业控制工具并挂接 tools/pre-execute 拦截",
      "type_only": false
    },
    {
      "from": "dsh-tool-lsp",
      "to": "dsh-system-prompt",
      "mechanism": "E2",
      "evidence": "src/index.ts:47 inject 'systemPrompt' + src/index.ts:103 ctx.systemPrompt.section",
      "purpose": "注入 lsp 工具的模型可见使用指导段落",
      "type_only": false
    },
    {
      "from": "dsh-tool-lsp",
      "to": "dsh-tools",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:15 import defineTool + src/index.ts:47 inject 'tools' + src/index.ts:109 ctx.tools.register",
      "purpose": "定义并注册 lsp 工具与其输出 schema/渲染",
      "type_only": false
    },
    {
      "from": "dsh-tool-present",
      "to": "dsh-agent",
      "mechanism": "E1",
      "evidence": "src/index.ts:6 import type {} from '@deepseek-ai/dsh-agent' + src/index.ts:77 exec.agent",
      "purpose": "取得调用 Agent 及其 Session",
      "type_only": true
    },
    {
      "from": "dsh-tool-present",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/types.ts:2 import ToolCallId from '@deepseek-ai/dsh-llm/brand'",
      "purpose": "事件 payload 使用品牌化 ToolCallId",
      "type_only": true
    },
    {
      "from": "dsh-tool-present",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/index.ts:8 import type { Session } + src/index.ts:105 session.append",
      "purpose": "把交付声明持久化为 Session 事件",
      "type_only": true
    },
    {
      "from": "dsh-tool-present",
      "to": "dsh-session-projection",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:7 import type {} from '@deepseek-ai/dsh-session-projection' + src/index.ts:26 inject + src/index.ts:78 stateOf(..., 'turnBoundary')",
      "purpose": "读取当前 open turn 与 turn 号",
      "type_only": false
    },
    {
      "from": "dsh-tool-present",
      "to": "dsh-tools",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:5 import defineTool + src/index.ts:26 inject ['tools','fs','sessionProjections'] + src/index.ts:38 ctx.tools.register",
      "purpose": "注册工具并订阅 tools/result",
      "type_only": false
    },
    {
      "from": "dsh-tool-pwsh",
      "to": "dsh-agent",
      "mechanism": "E1",
      "evidence": "src/index.ts:30 import type { Agent }; package.json:31 peerDep",
      "purpose": "读取调用者 Agent 会话以解析 workdir 与作业归属",
      "type_only": true
    },
    {
      "from": "dsh-tool-pwsh",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/index.ts:29 import HarnessError; package.json:33 peerDep",
      "purpose": "用 HarnessError/TOOL_ABORTED 表达工具中止",
      "type_only": false
    },
    {
      "from": "dsh-tool-pwsh",
      "to": "dsh-sandbox-policy",
      "mechanism": "E2",
      "evidence": "src/index.ts:36 import type { SandboxPolicyService }; src/index.ts:219 ctx.get('sandboxPolicy'); src/index.ts:226 sandboxPolicy.resolve",
      "purpose": "解析调用会话的完整沙箱执行策略",
      "type_only": false
    },
    {
      "from": "dsh-tool-pwsh",
      "to": "dsh-shell-env",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:32 import type {}; src/index.ts:50 inject ['shellEnv']; src/index.ts:511 ctx.shellEnv.collect(exec)",
      "purpose": "为每次执行收集受信任 DSH_* 环境变量",
      "type_only": false
    },
    {
      "from": "dsh-tool-pwsh",
      "to": "dsh-system-prompt",
      "mechanism": "E2",
      "evidence": "src/index.ts:50 inject ['systemPrompt']; src/index.ts:264 ctx.systemPrompt.section",
      "purpose": "注入 pwsh 交叉调用与 Windows 退出码指引段落",
      "type_only": false
    },
    {
      "from": "dsh-tool-pwsh",
      "to": "dsh-tools",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:27-28 import defineTool/TOOL_ABORTED; src/index.ts:50 inject ['tools']; src/index.ts:593 ctx.tools.register",
      "purpose": "注册 pwsh 工具定义并消费工具运行上下文",
      "type_only": false
    },
    {
      "from": "dsh-tool-pwsh",
      "to": "dsh-user-approval",
      "mechanism": "E2",
      "evidence": "src/index.ts:33 import type {}; src/index.ts:254 ctx.get('approval')",
      "purpose": "把沙箱升级请求路由到用户审批通道",
      "type_only": false
    },
    {
      "from": "dsh-tool-pwsh-persistent",
      "to": "dsh-agent",
      "mechanism": "E1",
      "evidence": "src/index.ts:11 import type { Agent }; package.json:29 peerDep",
      "purpose": "以 Agent 为 owner 隔离持久 shell 并读取其会话 cwd",
      "type_only": true
    },
    {
      "from": "dsh-tool-pwsh-persistent",
      "to": "dsh-terminal",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:13 import type { TerminalSessionId }; src/index.ts:453 inject ['terminals']; src/index.ts:279 ctx.terminals.spawn",
      "purpose": "经 owner 级 PTY 服务创建/发送/读取/终止持久 shell 会话",
      "type_only": false
    },
    {
      "from": "dsh-tool-pwsh-persistent",
      "to": "dsh-tools",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:15 import defineTool; src/index.ts:453 inject ['tools']; src/index.ts:425 ctx.tools.register",
      "purpose": "注册持久 pwsh 工具定义",
      "type_only": false
    },
    {
      "from": "dsh-tool-ralph",
      "to": "dsh-agent",
      "mechanism": "E1",
      "evidence": "package.json:30 peerDep",
      "purpose": "声明式 peer 依赖（通过 exec.agent 取得调用方 Agent）",
      "type_only": false
    },
    {
      "from": "dsh-tool-ralph",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "package.json:31 peerDep + src/index.ts:10 import type { ContentBlock }",
      "purpose": "工具结果呈现使用 dsh-llm 的内容块类型",
      "type_only": true
    },
    {
      "from": "dsh-tool-ralph",
      "to": "dsh-subagent",
      "mechanism": "E1+E2",
      "evidence": "package.json:32 peerDep + src/index.ts:12 import type { SubagentProvider } + src/index.ts:18 inject 'subagents' + src/index.ts:219 ctx.subagents.getProvider",
      "purpose": "校验并指定每轮新子代理所用的 provider（新鲜、支持结构化输出）",
      "type_only": false
    },
    {
      "from": "dsh-tool-ralph",
      "to": "dsh-system-prompt",
      "mechanism": "E1+E2",
      "evidence": "package.json:33 peerDep + src/index.ts:18 inject 'systemPrompt' + src/index.ts:405 ctx.systemPrompt.section",
      "purpose": "注册 ralph 的显式请求使用策略提示章节",
      "type_only": false
    },
    {
      "from": "dsh-tool-ralph",
      "to": "dsh-tools",
      "mechanism": "E1+E2",
      "evidence": "package.json:34 peerDep + src/index.ts:13 import { defineTool } + src/index.ts:18 static inject ['tools','workflowEngine','subagents','systemPrompt'] + src/index.ts:410 ctx.tools.register",
      "purpose": "注册 ralph 工具定义与结果呈现",
      "type_only": false
    },
    {
      "from": "dsh-tool-ralph",
      "to": "dsh-workflow-ptc",
      "mechanism": "E3",
      "evidence": "packages/bundle/base/cordis.patch.yml:392-397, 446-448",
      "purpose": "base bundle 中 workflow-ptc 先行装配以提供 ctx.workflowEngine，tool-ralph 随后装配使用该服务",
      "type_only": false
    },
    {
      "from": "dsh-tool-session-query",
      "to": "dsh-agent",
      "mechanism": "E1",
      "evidence": "src/workspace-access.ts:14 import type { TurnBoundaryProjection }",
      "purpose": "读取调用者 Agent 会话的 header 与边界投影类型",
      "type_only": true
    },
    {
      "from": "dsh-tool-session-query",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/operations.ts:8 import HarnessError; src/service-boundary.ts:8 import HarnessError; src/workspace-access.ts:9 import HarnessError",
      "purpose": "用 HarnessError 承载模型安全的错误码与拒绝语义",
      "type_only": false
    },
    {
      "from": "dsh-tool-session-query",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/operations.ts:9-10 import SessionSeq/SessionId",
      "purpose": "用 SessionSeq 品牌化事件序号、用 SessionId 标识目标会话",
      "type_only": false
    },
    {
      "from": "dsh-tool-session-query",
      "to": "dsh-session-projection",
      "mechanism": "E1+E2",
      "evidence": "src/workspace-access.ts:20 import type {}; src/workspace-access.ts:67 ctx.sessionProjections.stateOf(agent.session, 'turnBoundary')",
      "purpose": "读取调用者会话的 turnBoundary 投影以裁剪本会话检索范围",
      "type_only": false
    },
    {
      "from": "dsh-tool-session-query",
      "to": "dsh-system-prompt",
      "mechanism": "E2",
      "evidence": "src/index.ts:19 inject ['systemPrompt']; src/index.ts:59 ctx.systemPrompt.section",
      "purpose": "注入会话检索工具的使用引导段落",
      "type_only": false
    },
    {
      "from": "dsh-tool-session-query",
      "to": "dsh-tools",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:10 import; src/index.ts:19 inject ['tools']; src/index.ts:65 ctx.tools.register; src/operations.ts:18 import ToolRunContext",
      "purpose": "注册工具定义并消费工具运行上下文",
      "type_only": false
    },
    {
      "from": "dsh-tool-skill",
      "to": "dsh-agent",
      "mechanism": "E1+E2",
      "evidence": "package.json:30 peerDep + src/index.ts:10 import type + src/index.ts:177,213 agent/pre-step",
      "purpose": "订阅 agent/pre-step 注入技能正文与技能目录，并读取 agent.session 的 cwd 与事件序列",
      "type_only": false
    },
    {
      "from": "dsh-tool-skill",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "package.json:31 peerDep + src/index.ts:12 import + src/index.ts:43-47 declare module",
      "purpose": "用 createUserMessage 构造带 source 的目录/注入消息，并注册 'skill-catalog' 消息来源类型",
      "type_only": false
    },
    {
      "from": "dsh-tool-skill",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "package.json:44 devDep + src/index.ts:13 import",
      "purpose": "用 SessionSeq 回溯 session 事件序列以构造既有目录历史 (src/index.ts:361-378)",
      "type_only": false
    },
    {
      "from": "dsh-tool-skill",
      "to": "dsh-skill",
      "mechanism": "E1+E2",
      "evidence": "package.json:32 peerDep + src/index.ts:14-22 import + src/index.ts:25 inject['skills'] + src/index.ts:134,141,189,222 ctx.skills.list/get/snapshot",
      "purpose": "解析并加载技能、渲染正文块，并读取目录快照用于计算 digest 与发布",
      "type_only": false
    },
    {
      "from": "dsh-tool-skill",
      "to": "dsh-tools",
      "mechanism": "E1+E2",
      "evidence": "package.json:33 peerDep + src/index.ts:11 import + src/index.ts:25 inject['tools'] + src/index.ts:161 ctx.tools.register + src/index.ts:220 ctx.tools.get",
      "purpose": "注册 skill 工具并据其在当前 agent 的可见性决定是否发布技能目录",
      "type_only": false
    },
    {
      "from": "dsh-tool-str-replace-editor",
      "to": "dsh-sandbox-policy",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:71 ctx.get('sandboxPolicy') + src/index.ts:14 import",
      "purpose": "解析每调用沙箱策略并映射拒绝错误",
      "type_only": false
    },
    {
      "from": "dsh-tool-str-replace-editor",
      "to": "dsh-tools",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:503 inject ['tools','fs'] + src/index.ts:15 defineTool import",
      "purpose": "通过工具注册表发布 str_replace_editor",
      "type_only": false
    },
    {
      "from": "dsh-tool-subagent",
      "to": "dsh-agent",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:15 (import type Agent, AgentOptions) + src/index.ts:658 (ctx.get('agents'))",
      "purpose": "读取调用 Agent 与 reconciling 组合作用域",
      "type_only": false
    },
    {
      "from": "dsh-tool-subagent",
      "to": "dsh-invariants",
      "mechanism": "E1+E2",
      "evidence": "src/invariant.ts:8 (import type InvariantFailure, InvariantInstaller) + src/invariant.ts:16 (inject ['invariants']) + src/invariant.ts:49 (ctx.invariants.register)",
      "purpose": "注册可选路由定义完整性不变量",
      "type_only": false
    },
    {
      "from": "dsh-tool-subagent",
      "to": "dsh-llm",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:16 (import ReasoningEffortId) + src/list-models.ts:4-5 (import type LlmRuntime, LlmProviderInfo) + src/index.ts:498 (runtimeCtx.get('llm'))",
      "purpose": "子代理路由发现与 preflight",
      "type_only": false
    },
    {
      "from": "dsh-tool-subagent",
      "to": "dsh-scope",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:13 (import scopeChainOf, scopeOf) + src/index.ts:654 (scopeOf(ctx))",
      "purpose": "识别 preset 组合作用域",
      "type_only": false
    },
    {
      "from": "dsh-tool-subagent",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/index.ts:19-20 (import SessionSeq, type Session) + src/model-selection-state.ts:4 (import type Session)",
      "purpose": "会话身份与投影读取",
      "type_only": false
    },
    {
      "from": "dsh-tool-subagent",
      "to": "dsh-session-projection",
      "mechanism": "E1+E2",
      "evidence": "src/model-selection-state.ts:5-6 (import ProjectionDefinition, SessionProjectionRegistry) + src/index.ts:45 (inject ['sessionProjections']) + src/index.ts:326 (ctx.sessionProjections.register)",
      "purpose": "注册逐会话模型选择策略投影",
      "type_only": false
    },
    {
      "from": "dsh-tool-subagent",
      "to": "dsh-subagent",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:21-26 (import assertSubagentMaxDepth, parentAgentOptionsForDelegation, settleRun, 类型) + src/index.ts:45 (inject ['tools','subagents','systemPrompt','sessionProjections']) + src/index.ts:530 (ctx.subagents.startContinuable) + src/index.ts:563 (ctx.subagents.start)",
      "purpose": "启动子代理并复用 seam 辅助",
      "type_only": false
    },
    {
      "from": "dsh-tool-subagent",
      "to": "dsh-system-prompt",
      "mechanism": "E2",
      "evidence": "src/index.ts:45 (inject ['systemPrompt']) + src/index.ts:598 (runtimeCtx.systemPrompt.section)",
      "purpose": "为可续后台委派注册提示段",
      "type_only": false
    },
    {
      "from": "dsh-tool-subagent",
      "to": "dsh-tools",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:14 (import defineTool) + src/index.ts:45 (inject ['tools']) + src/index.ts:379 (runtimeCtx.tools.register)",
      "purpose": "注册委派工具定义",
      "type_only": false
    },
    {
      "from": "dsh-tool-subagent-control",
      "to": "dsh-agent",
      "mechanism": "E1+E2",
      "evidence": "src/list-agents.ts:12 (import type Agent) + src/list-agents.ts:20 (inject ['tools','subagents','agents']) + src/list-agents.ts:163 (ctx.agents)",
      "purpose": "读取活跃 Agent 状态用于发现结果",
      "type_only": false
    },
    {
      "from": "dsh-tool-subagent-control",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/index.ts:15 (import type ContentBlock)",
      "purpose": "构造模型可见消息内容块",
      "type_only": true
    },
    {
      "from": "dsh-tool-subagent-control",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/index.ts:16 (import type SessionId) + src/list-agents.ts:13 (import type SessionId)",
      "purpose": "子代理会话 id 类型",
      "type_only": true
    },
    {
      "from": "dsh-tool-subagent-control",
      "to": "dsh-subagent",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:17-18 (import 类型与 markAdjacentAgentSendMessageTool) + src/index.ts:21 (inject ['tools','subagents']) + src/index.ts:64 (ctx.subagents.sendMessage) + src/index.ts:108 (ctx.subagents.interrupt)",
      "purpose": "转发消息/中断并复用相邻 Agent 工具标记",
      "type_only": false
    },
    {
      "from": "dsh-tool-subagent-control",
      "to": "dsh-tools",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:14 (import defineTool) + src/index.ts:21 (inject ['tools','subagents']) + src/index.ts:28 (ctx.tools.register) + src/list-agents.ts:86 (ctx.tools.register)",
      "purpose": "注册控制与发现工具",
      "type_only": false
    },
    {
      "from": "dsh-tool-terminal",
      "to": "dsh-agent",
      "mechanism": "E1+E2",
      "evidence": "package.json:33 peerDep + src/index.ts:9 import Agent + src/index.ts:185 requireAgent(exec.agent)",
      "purpose": "以执行 Agent 作为终端 owner",
      "type_only": false
    },
    {
      "from": "dsh-tool-terminal",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "package.json:34 peerDep + src/index.ts:10 import ContentBlock",
      "purpose": "工具结果内容块类型",
      "type_only": true
    },
    {
      "from": "dsh-tool-terminal",
      "to": "dsh-system-prompt",
      "mechanism": "E1+E2",
      "evidence": "package.json:37 peerDep + src/index.ts:28 inject ['systemPrompt'] + src/index.ts:157 ctx.systemPrompt.section",
      "purpose": "注入终端使用指引段落",
      "type_only": false
    },
    {
      "from": "dsh-tool-terminal",
      "to": "dsh-terminal",
      "mechanism": "E1+E2",
      "evidence": "package.json:35 peerDep + src/index.ts:11-12 import + src/index.ts:28 inject ['terminals']",
      "purpose": "调用 ctx.terminals 的会话操作",
      "type_only": false
    },
    {
      "from": "dsh-tool-terminal",
      "to": "dsh-tools",
      "mechanism": "E1+E2",
      "evidence": "package.json:39 peerDep + src/index.ts:14-15 import defineTool + src/index.ts:28 inject ['tools']",
      "purpose": "注册工具定义与 schema",
      "type_only": false
    },
    {
      "from": "dsh-tool-todo",
      "to": "dsh-agent",
      "mechanism": "E1+E2",
      "evidence": "package.json:44 peerDep + src/index.ts:199 exec.agent.session.append",
      "purpose": "todo 列表挂在调用 Agent 的 session 上",
      "type_only": false
    },
    {
      "from": "dsh-tool-todo",
      "to": "dsh-invariants",
      "mechanism": "E1+E2",
      "evidence": "package.json:45 peerDep + src/invariant.ts:5 import InvariantInstaller + src/invariant.ts:104 ctx.invariants.register",
      "purpose": "注册 todo 快照不变量校验",
      "type_only": false
    },
    {
      "from": "dsh-tool-todo",
      "to": "dsh-session",
      "mechanism": "E1+E2",
      "evidence": "package.json:46 peerDep + src/invariant.ts:4 import Session/SessionEvent + src/invariant.ts:92 ctx.on('session/event')",
      "purpose": "耐久校验基于 session 事件日志",
      "type_only": false
    },
    {
      "from": "dsh-tool-todo",
      "to": "dsh-session-projection",
      "mechanism": "E1+E2",
      "evidence": "package.json:47 peerDep + src/index.ts:15 type-only import + src/index.ts:23 inject ['sessionProjections']",
      "purpose": "注册 todos 投影单元",
      "type_only": false
    },
    {
      "from": "dsh-tool-todo",
      "to": "dsh-tools",
      "mechanism": "E1+E2",
      "evidence": "package.json:48 peerDep + src/index.ts:12 import defineTool + src/index.ts:23 inject ['tools']",
      "purpose": "注册 todo_write 工具",
      "type_only": false
    },
    {
      "from": "dsh-tool-web",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "package.json:31 peerDep",
      "purpose": "声明式 peer 依赖（模型消息/类型兼容面）",
      "type_only": false
    },
    {
      "from": "dsh-tool-web",
      "to": "dsh-system-prompt",
      "mechanism": "E1+E2",
      "evidence": "package.json:32 peerDep + src/index.ts:24 inject 'systemPrompt' + src/fetch.ts:448 ctx.systemPrompt.section",
      "purpose": "注册工具使用与外部内容信任指引的 system prompt 章节",
      "type_only": false
    },
    {
      "from": "dsh-tool-web",
      "to": "dsh-tools",
      "mechanism": "E1+E2",
      "evidence": "package.json:33 peerDep + src/fetch.ts:11 import defineTool + src/index.ts:24 static inject ['tools','web','systemPrompt']",
      "purpose": "通过 ctx.tools 注册 web_search/web_fetch 工具定义（含 schema、render、presentationMeta）",
      "type_only": false
    },
    {
      "from": "dsh-tool-web",
      "to": "dsh-web",
      "mechanism": "E1+E2+E3",
      "evidence": "package.json:34 peerDep + src/fetch.ts:13 import WebFetchBody/WebFetchResult + src/index.ts:24 inject 'web' + src/fetch.ts:501 ctx.web.fetch + packages/bundle/base/cordis.patch.yml:471-486",
      "purpose": "调用 ctx.web 执行实际抓取/搜索，且 base bundle 中装配在 web 行之后",
      "type_only": false
    },
    {
      "from": "dsh-tool-workflow",
      "to": "dsh-agent",
      "mechanism": "E1+E2",
      "evidence": "package.json:41 peerDep + src/index.ts:19 import type { Agent } + src/index.ts:407 exec.agent + src/index.ts:442 parent.session",
      "purpose": "取得调用方 Agent 以归属后台作业与工作流运行记录",
      "type_only": false
    },
    {
      "from": "dsh-tool-workflow",
      "to": "dsh-invariants",
      "mechanism": "E1+E2",
      "evidence": "package.json:42 peerDep + src/invariant.ts:5 import type { InvariantFailure, InvariantInstaller } + src/invariant.ts:13 static inject ['invariants'] + src/invariant.ts:168 ctx.invariants.register",
      "purpose": "注册 tool-workflow 记录的伴生不变量校验器",
      "type_only": false
    },
    {
      "from": "dsh-tool-workflow",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "package.json:44 peerDep + src/index.ts:20 import type { ContentBlock }",
      "purpose": "工具呈现使用 dsh-llm 的内容块类型",
      "type_only": true
    },
    {
      "from": "dsh-tool-workflow",
      "to": "dsh-session",
      "mechanism": "E1+E2",
      "evidence": "package.json:45 peerDep + src/index.ts:22 import type { Session, SessionEventMap } + src/index.ts:102 session.append + src/invariant.ts:4 import type { Session, SessionEvent } + src/invariant.ts:154 ctx.on('session/event')",
      "purpose": "把运行记录写入会话并订阅会话事件做不变量折叠",
      "type_only": false
    },
    {
      "from": "dsh-tool-workflow",
      "to": "dsh-system-prompt",
      "mechanism": "E1+E2",
      "evidence": "package.json:46 peerDep + src/index.ts:41 inject 'systemPrompt' + src/index.ts:323 ctx.systemPrompt.section",
      "purpose": "注册 workflow 工具的使用策略提示章节",
      "type_only": false
    },
    {
      "from": "dsh-tool-workflow",
      "to": "dsh-tools",
      "mechanism": "E1+E2",
      "evidence": "package.json:47 peerDep + src/index.ts:17 import { defineTool } + src/index.ts:41 static inject ['tools','workflowEngine','systemPrompt'] + src/index.ts:328 ctx.tools.register",
      "purpose": "注册 workflow 工具定义与呈现",
      "type_only": false
    },
    {
      "from": "dsh-tool-workflow",
      "to": "dsh-workflow-ptc",
      "mechanism": "E3",
      "evidence": "packages/bundle/base/cordis.patch.yml:392-398",
      "purpose": "base bundle 中 workflow-ptc 先行装配以提供 ctx.workflowEngine，tool-workflow 随后装配使用该服务",
      "type_only": false
    },
    {
      "from": "dsh-tool-workspace-dependencies",
      "to": "dsh-tools",
      "mechanism": "E1+E2",
      "evidence": "package.json:29 peerDep + src/index.ts:7 import + src/index.ts:12 inject['tools'] + src/index.ts:249 ctx.tools.register",
      "purpose": "向工具注册表注册其读路径查询工具",
      "type_only": false
    },
    {
      "from": "dsh-tools",
      "to": "dsh-agent",
      "mechanism": "E1",
      "evidence": "src/index.ts:13 import type Agent + package.json:41 peerDep",
      "purpose": "复用 Agent 类型以在调度中引用所属 agent",
      "type_only": true
    },
    {
      "from": "dsh-tools",
      "to": "dsh-invariants",
      "mechanism": "E1+E2",
      "evidence": "src/invariant.ts:5 import + src/invariant.ts:13 inject(['invariants']) + src/invariant.ts:129 register",
      "purpose": "注册会话内工具调用关系不变量",
      "type_only": false
    },
    {
      "from": "dsh-tools",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "src/index.ts:11-12 import + src/ptc.ts:10 createUserMessage/HarnessError",
      "purpose": "复用工具/内容块/调用 id 类型并构造消息与错误",
      "type_only": false
    },
    {
      "from": "dsh-tools",
      "to": "dsh-sandbox-policy",
      "mechanism": "E1",
      "evidence": "src/index.ts:18 import type {} (声明合并)",
      "purpose": "引入沙箱策略服务的上下文类型合并",
      "type_only": true
    },
    {
      "from": "dsh-tools",
      "to": "dsh-scope",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:9-10 import + src/index.ts:833 new ScopedLayers",
      "purpose": "以作用域层存储工具注册与呈现模式",
      "type_only": false
    },
    {
      "from": "dsh-tools",
      "to": "dsh-session",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:14 import type UserMessage + src/invariant.ts:4 + src/invariant.ts:121 inject(['sessions']) + src/invariant.ts:77 ctx.sessions",
      "purpose": "复用会话消息类型并在 invariant 中读取会话校验工具调用",
      "type_only": false
    },
    {
      "from": "dsh-tools",
      "to": "dsh-system-prompt",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:16 import type + src/index.ts:808 inject(['systemPrompt']) + src/index.ts:854 ctx.systemPrompt.tools",
      "purpose": "向提示装配注册 tool-schema provider 与 SDK/折叠 section",
      "type_only": false
    },
    {
      "from": "dsh-tools",
      "to": "dsh-user-approval",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:21 import type + src/index.ts:947,1731 ctx.get('approval')",
      "purpose": "可选消费审批服务以处理升级请求",
      "type_only": false
    },
    {
      "from": "dsh-typert-loader",
      "to": "cordis-plugin-loader",
      "mechanism": "E1+E2",
      "evidence": "package.json:30 peerDep + src/index.ts:34 type-only import + src/index.ts:45 inject ['loader']",
      "purpose": "观察 Loader entry 生命周期并定位包",
      "type_only": false
    },
    {
      "from": "dsh-typert-loader",
      "to": "dsh-typert-registry",
      "mechanism": "E1+E2",
      "evidence": "package.json:31 peerDep + src/index.ts:36-37 import + src/index.ts:410 ctx.typert.register",
      "purpose": "向 typert 注册表写入清单",
      "type_only": false
    },
    {
      "from": "dsh-user-approval",
      "to": "dsh-agent",
      "mechanism": "E1",
      "evidence": "package.json:40 peerDep + src/index.ts:10、src/types.ts:10 type import Agent",
      "purpose": "以 agent/session 为审批作用域与日志目标",
      "type_only": true
    },
    {
      "from": "dsh-user-approval",
      "to": "dsh-invariants",
      "mechanism": "E1+E2",
      "evidence": "package.json:42 peerDep + src/invariant.ts:5 import; src/invariant.ts:112 ctx.invariants.register",
      "purpose": "注册审批审计流不变量",
      "type_only": false
    },
    {
      "from": "dsh-user-approval",
      "to": "dsh-llm",
      "mechanism": "E1+E2",
      "evidence": "package.json:43 peerDep + src/index.ts:11-12 import createUserMessage/ContextFormed; src/index.ts:188 agent.inject",
      "purpose": "把策略切换通知注入模型消息",
      "type_only": false
    },
    {
      "from": "dsh-user-approval",
      "to": "dsh-scope",
      "mechanism": "E1+E2",
      "evidence": "package.json:44 peerDep + src/index.ts:19、src/types.ts:9 import scopeTarget/Scoped; src/index.ts:282 作用域 waterfall",
      "purpose": "按 agent 过滤审批请求分派",
      "type_only": false
    },
    {
      "from": "dsh-user-approval",
      "to": "dsh-session",
      "mechanism": "E1+E2",
      "evidence": "package.json:45 peerDep + src/index.ts:20-21 import Session/SessionSeq; src/index.ts:225/232 session.append",
      "purpose": "把审批审计对写入会话日志",
      "type_only": false
    },
    {
      "from": "dsh-user-approval",
      "to": "dsh-system-prompt",
      "mechanism": "E1+E2",
      "evidence": "package.json:46 peerDep + src/index.ts:22 type import; src/index.ts:162 ctx.inject(['systemPrompt'])",
      "purpose": "声明当前审批策略的模型可见上下文",
      "type_only": false
    },
    {
      "from": "dsh-user-questions",
      "to": "dsh-agent",
      "mechanism": "E1+E2",
      "evidence": "package.json:35 peerDep + src/index.ts:11、src/types.ts:4 type import Agent; src/index.ts:95 ctx.get('agents') 校验存活 root",
      "purpose": "限定只有运行时根的存活 agent 可发起人类交互",
      "type_only": false
    },
    {
      "from": "dsh-user-questions",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "package.json:36 peerDep + src/index.ts:12 import HarnessError、src/types.ts:5 ToolCallId",
      "purpose": "错误基类与工具调用 id 类型",
      "type_only": false
    },
    {
      "from": "dsh-user-questions",
      "to": "dsh-scope",
      "mechanism": "E1+E2",
      "evidence": "package.json:37 peerDep + src/index.ts:13、src/types.ts:3 import scopeTarget/Scoped; src/index.ts:138 作用域 waterfall",
      "purpose": "按 agent 作用域分派问答请求",
      "type_only": false
    },
    {
      "from": "dsh-web",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "package.json:30 peerDep + src/types.ts:8 import { HarnessError }",
      "purpose": "以 dsh-llm 的 HarnessError 为基类定义 WebError，保持全仓错误分类一致",
      "type_only": false
    },
    {
      "from": "dsh-web-fetch-http",
      "to": "dsh-web",
      "mechanism": "E1+E2+E3",
      "evidence": "package.json:32 peerDep + src/provider.ts:9 import { WebError } + src/index.ts:29 static inject ['web'] + src/index.ts:93 ctx.web.registerFetchProvider + packages/bundle/base/cordis.patch.yml:471-483",
      "purpose": "实现并注册 WebFetchProvider 到 web seam，base bundle 中装配在 web 行之后",
      "type_only": false
    },
    {
      "from": "dsh-web-search-deepseek",
      "to": "dsh-agent",
      "mechanism": "E1+E2",
      "evidence": "package.json:32 peerDep + src/index.ts:11 import type {} from dsh-agent (声明合并) + src/index.ts:118 ctx.get('agents')?.currentInitiator()",
      "purpose": "通过 ctx.get('agents') 找到当前发起方 Agent，以记录辅助搜索请求",
      "type_only": false
    },
    {
      "from": "dsh-web-search-deepseek",
      "to": "dsh-session",
      "mechanism": "E1+E2",
      "evidence": "package.json:35 peerDep + src/index.ts:14 import type {} from dsh-session + src/provider.ts:79 declare module SessionEventMap + src/index.ts:118 session.append('web/deepseek-search-llm-request', ...)",
      "purpose": "向会话日志记录搜索请求（模型可见输入须可重建），并声明对应 SessionEventMap 事件",
      "type_only": false
    },
    {
      "from": "dsh-web-search-deepseek",
      "to": "dsh-web",
      "mechanism": "E1+E2+E3",
      "evidence": "package.json:36 peerDep + src/provider.ts:9 import { WebError } + src/index.ts:41 static inject ['web'] + src/index.ts:128 ctx.web.registerSearchProvider + packages/bundle/base/cordis.patch.yml:471-478",
      "purpose": "实现并注册 WebSearchProvider 到 web seam，base bundle 中装配在 web 行之后",
      "type_only": false
    },
    {
      "from": "dsh-web-search-exa",
      "to": "dsh-web",
      "mechanism": "E1+E2",
      "evidence": "package.json:31 peerDep + src/provider.ts:9 import { WebError } + src/index.ts:32 static inject ['web'] + src/index.ts:58 ctx.web.registerSearchProvider",
      "purpose": "实现并注册 WebSearchProvider 到 web seam",
      "type_only": false
    },
    {
      "from": "dsh-web-search-perplexity",
      "to": "dsh-web",
      "mechanism": "E1+E2",
      "evidence": "package.json:31 peerDep + src/provider.ts:9 import { WebError } + src/index.ts:27 static inject ['web'] + src/index.ts:53 ctx.web.registerSearchProvider",
      "purpose": "实现并注册 WebSearchProvider 到 web seam",
      "type_only": false
    },
    {
      "from": "dsh-webhook-github",
      "to": "dsh-host-webserver",
      "mechanism": "E1+E2",
      "evidence": "package.json:37 peerDep + src/handler.ts:13 import type { WebRoute } + src/index.ts:14 inject 'webServer' + src/index.ts:59 ctx.webServer.register",
      "purpose": "在宿主机 WebServer 上注册 webhook 的 exact 路由",
      "type_only": false
    },
    {
      "from": "dsh-webhook-github",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "package.json:38 peerDep",
      "purpose": "声明式 peer 依赖（webhook 投递与会话生态保持一致）",
      "type_only": false
    },
    {
      "from": "dsh-workflow-ptc",
      "to": "dsh-agent",
      "mechanism": "E1",
      "evidence": "package.json:31 peerDep + src/host.ts:3 import type { Agent }",
      "purpose": "承载子代理的父 Agent 身份与归属",
      "type_only": true
    },
    {
      "from": "dsh-workflow-ptc",
      "to": "dsh-llm",
      "mechanism": "E1",
      "evidence": "package.json:32 peerDep + src/runtime.ts:10 import type { ContentBlock } + src/types.ts:7 import type { ContentBlock }",
      "purpose": "把子代理最终输出块展平为文本作为 agent() 结果",
      "type_only": true
    },
    {
      "from": "dsh-workflow-ptc",
      "to": "dsh-sandbox-policy",
      "mechanism": "E1+E2",
      "evidence": "package.json:39 peerDep + src/index.ts:12 import type {} from dsh-sandbox-policy + src/index.ts:103 inject 'sandboxPolicy' + src/index.ts:166 ctx.sandboxPolicy.resolve",
      "purpose": "按调用方 Session 解析文件/沙箱策略并施加于运行",
      "type_only": false
    },
    {
      "from": "dsh-workflow-ptc",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "package.json:33 peerDep + src/host.ts:6 import { SessionId } + src/runtime.ts:11 import type { SessionId }",
      "purpose": "以 SessionId 标识子代理会话身份",
      "type_only": false
    },
    {
      "from": "dsh-workflow-ptc",
      "to": "dsh-subagent",
      "mechanism": "E1+E2",
      "evidence": "package.json:34 peerDep + src/host.ts:7-8 import SubagentRuntime/SubagentRun + src/index.ts:103 inject 'subagents' + src/host.ts:200 subagents.start",
      "purpose": "为脚本的 agent() 钩子启动/等待/释放子代理",
      "type_only": false
    },
    {
      "from": "dsh-workflow-ptc",
      "to": "dsh-tools",
      "mechanism": "E1",
      "evidence": "package.json:35 peerDep + src/host.ts:9 import { assertObjectJsonSchema } + src/runtime.ts:12 import { assertObjectJsonSchema, JsonSchemaError }",
      "purpose": "校验 agent() 的结构化输出 schema 是否在支持子集内",
      "type_only": false
    },
    {
      "from": "dsh-workspace",
      "to": "dsh-invariants",
      "mechanism": "E1+E2",
      "evidence": "src/invariant.ts:7 import；src/invariant.ts:16 export const inject=['invariants'] + src/invariant.ts:57 ctx.invariants.register(PACKAGE_NAME, install)",
      "purpose": "./invariant 伴生插件需向 runtime 不变量服务注册『实体缓存 ↔ 持久表』一致性断言",
      "type_only": false
    },
    {
      "from": "dsh-workspace",
      "to": "dsh-session",
      "mechanism": "E1+E2",
      "evidence": "src/entity.ts:12 + src/index.ts:11 + src/spec.ts:10 + src/types.ts:9 import；src/index.ts:473 ctx.get('sessions')",
      "purpose": "复用 SessionId/SessionHeader 类型与可选 sessions 服务，做会话存在性判定与 attach 时的 cwd 归属校验",
      "type_only": false
    },
    {
      "from": "dsh-workspace",
      "to": "dsh-storage",
      "mechanism": "E1",
      "evidence": "package.json:44 peerDependencies @deepseek-ai/dsh-storage",
      "purpose": "声明工作区域数据形态所在存储服务 seam 的 peer（源码无直接 import，随 dsh-storage-domain 一起装配）",
      "type_only": false
    },
    {
      "from": "dsh-workspace",
      "to": "dsh-storage-domain",
      "mechanism": "E1+E2",
      "evidence": "src/entity.ts:13 + src/spec.ts:11 import；src/index.ts:171 static inject=['storageDomain','sessionPersistence'] + src/index.ts:198 ctx.storageDomain.open(workspaceDomainSpec)",
      "purpose": "提供域数据形态（defineDomain/domainTable/KvTable/DomainGlobal），工作区记录与顺序全局态持久化在其之上",
      "type_only": false
    },
    {
      "from": "dsh-workspace-changes",
      "to": "dsh-agent",
      "mechanism": "E1",
      "evidence": "src/index.ts:14 import type {} from '@deepseek-ai/dsh-agent' + src/index.ts:153 agent/turn-stopping",
      "purpose": "在 turn 停止时收口快照",
      "type_only": true
    },
    {
      "from": "dsh-workspace-changes",
      "to": "dsh-session",
      "mechanism": "E1",
      "evidence": "src/index.ts:15 import type { Session, SessionId } + src/recorder.ts:5 import + src/index.ts:143 session/event",
      "purpose": "按 Session 生命周期观察事件与释放记录器",
      "type_only": true
    },
    {
      "from": "dsh-workspace-changes",
      "to": "dsh-tools",
      "mechanism": "E1",
      "evidence": "src/index.ts:17 import type {} from '@deepseek-ai/dsh-tools' + src/index.ts:156 tools/pre-execute",
      "purpose": "在工具执行前捕获文件编辑以覆盖 git 未跟踪路径",
      "type_only": true
    }
  ],
  "seam_edges": [
    {
      "from": "dsh-acp",
      "to": "dsh-attachment",
      "mechanism": "E2",
      "evidence": "src/content.ts:5 import type + src/content.ts:152 ctx.get('attachments')",
      "purpose": "提示图片持久化与助手图片读取",
      "type_only": false
    },
    {
      "from": "dsh-acp",
      "to": "dsh-brand",
      "mechanism": "E1",
      "evidence": "src/index.ts:19 import brandString",
      "purpose": "把随机 UUID 标记为 SessionId 品牌类型",
      "type_only": false
    },
    {
      "from": "dsh-acp",
      "to": "dsh-session-persistence",
      "mechanism": "E2",
      "evidence": "src/index.ts:50 import + src/index.ts:62 static inject 'sessionPersistence'",
      "purpose": "会话列表与续跑前的持久化头读取",
      "type_only": false
    },
    {
      "from": "dsh-agent",
      "to": "dsh-typert-protocol",
      "mechanism": "E1+E2",
      "evidence": "src/types.ts:11 import type + src/index.ts:257 ctx.inject(['typert'])",
      "purpose": "注册 agent 的 typert lookup 与 host context",
      "type_only": false
    },
    {
      "from": "dsh-agent",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/types.ts:12 import type JsonValue",
      "purpose": "复用 JsonValue 等零依赖工具类型",
      "type_only": true
    },
    {
      "from": "dsh-agent-instructions",
      "to": "dsh-fs",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:119 ctx.get('fs') + src/files.ts:10 import type FileSystem/FsInfo/FsTarget/FsVersion + src/state.ts:11 import type FileSystem/FsVersion",
      "purpose": "通过可选 fs provider 探测与流式读取指令文件，并在缺少 provider 时安全降级",
      "type_only": false
    },
    {
      "from": "dsh-agent-instructions",
      "to": "dsh-home-paths",
      "mechanism": "E1",
      "evidence": "src/config.ts:9 import resolveDshHome + src/files.ts:11 import dshHomeDisplay",
      "purpose": "解析用户级全局 AGENTS.md 的家目录位置与显示路径",
      "type_only": false
    },
    {
      "from": "dsh-agent-instructions",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/files.ts:12 import assertNever",
      "purpose": "文件探测三态联合的穷尽断言，避免新增状态被静默忽略",
      "type_only": false
    },
    {
      "from": "dsh-agent-loop",
      "to": "dsh-brand",
      "mechanism": "E1",
      "evidence": "src/index.ts:13 import brandString",
      "purpose": "把生成的会话 id 字符串品牌化为 SessionId",
      "type_only": false
    },
    {
      "from": "dsh-agent-loop",
      "to": "dsh-session-persistence",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:32-33 import + src/index.ts:680,808 ctx.get('sessionPersistence') + src/index.ts:393 ctx.inject(['sessionPersistence'])",
      "purpose": "持久化会话的创建/打开/追加与恢复加载",
      "type_only": false
    },
    {
      "from": "dsh-agent-loop",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/agent.ts:27 import assertNever/deepFreeze + src/tool-calls.ts:18",
      "purpose": "复用判别穷尽断言与深冻结工具",
      "type_only": false
    },
    {
      "from": "dsh-agent-preset-registry",
      "to": "dsh-typert-protocol",
      "mechanism": "E1",
      "evidence": "src/index.ts:4 import Remote/RemoteError/TypertRemoteService + src/index.ts:51 extends TypertRemoteService",
      "purpose": "暴露 Remote 方法与远程错误语义",
      "type_only": false
    },
    {
      "from": "dsh-agent-tool-presentation",
      "to": "dsh-ptc-runtime",
      "mechanism": "E2",
      "evidence": "src/index.ts:69 ctx.inject(['ptcRuntime'])",
      "purpose": "ptc/both 模式需要 PTC 运行时服务，缺失时在挂载期显式失败",
      "type_only": false
    },
    {
      "from": "dsh-api-account-controller",
      "to": "dsh-deepseek-account",
      "mechanism": "E2",
      "evidence": "src/index.ts:4 import + src/index.ts:11 static inject 'deepseekAccount'",
      "purpose": "账号能力 seam 提供方（所有账号操作的数据源）",
      "type_only": false
    },
    {
      "from": "dsh-api-account-controller",
      "to": "dsh-typert-protocol",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:3 import + src/index.ts:10 class extends TypertRemoteService",
      "purpose": "Remote 服务基类与 @Remote 方法注册",
      "type_only": false
    },
    {
      "from": "dsh-api-gateway",
      "to": "dsh-brand",
      "mechanism": "E1",
      "evidence": "src/stream-protocol.ts:3 import type Branded",
      "purpose": "客户端/事件标识的品牌类型",
      "type_only": true
    },
    {
      "from": "dsh-api-gateway",
      "to": "dsh-deque",
      "mechanism": "E1",
      "evidence": "src/index.ts:15 import + src/client/stream-client.ts:10 import",
      "purpose": "客户端事件队列与上行/下行缓冲",
      "type_only": false
    },
    {
      "from": "dsh-api-gateway",
      "to": "dsh-timeout",
      "mechanism": "E1",
      "evidence": "src/index.ts:17 import MAX_TIMER_DELAY_MS",
      "purpose": "心跳间隔上界校验",
      "type_only": false
    },
    {
      "from": "dsh-api-gateway",
      "to": "dsh-typert-protocol",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:21 import + src/index.ts:198 class TypertGatewayService implements TypertGateway",
      "purpose": "Remote 描述符、错误词汇与编解码契约",
      "type_only": false
    },
    {
      "from": "dsh-api-gateway",
      "to": "dsh-util-crypto",
      "mechanism": "E1",
      "evidence": "src/client/remote-events.ts:15 import + src/client/stream-client.ts:11 import",
      "purpose": "客户端远程事件与流客户端使用的加密工具",
      "type_only": false
    },
    {
      "from": "dsh-api-job-controller",
      "to": "dsh-client-store",
      "mechanism": "E1",
      "evidence": "src/client/model.ts:9 import",
      "purpose": "客户端状态存储",
      "type_only": false
    },
    {
      "from": "dsh-api-job-controller",
      "to": "dsh-jobs",
      "mechanism": "E2",
      "evidence": "src/index.ts:13 import type {} + src/index.ts:44 static inject 'jobs'",
      "purpose": "后台任务注册表 seam（list/follow/kill 的数据源）",
      "type_only": false
    },
    {
      "from": "dsh-api-job-controller",
      "to": "dsh-typert-protocol",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:14 import + src/index.ts:43 class extends TypertRemoteService",
      "purpose": "Remote 服务基类、@Remote 与 RemoteError 映射",
      "type_only": false
    },
    {
      "from": "dsh-api-remotes",
      "to": "dsh-credentials",
      "mechanism": "E1",
      "evidence": "src/index.ts:23 import types",
      "purpose": "凭证事件类型声明",
      "type_only": true
    },
    {
      "from": "dsh-api-remotes",
      "to": "dsh-deepseek-account",
      "mechanism": "E1",
      "evidence": "src/remote-events.ts:10 import types",
      "purpose": "账号事件类型声明",
      "type_only": true
    },
    {
      "from": "dsh-api-remotes",
      "to": "dsh-deque",
      "mechanism": "E1",
      "evidence": "src/index.ts:12 import Deque",
      "purpose": "转发事件队列",
      "type_only": false
    },
    {
      "from": "dsh-api-remotes",
      "to": "dsh-file-reference",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:147 import types",
      "purpose": "客户端文件引用类型",
      "type_only": true
    },
    {
      "from": "dsh-api-remotes",
      "to": "dsh-typert-protocol",
      "mechanism": "E1",
      "evidence": "src/remote-events.ts:14 import type TypertForwardableEventEntry",
      "purpose": "转发事件条目类型与选择声明",
      "type_only": true
    },
    {
      "from": "dsh-api-remotes",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/index.ts:14 import isJsonValue",
      "purpose": "转发事件参数的 JSON 无损校验",
      "type_only": false
    },
    {
      "from": "dsh-api-session-controller",
      "to": "dsh-attachment",
      "mechanism": "E2",
      "evidence": "src/commands.ts:8 import + src/list.ts:87 ctx.inject(['attachments'])",
      "purpose": "附件准入与图片限额投影",
      "type_only": false
    },
    {
      "from": "dsh-api-session-controller",
      "to": "dsh-brand",
      "mechanism": "E1",
      "evidence": "src/commands.ts:6 import + src/types.ts:7 import",
      "purpose": "品牌化身份类型",
      "type_only": false
    },
    {
      "from": "dsh-api-session-controller",
      "to": "dsh-client-store",
      "mechanism": "E1",
      "evidence": "src/client/sessions/notifier.ts:1 import + src/client/contract/events.ts:2 import",
      "purpose": "客户端投影值存储",
      "type_only": false
    },
    {
      "from": "dsh-api-session-controller",
      "to": "dsh-credentials",
      "mechanism": "E2",
      "evidence": "src/catalog.ts:4 import + src/catalog.ts 凭据引用解析",
      "purpose": "模型目录的 provider 凭证探测",
      "type_only": false
    },
    {
      "from": "dsh-api-session-controller",
      "to": "dsh-deque",
      "mechanism": "E1",
      "evidence": "src/control.ts:4 import + src/history.ts:4 import",
      "purpose": "控制/历史帧队列",
      "type_only": false
    },
    {
      "from": "dsh-api-session-controller",
      "to": "dsh-file-reference",
      "mechanism": "E1+E2",
      "evidence": "src/file-references.ts:5 import + src/file-references.ts:18 inject",
      "purpose": "文件引用 Remote 子域",
      "type_only": false
    },
    {
      "from": "dsh-api-session-controller",
      "to": "dsh-fs",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:6 import + src/media-references.ts:64 ctx.fs",
      "purpose": "媒体引用与桌面路径校验",
      "type_only": false
    },
    {
      "from": "dsh-api-session-controller",
      "to": "dsh-native-command",
      "mechanism": "E1",
      "evidence": "src/index.ts:11 import openNativeAssociatedPath 等",
      "purpose": "桌面打开/文件管理器/关联应用调用",
      "type_only": false
    },
    {
      "from": "dsh-api-session-controller",
      "to": "dsh-session-persistence",
      "mechanism": "E2",
      "evidence": "src/agent.ts:13 import + package.json peerDependencies dsh-session-persistence(optional)",
      "purpose": "冷会话持久化检查",
      "type_only": false
    },
    {
      "from": "dsh-api-session-controller",
      "to": "dsh-session-query",
      "mechanism": "E2",
      "evidence": "src/agent.ts:14 import + src/agent.ts:118 ctx.sessionQuery.observeSession",
      "purpose": "会话观测/列表/搜索",
      "type_only": false
    },
    {
      "from": "dsh-api-session-controller",
      "to": "dsh-typert-protocol",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:15 import + src/agent.ts:148 ctx.typert.lookups.configure",
      "purpose": "Remote 服务基类、@Remote 与 lookup/context 注册",
      "type_only": false
    },
    {
      "from": "dsh-api-session-controller",
      "to": "dsh-util-crypto",
      "mechanism": "E1",
      "evidence": "src/client/sessions/session.ts:5 import",
      "purpose": "客户端会话标识生成",
      "type_only": false
    },
    {
      "from": "dsh-api-session-controller",
      "to": "dsh-util-time",
      "mechanism": "E1",
      "evidence": "src/commands.ts:23 import canonicalClientTimeZone",
      "purpose": "客户端时区规范化",
      "type_only": false
    },
    {
      "from": "dsh-api-session-controller",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/control.ts:8 import + src/types.ts:12 import",
      "purpose": "JSON 值与 assertNever",
      "type_only": false
    },
    {
      "from": "dsh-api-session-controller",
      "to": "dsh-util-workspace-path",
      "mechanism": "E1",
      "evidence": "src/client/sessions/service.ts:5 import",
      "purpose": "客户端工作区路径解析",
      "type_only": false
    },
    {
      "from": "dsh-api-settings-controller",
      "to": "dsh-credentials",
      "mechanism": "E2",
      "evidence": "src/credentials.ts:9 import + src/credentials.ts:122 ctx.get('credentials')",
      "purpose": "凭证 seam：describe/set/unset",
      "type_only": false
    },
    {
      "from": "dsh-api-settings-controller",
      "to": "dsh-native-command",
      "mechanism": "E1",
      "evidence": "src/index.ts:11 import openNativeTextFile",
      "purpose": "在原生文本编辑器中打开设置文档",
      "type_only": false
    },
    {
      "from": "dsh-api-settings-controller",
      "to": "dsh-typert-protocol",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:18 import + src/index.ts:76 class extends TypertRemoteService",
      "purpose": "Remote 服务基类、@Remote 与 RemoteError",
      "type_only": false
    },
    {
      "from": "dsh-api-settings-controller",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/index.ts:19 import type JsonValue",
      "purpose": "设置视图的 JSON 值类型",
      "type_only": true
    },
    {
      "from": "dsh-api-terminal-controller",
      "to": "dsh-brand",
      "mechanism": "E1",
      "evidence": "src/types.ts:2 import type Branded",
      "purpose": "终端/附件标识品牌类型",
      "type_only": true
    },
    {
      "from": "dsh-api-terminal-controller",
      "to": "dsh-client-store",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:7 import + src/client/model.ts:4 import",
      "purpose": "客户端终端模型存储",
      "type_only": false
    },
    {
      "from": "dsh-api-terminal-controller",
      "to": "dsh-deque",
      "mechanism": "E1",
      "evidence": "src/stream.ts:2 import Deque",
      "purpose": "终端输出帧有界队列",
      "type_only": false
    },
    {
      "from": "dsh-api-terminal-controller",
      "to": "dsh-lazy-require",
      "mechanism": "E1",
      "evidence": "src/terminal.ts:6 import createLazyRequire",
      "purpose": "惰性加载 xterm 依赖",
      "type_only": false
    },
    {
      "from": "dsh-api-terminal-controller",
      "to": "dsh-subprocess",
      "mechanism": "E1+E2",
      "evidence": "src/terminal.ts:5 import + src/index.ts:346 subprocess.spawnTerminal",
      "purpose": "分配 PTY 与探测 shell",
      "type_only": false
    },
    {
      "from": "dsh-api-terminal-controller",
      "to": "dsh-typert-protocol",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:7 import + src/index.ts:75 class extends TypertRemoteService",
      "purpose": "Remote 服务基类、@Remote 与 RemoteError",
      "type_only": false
    },
    {
      "from": "dsh-api-terminal-controller",
      "to": "dsh-util-crypto",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:8 import + src/client/model.ts:3 import",
      "purpose": "客户端标识生成",
      "type_only": false
    },
    {
      "from": "dsh-api-workspace-controller",
      "to": "dsh-client-store",
      "mechanism": "E1",
      "evidence": "src/client/model.ts:3 import",
      "purpose": "客户端工作区模型存储",
      "type_only": false
    },
    {
      "from": "dsh-api-workspace-controller",
      "to": "dsh-deque",
      "mechanism": "E1",
      "evidence": "src/feed.ts:4 import Deque",
      "purpose": "follow 帧队列",
      "type_only": false
    },
    {
      "from": "dsh-api-workspace-controller",
      "to": "dsh-host-directory-picker",
      "mechanism": "E2",
      "evidence": "src/directory-picker.ts:8 import + src/directory-picker.ts:110 ctx.directoryPicker.capability()",
      "purpose": "目录选择/浏览能力 seam",
      "type_only": false
    },
    {
      "from": "dsh-api-workspace-controller",
      "to": "dsh-native-command",
      "mechanism": "E1",
      "evidence": "src/default-directory.ts:5 import",
      "purpose": "默认工作区目录的系统 Documents 查询",
      "type_only": false
    },
    {
      "from": "dsh-api-workspace-controller",
      "to": "dsh-typert-protocol",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:5 import + src/index.ts:51 class extends TypertRemoteService",
      "purpose": "Remote 服务基类、@Remote 与 RemoteError",
      "type_only": false
    },
    {
      "from": "dsh-api-workspace-files",
      "to": "dsh-deque",
      "mechanism": "E1",
      "evidence": "src/changes.ts:8 import Deque",
      "purpose": "变更观测队列",
      "type_only": false
    },
    {
      "from": "dsh-api-workspace-files",
      "to": "dsh-fs",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:25 import + src/index.ts:268 ctx.fs.readByteRange",
      "purpose": "文件读取/解析/监听能力 seam",
      "type_only": false
    },
    {
      "from": "dsh-api-workspace-files",
      "to": "dsh-session-persistence",
      "mechanism": "E2",
      "evidence": "src/index.ts:29 import + src/index.ts:211 scope.get('sessionPersistence')?.stat",
      "purpose": "非活动会话的头读取",
      "type_only": false
    },
    {
      "from": "dsh-api-workspace-files",
      "to": "dsh-typert-protocol",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:31 import + src/index.ts:183 class extends TypertRemoteService",
      "purpose": "Remote 服务基类、@Remote 与 TypertLookup 注册",
      "type_only": false
    },
    {
      "from": "dsh-api-workspace-files",
      "to": "dsh-util-workspace-path",
      "mechanism": "E1",
      "evidence": "src/client/provider.ts:28 import parseFileAddress",
      "purpose": "解析 dsh-resource://file 地址",
      "type_only": false
    },
    {
      "from": "dsh-attachment-local",
      "to": "dsh-attachment",
      "mechanism": "E1",
      "evidence": "src/index.ts:6 + src/file-store.ts:6 + src/image.ts:4 + src/normalization.ts:4",
      "purpose": "继承 AttachmentStore 服务定义与其附件类型，作为 seam 的本地 Provider 实现",
      "type_only": false
    },
    {
      "from": "dsh-attachment-local",
      "to": "dsh-home-paths",
      "mechanism": "E1",
      "evidence": "src/index.ts:18",
      "purpose": "用 resolveDshHome/dshCachePath 解析存储根与缓存根，保证多用户/自定义 home 正确落盘",
      "type_only": false
    },
    {
      "from": "dsh-attachment-local",
      "to": "dsh-lazy-require",
      "mechanism": "E1",
      "evidence": "src/sharp.ts:4",
      "purpose": "惰性 require sharp 原生图像库，避免无原生依赖环境启动即崩",
      "type_only": false
    },
    {
      "from": "dsh-authorization",
      "to": "dsh-credentials",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:30 import CredentialKey/CredentialRecord + src/index.ts:191 static inject ['credentials'] + src/index.ts:407 modifyRecord",
      "purpose": "提交凭据记录并确认记录已写入凭据存储",
      "type_only": false
    },
    {
      "from": "dsh-bash-local",
      "to": "dsh-shell",
      "mechanism": "E1",
      "evidence": "src/index.ts:15-16 import ShellExecutor 及结果类型; package.json:30 peerDep",
      "purpose": "继承 ShellExecutor 抽象基类并实现其执行契约",
      "type_only": false
    },
    {
      "from": "dsh-bash-local",
      "to": "dsh-subprocess",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:17 import; src/index.ts:98 static inject ['subprocess']; src/index.ts:259 this.ctx.subprocess.spawn",
      "purpose": "通过子进程服务派生并管理 bash 进程（输出收集、溢出、终止）",
      "type_only": false
    },
    {
      "from": "dsh-bash-local",
      "to": "dsh-timeout",
      "mechanism": "E1",
      "evidence": "src/index.ts:18 import clampTimeout/deadline/timeoutOf/MAX_TIMER_DELAY_MS; package.json:32 peerDep",
      "purpose": "实现超时夹取、融合 deadline 与超时原因分类",
      "type_only": false
    },
    {
      "from": "dsh-bash-sandbox",
      "to": "dsh-sandbox",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:14 import SandboxUnavailableError; src/index.ts:46 inject ['sandbox']; src/index.ts:188 ctx.sandbox.confine; package.json:32 peerDep",
      "purpose": "通过沙箱 provider 包装命令并复用其 denial/runner 分类",
      "type_only": false
    },
    {
      "from": "dsh-bash-sandbox",
      "to": "dsh-shell",
      "mechanism": "E1",
      "evidence": "src/index.ts:13 import; src/helpers.ts:2 import; package.json:30 peerDep",
      "purpose": "使用 ShellExecSpec/ShellExecution/ShellRunResult 等 seam 类型",
      "type_only": true
    },
    {
      "from": "dsh-client-connection",
      "to": "dsh-attachment",
      "mechanism": "E2",
      "evidence": "src/index.ts:5 + src/index.ts:74-86 ctx.get('attachments').imageLimits",
      "purpose": "按附件图像聚合上限推导所需请求体容量，校验 maxRequestBodyBytes 足够",
      "type_only": false
    },
    {
      "from": "dsh-client-connection",
      "to": "dsh-brand",
      "mechanism": "E1",
      "evidence": "src/rpc.ts:3",
      "purpose": "使用品牌化 id 类型标注 RPC 标识",
      "type_only": true
    },
    {
      "from": "dsh-client-connection",
      "to": "dsh-credentials",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:6 + src/index.ts:137 BrowserAuth.create(ctx.root, ctx.credentials, ...) + src/index.ts:89 static inject 'credentials'",
      "purpose": "提供持久浏览器会话令牌与 cookie 认证，作为 /api 鉴权基础",
      "type_only": false
    },
    {
      "from": "dsh-client-connection",
      "to": "dsh-typert-protocol",
      "mechanism": "E1",
      "evidence": "src/index.ts:39 + src/rpc-host.ts:5 + src/operator-peer.ts:11",
      "purpose": "复用 PeerScope/RemoteInvocation 等类型定义 RPC 边界",
      "type_only": true
    },
    {
      "from": "dsh-client-file-upload",
      "to": "dsh-attachment",
      "mechanism": "E2",
      "evidence": "src/index.ts:6 + src/index.ts:58 inject 'attachments' + src/index.ts:108 ctx.attachments.admitEncodedFile",
      "purpose": "把上传字节交给附件服务持久化并生成 FileAttachmentRef",
      "type_only": false
    },
    {
      "from": "dsh-client-file-upload",
      "to": "dsh-brand",
      "mechanism": "E1",
      "evidence": "src/http-route.ts:3 + src/types.ts:4",
      "purpose": "把 query 参数品牌化为 SessionId 等跨边界 id",
      "type_only": false
    },
    {
      "from": "dsh-client-file-upload",
      "to": "dsh-typert-protocol",
      "mechanism": "E1",
      "evidence": "src/index.ts:11 + src/client/runtime.ts:5-6",
      "purpose": "以 Remote/TypertRemoteService/RemoteError 定义远程上传接口与错误码",
      "type_only": false
    },
    {
      "from": "dsh-client-file-upload",
      "to": "dsh-util-crypto",
      "mechanism": "E1",
      "evidence": "src/client/runtime.ts:4",
      "purpose": "浏览器侧上传需要的加密/哈希原语",
      "type_only": false
    },
    {
      "from": "dsh-client-locale",
      "to": "dsh-client-store",
      "mechanism": "E1",
      "evidence": "src/client/settings-store.ts:6",
      "purpose": "Language 行状态用快照 store 承载并驱动渲染",
      "type_only": false
    },
    {
      "from": "dsh-client-locale",
      "to": "dsh-client-ui-slots",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:39 + src/client/LanguageRow.tsx:8",
      "purpose": "复用 Translate/LocaleNamespaceMap/RootStandardSourceContribution 等槽与翻译类型",
      "type_only": true
    },
    {
      "from": "dsh-client-locale",
      "to": "dsh-package-manifest",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:8",
      "purpose": "用 LocalizedText 类型解析包清单中的多语言文本",
      "type_only": true
    },
    {
      "from": "dsh-client-modules",
      "to": "dsh-client-store",
      "mechanism": "E1",
      "evidence": "src/client/entries.ts:4",
      "purpose": "浏览器模块系统用客户端快照 store 管理 entry 生命周期状态",
      "type_only": true
    },
    {
      "from": "dsh-client-modules",
      "to": "dsh-package-manifest",
      "mechanism": "E1",
      "evidence": "src/client/manifest.ts:33",
      "purpose": "解析/校验 dsh.client 清单声明与精确包标识",
      "type_only": true
    },
    {
      "from": "dsh-client-resources",
      "to": "dsh-client-store",
      "mechanism": "E1",
      "evidence": "src/client/resources.ts:13 + src/client/contract.ts:18",
      "purpose": "用 createSnapshotStore 承载每个资源地址的可观察快照",
      "type_only": false
    },
    {
      "from": "dsh-client-resources",
      "to": "dsh-client-ui-slots",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:8 + src/client/index.ts:23 inject 'slots' + src/client/index.ts:38 ctx.slots.provideRoot",
      "purpose": "把 resource keyed hook 与协议类型注册进槽渲染机器",
      "type_only": false
    },
    {
      "from": "dsh-client-resources",
      "to": "dsh-typert-protocol",
      "mechanism": "E1",
      "evidence": "src/client/resources.ts:12 + src/client/contract.ts:17",
      "purpose": "以 RemoteResult 表示 provider 流帧的成功/失败",
      "type_only": true
    },
    {
      "from": "dsh-client-shortcuts",
      "to": "dsh-brand",
      "mechanism": "E1",
      "evidence": "src/binding.ts:2 + src/persistence.ts:3",
      "purpose": "品牌化快捷键绑定标识",
      "type_only": true
    },
    {
      "from": "dsh-client-shortcuts",
      "to": "dsh-client-store",
      "mechanism": "E1",
      "evidence": "src/client/registry.ts:2 + src/client/types.ts:2",
      "purpose": "用快照 store 承载快捷键配置与目录状态",
      "type_only": false
    },
    {
      "from": "dsh-client-shortcuts",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/configuration.ts:2",
      "purpose": "配置归一化/合并工具",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-agent-preset",
      "to": "dsh-client-store",
      "mechanism": "E1",
      "evidence": "src/client/AgentPresetLabel.tsx:12 import @deepseek-ai/dsh-client-store",
      "purpose": "三个面控制器基于 dsh-client-store 的快照 store 原语构建",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-agent-preset",
      "to": "dsh-client-ui-slots",
      "mechanism": "E1+E2",
      "evidence": "src/client/AgentPresetLabel.tsx:13 import + src/client/index.ts:46-51 LocaleNamespaceMap 合并 + src/client/index.ts:177-189 slots.register",
      "purpose": "声明并注册新会话 chip 与会话头标签槽位",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-agent-preset",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:23 import WeakMapWithValues from @deepseek-ai/dsh-util-values",
      "purpose": "以 WeakMap 按 binding 缓存 seat 控制器",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-approval",
      "to": "dsh-typert-protocol",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:8 import TypertClientEventListener from @deepseek-ai/dsh-typert-protocol",
      "purpose": "审批 Remote 事件的客户端监听器类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-attachment",
      "to": "dsh-attachment",
      "mechanism": "E1",
      "evidence": "src/MessageImage.tsx:2 import @deepseek-ai/dsh-attachment",
      "purpose": "图片附件引用类型 ImageAttachmentRef",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-attachment",
      "to": "dsh-client-ui-slots",
      "mechanism": "E2",
      "evidence": "src/client/labels.ts:1 import @deepseek-ai/dsh-client-ui-slots",
      "purpose": "槽位标签/命名空间声明",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-chat",
      "to": "dsh-attachment",
      "mechanism": "E1",
      "evidence": "src/client/apply.ts:3 import @deepseek-ai/dsh-attachment",
      "purpose": "图片附件引用类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-chat",
      "to": "dsh-brand",
      "mechanism": "E1",
      "evidence": "src/client/conversation-nodes/process-groups.ts:2 import @deepseek-ai/dsh-brand",
      "purpose": "过程分组数据品牌类型",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-chat",
      "to": "dsh-client-store",
      "mechanism": "E1",
      "evidence": "src/client/apply.ts:7 createSnapshotStore + src/client/stores.ts:2 defineStore",
      "purpose": "配额通知与 Chat 视图 store 原语",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-chat",
      "to": "dsh-client-ui-slots",
      "mechanism": "E2",
      "evidence": "src/client/chat/register-node-renderers.ts:30-75 slots.inject+register + src/client/chat/message-chrome.ts:3",
      "purpose": "向 conversation.chat.node 等 keyed 槽注册渲染器",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-chat",
      "to": "dsh-compaction",
      "mechanism": "E1",
      "evidence": "src/client/conversation-nodes/command.ts:5-6 + compaction.ts:5",
      "purpose": "压缩命令/摘要节点数据",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-chat",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/client/chat/ChatView.tsx:19 import @deepseek-ai/dsh-util-values",
      "purpose": "值比较/工具函数",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-chat",
      "to": "dsh-util-workspace-path",
      "mechanism": "E1",
      "evidence": "src/client/apply.ts:14 fileAddressFor",
      "purpose": "构造文件的 dsh-resource 地址",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-commands",
      "to": "dsh-client-store",
      "mechanism": "E1",
      "evidence": "src/client/popup.ts:12-13 import @deepseek-ai/dsh-client-store",
      "purpose": "弹层状态 store",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-commands",
      "to": "dsh-client-ui-slots",
      "mechanism": "E1+E2",
      "evidence": "src/client/PopupSelectView.tsx:18 + src/client/contract.ts:41-46 LocaleNamespaceMap 合并",
      "purpose": "弹层槽位与命令字典命名空间声明",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-commands",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/client/service.ts:24 WeakMapWithValues",
      "purpose": "按会话缓存 popup 控制器",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-conversation",
      "to": "dsh-attachment",
      "mechanism": "E1",
      "evidence": "src/client/contract/slots.ts:3 + src/client/conversation/historical-images.ts:3",
      "purpose": "附件记录与历史图片",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-conversation",
      "to": "dsh-brand",
      "mechanism": "E1",
      "evidence": "src/client/contract/groups.ts:2 + src/client/contract/input.ts:12",
      "purpose": "品牌化标识类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-conversation",
      "to": "dsh-client-store",
      "mechanism": "E1",
      "evidence": "src/client/apply.ts:6 createSnapshotStore",
      "purpose": "会话视图/快捷键快照 store",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-conversation",
      "to": "dsh-client-ui-slots",
      "mechanism": "E1+E2",
      "evidence": "src/client/apply.ts:7 resolveSlotLabel + src/client/apply.ts:168 slots.inject('settings.general.item')",
      "purpose": "注册会话骨架槽位与设置行",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-conversation",
      "to": "dsh-file-reference",
      "mechanism": "E1",
      "evidence": "src/client/apply.ts:24 formatFileMention",
      "purpose": "把选中路径格式化成 @ 引用",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-conversation",
      "to": "dsh-util-crypto",
      "mechanism": "E1",
      "evidence": "src/client/conversation/historical-images.ts:6 + src/client/service.ts:12",
      "purpose": "历史图片去重哈希",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-conversation",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/client/conversation/assembly.ts:8 + src/client/conversation/group-store.ts:3",
      "purpose": "值比较/容器工具",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-conversation",
      "to": "dsh-util-workspace-path",
      "mechanism": "E1",
      "evidence": "src/client/apply.ts:25 relativizeToCwd/workspaceTitleOf",
      "purpose": "路径相对化与工作区标题",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-cordis",
      "to": "dsh-client-ui-slots",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:86 ctx.slots.inject/register + src/client/inventory.ts:20 import",
      "purpose": "把 cordis 面板与卡片注册进客户端 UI slot 注册表",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-deliverables",
      "to": "dsh-client-store",
      "mechanism": "E1",
      "evidence": "src/client/Deliverables.tsx:6 + src/client/review-store.ts:7",
      "purpose": "变更 summary/diff 与 review store",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-deliverables",
      "to": "dsh-client-ui-slots",
      "mechanism": "E1+E2",
      "evidence": "src/client/Deliverables.tsx:5 + src/client/index.ts:61 ctx.slots.inject('conversation.chat.turnTail')",
      "purpose": "注册 turn-tail 与 review tab 槽位",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-deliverables",
      "to": "dsh-fs",
      "mechanism": "E2",
      "evidence": "src/present-open.ts:121 ctx.fs",
      "purpose": "宿主机文件系统访问",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-deliverables",
      "to": "dsh-session-query",
      "mechanism": "E2",
      "evidence": "src/present-open.ts:79 ctx.sessionQuery",
      "purpose": "按 seq 定位会话事件",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-deliverables",
      "to": "dsh-typert-protocol",
      "mechanism": "E1",
      "evidence": "src/present-open.ts:7 import @deepseek-ai/dsh-typert-protocol",
      "purpose": "Remote 路由方案类型",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-deliverables",
      "to": "dsh-util-workspace-path",
      "mechanism": "E1",
      "evidence": "src/client/ChangedFiles.tsx:3 + src/client/ReviewTab.tsx:14",
      "purpose": "变更文件路径展示",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-dockkit",
      "to": "dsh-brand",
      "mechanism": "E1",
      "evidence": "src/contract/types.ts:15 import @deepseek-ai/dsh-brand",
      "purpose": "节点/面板标识的品牌化类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-goal",
      "to": "dsh-client-ui-slots",
      "mechanism": "E1+E2",
      "evidence": "src/client/slots.ts:11 HostObservable + src/client/index.ts:71 ctx.slots.inject('conversation.chat.node')",
      "purpose": "注册 Goal 命令输入与停靠条槽位",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-input-trigger",
      "to": "dsh-client-store",
      "mechanism": "E1",
      "evidence": "src/client/controller.ts:11 + src/client/slots.ts:4",
      "purpose": "菜单状态 store",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-input-trigger",
      "to": "dsh-client-ui-slots",
      "mechanism": "E1+E2",
      "evidence": "src/client/MenuView.tsx:19 + src/client/index.ts:41-46 LocaleNamespaceMap 合并",
      "purpose": "菜单槽位与 slash.menu 字典命名空间声明",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-input-trigger",
      "to": "dsh-file-reference",
      "mechanism": "E1",
      "evidence": "src/core/detect.ts:6 import @deepseek-ai/dsh-file-reference",
      "purpose": "@ 引用的语法检测",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-input-trigger",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/client/service.ts:12 import @deepseek-ai/dsh-util-values",
      "purpose": "按会话缓存控制器的值工具",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-jobs",
      "to": "dsh-client-ui-slots",
      "mechanism": "E2",
      "evidence": "src/client/JobListAction.tsx:8 + src/client/index.ts:35 ctx.slots.inject('conversation.session.header.actions')",
      "purpose": "注册会话头动作",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-jobs",
      "to": "dsh-jobs",
      "mechanism": "E2",
      "evidence": "src/client/index.ts:8 import JobId from @deepseek-ai/dsh-jobs/brand + src/client/index.ts:49 ctx.jobs.kill",
      "purpose": "作业品牌类型与作业服务能力",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-layout",
      "to": "dsh-brand",
      "mechanism": "E1",
      "evidence": "src/client/service.ts:12 import type { Branded }",
      "purpose": "MainPanelId 用 Branded 品牌化不透明 id",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-layout",
      "to": "dsh-client-store",
      "mechanism": "E1",
      "evidence": "src/client/stores.ts:5 import { defineStore }",
      "purpose": "用 defineStore 定义布局面板 store 句柄",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-layout",
      "to": "dsh-client-ui-slots",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:15 import type + src/client/index.ts:171 ctx.slots.register / index.ts:160 ctx.slots.entries",
      "purpose": "注册 root 框架与五个子槽，读取 main 槽条目并发布 panelInfo hooks",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-message-feedback",
      "to": "dsh-client-store",
      "mechanism": "E1",
      "evidence": "src/client/dialog.ts:9 import { createSnapshotStore }",
      "purpose": "对话框状态用快照 store 承载",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-message-feedback",
      "to": "dsh-client-ui-slots",
      "mechanism": "E2",
      "evidence": "src/client/index.ts:21 import type + src/client/index.ts:98 ctx.slots.inject('conversation.chat.assistant-actions')",
      "purpose": "向会话 UI 槽注册反馈条目与对话框",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-model-selection",
      "to": "dsh-client-store",
      "mechanism": "E1",
      "evidence": "src/client/catalog.ts:5 import + src/client/directory.ts:12 import",
      "purpose": "目录状态用快照 store",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-model-selection",
      "to": "dsh-client-ui-slots",
      "mechanism": "E2",
      "evidence": "src/client/index.ts:24 import + src/client/index.ts:182 scope.slots.register",
      "purpose": "槽注册与译文命名空间类型",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-model-selection",
      "to": "dsh-typert-protocol",
      "mechanism": "E1",
      "evidence": "src/client/directory.ts:11 import + src/client/slots.ts:7 import",
      "purpose": "Remote 调用协议类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-model-selection",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/client/service.ts:19 import { WeakMapWithValues }",
      "purpose": "以 WeakMap 值容器持有每 Session 目录",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-open-in-app",
      "to": "dsh-client-store",
      "mechanism": "E1",
      "evidence": "src/client/controller.ts:3 import + src/client/open-path.ts:5 import",
      "purpose": "控制器状态用快照 store",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-open-in-app",
      "to": "dsh-client-ui-slots",
      "mechanism": "E2",
      "evidence": "src/client/FileRouteAction.tsx:2 import + src/client/index.ts:80 ctx.slots.inject",
      "purpose": "向各既有槽注册路径动作",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-open-in-app",
      "to": "dsh-native-command",
      "mechanism": "E1",
      "evidence": "src/client/FileRouteAction.tsx:4 import { parseNativeFileApplications }",
      "purpose": "解析 Host native 命令返回的文件关联数据",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-permission-presets",
      "to": "dsh-client-store",
      "mechanism": "E1",
      "evidence": "src/client/PermissionRow.tsx:8 import + src/client/settings-store.ts import",
      "purpose": "设置行状态用快照 store",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-plan",
      "to": "dsh-client-store",
      "mechanism": "E1",
      "evidence": "src/client/review-store.ts:2 import + src/client/PlanCard.tsx:4",
      "purpose": "评审窗口 store",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-plan",
      "to": "dsh-typert-protocol",
      "mechanism": "E1",
      "evidence": "src/client/plan-resource.ts:5 import",
      "purpose": "Remote 协议类型",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-plan",
      "to": "dsh-util-crypto",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:19 import { randomUUID }",
      "purpose": "生成评审窗口标识",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-plugin-manager",
      "to": "dsh-client-store",
      "mechanism": "E1",
      "evidence": "src/client/manager-store.ts:29 import + src/client/navigation-store.ts:2",
      "purpose": "管理器与导航状态 store",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-plugin-manager",
      "to": "dsh-client-ui-slots",
      "mechanism": "E2",
      "evidence": "src/client/index.ts:10 import type + src/client/index.ts:100 ctx.slots.inject('main')",
      "purpose": "槽注册与子槽声明",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-plugin-manager",
      "to": "dsh-package-manifest",
      "mechanism": "E1",
      "evidence": "src/client/manager-store.ts:31 import",
      "purpose": "包清单类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-plugin-manager",
      "to": "dsh-timeout",
      "mechanism": "E1",
      "evidence": "src/index.ts:5 import { MAX_TIMER_DELAY_MS }",
      "purpose": "注册表探测超时上界",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-plugin-manager",
      "to": "dsh-typert-protocol",
      "mechanism": "E1",
      "evidence": "src/index.ts:6 import { Remote, TypertRemoteService }",
      "purpose": "Host 侧 Remote 服务基类与装饰器",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-plugin-manager",
      "to": "dsh-util-crypto",
      "mechanism": "E1",
      "evidence": "src/client/manager-store.ts:9 import",
      "purpose": "哈希/标识工具",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-primitives",
      "to": "dsh-client-store",
      "mechanism": "E1",
      "evidence": "src/settings-form/form-model.ts:16 import",
      "purpose": "设置表单模型基于快照 store 引擎",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-primitives",
      "to": "dsh-util-code-language",
      "mechanism": "E1",
      "evidence": "src/code-highlighting.ts:10 import",
      "purpose": "按扩展名解析代码语言以高亮",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-primitives",
      "to": "dsh-util-workspace-path",
      "mechanism": "E1",
      "evidence": "src/PathLabel.tsx:4 import",
      "purpose": "路径缩写与展示",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-reference",
      "to": "dsh-client-ui-slots",
      "mechanism": "E1",
      "evidence": "src/client/locales.ts:3 import type",
      "purpose": "译文命名空间类型面",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-reference",
      "to": "dsh-file-reference",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:27 import grammar + src/client/index.ts:28 import types",
      "purpose": "文件引用 mention 语法与候选类型",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-reference",
      "to": "dsh-util-workspace-path",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:30 import { abbreviateHomePath, fileAddressFor }",
      "purpose": "路径缩写与生成文件打开地址",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-renderer",
      "to": "dsh-client-ui-slots",
      "mechanism": "E1+E2",
      "evidence": "src/client/registry.ts:19 import { SlotCore } + src/client/app.tsx:21 ctx.slots.renderSlot('root')",
      "purpose": "在 ui-slots 的 SlotCore 语义上构建活应用注册表",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-schedule",
      "to": "dsh-client-ui-slots",
      "mechanism": "E2",
      "evidence": "src/client/index.ts:112 ctx.slots.inject('shell.overlay') + index.ts:168/178/189/231/238",
      "purpose": "向多处既有槽注册任务相关界面",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-schedule",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/client/TaskDetail.tsx:2 import + src/client/schedule-format.ts:4",
      "purpose": "值工具与类型",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-session",
      "to": "dsh-client-store",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:15 import { notifySubscribers }",
      "purpose": "发布订阅通知",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-session",
      "to": "dsh-client-ui-slots",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:17 import + src/client/index.ts:672 ctx.slots.provideRoot / index.ts:684 installScope",
      "purpose": "发布根标准来源并安装会话作用域适配器",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-session",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:16 import { WeakMapWithValues }",
      "purpose": "按会话持有作用域数据",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings",
      "to": "dsh-client-store",
      "mechanism": "E1",
      "evidence": "src/client/config-form.ts:10 import { createSnapshotStore }",
      "purpose": "表单快照 store",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings",
      "to": "dsh-client-ui-slots",
      "mechanism": "E1",
      "evidence": "src/client/contract/slots.ts:12 import type",
      "purpose": "设置槽位契约类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-settings",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/client/config-form.ts:11 import type { JsonValue }",
      "purpose": "JSON 值类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-settings-account",
      "to": "dsh-client-store",
      "mechanism": "E1",
      "evidence": "src/client/onboarding-state.ts:3 import + src/client/platform-pages.ts:8",
      "purpose": "引导与平台页状态 store",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-account",
      "to": "dsh-client-ui-slots",
      "mechanism": "E2",
      "evidence": "src/client/index.ts:40 inject 'slots' + src/client/index.ts:230 ctx.slots.inject('shell.overlay')",
      "purpose": "向设置/壳层各槽注册账户界面",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-account",
      "to": "dsh-deepseek-account",
      "mechanism": "E1+E2",
      "evidence": "src/client/AccountSection.tsx:5 import types + src/client/index.ts:61 ctx.remote.account.getUnnotifiedBonuses",
      "purpose": "账户视图/明细协议类型与 Remote",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-agent-loop",
      "to": "dsh-client-store",
      "mechanism": "E1",
      "evidence": "src/client/agent-loop-card-controller.ts:3 import type SnapshotStore",
      "purpose": "卡片状态以 store 快照形式暴露给渲染层",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-settings-agent-loop",
      "to": "dsh-client-ui-slots",
      "mechanism": "E1+E2",
      "evidence": "src/client/AgentLoopCard.tsx:5 type-only import + src/client/index.ts:47 ctx.slots.inject/register",
      "purpose": "注册卡片到 plugins.item 槽并借用槽 props/注入面类型",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-general",
      "to": "dsh-client-store",
      "mechanism": "E1",
      "evidence": "src/client/shell-contract.ts:18 import type PropsStore + src/client/shell-store.ts:2 import",
      "purpose": "外壳 store 与设置文档 store 基于该快照引擎",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-general",
      "to": "dsh-client-ui-slots",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:14 import resolveSlotLabel + src/client/index.ts:198 ctx.slots.register",
      "purpose": "声明/注册设置槽并解析注册项标签",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-models",
      "to": "dsh-client-store",
      "mechanism": "E1",
      "evidence": "src/client/store.ts:14 import + src/client/welcome-store.ts:8 import",
      "purpose": "页面 store 与欢迎提示 store 基于该快照引擎",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-models",
      "to": "dsh-client-ui-slots",
      "mechanism": "E1+E2",
      "evidence": "src/client/slot-contract.ts:20 type-only import + src/client/index.ts:136 ctx.slots.inject/register",
      "purpose": "注册设置槽/引导槽并引用槽 props 类型",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-models",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/client/CustomProviderCard.tsx:29 import + src/client/ProviderEditor.tsx:29 import",
      "purpose": "复用值处理工具做供应商配置归一",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-settings-plugin-inventory",
      "to": "dsh-client-store",
      "mechanism": "E1",
      "evidence": "src/client/PluginInventorySettingsTab.tsx:3 import type ObservableSnapshot",
      "purpose": "客户端同步快照的 observable 类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-settings-plugin-inventory",
      "to": "dsh-client-ui-slots",
      "mechanism": "E1+E2",
      "evidence": "src/client/PluginInventorySettingsTab.tsx:14 type-only import + src/client/index.ts:56 ctx.slots.inject/register",
      "purpose": "注册 tab 并引用槽 props 类型",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-plugin-inventory",
      "to": "dsh-package-manifest",
      "mechanism": "E1",
      "evidence": "src/client/PluginInventorySettingsTab.tsx:5 import type LocalizedText",
      "purpose": "包元数据本地化文本类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-settings-plugins",
      "to": "dsh-client-ui-slots",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:18 import { resolveSlotLabel } + src/client/index.ts:46 ctx.slots.getVersion, src/client/index.ts:76 ctx.slots.inject",
      "purpose": "声明 tab 子槽并投影台账条目",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-shell",
      "to": "dsh-client-store",
      "mechanism": "E1",
      "evidence": "src/client/shell-card-controller.ts:3 import type SnapshotStore",
      "purpose": "卡片状态以 store 快照暴露",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-settings-shell",
      "to": "dsh-client-ui-slots",
      "mechanism": "E1+E2",
      "evidence": "src/client/ShellCard.tsx:5 type-only import + src/client/index.ts:50 ctx.slots.inject/register",
      "purpose": "注册卡片并引用槽 props 类型",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-subagent",
      "to": "dsh-client-store",
      "mechanism": "E1",
      "evidence": "src/client/subagent-limits-card-controller.ts:3 import type SnapshotStore",
      "purpose": "卡片状态以 store 快照暴露",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-subagent",
      "to": "dsh-client-ui-slots",
      "mechanism": "E1+E2",
      "evidence": "src/client/SubagentCard.tsx:4 type-only import + src/client/index.ts:85 ctx.slots.inject/register",
      "purpose": "注册卡片并引用槽 props 类型",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-settings-web-search",
      "to": "dsh-client-store",
      "mechanism": "E1",
      "evidence": "src/client/web-search-card-controller.ts:15 import",
      "purpose": "卡片状态以 store 快照暴露",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-settings-web-search",
      "to": "dsh-client-ui-slots",
      "mechanism": "E1+E2",
      "evidence": "src/client/WebSearchCard.tsx:9 type-only import + src/client/index.ts:57 ctx.slots.inject/register",
      "purpose": "注册卡片并引用槽 props 类型",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-shortcuts",
      "to": "dsh-client-store",
      "mechanism": "E1",
      "evidence": "src/client/Reference.tsx:5 import + src/client/store.ts:2 import",
      "purpose": "参考浮层状态 store 基于该快照引擎",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-shortcuts",
      "to": "dsh-client-ui-slots",
      "mechanism": "E1+E2",
      "evidence": "src/client/Editor.tsx:7 type-only import + src/client/index.ts:42 ctx.slots.inject, src/client/index.ts:66 ctx.slots.register",
      "purpose": "注册设置行与浮层槽并引用槽 props 类型",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-sidebar",
      "to": "dsh-client-store",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:3 import createSnapshotStore",
      "purpose": "面板元数据快照存储",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-sidebar",
      "to": "dsh-client-ui-slots",
      "mechanism": "E1+E2",
      "evidence": "src/client/HeaderLeadingControls.tsx:5 type-only import + src/client/index.ts:72 ctx.slots.register",
      "purpose": "声明/注册侧边栏槽并解析面板标签",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-sidebar-browser",
      "to": "dsh-brand",
      "mechanism": "E1",
      "evidence": "src/types.ts:2 import",
      "purpose": "跨边界不透明 id 使用品牌化类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-sidebar-browser",
      "to": "dsh-client-store",
      "mechanism": "E1",
      "evidence": "src/client/browser/BrowserController.ts:2 import + src/client/browser/store.ts:2 import",
      "purpose": "浏览器面板状态基于该快照引擎",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-sidebar-browser",
      "to": "dsh-client-ui-slots",
      "mechanism": "E1+E2",
      "evidence": "src/client/browser/BrowserController.ts:4 type-only import + src/client/index.ts:82 ctx.slots.inject('sidebar.right.pane.tab')",
      "purpose": "注册面板 body 与标题并引用槽 props 类型",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-sidebar-documentpreview",
      "to": "dsh-client-store",
      "mechanism": "E1",
      "evidence": "src/client/TextPreview.tsx:15 import",
      "purpose": "预览状态基于该快照引擎",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-sidebar-documentpreview",
      "to": "dsh-client-ui-slots",
      "mechanism": "E1+E2",
      "evidence": "src/client/TextPreview.tsx:16 type-only import + src/client/index.ts:103 ctx.slots.inject/register",
      "purpose": "注册预览 body/title 并声明 document 子槽",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-sidebar-documentpreview",
      "to": "dsh-util-workspace-path",
      "mechanism": "E1",
      "evidence": "src/client/TextPreview.tsx:21 import + src/client/code/CodeBody.tsx:5 import",
      "purpose": "工作区路径归一与拼接",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-sidebar-files",
      "to": "dsh-client-store",
      "mechanism": "E1",
      "evidence": "src/client/face.ts:22 import",
      "purpose": "文件树状态基于该快照引擎",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-sidebar-files",
      "to": "dsh-client-ui-slots",
      "mechanism": "E1+E2",
      "evidence": "src/client/FilesBody.tsx:15 type-only import + src/client/index.ts:72 ctx.slots.inject/register",
      "purpose": "注册 body/title 并引用槽 props 类型",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-sidebar-files",
      "to": "dsh-typert-protocol",
      "mechanism": "E1",
      "evidence": "src/client/face.ts:27 import",
      "purpose": "Typert 协议类型（remote 方法签名）",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-sidebar-files",
      "to": "dsh-util-workspace-path",
      "mechanism": "E1",
      "evidence": "src/client/FilesBody.tsx:20 import",
      "purpose": "工作区路径归一",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-sidebar-right",
      "to": "dsh-brand",
      "mechanism": "E1",
      "evidence": "src/client/tab-domain.ts:19 import",
      "purpose": "品牌化不透明 id",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-sidebar-right",
      "to": "dsh-client-store",
      "mechanism": "E1",
      "evidence": "src/client/service.ts:35 import",
      "purpose": "右栏布局状态基于该快照引擎",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-sidebar-right",
      "to": "dsh-client-ui-slots",
      "mechanism": "E1+E2",
      "evidence": "src/client/contract/slots.ts:24 type-only import + src/client/index.ts:177 ctx.slots.inject/register",
      "purpose": "注册 rightbar 与各子槽并引用槽 props 类型",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-sidebar-right",
      "to": "dsh-util-crypto",
      "mechanism": "E1",
      "evidence": "src/client/service.ts:34 import",
      "purpose": "生成 occurrence/资源 id 的稳定哈希",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-sidebar-terminal",
      "to": "dsh-client-ui-slots",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:86-101 slots.inject/register",
      "purpose": "向侧栏座位注册终端 UI 组件",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-skill",
      "to": "dsh-client-ui-slots",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:81-84 slots.inject/register",
      "purpose": "注册工具视图槽与本地化命名空间",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-skill",
      "to": "dsh-util-workspace-path",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:41 fileAddressFor",
      "purpose": "把 skill 路径转换为工作区资源地址",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-subagent",
      "to": "dsh-client-ui-slots",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:74-103 slots.inject/register",
      "purpose": "注册谱系、动作、composer、Sidebar Chat 座位",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-theme",
      "to": "dsh-client-store",
      "mechanism": "E1",
      "evidence": "src/client/settings-store.ts:6 import",
      "purpose": "设置行的快照 store 引擎",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-theme",
      "to": "dsh-client-ui-slots",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:455-478 slots.inject/register",
      "purpose": "注册设置项行与本地化命名空间",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-tool",
      "to": "dsh-attachment",
      "mechanism": "E1",
      "evidence": "src/client/tool/models/image-card-model.ts:2 import type",
      "purpose": "图片卡片引用附件类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-tool",
      "to": "dsh-client-ui-slots",
      "mechanism": "E1+E2",
      "evidence": "src/client/apply.ts:35-46 slots.inject/register",
      "purpose": "注册聊天节点与 toolview 槽",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-tool",
      "to": "dsh-util-workspace-path",
      "mechanism": "E1",
      "evidence": "src/client/tool/models/tool-call-model.ts:10",
      "purpose": "把工具参数路径转成工作区相对/资源地址",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-trajectory",
      "to": "dsh-attachment",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:6 + src/client/layout.ts:15 import type",
      "purpose": "轨迹图片附件类型与图片 URL 加载",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-trajectory",
      "to": "dsh-client-store",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:8 + src/client/TrajectoryView.tsx:9",
      "purpose": "轨迹时长/字符串折行 store 与快照引擎",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-trajectory",
      "to": "dsh-client-ui-slots",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:79-112 slots.inject/register",
      "purpose": "注册轨迹视图槽与字典命名空间",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-trajectory",
      "to": "dsh-compaction",
      "mechanism": "E1",
      "evidence": "src/client/trajectory-compaction-definition.ts:5 import type",
      "purpose": "投影压缩事件为轨迹节点",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-user-questions",
      "to": "dsh-client-store",
      "mechanism": "E1",
      "evidence": "src/client/draft-store.ts:6 import",
      "purpose": "问题草稿快照 store",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-user-questions",
      "to": "dsh-client-ui-slots",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:94-104 slots.inject/register",
      "purpose": "注册 composer 链入口与 plan-review 动作槽",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-user-questions",
      "to": "dsh-typert-protocol",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:21 TypertClientEventListener",
      "purpose": "复用 Remote 事件监听器类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-workflow-run",
      "to": "dsh-client-store",
      "mechanism": "E1",
      "evidence": "src/client/WorkflowRunPanel.tsx:11 shallowEqual",
      "purpose": "快照比较工具",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-workflow-run",
      "to": "dsh-client-ui-slots",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:29-36 slots.inject/register",
      "purpose": "注册聊天节点槽与字典命名空间",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-workflow-run",
      "to": "dsh-workflow",
      "mechanism": "E1",
      "evidence": "src/client/workflow-definition.ts:9 WorkflowAgentOutcome/WorkflowStopReason",
      "purpose": "复用工作流结果与停止原因类型",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-workspace",
      "to": "dsh-client-store",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:24 createSnapshotStore + stores.ts:8 defineStore",
      "purpose": "工作区视图与 toast 快照 store 引擎",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-workspace",
      "to": "dsh-client-ui-slots",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:120 provideRoot + src/client/index.ts:257-315 slots.inject/register",
      "purpose": "注册浏览/选择器/覆盖层表面并提供全局 hook",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-workspace",
      "to": "dsh-jobs",
      "mechanism": "E1",
      "evidence": "src/client/session-actions/ArchiveSession.tsx:13 import type",
      "purpose": "归档前检查会话是否有后台作业",
      "type_only": true
    },
    {
      "from": "dsh-client-ui-workspace",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/client/session-actions/RowActionToast.tsx:6 + src/client/tree.ts:14",
      "purpose": "值工具（比较/排序列）",
      "type_only": false
    },
    {
      "from": "dsh-client-ui-workspace",
      "to": "dsh-util-workspace-path",
      "mechanism": "E1",
      "evidence": "src/client/rows/Rows.tsx:25 + src/client/tree.ts:15",
      "purpose": "工作区路径格式化与树构建",
      "type_only": false
    },
    {
      "from": "dsh-client-web",
      "to": "dsh-client-store",
      "mechanism": "E1",
      "evidence": "src/seed.ts:14",
      "purpose": "种子静态模块表内联客户端 store",
      "type_only": false
    },
    {
      "from": "dsh-client-web",
      "to": "dsh-client-ui-slots",
      "mechanism": "E1",
      "evidence": "src/seed.ts:15",
      "purpose": "种子静态模块表内联槽注册表",
      "type_only": false
    },
    {
      "from": "dsh-command-compact",
      "to": "dsh-compaction",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:8 import ManualCompactionError + src/index.ts:12 inject 'compaction' + src/index.ts:67 ctx.compaction.compactNow",
      "purpose": "通过压缩 seam 触发一次手动压缩，并复用其封闭失败码把预期失败翻译为人类文案",
      "type_only": false
    },
    {
      "from": "dsh-command-feedback",
      "to": "dsh-anonymous-user-id",
      "mechanism": "E1",
      "evidence": "src/index.ts:15 import",
      "purpose": "反馈确认中附带匿名用户标识",
      "type_only": false
    },
    {
      "from": "dsh-command-feedback",
      "to": "dsh-typert-protocol",
      "mechanism": "E1",
      "evidence": "src/index.ts:16 TypertRemoteService/Remote import",
      "purpose": "以 Host Remote 基类暴露 sessionFeedback.record",
      "type_only": false
    },
    {
      "from": "dsh-commands",
      "to": "dsh-attachment",
      "mechanism": "E1+E2",
      "evidence": "package.json:57 peerDep + src/index.ts:9-10 import AttachmentError/admitEncodedImages; src/index.ts:516 admitEncodedImages",
      "purpose": "命令附件的准入与块构造",
      "type_only": false
    },
    {
      "from": "dsh-commands",
      "to": "dsh-brand",
      "mechanism": "E1",
      "evidence": "package.json:58 peerDep + src/brand.ts:12 import Branded",
      "purpose": "CommandId/CommandDefinitionId 的打标",
      "type_only": true
    },
    {
      "from": "dsh-commands",
      "to": "dsh-typert-protocol",
      "mechanism": "E1",
      "evidence": "package.json:63 peerDep + src/index.ts:16 import TypertRemoteService/Remote",
      "purpose": "作为 Remote 服务基类暴露 list/execute",
      "type_only": false
    },
    {
      "from": "dsh-commands",
      "to": "dsh-util-crypto",
      "mechanism": "E1",
      "evidence": "package.json:67 deps + src/index.ts:7 import randomUUID",
      "purpose": "生成实例令牌使 commandId 跨重启唯一",
      "type_only": false
    },
    {
      "from": "dsh-compaction-basic",
      "to": "dsh-compaction",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:9 import CompactionEngine/ManualCompactionError + src/index.ts:113 extends CompactionEngine + src/region.ts:11 compactCheckpointSource/toolPairingBalancedBefore + src/region.ts:17 type import",
      "purpose": "继承 seam 基类并复用其事务原语（checkpoint source、工具配对边界、压缩结果类型），成为 seam 的后端 provider",
      "type_only": false
    },
    {
      "from": "dsh-compaction-basic",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/index.ts:14 import assertNever + src/config.ts:8 deepFreeze + src/summarizer.ts:9 deepFreeze",
      "purpose": "复用深冻结与封闭联合穷尽断言工具，保证解析配置与摘要消息不可变",
      "type_only": false
    },
    {
      "from": "dsh-compaction-image-offload",
      "to": "dsh-compaction",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:12 type-only import + src/index.ts:33 ctx.on('compaction/summary-error')",
      "purpose": "订阅压缩 seam 的摘要错误瀑布，在摘要调用也因图像超限失败时执行同一卸载恢复",
      "type_only": false
    },
    {
      "from": "dsh-compaction-image-offload",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/project-message.ts:4 import deepFreeze",
      "purpose": "投影出的替换消息需深冻结以保证不可变",
      "type_only": false
    },
    {
      "from": "dsh-compaction-tool-result-pruner",
      "to": "dsh-compaction",
      "mechanism": "E1",
      "evidence": "src/index.ts:13 type-only import (the compaction/* SessionEventMap merges)",
      "purpose": "引入 compaction/* 事件映射的类型合并，使 compaction/prune 影子价格事件成为合法会话事件",
      "type_only": true
    },
    {
      "from": "dsh-compaction-tool-result-pruner",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/config.ts:3 import deepFreeze",
      "purpose": "解析后的字符预算配置需深冻结为不可变",
      "type_only": false
    },
    {
      "from": "dsh-config-editor",
      "to": "dsh-atomic-write",
      "mechanism": "E1",
      "evidence": "src/index.ts:11 + src/index.ts:130 writeFileAtomic",
      "purpose": "以文件锁与原子写保证 profile 配置在崩溃/并发下不损坏",
      "type_only": false
    },
    {
      "from": "dsh-cordis-client-runner",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/client/index.ts:20 import",
      "purpose": "以 JsonValue 约束跨线参数与返回值",
      "type_only": true
    },
    {
      "from": "dsh-cordis-host-runner",
      "to": "dsh-brand",
      "mechanism": "E1",
      "evidence": "src/types.ts:6 import",
      "purpose": "动态插件/包/运行 ID 使用 branded 不透明标识",
      "type_only": true
    },
    {
      "from": "dsh-cordis-host-runner",
      "to": "dsh-typert-protocol",
      "mechanism": "E1",
      "evidence": "src/index.ts:18 TypertRemoteService/Remote import",
      "purpose": "提供 Host Remote 服务基类与远程方法暴露",
      "type_only": false
    },
    {
      "from": "dsh-cordis-host-runner",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/index.ts:19 import",
      "purpose": "跨线 payload 使用 JsonValue 约束",
      "type_only": false
    },
    {
      "from": "dsh-credentials-local",
      "to": "dsh-atomic-write",
      "mechanism": "E1",
      "evidence": "src/index.ts:44 import withFileLock/writeFileAtomic",
      "purpose": "跨进程写锁与 0600 原子写入凭据文档",
      "type_only": false
    },
    {
      "from": "dsh-credentials-local",
      "to": "dsh-credentials",
      "mechanism": "E1",
      "evidence": "src/index.ts:47 import CredentialProvider/credentialRef/parseCredentialKey + src/index.ts:513 extends CredentialProvider",
      "purpose": "实现凭据 seam 的 provider 角色并复用其键语法",
      "type_only": false
    },
    {
      "from": "dsh-credentials-local",
      "to": "dsh-home-paths",
      "mechanism": "E1",
      "evidence": "src/index.ts:45 import canonicalizeWatchPath/resolveDshHome",
      "purpose": "解析 harness home 与监听路径",
      "type_only": false
    },
    {
      "from": "dsh-credentials-local",
      "to": "dsh-launch-environment",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:46 import launchEnvironmentOf + src/index.ts:555 与 src/index.ts:565 getFrom",
      "purpose": "读取继承环境与 .env 兜底层以决定解析优先级",
      "type_only": false
    },
    {
      "from": "dsh-deepseek-account-platform",
      "to": "dsh-credentials",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:11 import credentialKey + src/index.ts:85 static inject ['credentials','authorization'] + src/index.ts:168 readRecord",
      "purpose": "读写 grant 记录（含 device 记录）",
      "type_only": false
    },
    {
      "from": "dsh-deepseek-account-platform",
      "to": "dsh-deepseek-account",
      "mechanism": "E1",
      "evidence": "src/index.ts:10 import DeepSeekAccount 等 + src/index.ts:84 extends DeepSeekAccount",
      "purpose": "实现 account seam 的平台 provider 角色并复用其类型/客户端头",
      "type_only": false
    },
    {
      "from": "dsh-experimental-api-speech-to-text",
      "to": "dsh-experimental-speech-to-text",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:5 import type {} + src/index.ts:6 import types + src/index.ts:8 import validateWave + src/index.ts:29 inject ['speechToText','typert'] + src/index.ts:100 transcribe",
      "purpose": "消费语音识别 seam 并校验提交的 WAV",
      "type_only": false
    },
    {
      "from": "dsh-experimental-api-speech-to-text",
      "to": "dsh-typert-protocol",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:4 import Remote/RemoteError/TypertRemoteService + src/types.ts:3 import type {} + src/index.ts:29 inject 'typert'",
      "purpose": "实现 Remote 传输与错误详情契约",
      "type_only": false
    },
    {
      "from": "dsh-experimental-auto-review",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/index.ts:23 import deepFreeze",
      "purpose": "冻结审查快照与生成选项",
      "type_only": false
    },
    {
      "from": "dsh-experimental-browser-use-chrome-devtools-mcp",
      "to": "dsh-browser-use",
      "mechanism": "E2",
      "evidence": "src/index.ts:11 inject ['browserUse','agents','tools','systemPrompt']",
      "purpose": "向 browserUse 注册表占用 provider 并等待 prompt 就绪",
      "type_only": false
    },
    {
      "from": "dsh-experimental-browser-use-chrome-devtools-mcp",
      "to": "dsh-experimental-browser-use-runtime",
      "mechanism": "E1",
      "evidence": "src/index.ts:5 import BrowserMcpConfig/mountSessionMcp/validateBrowserMcpConfig + src/index.ts:35 mountSessionMcp",
      "purpose": "复用共享的 Session 级 MCP 挂载与配置校验",
      "type_only": false
    },
    {
      "from": "dsh-experimental-browser-use-playwright-mcp",
      "to": "dsh-browser-use",
      "mechanism": "E2",
      "evidence": "src/index.ts:12 inject ['browserUse','agents','tools','systemPrompt']",
      "purpose": "向 browserUse 注册表占用 provider",
      "type_only": false
    },
    {
      "from": "dsh-experimental-browser-use-playwright-mcp",
      "to": "dsh-experimental-browser-use-runtime",
      "mechanism": "E1",
      "evidence": "src/index.ts:6 import BrowserMcpConfig/mountSessionMcp/validateBrowserMcpConfig + src/index.ts:42 mountSessionMcp",
      "purpose": "复用共享的 Session 级 MCP 挂载与配置校验",
      "type_only": false
    },
    {
      "from": "dsh-experimental-browser-use-stagehand-native",
      "to": "dsh-browser-use",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:8 import BrowserUseProviderName from '@deepseek-ai/dsh-browser-use/brand' + src/index.ts:17 import type {} + src/index.ts:25 inject + src/index.ts:99 register",
      "purpose": "注册 stagehand-native provider 并占用 browserUse 服务",
      "type_only": false
    },
    {
      "from": "dsh-experimental-browser-use-stagehand-native",
      "to": "dsh-experimental-browser-use-runtime",
      "mechanism": "E1",
      "evidence": "src/index.ts:9 import SessionResources + src/index.ts:100 new SessionResources",
      "purpose": "复用 Session 级资源拥有/独占与生命周期管理",
      "type_only": false
    },
    {
      "from": "dsh-experimental-browser-use-stagehand-native",
      "to": "dsh-subprocess",
      "mechanism": "E1",
      "evidence": "src/launch.ts:7 import scrubbedParentEnv",
      "purpose": "以净化后的父环境启动 Chromium 子进程",
      "type_only": false
    },
    {
      "from": "dsh-experimental-browser-use-stagehand-native",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/native.ts:5 import assertNever",
      "purpose": "闭合联合分派的穷尽性断言",
      "type_only": false
    },
    {
      "from": "dsh-experimental-client-ui-agent-team",
      "to": "dsh-client-ui-slots",
      "mechanism": "E1+E2",
      "evidence": "src/client/TeamAction.tsx:14-15 import + src/client/mount.ts:21 inject 'slots' + src/client/mount.ts:53 slots.inject",
      "purpose": "注册并声明该 UI 槽位与 locale 命名空间",
      "type_only": false
    },
    {
      "from": "dsh-experimental-client-ui-voice-input",
      "to": "dsh-client-store",
      "mechanism": "E1",
      "evidence": "src/client/readiness.ts:4 import '@deepseek-ai/dsh-client-store'",
      "purpose": "观察 provider 就绪状态",
      "type_only": false
    },
    {
      "from": "dsh-experimental-client-ui-voice-input",
      "to": "dsh-client-ui-slots",
      "mechanism": "E1+E2",
      "evidence": "src/client/PreparationCard.tsx:4 + src/client/VoiceInput.tsx:3 + src/client/mount.ts:17 inject 'slots' + src/client/mount.ts:42 slots.inject",
      "purpose": "注册输入区与插件 bundle 槽位",
      "type_only": false
    },
    {
      "from": "dsh-experimental-client-ui-voice-input",
      "to": "dsh-experimental-speech-to-text",
      "mechanism": "E1",
      "evidence": "src/client/PreparationCard.tsx:5 import '@deepseek-ai/dsh-experimental-speech-to-text/types' + src/client/VoiceInput.tsx:6 import",
      "purpose": "使用 provider/快照等共享语音类型",
      "type_only": true
    },
    {
      "from": "dsh-experimental-client-ui-voice-input",
      "to": "dsh-typert-protocol",
      "mechanism": "E1",
      "evidence": "src/client/VoiceInput.tsx:7 import + src/client/mount.ts:8 import TypertRemoteContribution",
      "purpose": "使用 Remote contribution 与结果类型",
      "type_only": true
    },
    {
      "from": "dsh-experimental-computer-use-cua-driver-mcp",
      "to": "dsh-computer-use",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:9 import ComputerUseProviderName from '@deepseek-ai/dsh-computer-use/brand' + src/index.ts:11 import type {} + src/index.ts:17 inject 'computerUse' + src/index.ts:66 computerUse.register",
      "purpose": "独占占用 computerUse 注册并声明 provider 名",
      "type_only": false
    },
    {
      "from": "dsh-experimental-computer-use-cua-driver-native",
      "to": "dsh-computer-use",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:8 import ComputerUseProviderName from '@deepseek-ai/dsh-computer-use/brand' + src/index.ts:12 import type {} + src/index.ts:20 inject 'computerUse' + src/index.ts:60 register",
      "purpose": "独占占用 computerUse 注册并声明 provider 名",
      "type_only": false
    },
    {
      "from": "dsh-experimental-inspector",
      "to": "dsh-brand",
      "mechanism": "E1",
      "evidence": "src/shared/identity.ts:3 import '@deepseek-ai/dsh-brand'",
      "purpose": "生成品牌化的 source/identity 标识",
      "type_only": true
    },
    {
      "from": "dsh-experimental-inspector",
      "to": "dsh-util-crypto",
      "mechanism": "E1",
      "evidence": "src/shared/cordis/object-registry.ts:3 import '@deepseek-ai/dsh-util-crypto' + src/client/cdp/sources.ts:3 import",
      "purpose": "对象身份/内容哈希等加密工具",
      "type_only": false
    },
    {
      "from": "dsh-experimental-ptc-runtime-python",
      "to": "dsh-ptc-runtime",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:22-23 import PtcRuntime 及类型 + src/index.ts:804 extends PtcRuntime + src/index.ts:830 super(ctx)",
      "purpose": "实现 PTC runtime seam 的 python 后端角色",
      "type_only": false
    },
    {
      "from": "dsh-experimental-ptc-runtime-python",
      "to": "dsh-timeout",
      "mechanism": "E1",
      "evidence": "src/index.ts:25 import MAX_TIMER_DELAY_MS",
      "purpose": "约束墙钟定时器上限",
      "type_only": false
    },
    {
      "from": "dsh-experimental-ptc-runtime-python",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/index.ts:24 import snapshotJsonValue",
      "purpose": "对往返值做无损 JSON 快照校验",
      "type_only": false
    },
    {
      "from": "dsh-experimental-speech-to-text-sensevoice",
      "to": "dsh-experimental-speech-to-text",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:4 import type {} + src/index.ts:6 import types + src/index.ts:13 inject ['speechToText','subprocess'] + src/index.ts:28 register",
      "purpose": "向语音识别 seam 注册本地 provider",
      "type_only": false
    },
    {
      "from": "dsh-experimental-speech-to-text-sensevoice",
      "to": "dsh-subprocess",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:5 import type {} from '@deepseek-ai/dsh-subprocess' + src/index.ts:13 inject + src/recognizer.ts:262 subprocess",
      "purpose": "在子进程中运行识别工作进程",
      "type_only": false
    },
    {
      "from": "dsh-experimental-speech-to-text-sensevoice",
      "to": "dsh-timeout",
      "mechanism": "E1",
      "evidence": "src/config.ts:3 import '@deepseek-ai/dsh-timeout' + src/recognizer.ts:7 import + src/model-sources.ts:2 import",
      "purpose": "约束下载/推理的超时上限",
      "type_only": false
    },
    {
      "from": "dsh-experimental-tool-agent-team",
      "to": "dsh-experimental-agent-team",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:6-7 import TeamTaskId/TeamMemberView + src/index.ts:14 inject 'agentTeams' + src/index.ts:192 spawnTeammate",
      "purpose": "调用 Team 运行时完成成员与共享任务操作",
      "type_only": false
    },
    {
      "from": "dsh-experimental-webworker-runtime",
      "to": "dsh-util-crypto",
      "mechanism": "E1",
      "evidence": "src/node/builtin_modules/implemented/crypto.ts:8 import + src/node/globals/crypto.ts:8 import '@deepseek-ai/dsh-util-crypto'",
      "purpose": "在 Worker 内提供 node:crypto 能力的实现来源",
      "type_only": false
    },
    {
      "from": "dsh-file-reference-local",
      "to": "dsh-file-reference",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:10 import FileReferenceService/FILE_REFERENCE_PROMPT + src/index.ts:44 extends FileReferenceService + src/index.ts:31 import grammar subpath + src/search.ts:11 import type FileReferenceCandidate",
      "purpose": "作为 fileReference 能力 seam 的 provider 实现基类抽象方法 list()，并复用其语法/提示词工具",
      "type_only": false
    },
    {
      "from": "dsh-fs-local",
      "to": "dsh-fs",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:14 FileSystem/FsError import + src/index.ts:2 ctx.fs 服务声明",
      "purpose": "实现并注册文件系统能力 seam 的服务定义",
      "type_only": false
    },
    {
      "from": "dsh-fs-observation-policy",
      "to": "dsh-fs",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:11 FsError/FsTarget 类型 import + src/index.ts:119-127 fs/* 事件订阅",
      "purpose": "消费文件系统 seam 的 intent/observed 事件并抛结构化 FsError",
      "type_only": false
    },
    {
      "from": "dsh-fs-sandbox",
      "to": "dsh-fs",
      "mechanism": "E1",
      "evidence": "src/index.ts:32 FsError import",
      "purpose": "以 seam 的错误类型报告拒绝",
      "type_only": false
    },
    {
      "from": "dsh-fs-sandbox",
      "to": "dsh-sandbox",
      "mechanism": "E1",
      "evidence": "src/index.ts:34 writableRoots import",
      "purpose": "按策略计算可写根集合以判定包含关系",
      "type_only": false
    },
    {
      "from": "dsh-fs-ssh",
      "to": "dsh-fs",
      "mechanism": "E1",
      "evidence": "src/index.ts:4 (import FileSystem, FsError) + src/index.ts:20 (extends FileSystem)",
      "purpose": "实现 FileSystem seam 的 SSH 远程提供者",
      "type_only": false
    },
    {
      "from": "dsh-fs-ssh",
      "to": "dsh-sandbox",
      "mechanism": "E1",
      "evidence": "src/index.ts:6 (import type SandboxExecutionPolicy, SandboxMode) + src/index.ts:23 (SandboxMode)",
      "purpose": "复用沙箱执行策略与模式类型",
      "type_only": true
    },
    {
      "from": "dsh-fs-ssh",
      "to": "dsh-ssh",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:8-10 (import ssh/protocol/schemas) + src/index.ts:21 (inject ['ssh']) + src/index.ts:98 (this.ctx.ssh.request)",
      "purpose": "通过 SSH 连接执行远程 fs.* 操作",
      "type_only": false
    },
    {
      "from": "dsh-goal",
      "to": "dsh-brand",
      "mechanism": "E1",
      "evidence": "src/types.ts:13 import type Branded",
      "purpose": "把 GoalId 品牌化为不可与裸 string 混用的类型",
      "type_only": true
    },
    {
      "from": "dsh-goal",
      "to": "dsh-typert-protocol",
      "mechanism": "E1",
      "evidence": "src/index.ts:16 import (TypertRemoteService, Remote)",
      "purpose": "以远程服务基类暴露 goals 服务并声明 @Remote 方法",
      "type_only": false
    },
    {
      "from": "dsh-hook-protocol",
      "to": "dsh-shell",
      "mechanism": "E1+E2",
      "evidence": "src/runner.ts:9 import ShellExecutor + src/runner.ts:87 bash.execute(bash.resolve(request))",
      "purpose": "经 shell 服务执行 hook 命令并复用其凭据清洗与进程组取消",
      "type_only": false
    },
    {
      "from": "dsh-hooks-claude-code",
      "to": "dsh-shell",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:48 inject ['shell','sessionProjections'] + src/index.ts:169 runHook(ctx.shell, hook, ...)",
      "purpose": "经 shell 服务运行 CC hook 命令",
      "type_only": false
    },
    {
      "from": "dsh-hooks-codex",
      "to": "dsh-shell",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:47 inject ['shell','sessionProjections'] + src/index.ts:147 runHook(ctx.shell, hook, ...)",
      "purpose": "经 shell 服务运行 Codex hook 命令",
      "type_only": false
    },
    {
      "from": "dsh-host-directory-picker-auto",
      "to": "dsh-launch-environment",
      "mechanism": "E1+E2",
      "evidence": "package.json:50 deps + src/index.ts:18 import; src/index.ts:66 launchedThroughSsh(launchEnvironmentOf(ctx))",
      "purpose": "判定是否 SSH 启动，决定不能弹本机对话框",
      "type_only": false
    },
    {
      "from": "dsh-host-directory-picker-browse",
      "to": "dsh-host-directory-picker",
      "mechanism": "E1",
      "evidence": "package.json:30 deps + src/index.ts:17-19 import DirectoryPicker/DirectoryPickerError; src/index.ts:187 extends DirectoryPicker",
      "purpose": "继承服务定义以注册 ctx.directoryPicker 的 browse 实现",
      "type_only": false
    },
    {
      "from": "dsh-host-directory-picker-native",
      "to": "dsh-host-directory-picker",
      "mechanism": "E1",
      "evidence": "package.json:35 deps + src/index.ts:14-15 import DirectoryPicker/DirectoryPickerCapability; src/index.ts:22 extends DirectoryPicker",
      "purpose": "继承服务定义以注册 ctx.directoryPicker 的 native 实现",
      "type_only": false
    },
    {
      "from": "dsh-host-directory-picker-native",
      "to": "dsh-native-command",
      "mechanism": "E1+E2",
      "evidence": "package.json:36 deps + src/native-picker.ts:3 import runNativeCommand; src/native-picker.ts:53 默认 runner",
      "purpose": "以 argv 方式执行原生 chooser 命令",
      "type_only": false
    },
    {
      "from": "dsh-host-open-in-app",
      "to": "dsh-launch-environment",
      "mechanism": "E1+E2",
      "evidence": "package.json:39 deps + src/index.ts:29 import; src/index.ts:139 launchedThroughSsh",
      "purpose": "SSH 启动时返回空目录且不探测",
      "type_only": false
    },
    {
      "from": "dsh-host-open-in-app",
      "to": "dsh-native-command",
      "mechanism": "E1+E2",
      "evidence": "package.json:40 deps + src/icons.ts:15、src/resolver.ts:21 import; src/resolver.ts:147 runNativeCommand 默认 runner",
      "purpose": "执行 xcode-select/reg.exe 等宿主命令及 OS open 动词",
      "type_only": false
    },
    {
      "from": "dsh-host-open-in-app",
      "to": "dsh-subprocess",
      "mechanism": "E1+E2",
      "evidence": "package.json:41 deps + src/index.ts:28 type import、src/resolver.ts:22 scrubbedParentEnv; src/index.ts:145 ctx.subprocess.resolveExecutable",
      "purpose": "PATH 名解析与启动子进程的凭据擦洗环境",
      "type_only": false
    },
    {
      "from": "dsh-host-plugin-inventory",
      "to": "dsh-brand",
      "mechanism": "E1",
      "evidence": "package.json:52 peerDep + src/types.ts:1 import Branded",
      "purpose": "PluginEntryId 等跨边界 id 的打标",
      "type_only": true
    },
    {
      "from": "dsh-host-plugin-inventory",
      "to": "dsh-package-manifest",
      "mechanism": "E1",
      "evidence": "package.json:63 devDep + src/types.ts:2 import PluginLocalizedMeta",
      "purpose": "条目本地化显示元数据类型",
      "type_only": true
    },
    {
      "from": "dsh-host-plugin-inventory",
      "to": "dsh-typert-protocol",
      "mechanism": "E1",
      "evidence": "package.json:53 peerDep + src/index.ts:8 import TypertRemoteService/Remote",
      "purpose": "作为 Remote 服务基类与远程方法装饰器",
      "type_only": false
    },
    {
      "from": "dsh-jobs-local",
      "to": "dsh-jobs",
      "mechanism": "E1",
      "evidence": "src/index.ts:19 import JobRegistry/JobId + src/ring.ts:8 import JobAppendOptions 等类型",
      "purpose": "继承并实现 JobRegistry 能力 seam，复用其契约类型与事件词汇",
      "type_only": false
    },
    {
      "from": "dsh-jobs-local",
      "to": "dsh-timeout",
      "mechanism": "E1",
      "evidence": "src/index.ts:18 import deadline/timeoutOf",
      "purpose": "wait 使用带码 scoped deadline 区分限定等待超时与调用方取消",
      "type_only": false
    },
    {
      "from": "dsh-llm",
      "to": "dsh-attachment",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:42 import type FileAttachmentRef + src/types.ts:8 import + src/index.ts:1015 ctx.get('attachments')",
      "purpose": "把持久文件引用解析为当前执行世界的读取路径文本",
      "type_only": false
    },
    {
      "from": "dsh-llm",
      "to": "dsh-brand",
      "mechanism": "E1",
      "evidence": "src/brand.ts:13 import type Branded + src/types.ts:7 import",
      "purpose": "使用 Branded 承载 ProviderRequestId 等不透明跨边界标识",
      "type_only": false
    },
    {
      "from": "dsh-llm",
      "to": "dsh-fs",
      "mechanism": "E2",
      "evidence": "src/index.ts:1024 ctx.get('fs') processPathFromHostPath",
      "purpose": "结构化消费文件系统 seam，把宿主路径映射为进程可见路径（只读单一方法，避免 llm 依赖 fs 包）",
      "type_only": false
    },
    {
      "from": "dsh-llm",
      "to": "dsh-timeout",
      "mechanism": "E1",
      "evidence": "src/retry-policy.ts:11 import MAX_TIMER_DELAY_MS",
      "purpose": "约束解析出的重试退避上限在计时器可表示范围内",
      "type_only": false
    },
    {
      "from": "dsh-llm",
      "to": "dsh-typert-protocol",
      "mechanism": "E1",
      "evidence": "src/index.ts:10 import Remote/RemoteError/TypertRemoteService",
      "purpose": "以 TypertRemoteService 暴露可远程调用的 llm 服务方法",
      "type_only": false
    },
    {
      "from": "dsh-llm",
      "to": "dsh-util-crypto",
      "mechanism": "E1",
      "evidence": "src/message.ts:3 import from '@deepseek-ai/dsh-util-crypto'",
      "purpose": "消息冻结/哈希所需的加密工具",
      "type_only": false
    },
    {
      "from": "dsh-llm",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/index.ts:11 import deepFreeze + src/content.ts:9 import",
      "purpose": "深冻结请求与内容，保证 loop 构建请求的不可变语义",
      "type_only": false
    },
    {
      "from": "dsh-llm-deepseek-account",
      "to": "dsh-deepseek-account",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:5 import type {} + src/index.ts:21 ctx.get('deepseekAccount')",
      "purpose": "从账号服务解析令牌，并在令牌失效时通知其移除凭据",
      "type_only": false
    },
    {
      "from": "dsh-llm-deepseek-account",
      "to": "dsh-launch-environment",
      "mechanism": "E1",
      "evidence": "src/index.ts:6 import launchEnvironmentOf",
      "purpose": "解析协议端点时读取应用启动环境快照",
      "type_only": false
    },
    {
      "from": "dsh-llm-deepseek-account",
      "to": "dsh-llm-deepseek",
      "mechanism": "E1",
      "evidence": "src/index.ts:7 import plainOptions/resolveAdapterOptions/registerDeepSeekProvider/catalogModelInfo + src/config.ts:2 import Config",
      "purpose": "复用 DeepSeek 协议适配器的选项解析、provider 注册与模型目录，账号路由只替换鉴权",
      "type_only": false
    },
    {
      "from": "dsh-llm-deepseek-api-key",
      "to": "dsh-credentials",
      "mechanism": "E1+E2",
      "evidence": "src/config.ts:4 import credentialRef + src/index.ts:22 ctx.get('credentials')",
      "purpose": "把凭据引用解析为密钥值（无 seam 时退化到环境变量）",
      "type_only": false
    },
    {
      "from": "dsh-llm-deepseek-api-key",
      "to": "dsh-launch-environment",
      "mechanism": "E1",
      "evidence": "src/index.ts:5 import launchEnvironmentOf + src/config.ts:5 import type LaunchEnvironmentSnapshot",
      "purpose": "从启动环境读取端点与密钥的回退来源",
      "type_only": false
    },
    {
      "from": "dsh-llm-deepseek-api-key",
      "to": "dsh-llm-deepseek",
      "mechanism": "E1",
      "evidence": "src/index.ts:6 import registerDeepSeekProvider/catalogModelInfo + src/config.ts:6 import deepSeekConfigFields/plainOptions",
      "purpose": "复用 DeepSeek 协议适配器的字段、端点解析与 provider 注册",
      "type_only": false
    },
    {
      "from": "dsh-llm-pi-ai",
      "to": "dsh-attachment",
      "mechanism": "E1+E2",
      "evidence": "src/context.ts:19 import requestImageDimensions + src/adapter.ts:58 import type + src/index.ts:216 ctx.get('attachments')",
      "purpose": "请求时解析持久图像的确定性字节版本与工具访问",
      "type_only": false
    },
    {
      "from": "dsh-llm-pi-ai",
      "to": "dsh-brand",
      "mechanism": "E1",
      "evidence": "src/context.ts:7 import brandString + src/stream.ts:11 import",
      "purpose": "构造品牌化的 ToolCallId 等不透明标识",
      "type_only": false
    },
    {
      "from": "dsh-llm-pi-ai",
      "to": "dsh-credentials",
      "mechanism": "E1+E2",
      "evidence": "src/auth.ts:19 import credentialKey/isCredentialRefName + src/auth.ts:113 ctx.get('credentials')",
      "purpose": "以 harness 凭据记录作为 pi-ai 登录/刷新的持久存储",
      "type_only": false
    },
    {
      "from": "dsh-llm-pi-ai",
      "to": "dsh-fs",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:65 import type {} from '@deepseek-ai/dsh-fs' + src/index.ts:219 ctx.get('fs')",
      "purpose": "把宿主图像路径映射进当前工具执行世界",
      "type_only": false
    },
    {
      "from": "dsh-llm-pi-ai",
      "to": "dsh-launch-environment",
      "mechanism": "E1",
      "evidence": "src/auth.ts:20 import launchEnvironmentOf + src/index.ts:62 import",
      "purpose": "在无凭据 seam 时从启动环境解析环境变量凭据",
      "type_only": false
    },
    {
      "from": "dsh-llm-pi-ai",
      "to": "dsh-timeout",
      "mechanism": "E1",
      "evidence": "src/adapter.ts:59 import idleWatchdog/timeoutOf + src/config.ts:21 import MAX_TIMER_DELAY_MS",
      "purpose": "对流读取实施空闲看门狗并对配置的空闲超时做上界校验",
      "type_only": false
    },
    {
      "from": "dsh-llm-pi-ai",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/index.ts:66 import deepEqualJson + src/config.ts:24 import",
      "purpose": "比较目录/注册事实以判断路由集合是否真正变化",
      "type_only": false
    },
    {
      "from": "dsh-llm-retry",
      "to": "dsh-brand",
      "mechanism": "E1",
      "evidence": "src/brand.ts:1 import type Branded",
      "purpose": "以 Branded 定义跨尝试稳定的 RetryId 不透明标识",
      "type_only": true
    },
    {
      "from": "dsh-llm-retry",
      "to": "dsh-timeout",
      "mechanism": "E1",
      "evidence": "src/invariant.ts:6 import MAX_TIMER_DELAY_MS",
      "purpose": "校验持久 delayMs 落在计时器可表示范围内",
      "type_only": false
    },
    {
      "from": "dsh-lsp-stdio",
      "to": "dsh-fs",
      "mechanism": "E1+E2",
      "evidence": "src/host.ts:4 type import FileSystem/FsTarget + src/index.ts:47 inject 'fs' + src/index.ts:154 ctx.fs",
      "purpose": "经 fs seam 解析工作区身份并读取有界源码文件",
      "type_only": false
    },
    {
      "from": "dsh-lsp-stdio",
      "to": "dsh-lsp",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:16 import LspError/LspProviderId + src/index.ts:47 inject 'lsp' + src/index.ts:174 ctx.lsp.registerProvider",
      "purpose": "向 ctx.lsp seam 注册本地 Provider 并实现其 LspProvider 接口",
      "type_only": false
    },
    {
      "from": "dsh-lsp-stdio",
      "to": "dsh-subprocess",
      "mechanism": "E1+E2",
      "evidence": "src/connection.ts:14 type import SubprocessHandle/SpawnSpec + src/index.ts:47 inject 'subprocess' + src/index.ts:146 resolveExecutable、src/index.ts:157 ctx.subprocess.spawn",
      "purpose": "解析并启动/终止语言服务器子进程（凭据擦洗由 seam 负责）",
      "type_only": false
    },
    {
      "from": "dsh-lsp-stdio",
      "to": "dsh-timeout",
      "mechanism": "E1",
      "evidence": "src/abort.ts:6 timeoutOf + src/index.ts:22 MAX_TIMER_DELAY_MS + src/instance.ts:16 deadline",
      "purpose": "查询取消分类与关闭/取消宽限期的时间预算",
      "type_only": false
    },
    {
      "from": "dsh-lsp-stdio",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/translate.ts:15 assertNever",
      "purpose": "封闭联合的穷尽性断言",
      "type_only": false
    },
    {
      "from": "dsh-mcp-client",
      "to": "dsh-attachment",
      "mechanism": "E1+E2",
      "evidence": "src/tools.ts:19 import isImageAdmissionError + src/tools.ts:353 ctx.get('attachments')",
      "purpose": "校验图像准入并把 MCP 图像结果持久化为附件",
      "type_only": false
    },
    {
      "from": "dsh-mcp-client",
      "to": "dsh-subprocess",
      "mechanism": "E1",
      "evidence": "src/transport.ts:12 scrubbedParentEnv",
      "purpose": "stdio 传输复用子进程 seam 的凭据擦洗环境定义",
      "type_only": false
    },
    {
      "from": "dsh-mcp-client",
      "to": "dsh-timeout",
      "mechanism": "E1",
      "evidence": "src/index.ts:19 MAX_TIMER_DELAY_MS + src/connection.ts:22 MAX_TIMER_DELAY_MS",
      "purpose": "重连退避与超时字段的上界校验",
      "type_only": false
    },
    {
      "from": "dsh-mcp-client",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/connection.ts:20 assertNever/JsonValue + src/tools.ts:25 type JsonValue",
      "purpose": "资源请求封闭联合断言与 JSON 值类型",
      "type_only": false
    },
    {
      "from": "dsh-mcp-resources",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/index.ts:9 type JsonValue + src/render.ts:8 + src/tools.ts:9",
      "purpose": "资源操作结果的无损 JSON 值类型",
      "type_only": true
    },
    {
      "from": "dsh-message-feedback",
      "to": "dsh-brand",
      "mechanism": "E1",
      "evidence": "src/types.ts:8 import",
      "purpose": "会话/消息标识使用 branded 类型",
      "type_only": true
    },
    {
      "from": "dsh-message-feedback",
      "to": "dsh-session-persistence",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:119 inject 'sessionPersistence' + src/index.ts:17 import",
      "purpose": "冷会话直接打开持久化句柄读写反馈事件",
      "type_only": false
    },
    {
      "from": "dsh-message-feedback",
      "to": "dsh-typert-protocol",
      "mechanism": "E1",
      "evidence": "src/index.ts:18 import",
      "purpose": "以 Host Remote 基类暴露 messageFeedback",
      "type_only": false
    },
    {
      "from": "dsh-office-to-pdf",
      "to": "dsh-brand",
      "mechanism": "E1",
      "evidence": "src/index.ts:11 import brandString + src/identity.ts:2 import brandString/Branded",
      "purpose": "为源定位符与转换身份生成品牌化 id",
      "type_only": false
    },
    {
      "from": "dsh-office-to-pdf",
      "to": "dsh-fs",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:10 import type {} from '@deepseek-ai/dsh-fs' + src/index.ts:188 ctx.get('fs') + src/index.ts:203 fs.resolve",
      "purpose": "解析路径并按上限读取源字节",
      "type_only": false
    },
    {
      "from": "dsh-office-to-pdf",
      "to": "dsh-typert-protocol",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:12 import Remote/RemoteError/TypertRemoteService + src/index.ts:101 extends TypertRemoteService + src/index.ts:159 @Remote",
      "purpose": "实现跨端 Remote 服务与错误契约",
      "type_only": false
    },
    {
      "from": "dsh-permission-presets",
      "to": "dsh-sandbox",
      "mechanism": "E1",
      "evidence": "package.json:59 peerDep + src/index.ts:24 type import SandboxMode",
      "purpose": "预设捆绑的沙箱模式类型",
      "type_only": true
    },
    {
      "from": "dsh-permission-presets",
      "to": "dsh-shell",
      "mechanism": "E1+E2",
      "evidence": "package.json:56 peerDep + src/index.ts:28 type import; src/index.ts:219 ctx.shell.sandboxMode 校验",
      "purpose": "要求受约束的 executor 并提供默认 sandboxMode",
      "type_only": false
    },
    {
      "from": "dsh-permission-presets",
      "to": "dsh-typert-protocol",
      "mechanism": "E1",
      "evidence": "package.json:63 peerDep + src/index.ts:22 import Remote/TypertRemoteService",
      "purpose": "以 Remote 暴露 catalog",
      "type_only": false
    },
    {
      "from": "dsh-plan-mode",
      "to": "dsh-brand",
      "mechanism": "E1",
      "evidence": "src/index.ts:26 brandString",
      "purpose": "品牌化命令 definitionId",
      "type_only": false
    },
    {
      "from": "dsh-plugin-manager",
      "to": "dsh-atomic-write",
      "mechanism": "E1",
      "evidence": "src/index.ts:7 + src/patch.ts:5 + src/operations.ts:8",
      "purpose": "以文件锁与原子写安全改写 profile 的 package.json/patch 文件",
      "type_only": false
    },
    {
      "from": "dsh-plugin-manager",
      "to": "dsh-brand",
      "mechanism": "E1",
      "evidence": "src/types.ts:2",
      "purpose": "使用品牌化 id 类型约束跨边界标识",
      "type_only": true
    },
    {
      "from": "dsh-plugin-manager",
      "to": "dsh-package-manifest",
      "mechanism": "E1",
      "evidence": "src/types.ts:3",
      "purpose": "复用包 manifest 元数据类型",
      "type_only": true
    },
    {
      "from": "dsh-plugin-manager",
      "to": "dsh-sandbox",
      "mechanism": "E1",
      "evidence": "src/tools.ts:7 approveEscalation",
      "purpose": "执行沙箱提权审批流程",
      "type_only": false
    },
    {
      "from": "dsh-plugin-manager",
      "to": "dsh-subprocess",
      "mechanism": "E1",
      "evidence": "src/github-connection.ts:5 + src/operations.ts:14",
      "purpose": "统一受管子进程执行 pnpm 与 GitHub 连通性检查（含超时/输出截断）",
      "type_only": false
    },
    {
      "from": "dsh-plugin-manager",
      "to": "dsh-typert-protocol",
      "mechanism": "E1",
      "evidence": "src/index.ts:12 TypertRemoteService/Remote",
      "purpose": "把管理服务暴露为可远程调用的 Typert 服务",
      "type_only": false
    },
    {
      "from": "dsh-plugin-manager",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/tools.ts:2",
      "purpose": "使用 assertNever 保证工具 action 联合类型穷尽",
      "type_only": false
    },
    {
      "from": "dsh-plugin-package-inventory-deepseek",
      "to": "dsh-brand",
      "mechanism": "E1",
      "evidence": "src/index.ts:14 import brandString",
      "purpose": "把请求 sessionId 字符串品牌化为 SessionId 后查询 agent",
      "type_only": false
    },
    {
      "from": "dsh-ptc-runtime-node",
      "to": "dsh-fs",
      "mechanism": "E2",
      "evidence": "src/index.ts:13 type import + src/launch.ts:4 import + src/index.ts:223 ctx.fs",
      "purpose": "把宿主 bootstrap 资产路径映射到子进程执行世界",
      "type_only": false
    },
    {
      "from": "dsh-ptc-runtime-node",
      "to": "dsh-ptc-runtime",
      "mechanism": "E1",
      "evidence": "src/index.ts:6-7 import + src/bindings.ts:2-3 import",
      "purpose": "继承 PtcRuntime 服务基类，并复用其 JSON wire/保留名/失败类型契约",
      "type_only": false
    },
    {
      "from": "dsh-ptc-runtime-node",
      "to": "dsh-sandbox",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:9-10 import + src/index.ts:224 ctx.sandbox.confine",
      "purpose": "以同一沙箱服务把 PTC 程序的直接文件影响纳入限制并分类 runner 失败",
      "type_only": false
    },
    {
      "from": "dsh-ptc-runtime-node",
      "to": "dsh-subprocess",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:11 import + src/process-entry.ts:2 import + src/index.ts:217,236 ctx.subprocess",
      "purpose": "解析可执行文件、spawn 受管子进程并获取 control/output 管道",
      "type_only": false
    },
    {
      "from": "dsh-ptc-runtime-node",
      "to": "dsh-timeout",
      "mechanism": "E1",
      "evidence": "src/index.ts:8 import",
      "purpose": "复用 MAX_TIMER_DELAY_MS 与 clampTimeout 约束执行预算",
      "type_only": false
    },
    {
      "from": "dsh-ptc-runtime-node",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/index.ts:14 import",
      "purpose": "用 snapshotJsonValue 保证绑定返回值是损失 JSON",
      "type_only": false
    },
    {
      "from": "dsh-pwsh-local",
      "to": "dsh-shell",
      "mechanism": "E1",
      "evidence": "src/index.ts:21-22 import ShellExecutor 及结果类型; package.json:30 peerDep",
      "purpose": "继承 ShellExecutor 抽象基类并实现其执行契约",
      "type_only": false
    },
    {
      "from": "dsh-pwsh-local",
      "to": "dsh-subprocess",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:23 import; src/index.ts:124 static inject ['subprocess']; src/index.ts:303 this.ctx.subprocess.spawn",
      "purpose": "通过子进程服务派生并管理 pwsh 进程（输出收集、溢出、终止）",
      "type_only": false
    },
    {
      "from": "dsh-pwsh-local",
      "to": "dsh-timeout",
      "mechanism": "E1",
      "evidence": "src/index.ts:24 import clampTimeout/deadline/timeoutOf/MAX_TIMER_DELAY_MS; package.json:32 peerDep",
      "purpose": "实现超时夹取、融合 deadline 与超时原因分类",
      "type_only": false
    },
    {
      "from": "dsh-pwsh-sandbox",
      "to": "dsh-sandbox",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:17 import SandboxUnavailableError; src/index.ts:53 inject ['sandbox']; src/index.ts:195 ctx.sandbox.confine; package.json:32 peerDep",
      "purpose": "通过沙箱 provider 包装 pwsh 命令并复用其 denial/runner 分类",
      "type_only": false
    },
    {
      "from": "dsh-pwsh-sandbox",
      "to": "dsh-shell",
      "mechanism": "E1",
      "evidence": "src/index.ts:16 import; src/helpers.ts:11 import; package.json:30 peerDep",
      "purpose": "使用 ShellExecSpec/ShellExecution/ShellRunResult 等 seam 类型",
      "type_only": true
    },
    {
      "from": "dsh-sandbox-local",
      "to": "dsh-sandbox",
      "mechanism": "E1",
      "evidence": "src/index.ts:37-38 import + src/profiles.ts:8-9 import",
      "purpose": "继承 SandboxProvider 服务基类并复用 canonicalPath/writableRoots 与策略类型",
      "type_only": false
    },
    {
      "from": "dsh-sandbox-local",
      "to": "dsh-sandbox-windows-acl",
      "mechanism": "E1",
      "evidence": "src/index.ts:40 import",
      "purpose": "在 windows-acl rung 上真正落地 ACL 写授权与 SID 派生",
      "type_only": false
    },
    {
      "from": "dsh-sandbox-local",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/index.ts:41 import",
      "purpose": "用 assertNever 对 runner 判别联合做穷尽守卫",
      "type_only": false
    },
    {
      "from": "dsh-sandbox-policy",
      "to": "dsh-sandbox",
      "mechanism": "E1",
      "evidence": "src/index.ts:28 import + src/session-mode.ts:22 import",
      "purpose": "复用 SandboxMode/SandboxExecutionPolicy 类型作为解析结果",
      "type_only": true
    },
    {
      "from": "dsh-sandbox-ssh",
      "to": "dsh-sandbox",
      "mechanism": "E1",
      "evidence": "src/index.ts:2 (import SandboxProvider, SandboxUnavailableError) + src/index.ts:10 (extends SandboxProvider)",
      "purpose": "实现沙箱 seam 的 SSH 远端提供者",
      "type_only": false
    },
    {
      "from": "dsh-sandbox-ssh",
      "to": "dsh-ssh",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:4 (type import) + src/index.ts:11 (static inject ['ssh']) + src/index.ts:16 (ctx.ssh.request('sandbox'))",
      "purpose": "在远端主机上解析并应用沙箱约束",
      "type_only": false
    },
    {
      "from": "dsh-schedule",
      "to": "dsh-brand",
      "mechanism": "E1",
      "evidence": "src/types.ts:8 import",
      "purpose": "为跨边界 id 提供品牌类型",
      "type_only": true
    },
    {
      "from": "dsh-schedule",
      "to": "dsh-session-persistence",
      "mechanism": "E2",
      "evidence": "src/index.ts:101 static inject (sessionPersistence)",
      "purpose": "确保 flush 有持久化后端参与才认为投递已确认",
      "type_only": false
    },
    {
      "from": "dsh-schedule",
      "to": "dsh-typert-protocol",
      "mechanism": "E1",
      "evidence": "src/index.ts:5 import",
      "purpose": "以 TypertRemoteService/@Remote 暴露远程管理方法",
      "type_only": false
    },
    {
      "from": "dsh-sdk-jsonrpc-server",
      "to": "dsh-attachment",
      "mechanism": "E1",
      "evidence": "src/server.ts:12 import",
      "purpose": "支持附件在 SDK 会话中的装配",
      "type_only": false
    },
    {
      "from": "dsh-sdk-jsonrpc-server",
      "to": "dsh-brand",
      "mechanism": "E1",
      "evidence": "src/server.ts:10 import",
      "purpose": "为 SDK 边界 id 提供品牌类型",
      "type_only": false
    },
    {
      "from": "dsh-sdk-jsonrpc-server",
      "to": "dsh-sdk-protocol",
      "mechanism": "E1",
      "evidence": "src/index.ts:15 import",
      "purpose": "复用 JsonRpcLineTransport 行式 JSON-RPC 传输",
      "type_only": false
    },
    {
      "from": "dsh-session",
      "to": "dsh-brand",
      "mechanism": "E1",
      "evidence": "src/index.ts:11 + src/types.ts:1 + src/repair.ts:11",
      "purpose": "品牌化会话 id、seq 与日志偏移类型",
      "type_only": false
    },
    {
      "from": "dsh-session",
      "to": "dsh-typert-protocol",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:17 import type TypertLookup + src/index.ts:954 ctx.inject(['typert'])",
      "purpose": "注册 session 的 typert lookup",
      "type_only": false
    },
    {
      "from": "dsh-session",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/index.ts:12 + src/invariant.ts:12 + src/types.ts:17",
      "purpose": "复用 JsonValue 快照/深冻结与穷尽断言工具",
      "type_only": false
    },
    {
      "from": "dsh-session-checkpoint-policy",
      "to": "dsh-session-persistence",
      "mechanism": "E2",
      "evidence": "src/index.ts:12 type import + src/index.ts:18 static inject (sessionPersistence)",
      "purpose": "以持久化后端作为 flush 的实际落盘承接方",
      "type_only": false
    },
    {
      "from": "dsh-session-log-deepseek",
      "to": "dsh-brand",
      "mechanism": "E1",
      "evidence": "src/index.ts:11 import",
      "purpose": "把 request.sessionId 字符串恢复为 SessionId 品牌",
      "type_only": false
    },
    {
      "from": "dsh-session-log-deepseek",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/index.ts:23 type import + src/types.ts:4 import",
      "purpose": "以 JsonValue 描述可序列化线值",
      "type_only": true
    },
    {
      "from": "dsh-session-log-export",
      "to": "dsh-attachment",
      "mechanism": "E1+E2",
      "evidence": "src/archive.ts:26-28 import; src/index.ts:7 import; src/index.ts:125 deps.attachments",
      "purpose": "从 AttachmentStore 读取日志引用的图片与文件并流式打包进 ZIP",
      "type_only": false
    },
    {
      "from": "dsh-session-log-export",
      "to": "dsh-brand",
      "mechanism": "E1",
      "evidence": "src/index.ts:6 import; package.json:42 dep",
      "purpose": "用 brandString 生成品牌化的 CommandDefinitionId/SessionId",
      "type_only": false
    },
    {
      "from": "dsh-session-log-export",
      "to": "dsh-client-store",
      "mechanism": "E1",
      "evidence": "src/client/controller.ts:3 import; src/client/Dialog.tsx:1 import",
      "purpose": "用 createSnapshotStore 持有并发布浏览器端下载状态",
      "type_only": false
    },
    {
      "from": "dsh-session-log-export",
      "to": "dsh-client-ui-slots",
      "mechanism": "E1+E2",
      "evidence": "src/client/index.ts:30 inject ['slots']; src/client/index.ts:51 ctx.slots.register; src/client/Dialog.tsx:4 import",
      "purpose": "把导出/反馈菜单项挂载到 conversation.session.header.utilities 插槽",
      "type_only": false
    },
    {
      "from": "dsh-session-log-export",
      "to": "dsh-session-format",
      "mechanism": "E1",
      "evidence": "src/archive.ts:31 import; package.json:39 dep",
      "purpose": "用 sessionFormatLogFilename() 生成当前代的规范日志文件名",
      "type_only": false
    },
    {
      "from": "dsh-session-log-export",
      "to": "dsh-session-persistence",
      "mechanism": "E1+E2",
      "evidence": "src/archive.ts:33-34 import; src/index.ts:123 deps.sessionPersistence; package.json:47 peerDep",
      "purpose": "通过 SessionPersistence 读写句柄打开并读取存储的会话日志",
      "type_only": false
    },
    {
      "from": "dsh-session-log-export",
      "to": "dsh-session-query",
      "mechanism": "E1+E2",
      "evidence": "src/archive.ts:29 import; src/index.ts:65 ctx.get('sessionQuery'); src/index.ts:123 deps.sessionQuery",
      "purpose": "通过 sessionQuery.traceSession() 枚举根会话谱系，导出子代理日志",
      "type_only": false
    },
    {
      "from": "dsh-session-persistence-jsonl",
      "to": "dsh-session-format",
      "mechanism": "E1",
      "evidence": "src/format.ts:23-25 import + src/generation.ts:31 import + src/catalog-migration.ts:7-8 import",
      "purpose": "复用格式错误类型与 artifact/restore 抽象",
      "type_only": false
    },
    {
      "from": "dsh-session-persistence-jsonl",
      "to": "dsh-session-format-catalog",
      "mechanism": "E1",
      "evidence": "src/index.ts:15 import + src/format.ts:26 import + src/generation.ts:10 import",
      "purpose": "读取/编码当前与历史 header/事件并取当前消息投影",
      "type_only": false
    },
    {
      "from": "dsh-session-persistence-jsonl",
      "to": "dsh-session-format-v3-to-v4",
      "mechanism": "E1",
      "evidence": "src/catalog-migration.ts:6 import + src/format.ts:27 import",
      "purpose": "为历史 v3 语料提供子目录迁移源",
      "type_only": false
    },
    {
      "from": "dsh-session-persistence-jsonl",
      "to": "dsh-session-persistence",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:22 import + src/lease.ts:35 import + src/index.ts:245 class extends",
      "purpose": "实现持久化 seam 的 Service/Handle 契约并注册 ctx.sessionPersistence",
      "type_only": false
    },
    {
      "from": "dsh-session-projection-cache",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/index.ts:21 import + src/spec.ts:14-15 import",
      "purpose": "用 snapshotJsonValue 与 isJsonValue 保证检查点状态是损失 JSON",
      "type_only": false
    },
    {
      "from": "dsh-session-query-sqlite",
      "to": "dsh-session-persistence",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:13 import; src/index.ts:247 ctx.inject(['sessionPersistence']); src/index.ts:510 persistence.list(); package.json:36 peerDep optional",
      "purpose": "可选依赖持久化后端，枚举 persisted 会话快照并读取冷日志",
      "type_only": false
    },
    {
      "from": "dsh-session-query-sqlite",
      "to": "dsh-session-query",
      "mechanism": "E1",
      "evidence": "src/index.ts:18 import SessionQueryEngine; src/index.ts:203 class SqliteSessionQueryEngine extends SessionQueryEngine; package.json:32 peerDep",
      "purpose": "继承抽象引擎并据其契约注册为 ctx.sessionQuery 实现",
      "type_only": false
    },
    {
      "from": "dsh-session-reference",
      "to": "dsh-brand",
      "mechanism": "E1",
      "evidence": "src/uri.ts:3 import brandString",
      "purpose": "把解码出的会话 id 字符串重新品牌化为不透明的 SessionId",
      "type_only": false
    },
    {
      "from": "dsh-session-reference",
      "to": "dsh-compaction",
      "mechanism": "E1",
      "evidence": "src/projection.ts:3 import isCompactCheckpointSource",
      "purpose": "识别压缩检查点消息，投影会话对话时保留检查点并避免误删",
      "type_only": false
    },
    {
      "from": "dsh-session-reference",
      "to": "dsh-output-retention",
      "mechanism": "E1",
      "evidence": "src/projection.ts:5 import TextRetainer",
      "purpose": "用 headTail 保留器精确截断超预算消息并报告省略字节数",
      "type_only": false
    },
    {
      "from": "dsh-session-reference",
      "to": "dsh-session-query",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:22 import type SessionRecord/SessionSurfaceSnapshot + src/index.ts:86 static inject ['sessionQuery'] + src/index.ts:202 ctx.sessionQuery.listSessions + src/index.ts:316 ctx.sessionQuery.readSurface",
      "purpose": "通过会话查询 seam 列举候选会话并按精确读取当前表面快照，是引用数据的主来源",
      "type_only": false
    },
    {
      "from": "dsh-session-reference",
      "to": "dsh-spill",
      "mechanism": "E1+E2",
      "evidence": "src/spill.ts:4 import type SaveTextSpill/SpillRef/SpillStore + src/index.ts:332 this.ctx.get('spillStore')",
      "purpose": "把被截断预览的完整转录保存到 spill 存储并在上下文中给出可取回定位",
      "type_only": false
    },
    {
      "from": "dsh-session-reference",
      "to": "dsh-typert-protocol",
      "mechanism": "E1",
      "evidence": "src/index.ts:11 import Remote/TypertRemoteService + src/index.ts:85 extends TypertRemoteService + src/index.ts:271 @Remote('candidates')",
      "purpose": "把候选列举暴露为类型化远端方法供宿主适配器调用",
      "type_only": false
    },
    {
      "from": "dsh-session-reference",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/projection.ts:6 import assertNever",
      "purpose": "表面事件类型的穷尽断言，防止新增事件被静默跳过",
      "type_only": false
    },
    {
      "from": "dsh-session-telemetry-otel",
      "to": "dsh-anonymous-user-id",
      "mechanism": "E1",
      "evidence": "src/index.ts:30 import",
      "purpose": "把匿名用户 id 作为 OTel 标准 user.id 属性随批次上报",
      "type_only": false
    },
    {
      "from": "dsh-session-telemetry-otel",
      "to": "dsh-session-telemetry",
      "mechanism": "E1",
      "evidence": "src/index.ts:22-28 import + src/index.ts:156 class extends",
      "purpose": "实现遥测 seam 的 Backend/Coordinator/Sink 契约并注册 ctx.sessionTelemetry",
      "type_only": false
    },
    {
      "from": "dsh-session-title",
      "to": "dsh-brand",
      "mechanism": "E1",
      "evidence": "src/index.ts:10 import + src/types.ts:13 import",
      "purpose": "为 provider id 等跨边界标识提供品牌类型",
      "type_only": true
    },
    {
      "from": "dsh-session-title",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/index.ts:13 import",
      "purpose": "用 deepFreeze/assertNever 保证快照不可变与联合穷尽",
      "type_only": false
    },
    {
      "from": "dsh-session-title-all-prompts-llm",
      "to": "dsh-session-title-llm",
      "mechanism": "E1",
      "evidence": "src/index.ts:9 import",
      "purpose": "复用 registerSessionTitleLlmProvider 与共享 Config 字段校验器",
      "type_only": true
    },
    {
      "from": "dsh-session-title-first-prompt-llm",
      "to": "dsh-session-title-llm",
      "mechanism": "E1",
      "evidence": "src/index.ts:9 import",
      "purpose": "复用 registerSessionTitleLlmProvider 与共享 Config 字段校验器",
      "type_only": true
    },
    {
      "from": "dsh-settings",
      "to": "dsh-brand",
      "mechanism": "E1",
      "evidence": "src/types.ts:3 import { Branded }; package.json:36 peerDep",
      "purpose": "用 Branded<'SettingsNamespace'> 品牌化配置命名空间 id",
      "type_only": true
    },
    {
      "from": "dsh-settings",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/types.ts:4 import { JsonValue }; package.json:54 dep",
      "purpose": "用 JsonValue 约束线协议视图的可序列化取值",
      "type_only": true
    },
    {
      "from": "dsh-shell-env",
      "to": "dsh-home-paths",
      "mechanism": "E1",
      "evidence": "src/index.ts:15 import DSH_HOME_ENV/resolveDshHome; package.json:32 peerDep",
      "purpose": "解析 DSH_HOME 并暴露为内置环境变量",
      "type_only": false
    },
    {
      "from": "dsh-shell-env",
      "to": "dsh-shell",
      "mechanism": "E1",
      "evidence": "src/index.ts:13-14 import DSH_ENV_PREFIX/DshEnvironment/DshEnvironmentKey",
      "purpose": "沿用 shell seam 定义的前缀与受管环境类型",
      "type_only": false
    },
    {
      "from": "dsh-skill",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "package.json:35 dependency + src/index.ts:15 import",
      "purpose": "用 assertNever 对封闭联合 SkillResourceBase.kind 做穷尽性检查 (src/index.ts:209-212)",
      "type_only": false
    },
    {
      "from": "dsh-skill-filesystem",
      "to": "dsh-fs",
      "mechanism": "E1+E2",
      "evidence": "package.json:30 peerDep + src/index.ts:21 import type + src/index.ts:843 ctx.get('fs')",
      "purpose": "存在 fs seam 时经其 resolve/listDir/stat/readText 枚举与读取技能文件 (src/index.ts:759-771, src/index.ts:862-893)，缺失时退回 node fs",
      "type_only": false
    },
    {
      "from": "dsh-skill-filesystem",
      "to": "dsh-home-paths",
      "mechanism": "E1",
      "evidence": "package.json:31 peerDep + src/index.ts:22 import",
      "purpose": "用 resolveDshHome 解析 DSH 技能根、canonicalizeWatchPath 规范化 watch 目标路径 (src/index.ts:167, src/index.ts:638)",
      "type_only": false
    },
    {
      "from": "dsh-spill-local",
      "to": "dsh-spill",
      "mechanism": "E1+E2",
      "evidence": "package.json:30 peerDep + src/index.ts:16-17 import + src/index.ts:65 extends SpillStore",
      "purpose": "作为 dsh-spill 定义的 SpillStore seam 的本地文件系统 provider，复用其 SpillLocator/SpillRef/SaveTextSpill 契约",
      "type_only": false
    },
    {
      "from": "dsh-spill-policy",
      "to": "dsh-attachment",
      "mechanism": "E1+E2",
      "evidence": "package.json:41 peerDep + src/index.ts:15 import type + src/index.ts:81 ctx.get('attachments')",
      "purpose": "解析图像附件为执行侧可读路径以写入溢出文本 (src/index.ts:83-86)",
      "type_only": false
    },
    {
      "from": "dsh-spill-policy",
      "to": "dsh-fs",
      "mechanism": "E1+E2",
      "evidence": "package.json:42 peerDep + src/index.ts:16 import type + src/index.ts:82 ctx.get('fs')",
      "purpose": "将附件主机路径映射为进程可读路径，供 resolveImageAttachmentAccess 使用",
      "type_only": false
    },
    {
      "from": "dsh-spill-policy",
      "to": "dsh-output-retention",
      "mechanism": "E1",
      "evidence": "package.json:36 peerDep + src/notice.ts:2 import",
      "purpose": "复用 describeOmitted 词表生成与识别省略通知文本",
      "type_only": false
    },
    {
      "from": "dsh-spill-policy",
      "to": "dsh-spill",
      "mechanism": "E1+E2",
      "evidence": "package.json:38 peerDep + src/index.ts:13 import type + src/notice.ts:3 import type + src/index.ts:101 ctx.get('spillStore')",
      "purpose": "经 spillStore seam 保存完整文本并取回 locator 与 retrievalHint 拼入通知",
      "type_only": false
    },
    {
      "from": "dsh-subagent",
      "to": "dsh-attachment",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:35 (type import) + src/control-types.ts:8 (import PromptContentPart) + src/control.ts:8 (import AttachmentError) + src/index.ts:449 (ctx.get('attachments'))",
      "purpose": "浏览器 prompt 的图片附件持久化与校验",
      "type_only": false
    },
    {
      "from": "dsh-subagent",
      "to": "dsh-brand",
      "mechanism": "E1",
      "evidence": "src/types.ts:13 (import type Branded) + src/continuation.ts:19 (import brandString)",
      "purpose": "品牌化 run/子会话 id",
      "type_only": false
    },
    {
      "from": "dsh-subagent",
      "to": "dsh-chunked-list",
      "mechanism": "E1",
      "evidence": "src/catalog.ts:8-9 (import appendChunkedList, chunkedListSchema, iterateChunkedList)",
      "purpose": "父目录事件的分块列表存储",
      "type_only": false
    },
    {
      "from": "dsh-subagent",
      "to": "dsh-jobs",
      "mechanism": "E1",
      "evidence": "src/run-settlement.ts:10 (import type JobOutcome)",
      "purpose": "一次性后台子代理 run 结算映射为 JobOutcome",
      "type_only": true
    },
    {
      "from": "dsh-subagent",
      "to": "dsh-sandbox",
      "mechanism": "E1",
      "evidence": "src/child-agent.ts:13 (import type SandboxMode)",
      "purpose": "使用沙箱模式类型播种子策略",
      "type_only": true
    },
    {
      "from": "dsh-subagent",
      "to": "dsh-session-persistence",
      "mechanism": "E1+E2",
      "evidence": "src/continuation.ts:24 (import type SessionPersistence) + src/continuation.ts:529 (ctx.get('sessionPersistence'))",
      "purpose": "可续子代理持久化与子 id 存在性检查",
      "type_only": false
    },
    {
      "from": "dsh-subagent",
      "to": "dsh-session-query",
      "mechanism": "E1+E2",
      "evidence": "src/archive-admission.ts:12 (type import) + src/list-children.ts:36 (ctx.get('sessionQuery')) + src/continuation.ts:541 (ctx.get('sessionQuery'))",
      "purpose": "冷恢复与目录发现时观察持久化会话",
      "type_only": false
    },
    {
      "from": "dsh-subagent",
      "to": "dsh-typert-protocol",
      "mechanism": "E1",
      "evidence": "src/index.ts:43 (import Remote, RemoteError, TypertRemoteService) + src/control.ts:10 (import RemoteError)",
      "purpose": "暴露远程 prompt/interrupt 面",
      "type_only": false
    },
    {
      "from": "dsh-subagent",
      "to": "dsh-util-time",
      "mechanism": "E1",
      "evidence": "src/index.ts:42 (import canonicalClientTimeZone)",
      "purpose": "校验浏览器时区",
      "type_only": false
    },
    {
      "from": "dsh-subagent",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/descriptor.ts:24 (import snapshotJsonValue)",
      "purpose": "descriptor 的无损 JSON 快照",
      "type_only": false
    },
    {
      "from": "dsh-subagent-acp",
      "to": "dsh-brand",
      "mechanism": "E1",
      "evidence": "src/run.ts:20 (import brandString)",
      "purpose": "品牌化子会话 id",
      "type_only": false
    },
    {
      "from": "dsh-subagent-acp",
      "to": "dsh-subprocess",
      "mechanism": "E1+E2",
      "evidence": "src/run.ts:24 (import type SubprocessHandle,SubprocessSpawnSpec) + src/index.ts:179 (this.ctx.subprocess.spawn)",
      "purpose": "派生并托管子进程及其生命周期",
      "type_only": false
    },
    {
      "from": "dsh-subagent-acp",
      "to": "dsh-timeout",
      "mechanism": "E1",
      "evidence": "src/index.ts:20 (import MAX_TIMER_DELAY_MS)",
      "purpose": "校验 dispose grace 不超过定时器上限",
      "type_only": false
    },
    {
      "from": "dsh-subagent-claude-code",
      "to": "dsh-brand",
      "mechanism": "E1",
      "evidence": "src/run.ts:19 (import brandString)",
      "purpose": "品牌化 run id",
      "type_only": false
    },
    {
      "from": "dsh-subagent-claude-code",
      "to": "dsh-subprocess",
      "mechanism": "E1+E2",
      "evidence": "src/run.ts:29-34 (import scrubbedParentEnv, SubprocessHandle, SubprocessSpawnSpec) + src/index.ts:116 (this.ctx.subprocess.spawn)",
      "purpose": "托管真实 CLI 进程并做环境清洗",
      "type_only": false
    },
    {
      "from": "dsh-subagent-claude-code",
      "to": "dsh-timeout",
      "mechanism": "E1",
      "evidence": "src/index.ts:11 (import MAX_TIMER_DELAY_MS)",
      "purpose": "校验 dispose grace 上限",
      "type_only": false
    },
    {
      "from": "dsh-subagent-codex",
      "to": "dsh-brand",
      "mechanism": "E1",
      "evidence": "src/run.ts:14 (import brandString)",
      "purpose": "品牌化 run id",
      "type_only": false
    },
    {
      "from": "dsh-subagent-codex",
      "to": "dsh-sdk-protocol",
      "mechanism": "E1",
      "evidence": "src/wire.ts:13 (import JsonRpcLineTransport)",
      "purpose": "复用 JSON-RPC 行协议传输层",
      "type_only": false
    },
    {
      "from": "dsh-subagent-codex",
      "to": "dsh-subprocess",
      "mechanism": "E1+E2",
      "evidence": "src/run.ts:25-29 (import type SubprocessHandle,SubprocessSpawnSpec) + src/index.ts:101 (this.ctx.subprocess.spawn)",
      "purpose": "派生并托管 app-server 子进程",
      "type_only": false
    },
    {
      "from": "dsh-subagent-codex",
      "to": "dsh-timeout",
      "mechanism": "E1",
      "evidence": "src/index.ts:11 (import MAX_TIMER_DELAY_MS)",
      "purpose": "校验 dispose grace 上限",
      "type_only": false
    },
    {
      "from": "dsh-subagent-dsh-sdk",
      "to": "dsh-brand",
      "mechanism": "E1",
      "evidence": "src/run.ts:14 (import brandString)",
      "purpose": "品牌化 run id",
      "type_only": false
    },
    {
      "from": "dsh-subagent-dsh-sdk",
      "to": "dsh-sdk-client",
      "mechanism": "E1",
      "evidence": "src/run.ts:15-22 (import DeepSeekHarness, JsonRpcResponseError 等) + src/run.ts:119 (new DeepSeekHarness)",
      "purpose": "驱动嵌套 DSH 运行时进程（stdio JSON-RPC）",
      "type_only": false
    },
    {
      "from": "dsh-subagent-dsh-sdk",
      "to": "dsh-subprocess",
      "mechanism": "E1",
      "evidence": "src/run.ts:27 (import scrubbedParentEnv)",
      "purpose": "复用环境清洗",
      "type_only": false
    },
    {
      "from": "dsh-subagent-fork-in-process",
      "to": "dsh-subagent-in-process-driver",
      "mechanism": "E1",
      "evidence": "src/index.ts:21 (import startInProcessRun)",
      "purpose": "复用共享的 in-process 一次性运行驱动",
      "type_only": false
    },
    {
      "from": "dsh-subagent-spawn-in-process",
      "to": "dsh-subagent-in-process-driver",
      "mechanism": "E1",
      "evidence": "src/index.ts:17 (import startInProcessRun)",
      "purpose": "复用共享的 in-process 一次性运行驱动",
      "type_only": false
    },
    {
      "from": "dsh-subprocess-local",
      "to": "dsh-lazy-require",
      "mechanism": "E1",
      "evidence": "package.json:50 dep + src/index.ts:19 import createLazyRequire",
      "purpose": "延迟加载 node-pty / koffi 等可选原生依赖",
      "type_only": false
    },
    {
      "from": "dsh-subprocess-local",
      "to": "dsh-subprocess",
      "mechanism": "E1+E2",
      "evidence": "package.json:45 peerDep + src/index.ts:20 import SubprocessRuntime + src/control-spawn.ts:3 import @deepseek-ai/dsh-subprocess/control",
      "purpose": "继承其服务基类以实现子进程 seam 契约，并复用控制管道协议常量",
      "type_only": false
    },
    {
      "from": "dsh-subprocess-local",
      "to": "dsh-timeout",
      "mechanism": "E1",
      "evidence": "package.json:46 peerDep + src/spawn.ts:15 import MAX_TIMER_DELAY_MS",
      "purpose": "复用超时上界常量校验 graceMs",
      "type_only": false
    },
    {
      "from": "dsh-subprocess-local",
      "to": "dsh-win32-process",
      "mechanism": "E1",
      "evidence": "package.json:51 dep + src/windows-job.ts:12 import loadWin32ProcessBindings/probeCurrentTokenJobSupport",
      "purpose": "Windows Job 原生绑定与当前令牌能力探测",
      "type_only": false
    },
    {
      "from": "dsh-subprocess-ssh",
      "to": "dsh-ssh",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:8-11 (import ssh/protocol/schemas) + src/index.ts:230 (inject ['ssh']) + src/index.ts:257 (ctx.ssh.request)",
      "purpose": "通过 SSH 连接管理远程进程与 PTY",
      "type_only": false
    },
    {
      "from": "dsh-subprocess-ssh",
      "to": "dsh-subprocess",
      "mechanism": "E1",
      "evidence": "src/index.ts:5 (import SubprocessRuntime, SubprocessExecutableNotFoundError) + src/index.ts:6 (type import) + src/index.ts:229 (extends SubprocessRuntime)",
      "purpose": "实现子进程 seam 的 SSH 远程提供者",
      "type_only": false
    },
    {
      "from": "dsh-terminal",
      "to": "dsh-brand",
      "mechanism": "E1",
      "evidence": "package.json:31 peerDep + src/types.ts:7 import Branded",
      "purpose": "提供 TerminalSessionId 品牌类型",
      "type_only": true
    },
    {
      "from": "dsh-terminal-bash",
      "to": "dsh-lazy-require",
      "mechanism": "E1",
      "evidence": "package.json:40 dep + src/session.ts:5 import createLazyRequire",
      "purpose": "延迟加载 @xterm/headless",
      "type_only": false
    },
    {
      "from": "dsh-terminal-bash",
      "to": "dsh-sandbox",
      "mechanism": "E1+E2",
      "evidence": "package.json:32 peerDep + src/index.ts:13 import SandboxExecutionPolicy + src/index.ts:103 ctx.get('sandbox')",
      "purpose": "按执行策略 confine 终端 argv",
      "type_only": false
    },
    {
      "from": "dsh-terminal-bash",
      "to": "dsh-subprocess",
      "mechanism": "E1+E2",
      "evidence": "package.json:35 peerDep + src/index.ts:12 import + src/index.ts:27 inject ['subprocess']",
      "purpose": "经 ctx.subprocess.spawnTerminal 启动 PTY 进程",
      "type_only": false
    },
    {
      "from": "dsh-time-context",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/request-zone.ts:4 import assertNever",
      "purpose": "浏览器时区上下文封闭联合的穷尽断言",
      "type_only": false
    },
    {
      "from": "dsh-tmux-context",
      "to": "dsh-shell",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:26 import type ShellExecutor/ShellRunResult + src/index.ts:252 ctx.get('shell') + src/index.ts:137 bash.execute(bash.resolve({command, signal}))",
      "purpose": "通过 shell 执行器 seam 运行只读 tmux/ps 命令获取 pane 与窗口布局信息（无 shell 时降级）",
      "type_only": false
    },
    {
      "from": "dsh-token-meter",
      "to": "dsh-compaction",
      "mechanism": "E1",
      "evidence": "src/surface-projection.ts:21 import type {} from '@deepseek-ai/dsh-compaction'",
      "purpose": "激活 compaction/* shadow-price 事件声明以消费替换区间定价",
      "type_only": true
    },
    {
      "from": "dsh-token-meter",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/index.ts:12 import deepFreeze",
      "purpose": "把测量结果冻结为深度不可变快照",
      "type_only": false
    },
    {
      "from": "dsh-tool-bash",
      "to": "dsh-jobs",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:22 import type { JobRegistry }; src/index.ts:544 ctx.inject(['jobs']); src/index.ts:275 registry.start; src/background.ts:12 import",
      "purpose": "把命令注册为通用后台作业以支持后台执行与超时提升",
      "type_only": false
    },
    {
      "from": "dsh-tool-bash",
      "to": "dsh-sandbox",
      "mechanism": "E1",
      "evidence": "src/index.ts:25-26 import ESCALATION_TARGETS/approveEscalation; src/background.ts:9-10 import; src/render.ts:8-9 import; package.json:34 peerDep",
      "purpose": "使用沙箱模式、升级目标与 denial/升级提示标记",
      "type_only": false
    },
    {
      "from": "dsh-tool-bash",
      "to": "dsh-shell",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:28-29 import DSH_ENV_PREFIX 及 ShellExecRequest; src/index.ts:34 inject ['shell']; src/index.ts:524 ctx.shell.execute; src/render.ts:7 import",
      "purpose": "经 ctx.shell 能力 seam 执行命令并复用其退出状态解析",
      "type_only": false
    },
    {
      "from": "dsh-tool-bash-persistent",
      "to": "dsh-output-retention",
      "mechanism": "E1",
      "evidence": "src/index.ts:10 import truncateWithoutSplittingSurrogatePair; package.json:30 peerDep",
      "purpose": "按字符上限截断输出且不切断代理对",
      "type_only": false
    },
    {
      "from": "dsh-tool-bash-persistent",
      "to": "dsh-timeout",
      "mechanism": "E1",
      "evidence": "src/index.ts:12 import deadline/timeoutOf; package.json:32 peerDep",
      "purpose": "为单条命令建立 deadline 并区分超时原因",
      "type_only": false
    },
    {
      "from": "dsh-tool-call-timeout-policy",
      "to": "dsh-timeout",
      "mechanism": "E1",
      "evidence": "src/index.ts:15 import (deadline, timeoutOf)",
      "purpose": "提供协作式截止控制器与按 code 作用域的超时分类",
      "type_only": false
    },
    {
      "from": "dsh-tool-cordis",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/index.ts:4 import",
      "purpose": "Inspect 输入输出使用 JsonValue 约束",
      "type_only": true
    },
    {
      "from": "dsh-tool-fs",
      "to": "dsh-attachment",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:70 ctx.inject(['attachments']) + src/read-image.ts:16 import",
      "purpose": "read_image 需附件存储以持久化图像字节",
      "type_only": false
    },
    {
      "from": "dsh-tool-fs",
      "to": "dsh-fs",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:22 inject 'fs' + src/edit.ts:11 import",
      "purpose": "所有读写经文件系统 seam 执行",
      "type_only": false
    },
    {
      "from": "dsh-tool-fs",
      "to": "dsh-sandbox",
      "mechanism": "E1",
      "evidence": "src/sandbox.ts:15 import",
      "purpose": "读取沙箱拒绝标记与执行策略类型",
      "type_only": false
    },
    {
      "from": "dsh-tool-fs",
      "to": "dsh-util-code-language",
      "mechanism": "E1",
      "evidence": "src/read-render.ts:182 import",
      "purpose": "按文件扩展名推断代码语言用于渲染",
      "type_only": false
    },
    {
      "from": "dsh-tool-fs-search",
      "to": "dsh-output-retention",
      "mechanism": "E1",
      "evidence": "src/grep.ts:17 import",
      "purpose": "按字节上限截断匹配结果且不破坏 UTF-8",
      "type_only": false
    },
    {
      "from": "dsh-tool-fs-search",
      "to": "dsh-spill",
      "mechanism": "E1",
      "evidence": "src/glob.ts:16 import + src/search-core.ts:29 import",
      "purpose": "把超限的格式化结果落盘为 spill 文件",
      "type_only": true
    },
    {
      "from": "dsh-tool-fs-search",
      "to": "dsh-subprocess",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:70 inject 'subprocess' + src/search-core.ts:28 import",
      "purpose": "以子进程 seam 固定模板执行 ripgrep 并终止进程树",
      "type_only": false
    },
    {
      "from": "dsh-tool-fs-search",
      "to": "dsh-timeout",
      "mechanism": "E1",
      "evidence": "src/index.ts:31 MAX_TIMER_DELAY_MS import",
      "purpose": "校验 graceMs 不超过定时器最大延迟",
      "type_only": false
    },
    {
      "from": "dsh-tool-fs-search",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/direct-call.ts:5 import",
      "purpose": "直调路径使用 JsonValue 约束",
      "type_only": true
    },
    {
      "from": "dsh-tool-jobs",
      "to": "dsh-jobs",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:18 import JobId + src/index.ts:31 inject jobs + src/index.ts:247 ctx.jobs.attachController",
      "purpose": "消费作业注册表：附着控制器、读取/等待/杀死作业并订阅其事件",
      "type_only": false
    },
    {
      "from": "dsh-tool-jobs",
      "to": "dsh-output-retention",
      "mechanism": "E1",
      "evidence": "src/index.ts:15 import TextRetainer",
      "purpose": "用头/尾保留器把超限工具结果截断到字节预算内",
      "type_only": false
    },
    {
      "from": "dsh-tool-lsp",
      "to": "dsh-lsp",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:16 import LspError + src/index.ts:47 inject 'lsp' + src/index.ts:189 ctx.lsp.query",
      "purpose": "经 lsp seam 执行语言服务器查询",
      "type_only": false
    },
    {
      "from": "dsh-tool-lsp",
      "to": "dsh-timeout",
      "mechanism": "E1",
      "evidence": "src/index.ts:18 MAX_TIMER_DELAY_MS",
      "purpose": "校验工具超时预算不超过 Node 时钟上限",
      "type_only": false
    },
    {
      "from": "dsh-tool-lsp",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/index.ts:19 assertNever",
      "purpose": "输出与结果封闭联合的穷尽性断言",
      "type_only": false
    },
    {
      "from": "dsh-tool-present",
      "to": "dsh-fs",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:4 import FsError + src/index.ts:26 inject + src/index.ts:87 ctx.fs.lstat",
      "purpose": "校验被声明的文件确实存在且为常规文件",
      "type_only": false
    },
    {
      "from": "dsh-tool-pwsh",
      "to": "dsh-jobs",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:31 import type { JobRegistry }; src/index.ts:597 ctx.inject(['jobs']); src/index.ts:284 registry.start; src/background.ts:12 import",
      "purpose": "把命令注册为通用后台作业以支持后台执行与超时提升",
      "type_only": false
    },
    {
      "from": "dsh-tool-pwsh",
      "to": "dsh-sandbox",
      "mechanism": "E1",
      "evidence": "src/index.ts:34-35 import ESCALATION_TARGETS/approveEscalation; src/background.ts:9-10 import; src/render.ts:8-9 import; package.json:34 peerDep",
      "purpose": "使用沙箱模式、升级目标与 denial/升级提示标记",
      "type_only": false
    },
    {
      "from": "dsh-tool-pwsh",
      "to": "dsh-shell",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:37-38 import ShellExecRequest 及 parseExitStatus; src/index.ts:50 inject ['shell']; src/index.ts:541 ctx.shell.execute; src/render.ts:13 import",
      "purpose": "经 ctx.shell 能力 seam 执行命令并复用其退出状态解析",
      "type_only": false
    },
    {
      "from": "dsh-tool-pwsh-persistent",
      "to": "dsh-output-retention",
      "mechanism": "E1",
      "evidence": "src/index.ts:12 import truncateWithoutSplittingSurrogatePair; package.json:30 peerDep",
      "purpose": "按字符上限截断输出且不切断代理对",
      "type_only": false
    },
    {
      "from": "dsh-tool-pwsh-persistent",
      "to": "dsh-timeout",
      "mechanism": "E1",
      "evidence": "src/index.ts:14 import deadline/timeoutOf; package.json:32 peerDep",
      "purpose": "为单条命令建立 deadline 并区分超时原因",
      "type_only": false
    },
    {
      "from": "dsh-tool-ralph",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/index.ts:11 import type { JsonValue }",
      "purpose": "符合 seam 的 JSON 值类型用于工具输出",
      "type_only": true
    },
    {
      "from": "dsh-tool-ralph",
      "to": "dsh-workflow",
      "mechanism": "E1+E2",
      "evidence": "package.json:35 peerDep + src/index.ts:15 import type { WorkflowResult, WorkflowRun } + src/index.ts:18 inject 'workflowEngine' + src/index.ts:445 ctx.workflowEngine.start",
      "purpose": "通过 workflow seam 启动固定脚本的编排运行并读取其结果/停止原因",
      "type_only": false
    },
    {
      "from": "dsh-tool-session-query",
      "to": "dsh-brand",
      "mechanism": "E1",
      "evidence": "src/input.ts:11 import brandString; src/workspace-access.ts:8 import brandString",
      "purpose": "把模型传入的 session_id 品牌化为 SessionId",
      "type_only": false
    },
    {
      "from": "dsh-tool-session-query",
      "to": "dsh-session-query",
      "mechanism": "E2",
      "evidence": "src/index.ts:19 inject ['sessionQuery']; src/operations.ts:95 ctx.sessionQuery.searchSessions",
      "purpose": "调用会话检索服务执行搜索、追迹与事件读取",
      "type_only": false
    },
    {
      "from": "dsh-tool-session-query",
      "to": "dsh-timeout",
      "mechanism": "E1",
      "evidence": "src/index.ts:9 import MAX_TIMER_DELAY_MS; src/index.ts:38 使用其作为 timeoutMs 上限",
      "purpose": "约束检索工具协作式超时不超过计时器上限",
      "type_only": false
    },
    {
      "from": "dsh-tool-str-replace-editor",
      "to": "dsh-fs",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:503 inject 'fs' + src/index.ts:9 FsError/FsTarget import",
      "purpose": "所有查看与变更经文件系统 seam 执行",
      "type_only": false
    },
    {
      "from": "dsh-tool-str-replace-editor",
      "to": "dsh-output-retention",
      "mechanism": "E1",
      "evidence": "src/index.ts:11 truncateWithoutSplittingSurrogatePair import",
      "purpose": "截断长输出且不拆散代理对",
      "type_only": false
    },
    {
      "from": "dsh-tool-str-replace-editor",
      "to": "dsh-sandbox",
      "mechanism": "E1",
      "evidence": "src/index.ts:12 sandboxDenialMarker import",
      "purpose": "把沙箱拒绝映射为模型可见标记",
      "type_only": false
    },
    {
      "from": "dsh-tool-subagent",
      "to": "dsh-jobs",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:27 (import type JobOutcome) + src/index.ts:538 (runtimeCtx.get('jobs')) + src/index.ts:544 (jobs.start)",
      "purpose": "一次性后台子代理作为 Task 运行",
      "type_only": false
    },
    {
      "from": "dsh-tool-subagent",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/index.ts:18 (import type JsonValue)",
      "purpose": "工具输出 JSON 值类型",
      "type_only": true
    },
    {
      "from": "dsh-tool-subagent-control",
      "to": "dsh-brand",
      "mechanism": "E1",
      "evidence": "src/index.ts:13 (import brandString)",
      "purpose": "品牌化 agent_id",
      "type_only": false
    },
    {
      "from": "dsh-tool-subagent-control",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/list-agents.ts:17 (import assertNever)",
      "purpose": "封闭 scope 联合的穷尽断言",
      "type_only": false
    },
    {
      "from": "dsh-tool-terminal",
      "to": "dsh-jobs",
      "mechanism": "E1+E2",
      "evidence": "package.json:38 peerDep + src/index.ts:13 import + src/index.ts:253 ctx.get('jobs')",
      "purpose": "后台 pty-send 任务的 id 生成与输出收集",
      "type_only": false
    },
    {
      "from": "dsh-tool-terminal",
      "to": "dsh-output-retention",
      "mechanism": "E1",
      "evidence": "package.json:36 peerDep + src/render.ts:3 import TextRetainer",
      "purpose": "结果文本的字节上限保留与截断",
      "type_only": false
    },
    {
      "from": "dsh-tool-web",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "package.json:37 dep + src/fetch.ts:14 import { assertNever, type JsonValue } + src/search.ts:11 import type JsonValue",
      "purpose": "工具结果值的 JSON 类型与闭合联合的穷尽检查",
      "type_only": false
    },
    {
      "from": "dsh-tool-workflow",
      "to": "dsh-jobs",
      "mechanism": "E1+E2",
      "evidence": "package.json:43 peerDep + src/index.ts:21 import type { JobId, JobOutcome } + src/index.ts:269 ctx.get('jobs') + src/index.ts:274 jobs.start + src/record.ts:12 import type { JobHandle }",
      "purpose": "把后台工作流注册为受管后台作业并写进度环",
      "type_only": false
    },
    {
      "from": "dsh-tool-workflow",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/index.ts:23 import type { JsonValue } + src/index.ts:463 result.value as JsonValue",
      "purpose": "把工作流返回值投影为合法 JSON 值",
      "type_only": true
    },
    {
      "from": "dsh-tool-workflow",
      "to": "dsh-workflow",
      "mechanism": "E1+E2",
      "evidence": "package.json:48 peerDep + src/index.ts:25 import type WorkflowResult/WorkflowRun + src/index.ts:41 inject 'workflowEngine' + src/index.ts:115 ctx.on('workflow/agent-start') + src/index.ts:433 ctx.workflowEngine.start",
      "purpose": "启动/观测 workflow 运行并订阅 workflow/* 生命周期事件",
      "type_only": false
    },
    {
      "from": "dsh-tools",
      "to": "dsh-brand",
      "mechanism": "E1",
      "evidence": "src/ptc.ts:9 import brandString",
      "purpose": "品牌化 PTC 子调用产生的内容块 id",
      "type_only": false
    },
    {
      "from": "dsh-tools",
      "to": "dsh-ptc-runtime",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:17 import type PtcRuntime + src/index.ts:680,1048 ctx.ptcRuntime + src/ptc.ts:19",
      "purpose": "PTC 模式下经运行时执行 run_code 程序与子调用",
      "type_only": false
    },
    {
      "from": "dsh-tools",
      "to": "dsh-sandbox",
      "mechanism": "E1",
      "evidence": "src/ptc.ts:20-21 import approveEscalation/ESCALATION_TARGETS + type SandboxExecutionPolicy",
      "purpose": "执行沙箱升级审批与策略校验",
      "type_only": false
    },
    {
      "from": "dsh-tools",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "src/index.ts:15 + src/ptc.ts:23",
      "purpose": "复用 JsonValue/深冻结/快照工具",
      "type_only": false
    },
    {
      "from": "dsh-typert-registry",
      "to": "dsh-typert-protocol",
      "mechanism": "E1",
      "evidence": "src/index.ts:4 import TypertDisposer + src/types.ts:8 import InvocationDescriptor",
      "purpose": "实现其服务契约并复用共享 wire 类型",
      "type_only": true
    },
    {
      "from": "dsh-user-approval",
      "to": "dsh-brand",
      "mechanism": "E1",
      "evidence": "package.json:41 peerDep + src/types.ts:8 import Branded",
      "purpose": "ApprovalRequestId 的打标",
      "type_only": true
    },
    {
      "from": "dsh-web-fetch-http",
      "to": "dsh-http-proxy",
      "mechanism": "E1",
      "evidence": "package.json:33 peerDep + src/provider.ts:13 import { proxyRouteFor }",
      "purpose": "决定某些抓取经代理 dispatcher 走（跳过多余的公共地址校验）",
      "type_only": false
    },
    {
      "from": "dsh-web-fetch-http",
      "to": "dsh-timeout",
      "mechanism": "E1",
      "evidence": "package.json:31 peerDep + src/provider.ts:11 import { deadline, timeoutOf }",
      "purpose": "为一次抓取施加可区分来源的超时 deadline",
      "type_only": false
    },
    {
      "from": "dsh-web-search-deepseek",
      "to": "dsh-credentials",
      "mechanism": "E1+E2",
      "evidence": "package.json:33 peerDep + src/index.ts:12 import { credentialRef } + src/index.ts:103 ctx.get('credentials') + src/provider.ts:16 import type { CredentialRef }",
      "purpose": "解析 DEEPSEEK_API_KEY 等凭据引用，取搜索所需的 API key",
      "type_only": false
    },
    {
      "from": "dsh-web-search-deepseek",
      "to": "dsh-launch-environment",
      "mechanism": "E1+E2",
      "evidence": "package.json:34 peerDep + src/index.ts:13 import { launchEnvironmentOf } + src/index.ts:106 launchEnvironmentOf(ctx).get(apiKeyEnv)",
      "purpose": "在无 credentials seam 时以启动环境作为凭据/端点回退来源",
      "type_only": false
    },
    {
      "from": "dsh-web-search-exa",
      "to": "dsh-launch-environment",
      "mechanism": "E1+E2",
      "evidence": "package.json:30 peerDep + src/index.ts:9 import { launchEnvironmentOf } + src/index.ts:61 launchEnvironmentOf(ctx).get('EXA_API_KEY')",
      "purpose": "从启动环境解析 Exa API key（缺 key 则 provider 不可用）",
      "type_only": false
    },
    {
      "from": "dsh-web-search-perplexity",
      "to": "dsh-launch-environment",
      "mechanism": "E1+E2",
      "evidence": "package.json:30 peerDep + src/index.ts:9 import { launchEnvironmentOf } + src/index.ts:56 launchEnvironmentOf(ctx).get('PERPLEXITY_API_KEY')",
      "purpose": "从启动环境解析 Perplexity API key（缺 key 则 provider 不可用）",
      "type_only": false
    },
    {
      "from": "dsh-webhook-github",
      "to": "dsh-credentials",
      "mechanism": "E1+E2",
      "evidence": "package.json:36 peerDep + src/index.ts:4 import { credentialRef } + src/index.ts:14 static inject ['webServer','webhookRuntime','credentials'] + src/handler.ts:95 ctx.credentials.resolve",
      "purpose": "解析 webhook 签名共享密钥所在的凭据引用",
      "type_only": false
    },
    {
      "from": "dsh-webhook-github",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "package.json:42 dep + src/handler.ts:7 import { snapshotJsonValue } + src/types.ts:3 import type { JsonValue }",
      "purpose": "把解析后的 payload 快照成无损 JSON 并给出 JSON 值类型",
      "type_only": false
    },
    {
      "from": "dsh-webhook-github",
      "to": "dsh-webhook",
      "mechanism": "E1+E2",
      "evidence": "package.json:39 peerDep + src/handler.ts:9-12 import WebhookDeliveryId/WebhookSourceId/VerifiedWebhookDelivery + src/index.ts:14 inject 'webhookRuntime' + src/handler.ts:115 ctx.webhookRuntime.dispatch + src/types.ts:16 declare module WebhookEventMap",
      "purpose": "构造已验证投递并交给 webhook runtime 分发，同时注册 github 事件类型",
      "type_only": false
    },
    {
      "from": "dsh-workflow-ptc",
      "to": "dsh-brand",
      "mechanism": "E1",
      "evidence": "package.json:42 dep + src/runtime.ts:9 import { brandString }",
      "purpose": "把子代理 childId 品牌化为 SessionId",
      "type_only": false
    },
    {
      "from": "dsh-workflow-ptc",
      "to": "dsh-ptc-runtime",
      "mechanism": "E1+E2",
      "evidence": "package.json:37 peerDep + src/host.ts:4 import type { PtcRuntime } + src/index.ts:103 static inject ['subagents','ptcRuntime','sandboxPolicy'] + src/index.ts:117 ctx.ptcRuntime.language",
      "purpose": "在共享沙箱 PTC 运行时中执行脚本并携带绑定函数",
      "type_only": false
    },
    {
      "from": "dsh-workflow-ptc",
      "to": "dsh-sandbox",
      "mechanism": "E1",
      "evidence": "package.json:38 peerDep + src/host.ts:5 import type { SandboxExecutionPolicy }",
      "purpose": "使用沙箱执行策略类型约束工作目录与执行环境",
      "type_only": true
    },
    {
      "from": "dsh-workflow-ptc",
      "to": "dsh-util-values",
      "mechanism": "E1",
      "evidence": "package.json:43 dep + src/host.ts:11 import { assertNever, snapshotJsonValue }",
      "purpose": "快照/校验跨 PTC 边界传递的无损 JSON 值",
      "type_only": false
    },
    {
      "from": "dsh-workflow-ptc",
      "to": "dsh-workflow",
      "mechanism": "E1",
      "evidence": "package.json:36 peerDep + src/index.ts:14 import WorkflowEngine, { WorkflowError, WorkflowRunId } + src/host.ts:12 import type { WorkflowRun, WorkflowResult }",
      "purpose": "继承 WorkflowEngine 服务基类并复用其错误/运行词汇作为引擎实现",
      "type_only": false
    },
    {
      "from": "dsh-workspace",
      "to": "dsh-brand",
      "mechanism": "E1",
      "evidence": "src/types.ts:8 + src/spec.ts:9 import；package.json:49 dependencies @deepseek-ai/dsh-brand",
      "purpose": "用 Branded/brandString 铸造 WorkspaceId，避免裸 string 跨边界",
      "type_only": false
    },
    {
      "from": "dsh-workspace",
      "to": "dsh-session-persistence",
      "mechanism": "E1+E2",
      "evidence": "src/index.ts:12 import；src/index.ts:171 static inject 声明 sessionPersistence + src/index.ts:826 ctx.sessionPersistence.list()",
      "purpose": "读取历史会话 header 快照用于 bootstrap 与存在性判定；弱化后无法区分『无历史』与『持久层不可用』",
      "type_only": false
    },
    {
      "from": "dsh-workspace",
      "to": "dsh-typert-protocol",
      "mechanism": "E1",
      "evidence": "src/types.ts:10 import type {} from '@deepseek-ai/dsh-typert-protocol'；src/types.ts:18 declare module 合并 RemoteErrorDetailsMap",
      "purpose": "类型层合并声明 workspace/not-found 远程错误细节，供远程投影识别工作区缺失",
      "type_only": true
    },
    {
      "from": "dsh-workspace-changes",
      "to": "dsh-subprocess",
      "mechanism": "E1+E2",
      "evidence": "src/git.ts:4 import + src/index.ts:30 inject ['subprocess'] + src/index.ts:74 ctx.subprocess.resolveExecutable",
      "purpose": "解析 git 可执行并运行 git 命令做快照/numstat",
      "type_only": false
    }
  ]
}