DAG总览 / 组目录 / G21 交互命令

dsh-user-approval · @deepseek-ai/dsh-user-approval

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

插件信息

包名@deepseek-ai/dsh-user-approval
分组G21 · 交互命令
拓扑层Layer 3(层次遍历:被依赖方先于依赖方)
源码路径packages/interaction/user-approval

① 实现逻辑

实现 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)。

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

② 注册/提供(provides)

③ 依赖(depends_on · 上游前驱)

dsh-agentE1
以 agent/session 为审批作用域与日志目标
package.json:40 peerDep + src/index.ts:10、src/types.ts:10 type import Agent
dsh-invariantsE1+E2
注册审批审计流不变量
package.json:42 peerDep + src/invariant.ts:5 import; src/invariant.ts:112 ctx.invariants.register
dsh-llmE1+E2
把策略切换通知注入模型消息
package.json:43 peerDep + src/index.ts:11-12 import createUserMessage/ContextFormed; src/index.ts:188 agent.inject
dsh-scopeE1+E2
按 agent 过滤审批请求分派
package.json:44 peerDep + src/index.ts:19、src/types.ts:9 import scopeTarget/Scoped; src/index.ts:282 作用域 waterfall
dsh-sessionE1+E2
把审批审计对写入会话日志
package.json:45 peerDep + src/index.ts:20-21 import Session/SessionSeq; src/index.ts:225/232 session.append
dsh-system-promptE1+E2
声明当前审批策略的模型可见上下文
package.json:46 peerDep + src/index.ts:22 type import; src/index.ts:162 ctx.inject(['systemPrompt'])

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

dsh-acp
声明合并权限 waterfall 并提供一次性决策
src/index.ts:52 import + src/index.ts:155 ctx.on('approval/request')
dsh-api-remotes
审批 waterfall 事件签名
src/index.ts:29 import type {}
dsh-experimental-auto-review
按 approval policy 决定 reviewer deny 是 ask 还是终态 deny
src/index.ts:27 import type {} from '@deepseek-ai/dsh-user-approval' + src/index.ts:126 inject 'approval' + src/index.ts:710 overrideOf
dsh-permission-presets
按预设写穿 approval 策略
package.json:64 peerDep + src/index.ts:29-30 import setApprovalPolicy/APPROVAL_POLICIES; src/index.ts:272 ctx.approval.setPolicy、:399 setApprovalPolicy
dsh-plugin-manager
对提权的管理动作要求用户审批
src/tools.ts:6 + src/tools.ts:42 ctx.get('approval')
dsh-subagent
将子代理审批策略固定为 never
src/child-agent.ts:22 (type import) + src/child-agent.ts:254 (ctx.get('approval'))
dsh-tool-bash
把沙箱升级请求路由到用户审批通道
src/index.ts:23 import type {}; src/index.ts:247 ctx.get('approval')
dsh-tool-fs
沙箱升级等敏感操作走用户审批
src/index.ts:10 import
dsh-tool-pwsh
把沙箱升级请求路由到用户审批通道
src/index.ts:33 import type {}; src/index.ts:254 ctx.get('approval')
dsh-tools
可选消费审批服务以处理升级请求
src/index.ts:21 import type + src/index.ts:947,1731 ctx.get('approval')