开放能力 · OPEN CAPABILITIES 第一卷 · 2026 年秋
码得 · 插件市场 made · plugin market

管控插件的开放能力

插件是「有自主行为能力的增强体」:触发器只决定它何时被唤醒,能做什么取决于下面这张清单。npx made-market init --kind control 会把同一份清单生成进包里(capabilities.json + contracts.d.ts),编辑器直接有类型提示。

npx made-market init my-plugin --kind control

能力从哪来:两条供给线


板侧线 · 固件说了算

事件与命令的清单由固件上报,桥接器只做清单校验。要加新命令(比如关机)必须改固件、刷机。

桥接器线 · 重启即生效

任务存储、助手清单、主题、板侧发送等句柄由桥接器进程露出,插件被唤醒后通过 bridge 对象取用。

板侧事件(events 登记)


只有被已激活插件登记过的事件,板子才会上报。cadence 均为 edge(边沿触发)。

事件含义
boot.click按键短按(语音意图)
boot.double双击(确认)
boot.triple三击(取消)
boot.long长按(回主页)

板侧命令(commands 登记)


在 onEvent 里返回 {commands} 或调 context.send 入队;send 在事件返回后仍有效,可以做「先记下、稍后发」的异步行为。命令名必须同时在板侧清单和插件自己的 commands 里。

命令作用
caption.show屏幕字幕,fields.text 为正文
audio.play播放音频,可附带 WAV:16-bit PCM、单声道、8k–48kHz、≤256KB
theme.apply应用主题插件
volume.set设置音量
agent.select切换当前助手
session.create / session.select / session.delete会话管理:新建 / 切换 / 删除
voice.start主动点亮录音
task.confirm / task.cancel审批待确认任务:批准 / 取消

任务生命周期与回合管道


onJob 会在任务经过以下状态时收到通知(插件自建的任务不广播 created,防自激):

created → confirmed → started → progress* → completed
                                      ↘ handed_off / failed / cancelled

回合管道是 override 权限最高的接口:按插件注册顺序成链,返回字符串即改写,最后一个说话的算数。

onTurnInput({ instruction, job, agentId, bridge }) {
  if (agentId !== 'target_agent') return;          // 只加工目标助手
  return instruction + '\\n\\n(附加约束:回答保持两行以内)';
},
onTurnOutput({ result, job, agentId }) {
  if (agentId !== 'target_agent') return;
  return result + '\\n—— 由我的插件加工';
}
边界:钩子超时 1500ms 或抛错时沿用上一环的值,绝不阻断任务本身;onTurnInput 改写的是执行副本,存储里的任务原文保持不变;桥接器会记录每次改写,便于排查「这条回复为什么长这样」。

bridge 句柄(自主行为)


事件、钩子、通知的上下文里都拿得到 context.bridge。全部句柄与签名:

句柄作用
agents() / agent(id)助手清单与可用性(probe 结果)
jobs() / job(id)任务清单与详情
sessions(agentId?)会话清单,可按助手过滤
createTask({instruction, agentId?, projectId?, title?})自动建会话并落一个待确认任务,返回 {job, session};限流 10 次/分钟
submitTurn({instruction, sessionId})向既有会话追加一轮
confirmJob(id) / cancelJob(id)批准(立即执行)/ 取消任务
themes()已安装主题清单
devices() / pending(deviceId)在线设备 / 待取命令队列
send(deviceId, command, audio?)向指定设备入队板侧命令(须在板侧清单内)

「让某个助手干活」的完整链路:createTask 落待确认 → confirmJob 放行 → onJob 收到 completed 时做后续(播报、上报、再派任务)。

onEvent({ event, bridge }) {
  if (event.name !== 'boot.double') return;
  const { job } = bridge.createTask({ instruction: '总结当前项目最近一次提交' });
  bridge.confirmJob(job.id);
}

脚手架 SDK


init 生成的管控包自带两个能力文件,随包发布、装到用户桥接器后依然在:

文件作用
capabilities.json机器可读的能力清单:事件、命令、生命周期、句柄、限流——脚本与文档都消费它
contracts.d.tsTypeScript 类型契约:onEvent / onJob / onTurnInput / onTurnOutput / Bridge 的完整签名,编辑器自动提示

清单按 apiVersion 演进:加能力是往清单里添一行;改既有能力的语义才升版本。插件只能选清单里的点,不能自己造点。