English | 中文
skill(技能)引用 source 的浏览器端:把 / 触发的 skill source 注册进 ctx.slash。普通会话的候选来自 skill.list RPC,以每次调用的 ClientSessionContext 投影中的 {sessionId} 寻址,host 从会话 header 解析 cwd。宿主返回模型可调用与用户可调用 skill 的交集,因为该浏览器路径插入的是模型引用,而不是直接加载正文。由目录寻址的可继续 subagent 在客户端解析为没有 skill 候选,因为现有 skill RPC 要求会话已挂载;查看其持久化历史不得激活它。目录按普通会话缓存,拉取走 single-flight;scope 创建时的 warm 钩子预热该会话的缓存项,connection/reset 清空全部缓存。结果按 startsWith(query) 过滤;pick 一个候选会把字面文本 /name 经 slash 流水线落进草稿(决策 21 的纯文本引用),source 的 codec 拥有该引用的两种投影:clipboardText → /name,serialize → 提交时生成的模型形式 <skill>name</skill>。RPC 使用插件注册时捕获的根上下文连接——source 绝不从每次调用的参数上读取服务。source 不实现 matchSpace/matchEnter 钩子——skill 引用永不进入命令裁决,随普通提示词落入 default sink。
skill.list 失败时 candidates 抛出异常,slash 壳层记录日志并折叠为静默的菜单组丢弃——菜单只显示 pending/ready 状态。
/client 导出表层只有插件主体(apply/inject);source 对象是注册 effect 的内部实现。
被 pick 的候选会把字面文本 /name 落进草稿(决策 21:纯文本,无 <skill> 标签);该文本原样进入普通用户消息(session.prompt)到达模型,没有专用内容块、提示词 section 或 host 侧展开。与实际 skill 的关联在模型侧建立且具有非确定性:会话前缀已携带 skill 目录(由 dsh-tool-skill 渲染),引用名称与目录条目匹配,正是这一点引导模型去加载它。
有条件且极小:只有 pick(或手动键入相同文本)会把引用的字符加进那一条用户消息。浏览菜单和拉取候选不会增加任何模型 token。
仅追加:引用是追加在可复用历史前缀之后的新用户消息的一部分。该包绝不改写较早的请求 token。
context/skill-reference 引导包,或全文注入)记录在设计台账中;协议中的文本形态不会改变。