目录:ACP 协议API 网关与控制器附件启动与插件管理客户端运行时客户端 UI 包上下文压缩上下文注入核心运行时凭据与授权交付物文档处理实验特性宿主扩展反馈通道文件系统目标与计划工具守卫Hooks 扩展宿主服务交互命令作业调度LLM 适配LSP 集成MCP 协议规划模式Agent 预设代码执行运行时运行时诊断沙箱定时调度SDK 与协议会话核心会话检索设置Shell 执行技能溢出存储SSH 远程执行存储子代理子进程终端待办类型契约框架 vendorWeb 访问Webhook工作流工作区
依赖链 · 上游(该插件依赖的前驱):
依赖链 · 下游(依赖该插件的节点):
dsh-acpdsh-agentdsh-agent-default-modeldsh-agent-instructionsdsh-agent-loopdsh-api-remotesdsh-api-session-controllerdsh-authorizationdsh-client-connectiondsh-client-ui-approvaldsh-client-ui-chatdsh-client-ui-conversationdsh-client-ui-deliverablesdsh-client-ui-trajectorydsh-client-ui-user-questionsdsh-command-goaldsh-commandsdsh-compaction-basicdsh-compaction-image-offloaddsh-compaction-tool-result-prunerdsh-cordis-host-runnerdsh-experimental-auto-reviewdsh-goaldsh-goal-round-driverdsh-hooks-claude-codedsh-hooks-codexdsh-llm-deepseek-accountdsh-llm-deepseek-api-keydsh-llm-pi-aidsh-llm-retrydsh-mcp-clientdsh-mcp-resourcesdsh-message-feedbackdsh-plan-modedsh-repeat-tool-reminderdsh-scheduledsh-sdk-jsonrpc-serverdsh-sessiondsh-session-checkpoint-policydsh-session-persistence-jsonldsh-session-referencedsh-session-statsdsh-session-telemetry-oteldsh-session-titledsh-session-title-all-prompts-llmdsh-session-title-first-prompt-llmdsh-skilldsh-spill-policydsh-subagentdsh-subagent-acpdsh-subagent-claude-codedsh-subagent-codexdsh-subagent-dsh-sdkdsh-system-promptdsh-time-contextdsh-tmux-contextdsh-token-meterdsh-tool-bashdsh-tool-fsdsh-tool-fs-searchdsh-tool-goaldsh-tool-jobsdsh-tool-presentdsh-tool-pwshdsh-tool-ralphdsh-tool-session-querydsh-tool-skilldsh-tool-subagentdsh-tool-subagent-controldsh-tool-terminaldsh-tool-webdsh-tool-workflowdsh-toolsdsh-user-approvaldsh-user-questionsdsh-webdsh-workflow-ptc
同一拓扑层(Layer 1,层次遍历层序):
插件信息
| 包名 | @deepseek-ai/dsh-llm |
|---|---|
| 分组 | G23 · LLM 适配 |
| 拓扑层 | Layer 1(层次遍历:被依赖方先于依赖方) |
| 源码路径 | packages/llm/llm |
① 实现逻辑
抽象出 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)。
内部结构动态 DAG(深色主题:橙色=上游依赖 · 绿色=下游依赖 · 棕色=外部seam · 蓝=本插件)
本插件
上游依赖
下游依赖
外部 seam
② 注册/提供(provides)
- ctx.llm (provider 无关的 LLM 适配器注册表与流式调用 API,供各 llm-* 适配器注册路由、供 agent loop 发起请求)
- llm/stream waterfall 扩展点 (可拦截或短路每次流式模型调用)
- llm/adapters-updated 事件 (适配器路由与目录拓扑变更的非否决通知)
③ 依赖(depends_on · 上游前驱)
dsh-invariantsE1+E2
注册 llm 包拥有的流协议与注册表不变量 companion
src/invariant.ts:4 import type InvariantInstaller + src/invariant.ts:112 ctx.invariants.register
④ 被依赖(dependents · 下游消费者)
dsh-agent
复用 LlmCallConfig/ReasoningEffortId 及 createUserMessage/boundContextSummary 生成模型切换通知
src/model-selection.ts:14 import + package.json:42 peerDep
dsh-agent-default-model
把存储的 effort 字符串投影为适配器推理强度 id
package.json:35 peerDep + src/index.ts:13 import ReasoningEffortId
dsh-agent-instructions
把渲染后的指令文本构造成带 source 标记的 user 消息注入上下文
src/index.ts:15 import createUserMessage + src/state.ts:8 createUserMessage + src/state.ts:9 import type Message
dsh-agent-loop
构造并执行模型请求,复用 LlmCallConfig/PreparedLlmCall 等
src/agent.ts:19 import + src/index.ts:25 + src/index.ts:331 inject(['llm'])
dsh-api-remotes
装配 llm 命名空间
src/client/index.ts:11 import remote + src/client/index.ts:74 import types
dsh-api-session-controller
消息构造、assistant 流与模型目录
src/commands.ts:17 import + src/catalog.ts:24 ctx.llm.listProviders
dsh-client-ui-approval
关联工具调用标识类型
src/client/contract/slots.ts:2 import ToolCallId from @deepseek-ai/dsh-llm
dsh-client-ui-chat
assistant 消息/品牌类型
src/client/conversation-nodes/assistant.ts:6 + src/client/contract/slots.ts:2
dsh-client-ui-conversation
LLM 消息/请求检查类型
src/client/contract/records.ts:6-7 + src/client/conversation/assembler.ts:4
dsh-client-ui-trajectory
投影 assistant 流事件与 LLM 类型
src/client/trajectory-assistant-definition.ts:7-8 + src/client/trajectory-event-projection.ts:3
dsh-commands
附件以 LLM 块类型参与模型可见输入
package.json:60 peerDep + src/index.ts:11 import FileBlock/ImageBlock
dsh-compaction-basic
解析路由模型上下文容量以计算压力阈值,并通过 llm 流式调用执行摘要、构造备份检查点消息
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
dsh-compaction-image-offload
识别适配器上报的 IMAGE_OFFLOAD_REQUIRED 失败码,并按 dsh-llm 的内容块/消息类型改写图像块
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
dsh-compaction-tool-result-pruner
构造不可变的替换工具结果消息并复用其内容块/调用 id 类型
src/index.ts:9 import freezeMessage + src/index.ts:10 import type ContentBlock + src/types.ts:1 import type ToolCallId
dsh-experimental-auto-review
用当前请求路由调用 reviewer 模型并解析流式块
src/index.ts:22 import BlockAssembler/GenerateOptions 等 + src/index.ts:126 inject + src/index.ts:637 ctx.llm.stream
dsh-goal
目标消息来源类型合并与 GoalError 的错误基类
src/fold.ts:3 import MessageSource + src/runtime.ts:3 import HarnessError
dsh-goal-round-driver
构造模型可见的续轮用户消息与提示块
src/index.ts:11-12 import (createUserMessage, ContentBlock) + src/prompt.ts:3 import ContentBlock
dsh-hooks-claude-code
构造注入模型的上下文消息及其来源标签
src/index.ts:16-17 import (createUserMessage, ContextFormed) + src/index.ts:24 import (ContentBlock, MessageSource)
dsh-hooks-codex
构造注入模型的上下文消息及其来源标签
src/index.ts:19-20 import (createUserMessage, ContextFormed) + src/index.ts:27 import (ContentBlock, MessageSource)
dsh-llm-deepseek-account
复用 provider 无关的错误码与错误类型表达鉴权/配额失败
src/index.ts:4 import ACCOUNT_QUOTA_EXCEEDED_CODE/LlmError/QUOTA_EXCEEDED_CODE
dsh-llm-pi-ai
实现并注册 llm seam 适配器,复用其错误类型、图像投影与目录 API
src/adapter.ts:41 import LlmAdapter/attributionHeaders + src/index.ts:94 inject llm + src/index.ts:302 ctx.llm.registerAdapter
dsh-llm-retry
消费 provider 中立失败事实与已解析的重试策略类型
src/index.ts:13 import type LlmFailure/ResolvedRetryPolicy + src/types.ts:1 import from dsh-llm/types
dsh-mcp-client
校验当前模型路由声明了图像输入能力
src/tools.ts:21 type ContentBlock + src/tools.ts:358 ctx.get('llm')、src/tools.ts:364 llm.resolveModelInfo
dsh-plan-mode
构造模式切换的用户叙述消息
src/index.ts:30 import createUserMessage + src/index.ts:31 type ContextFormed
dsh-repeat-tool-reminder
构造模型可见的提醒消息及其生产者来源标签
src/index.ts:12-13 import createUserMessage + src/index.ts:20 import MessageSource
dsh-session
复用 llm 消息/工具/请求头等类型与派生消息词汇
src/index.ts:15,23,31 + src/types.ts:2-16 + package.json:58 dependency
dsh-session-checkpoint-policy
在模型流请求边界做检查点
src/index.ts:9 import + src/index.ts:18 static inject + src/index.ts:64 llm/stream
dsh-session-persistence-jsonl
复用消息组装/流展开与 errorChain 工具
src/generation.ts:30 import + src/storage.ts:13 import
dsh-session-reference
构造引用上下文 user 消息、冻结直接消息,并识别 NO_ADAPTER 以回退默认字节预算
src/index.ts:12 import createUserMessage/freezeMessage/LlmError + src/index.ts:13 import type ContentBlock/LlmResolvedModelInfo/UserMessage + src/types.ts:8-9 子路径类型 import
dsh-session-telemetry-otel
以 APP_IDENTITY 作为 OTel Resource 的 service.name/version
src/index.ts:29 import
dsh-skill
声明合并 dsh-llm 的 MessageSourceMap 以注册 'skill-invocation' 消息来源类型 (src/index.ts:154-159)
package.json:31 peerDep + src/index.ts:14 import type
dsh-spill-policy
按当前模型路由估算图像 token 定价,并构造 PTC 图像结果的 additionalContexts 用户消息 (src/index.ts:144)
package.json:35 peerDep + src/index.ts:10-11 import + src/index.ts:65 ctx.get('llm').imageRequestPricing
dsh-subagent
内容块/流文本处理、推理强度与模型图像能力查询
src/descriptor.ts:26 (import type ReasoningEffortId) + src/assistant-output.ts:13 (import joinAssistantStreamText) + src/continuation.ts:515 (ctx.get('llm'))
dsh-time-context
构造带来源标记的时间快照 user 消息,并复用消息来源合并类型
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
dsh-tmux-context
构造带来源标记的 tmux 位置快照 user 消息,并复用消息来源合并类型
src/index.ts:27 import createUserMessage + src/index.ts:28 import type ContextFormed
dsh-token-meter
读取路由图像定价与文件请求文本,并重组 assistant 流以估算 provider 输出
src/index.ts:10 import assembleAssistantStream + src/index.ts:11 import type TokenUsage + src/index.ts:197 ctx.get('llm')
dsh-tool-bash
用 HarnessError/TOOL_ABORTED 表达工具中止
src/index.ts:20 import HarnessError; package.json:33 peerDep
dsh-tool-goal
构造收尾上下文消息与结构化工具错误
src/index.ts:11 import (boundContextSummary, createUserMessage, HarnessError) + src/wrapup.ts:3 import ContentBlock
dsh-tool-present
事件 payload 使用品牌化 ToolCallId
src/types.ts:2 import ToolCallId from '@deepseek-ai/dsh-llm/brand'
dsh-tool-pwsh
用 HarnessError/TOOL_ABORTED 表达工具中止
src/index.ts:29 import HarnessError; package.json:33 peerDep
dsh-tool-ralph
工具结果呈现使用 dsh-llm 的内容块类型
package.json:31 peerDep + src/index.ts:10 import type { ContentBlock }
dsh-tool-session-query
用 HarnessError 承载模型安全的错误码与拒绝语义
src/operations.ts:8 import HarnessError; src/service-boundary.ts:8 import HarnessError; src/workspace-access.ts:9 import HarnessError
dsh-tool-skill
用 createUserMessage 构造带 source 的目录/注入消息,并注册 'skill-catalog' 消息来源类型
package.json:31 peerDep + src/index.ts:12 import + src/index.ts:43-47 declare module
dsh-tool-subagent
子代理路由发现与 preflight
src/index.ts:16 (import ReasoningEffortId) + src/list-models.ts:4-5 (import type LlmRuntime, LlmProviderInfo) + src/index.ts:498 (runtimeCtx.get('llm'))
dsh-tool-workflow
工具呈现使用 dsh-llm 的内容块类型
package.json:44 peerDep + src/index.ts:20 import type { ContentBlock }
dsh-tools
复用工具/内容块/调用 id 类型并构造消息与错误
src/index.ts:11-12 import + src/ptc.ts:10 createUserMessage/HarnessError
dsh-user-approval
把策略切换通知注入模型消息
package.json:43 peerDep + src/index.ts:11-12 import createUserMessage/ContextFormed; src/index.ts:188 agent.inject
dsh-user-questions
错误基类与工具调用 id 类型
package.json:36 peerDep + src/index.ts:12 import HarnessError、src/types.ts:5 ToolCallId
dsh-web
以 dsh-llm 的 HarnessError 为基类定义 WebError,保持全仓错误分类一致
package.json:30 peerDep + src/types.ts:8 import { HarnessError }
dsh-workflow-ptc
把子代理最终输出块展平为文本作为 agent() 结果
package.json:32 peerDep + src/runtime.ts:10 import type { ContentBlock } + src/types.ts:7 import type { ContentBlock }