DAG总览 / 组目录 / G09 核心运行时

dsh-agent-loop · @deepseek-ai/dsh-agent-loop

Layer 5G09
目录:ACP 协议API 网关与控制器附件启动与插件管理客户端运行时客户端 UI 包上下文压缩上下文注入核心运行时凭据与授权交付物文档处理实验特性宿主扩展反馈通道文件系统目标与计划工具守卫Hooks 扩展宿主服务交互命令作业调度LLM 适配LSP 集成MCP 协议规划模式Agent 预设代码执行运行时运行时诊断沙箱定时调度SDK 与协议会话核心会话检索设置Shell 执行技能溢出存储SSH 远程执行存储子代理子进程终端待办类型契约框架 vendorWeb 访问Webhook工作流工作区
依赖链 · 上游(该插件依赖的前驱):
依赖链 · 下游(依赖该插件的节点):
无下游(叶子/被消费端)
同一拓扑层(Layer 5,层次遍历层序):
↑ Layer 4(13 插件)Layer 5↓ Layer 6(18 插件)

插件信息

包名@deepseek-ai/dsh-agent-loop
分组G09 · 核心运行时
拓扑层Layer 5(层次遍历:被依赖方先于依赖方)
源码路径packages/core/agent-loop

① 实现逻辑

具体 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)。

内部结构动态 DAG(深色主题:橙色=上游依赖 · 绿色=下游依赖 · 棕色=外部seam · 蓝=本插件)
本插件 上游依赖 下游依赖 外部 seam

② 注册/提供(provides)

③ 依赖(depends_on · 上游前驱)

dsh-agentE1+E2
实现 AgentFactory 并经 ctx.agents 工厂/注册表发布与登记 agent
src/agent.ts:18 import + src/index.ts:24 + src/index.ts:331 inject(['agents'])
dsh-invariantsE1+E2
注册 loop 请求可重建性不变量
src/invariant.ts:8 import + src/invariant.ts:16 inject(['invariants']) + src/invariant.ts:65 register
dsh-llmE1+E2
构造并执行模型请求,复用 LlmCallConfig/PreparedLlmCall 等
src/agent.ts:19 import + src/index.ts:25 + src/index.ts:331 inject(['llm'])
dsh-scopeE1+E2
为每个 agent 铸造作用域上下文
src/agent.ts:28-29 import createScope + src/agent.ts:130 createScope(loopCtx, this)
dsh-sessionE1+E2
创建/恢复会话并把 agent 会话登记进 SessionStore
src/index.ts:26-27 import + src/index.ts:331 inject(['sessions']) + src/index.ts:618-622 ctx.sessions.enter/announce
dsh-session-projectionE1+E2
注册 turnBoundary 与 inbox 投影定义
src/index.ts:30-31 import + src/index.ts:364-365 ctx.sessionProjections.register + src/index.ts:331 inject(['sessionProjections'])
dsh-system-promptE1+E2
注册 provider/model/cwd 提示变量并驱动提示装配
src/agent.ts:32-33 import + src/index.ts:370-372 ctx.systemPrompt.variable + src/index.ts:331 inject(['systemPrompt'])
dsh-toolsE1+E2
调度工具调用执行流水线
src/index.ts:29 import + src/tool-calls.ts:17 + src/index.ts:331 inject(['tools'])

④ 被依赖(dependents · 下游消费者)

无下游(叶子/被消费端)