runtime-queue 是 snowflake-labs/cocoplus 提供的 V2 原生请求队列契约(V2-native request queue contract),用于处理钩子无法内联完成的工作。它定义了一套以 JSONL 文件为载体的持久交接机制,供 skill 所属的后台操作使用。
用途
钩子需要保持快速、确定性、副作用受限。当钩子观察到某项工作属于某个功能技能时,它不应自行完成,而是向队列追加一个请求信封后返回;由拥有该工作的技能稍后认领(claim)、执行并结案(settle)。队列文件为 .cocoplus/v2-runtime-requests.jsonl。
请求信封
队列中每一行是一个 JSON 对象。必填字段:
- skill:拥有该工作的技能契约,例如 cocometer/meter-reconcile
- requested_at:钩子写入时的 ISO 时间戳
- source:写入该请求的钩子或技能
- idempotency_key:针对该语义工作项的确定性键
推荐字段:
- operation:技能特定的动作
- session_id、run_id、stage_id 或 subagent_id(可用时)
- input、input_data 或明确的路径字段
- out 或 output_path(技能写入产物时)
- priority:inline-followup、background 或 maintenance
还规定不得包含原始密钥、完整对话记录或大型负载,应优先使用路径和稳定标识符。
认领协议
执行请求前,须先向 .cocoplus/v2-runtime-claims.jsonl 写入认领记录,包含 idempotency_key、skill、claim_token(会话或进程令牌)、claimed_at(ISO 时间戳)和 state(值为 claimed)。若同一 idempotency_key 已存在 completed 结案记录,则不得再次执行该请求;若存在未结案的过期认领,后续工作进程可通过为旧 claim_token 写入 state 为 superseded 的新认领来取代它。
结案状态
每个被认领的请求都必须在 .cocoplus/v2-runtime-settlements.jsonl 中以 claimed、completed、failed 或 superseded 之一结案。结案字段包括:idempotency_key、skill、claim_token、state、settled_at,以及产生产物时的 artifact 或 output_path,失败时的 error。状态词表为 claimed|completed|failed|superseded。
执行规则
- 直接执行所属技能契约
- 不执行 JavaScript 辅助脚本
- 不将追加队列视为完成
- 不删除队列行,改为追加结案记录
- 不静默跳过失败请求,须以简练原因记录 failed
- 处理队列请求时不得削弱当前运行策略
退出条件
- 每个已处理请求都有稳定的 idempotency_key
- 每次执行在开展功能工作前都写入认领
- 每个认领都以 completed、failed 或 superseded 结案
- 重放的队列行不会产生重复产物或重复指标
- 不调用任何非控制台运行时脚本
文档还列出了若干「反合理化」条目,例如:不能因为文件存在就认为技能完成(技能契约须描述可观察行为与验证方式,而不只是命令名);不能因为命令小就跳过产物与安全检查(小命令同样会改变状态或引导执行,须保留相同关卡)。
适用场景与限制
该技能面向需要将钩子中的工作异步移交给功能技能、且要求幂等与可追溯后台执行的场景。其约束明确:不执行 JavaScript 辅助脚本,不删除队列行,不静默跳过失败。文档未提供具体安装命令、平台支持范围、收费或价格信息,这些内容暂未提供。