description: "交互式 UI 的面向用户斜杠命令注册表:插件拥有的命令直接针对 agent(智能体)执行,不产生模型消息;供组合或扩展命令面的用户与维护者阅读。"
English | 中文
dsh-commands 让用户能在交互式 Harness UI 中运行 /command [input] 操作,且不会把命令或结果变成模型消息。命令可以展示输入提示、接受附件,并只针对一个 agent 生效,同时为其他 agent 保留同名的全局命令。每次通过准入的执行都会记录到接收 agent 的会话日志中,UI 则在模型历史之外渲染结算结果。它适合为 dsh CLI(命令行界面)或 Web 客户端提供直接面向用户的控制;无 UI 的演示与 ACP(Agent Client Protocol)自动化不提供此命令面。
当交互式 UI 希望用户用斜杠命令而非模型提示词驱动 agent 侧行为时,组合此服务。无 UI 的演示主干和 ACP 自动化不提供命令适配器,也不需要它。
插件通过 ctx.commands.register() 注册命令,提供小写名称、发现界面中的说明、可选的 input 提示和处理器。可选的品牌类型字段 definitionId 为适配器提供带插件命名空间的稳定定义标识,它独立于显示文案和每次执行的 commandId。有效描述符只携带被选中定义的标识,作用域覆盖不会继承被遮蔽注册项的标识。
ctx.commands.register({
name: 'plan',
description: 'Enter plan mode',
input: { hint: '<message>' },
handler: ({ agent, rawInput }) => {
// Runs directly against the agent; no model message is created.
return { kind: 'success', text: 'plan mode selected' }
},
})
处理器返回 success 或 error,并可附带由适配器渲染的 UI 文本。recordInput 默认为 true;若载荷由命令自己的权威领域事件持有,命令会将 recordInput 设为 false,避免会话日志重复记录该输入。同一作用域内重复注册同名命令会抛出异常。
命令行的第 0 字节必须是斜杠,随后是小写名称(可含字母、数字、_ 或 -),再之后是输入末尾或空白。名称之后的每个字节——包括分隔空白——都是该命令的 rawInput,命令自己拥有其专属语法。不符合命令语法、或名称未知的行会被适配器拒绝,而不是变成模型提示词。
普通注册全局生效。挂载在 agent 自身上下文之下的命令生产插件会声明 commands 注入,并注册精确限定到该 agent 的命令;该定义只对这个 agent 遮蔽同名的全局定义。
命令可以声明 input.attachments 以接受 composer 图片与通用文件。执行器负责强制执行声明:把附件发给未声明的命令、附件存储缺失、会话范围内的文件上传凭证未知或图片批量超出限制,都会在处理器运行前以错误结果结算。图片以 base64 输入通过命令 wire,通用文件则引用后台上传完成后得到的凭证,因此命令提交不会再次读取文件字节。通过准入的 ImageBlock 与 FileBlock 按用户选择顺序组成冻结的 invocation.attachments 数组,其模型可见用途由处理器负责。
交互式适配器调用 execute(agent, line, attachments, signal),传入确切的接收 agent、完整命令行与本次提交的有序附件。它返回已结算的 CommandExecution——规范化结果加生命周期配对 commandId——语法无效或名称未知时返回 undefined。list(agent) 与 find(agent, name) 在应用 agent 作用域遮蔽后用于命令发现。
调用方的中止信号会让注册表停止等待处理器;无视信号的处理器可能在调用方停止等待后继续产生自身的外部副作用。被取消或抛异常的处理器在日志中以 command/done 错误结算。
当包级约定不够用时阅读以下页面。它们从共享命令词汇逐步进入设计证据与相邻表面。
ctx.commands 的 Cordis 接口面。注册表自身不会提交任何内容。已知斜杠命令在 UI 命令平面执行,其 CommandResult 文本不会作为用户消息提交。已交付的适配器会拒绝未知斜杠命令输入,而不是将其变成模型提示词。命令生产方可以显式使用接收命令的 Agent;例如,dsh-plan-mode在选择 plan mode 后,会提交 /plan [message] 中的可选消息与有序附件。执行器只负责把附件准入为持久化对象,是否以及如何成为模型可见消息由声明接受的生产方决定。
命令发现、执行和 UI 输出不会增加模型 token。命令生产方显式安排的 agent 工作与相应 agent 输入具有相同的 token 影响。
注册表元数据、命令输入和直接输出绝不会进入模型请求,也不会影响其缓存。发生变更的领域负责之后产生的所有缓存影响。
这些限制说明注册表不提供什么。它们是当前包约束,不是 UI 积压事项。