@coda-console/plugin-check 0.5.4 → 0.5.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -93,6 +93,9 @@ OpenCode 遇到模型服务的 429,会照 `Retry-After` 等(OpenCode 2 每
93
93
  Coda 自己对服务故障只等一分钟以内,所以主请求或它仍在等待的前台子会话要等超过一分钟才重试时,入口先 `session/cancel` 停下这一轮(前台子 Agent 随之停下),
94
94
  再把这一轮答成失败,原因是服务给的原文加上 OpenCode 要等多久;停下后 OpenCode 回的是什么都不转出。一分钟以内的等待照旧由 OpenCode 自己处理。
95
95
  不在入口里按厂商的错误文字判断额度耗尽。
96
+ 明确的 `[ttft_admission_refused] the cell is at capacity` 容量拒绝在停下原生轮次后报告为 `service_unavailable`,
97
+ 带 `input: accepted` 与 OpenCode 实际安排的剩余等待 `retryAfterMs`;Coda 按该等待决定是否重试,长等待以已知失败结束。
98
+ 保留服务原文(其中建议的短等待也原样保留),不把它当成 OpenCode 的实际重试时间,不把普通 429 或认证失败归为容量拒绝。
96
99
 
97
100
  OpenCode 的原生子会话经 ACP 的 `opencode/child-session-updates` 能力接入(入口 `agent/children.mjs`,核对 OpenCode 2.1.4):
98
101
  `opencode/session/child_update` 的创建与运行状态登记成 `_coda/wait`,带原生 `childSessionId`;子会话的回复、思考与工具调用各归自己的过程,
@@ -191,7 +194,8 @@ Claude 的设置「缓存过期前压缩」(`claude.idleCompaction`,默认
191
194
  - **Agent 报什么**:每轮结束时,入口在 `usage_update` 的 `_meta.coda` 里带上主线程缓存的情况,Coda 原样作为会话事实 `usage`:
192
195
  `lastRequestAt`(最后一次请求模型的时刻,缓存最后被用到;压缩那一轮不算)、`contextTokens`(那次请求带的上下文 token 数)、
193
196
  `cacheTtl`(`PT1H` 或 `PT5M`,从回复写缓存的明细看出)、`compactedAt`(最近一次压缩,Claude Code 自动的、`/compact` 的、Coda 请的都算)。
194
- `usage_update` 的 `used` 是这一轮所有请求加起来的,不是上下文大小。
197
+ `usage_update` 的 `used` 同样取主线程最近一次请求的上下文量(含缓存读取与写入),压缩后取摘要留下的 token 数;
198
+ 不累加一轮中的多次请求,也不包含子 Agent 的上下文。尚无上下文量时不显示窗口用量;`cost` 保留 SDK 报的累计费用估算。
195
199
  - **压缩那一轮**:入口在 `initialize` 的 `agentCapabilities._meta.coda` 里声明 `compact: {}`,收到 `_coda/session/compact`(`{ sessionId }`,
196
200
  两轮之间也可以发)就往 SDK 的输入送一条 `/compact`。这一轮不归 Coda 的哪个 `session/prompt`,也不登记活动;Coda 只看到 `compaction_update`,
197
201
  命令输出不转成回复。期间 Coda 发来的一轮排在它后面照常回复,插话回 `promptRequired`。压完回答 `{ compacted: true, before, after }`(前后的
@@ -128,8 +128,8 @@
128
128
  {
129
129
  "id": "github",
130
130
  "displayName": "GitHub",
131
- "description": "在 Coda 里登录 GitHub 账号,可以登录多个。Coda 启动的会话、流程步骤与插件安装访问 GitHub 时,按仓库的 owner 自动试出能推送的账号并记下,之后这个 owner 的仓库都用它;账号按面板上的顺序试,可以上移下移;会话里的 gh 与提交署名也跟着这个账号;gh 的只读命令遇到网络类失败会自动重试。添加项目、安装插件时可以从这些账号的仓库里挑。",
132
- "version": "1.6.0",
131
+ "description": "在 Coda 里登录 GitHub 账号,可以登录多个。Coda 启动的会话、流程步骤与插件安装访问 GitHub 时,按仓库的 owner 自动试出能推送的账号并记下,之后这个 owner 的仓库都用它;账号按面板上的顺序试,可以上移下移;会话里的 gh 与提交署名也跟着这个账号;gh 的只读命令遇到网络类失败会自动重试。会话里的 git 也经它交给真正的 git,Git 自己已知、重跑即好的故障(几个工作树同时创建时读到别的还没写好的 commondir)自动重跑;会话推送它开的 PR 的分支时,PR 观察立即去看,PR 已合并或关闭就当场提醒这次推送进不了目标分支。添加项目、安装插件时可以从这些账号的仓库里挑。",
132
+ "version": "1.8.0",
133
133
  "category": "模型与账号",
134
134
  "source": {
135
135
  "kind": "builtin"
@@ -155,6 +155,10 @@
155
155
  "name": "gh",
156
156
  "command": "exec \"$CODA_NODE\" \"$CODA_PLUGIN_PATH/scripts/gh.mjs\""
157
157
  },
158
+ {
159
+ "name": "git",
160
+ "command": ". \"$CODA_PLUGIN_PATH/scripts/git.sh\""
161
+ },
158
162
  {
159
163
  "name": "github-reported-pr",
160
164
  "command": "exec \"$CODA_NODE\" \"$CODA_PLUGIN_PATH/scripts/reported-pr.mjs\""
@@ -165,6 +169,10 @@
165
169
  "name": "github.pull_request_reported",
166
170
  "starts": true
167
171
  },
172
+ {
173
+ "name": "git.pushed",
174
+ "starts": true
175
+ },
168
176
  {
169
177
  "name": "pull_request.opened",
170
178
  "starts": true
@@ -620,14 +628,14 @@
620
628
  "id": "claude",
621
629
  "displayName": "Claude",
622
630
  "description": "Claude SDK Agent:Coda 基于 Claude Agent SDK 写的 ACP 入口,一个进程一个 SDK 会话;资源页的「Claude」面板显示会话报告的额度,可从 Coda 登录。",
623
- "version": "1.7.1",
631
+ "version": "1.7.2",
624
632
  "category": "Agent",
625
633
  "source": {
626
634
  "kind": "builtin",
627
635
  "package": "@coda-console/claude",
628
636
  "tag": "latest",
629
- "version": "1.7.1",
630
- "integrity": "sha512-9qMohzOjOa9b/axGqLmJIMpGqeyBN3cTymzjGI2Q9w0nImRah+/t5sPdTy9k/w2xLY3d7nSnXYJ26A55Bz/m3A==",
637
+ "version": "1.7.2",
638
+ "integrity": "sha512-Ux5uWnF1sBwOIUTIXfeZwbRWbJz9ZVKaxPL0Q2QMD7C5uPDzDU1KQjR6fJPKwmIw9kR5YFSz3cq7GuL3DEo4kg==",
631
639
  "repo": "https://github.com/coda-console/coda-plugins.git",
632
640
  "path": "plugins/claude"
633
641
  },
@@ -709,15 +717,15 @@
709
717
  {
710
718
  "id": "codex",
711
719
  "displayName": "Codex",
712
- "description": "Codex Agent:Coda 自带的入口运行 codex-acp,报告子 Agent 与后台命令。额度与登录由账号来源插件接管;未接入账号来源时使用 Codex 自己的登录面板。",
713
- "version": "1.8.4",
720
+ "description": "Codex Agent:Coda 自带的入口运行 codex-acp,报告子 Agent、后台命令与命令的自动审核。额度与登录由账号来源插件接管;未接入账号来源时使用 Codex 自己的登录面板。",
721
+ "version": "1.8.5",
714
722
  "category": "Agent",
715
723
  "source": {
716
724
  "kind": "builtin",
717
725
  "package": "@coda-console/codex",
718
726
  "tag": "latest",
719
- "version": "1.8.4",
720
- "integrity": "sha512-5I25uyfwVaAjkOKV7iD5bzFnVGwD0dykFmz12k0sumgICaVKdvkimTK2bZQBAuKwUt8E44F8qSonRRIlIKVK5A==",
727
+ "version": "1.8.5",
728
+ "integrity": "sha512-5XPcuzapKiTI/jf8V7JADLTgr2nimB1untf961lhujLlMHPevrMO+u5qIgZPeadLNl7IAo6Gez1GARcpAzfmcw==",
721
729
  "repo": "https://github.com/coda-console/coda-plugins.git",
722
730
  "path": "plugins/codex"
723
731
  },
@@ -1012,14 +1020,14 @@
1012
1020
  "id": "opencode",
1013
1021
  "displayName": "OpenCode",
1014
1022
  "description": "OpenCode Agent:接入原生子会话的状态、过程与停止,跟踪后台命令,并送入会话指令。",
1015
- "version": "2.2.0",
1023
+ "version": "2.2.1",
1016
1024
  "category": "Agent",
1017
1025
  "source": {
1018
1026
  "kind": "builtin",
1019
1027
  "package": "@coda-console/opencode",
1020
1028
  "tag": "latest",
1021
- "version": "2.2.0",
1022
- "integrity": "sha512-mjssWkJr+Pg6bCI9f5JfG3zGrNfE9ecyLZhmz4z3Ij0FHZ7p/4UJ36ps+e18xC8WZDQXkwzOle4xYaxfFPoCAA==",
1029
+ "version": "2.2.1",
1030
+ "integrity": "sha512-Nh8hHSI3mBC43spD6410oCxAfSmjj/OWF1AXEhibCQIxswISHgXt0b39OpY1wHZPENZ9UmFSjmmAJpmdujNuEg==",
1023
1031
  "repo": "https://github.com/coda-console/coda-plugins.git",
1024
1032
  "path": "plugins/opencode"
1025
1033
  },
@@ -1085,15 +1093,15 @@
1085
1093
  {
1086
1094
  "id": "review",
1087
1095
  "displayName": "PR 生命流程",
1088
- "description": "会话开的 PR 从开出来起一条流程:每个新版本先跑项目声明的检查,再请另一家 Agent 评审,要求修改时交给开 PR 的会话处理、有分歧时交给你仲裁;通过后请你批准合并,跑过项目的合并前检查再合并,合并后按你的选择调用项目的部署、发布流程,PR 合并或关闭时结束。",
1089
- "version": "2.6.0",
1096
+ "description": "会话开的 PR 从开出来起一条流程:每个新版本先跑项目声明的检查,再请另一家 Agent 评审,要求修改时交给开 PR 的会话处理、有分歧时交给你仲裁;通过后请你批准合并,跑过项目的合并前检查再合并,合并后按你的选择删除远程分支、调用项目的部署和发布流程,PR 合并或关闭时结束。",
1097
+ "version": "2.7.0",
1090
1098
  "category": "工作流程",
1091
1099
  "source": {
1092
1100
  "kind": "builtin",
1093
1101
  "package": "@coda-console/review",
1094
1102
  "tag": "latest",
1095
- "version": "2.6.0",
1096
- "integrity": "sha512-OEMg2O/4wJ3hoG/S4cbgXL3Fsmopb4hF6xwDeJbDOR5hWXQ406okHO7uxSOCJCbqp5E8vPTrwmrwvz8CN7qRWw==",
1103
+ "version": "2.7.0",
1104
+ "integrity": "sha512-RI8F5KkWgoKnvCv7Xwk7C0CwXe2AG8WcHOKOSY1oBFwe2qxXhJbgPqroc7IJkjXYhbnW23cmokt9ThP8pPD8gA==",
1097
1105
  "repo": "https://github.com/coda-console/coda-plugins.git",
1098
1106
  "path": "plugins/review"
1099
1107
  },
@@ -0,0 +1,39 @@
1
+ // The interfaces a model service may speak (docs/plugins.md「模型服务」): a closed table. A plugin providing a service names
2
+ // one of these (`api`), and so does one choosing services by what it speaks (`modelApis`). Each is a kind of resource of its
3
+ // own (model-services.mjs): a service speaking OpenAI's is nothing like one speaking Anthropic's, whoever provides them. The
4
+ // node delivers a service with its key where its interface carries it (model-services.mjs), Coda lists its models as a
5
+ // client of it would (model-check.mjs), and what an agent is told of calling one is its kind's definition, from here
6
+ // (coda-resources explain). A new interface is a row here: the node would not know where its key goes otherwise.
7
+ // Each: what it is called and where it is defined; how its clients send a key (`key`) and what else (`also`); how the node
8
+ // hands a key on to the service (`delivered`); how it is called and an example, templates of `{base}` (the service's
9
+ // address), `{v1}` (that with `/v1` once: Anthropic's clients take the API's root and add `/v1` themselves, and a service
10
+ // whose address is its versioned base has it already) and `{model}`.
11
+ export const MODEL_PROTOCOLS = {
12
+ 'openai-completions': {
13
+ title: 'OpenAI Chat', spec: 'https://platform.openai.com/docs/api-reference/chat',
14
+ description: '讲 OpenAI Chat Completions 接口的服务',
15
+ key: key => ({ Authorization: `Bearer ${key}` }), also: {},
16
+ delivered: key => ({ authorization: `Bearer ${key}` }),
17
+ call: 'POST {base}/chat/completions,body 带 model 与 messages',
18
+ example: `curl -s {base}/chat/completions -H 'Authorization: Bearer coda' -H 'Content-Type: application/json' \\\n -d '{"model": "{model}", "messages": [{"role": "user", "content": "你好"}]}'`,
19
+ },
20
+ 'openai-responses': {
21
+ title: 'OpenAI Responses', spec: 'https://platform.openai.com/docs/api-reference/responses',
22
+ description: '讲 OpenAI Responses 接口的服务',
23
+ key: key => ({ Authorization: `Bearer ${key}` }), also: {},
24
+ delivered: key => ({ authorization: `Bearer ${key}` }),
25
+ call: 'POST {base}/responses,body 带 model 与 input',
26
+ example: `curl -s {base}/responses -H 'Authorization: Bearer coda' -H 'Content-Type: application/json' \\\n -d '{"model": "{model}", "input": "你好"}'`,
27
+ },
28
+ 'anthropic-messages': {
29
+ title: 'Anthropic', spec: 'https://docs.anthropic.com/en/api/messages',
30
+ description: '讲 Anthropic Messages 接口的服务',
31
+ key: key => ({ 'x-api-key': key }), also: { 'anthropic-version': '2023-06-01' },
32
+ // Some of its clients send the key as a bearer token: the node sends it both ways.
33
+ delivered: key => ({ 'x-api-key': key, authorization: `Bearer ${key}` }),
34
+ call: 'POST {v1}/messages,body 带 model、max_tokens 与 messages;带请求头 anthropic-version',
35
+ example: `curl -s {v1}/messages -H 'x-api-key: coda' -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \\\n -d '{"model": "{model}", "max_tokens": 256, "messages": [{"role": "user", "content": "你好"}]}'`,
36
+ },
37
+ };
38
+ export const MODEL_APIS = Object.keys(MODEL_PROTOCOLS);
39
+ export const isModelApi = api => typeof api === 'string' && Object.hasOwn(MODEL_PROTOCOLS, api);
@@ -23,6 +23,7 @@ import { fileURLToPath } from 'node:url';
23
23
  import { settings as agentSettings } from '../session-config/commands.mjs';
24
24
  import { requireCondition as check, ContractError } from '../../domain/errors.mjs';
25
25
  import { isDuration } from '../../domain/duration.mjs';
26
+ import { MODEL_APIS, isModelApi } from './model-protocols.mjs';
26
27
  import { AGENT_ID } from '../../domain/values.mjs';
27
28
  import { agentDeclarations } from './agent-plugins.mjs';
28
29
  import { checkCatalog, dependencyDeclarations, extensionDeclarations, extensionPointDeclarations, extensionsFor, offerDeclarations } from './plugin-extensions.mjs';
@@ -59,7 +60,7 @@ export const MODEL_PROVIDER = /^[a-z][a-z0-9-]{0,39}\/[a-z][a-z0-9-]{0,39}$/;
59
60
  // How many model services a setting of several may name.
60
61
  const MODEL_PROVIDERS_AT_MOST = 20;
61
62
  // A command's name, as a shell finds it on the PATH; Coda's own come first and are no plugin's.
62
- const COMMAND = /^[a-z][a-z0-9-]{0,39}$/, CODA_COMMANDS = ['coda-run', 'coda-event'];
63
+ const COMMAND = /^[a-z][a-z0-9-]{0,39}$/, CODA_COMMANDS = ['coda-run', 'coda-event', 'coda-resources'];
63
64
  // Where in the clients a view may stay (docs/plugins.md「视图」): beside a session.
64
65
  export const VIEW_PLACES = ['side', 'page'];
65
66
  // What a view's entry in the clients can show (docs/plugins.md「视图」): a count the clients keep themselves, not one the
@@ -125,7 +126,7 @@ function schema(value, where, level = 'setting') {
125
126
  check(Object.keys(items).every(k => ['type', 'format', 'modelApis'].includes(k)) && items.type === 'string', 'invalid_plugin',
126
127
  `${where}:多个模型服务写 items: { type: string, format: coda-model-provider, modelApis }`);
127
128
  check(items.modelApis === undefined || (Array.isArray(items.modelApis) && items.modelApis.length >= 1 && items.modelApis.length <= 10
128
- && items.modelApis.every(api => typeof api === 'string' && COMMAND.test(api))), 'invalid_plugin', `${where}.items.modelApis 须为 1–10 个接口名,如 anthropic-messages`);
129
+ && items.modelApis.every(isModelApi)), 'invalid_plugin', `${where}.items.modelApis 须为 1–10 个接口名,取 ${MODEL_APIS.join('、')}`);
129
130
  out.format = 'coda-model-provider';
130
131
  if (items.modelApis) out.modelApis = [...new Set(items.modelApis)];
131
132
  } else if (value.type === 'array') {
@@ -411,7 +412,7 @@ function modelProviderDeclarations(raw, declared) {
411
412
  `${where} 须为 { id, title, api, url, key? }`);
412
413
  check(typeof p.id === 'string' && COMMAND.test(p.id), 'invalid_plugin', `${where} 的 id 只用小写字母、数字和「-」,以字母开头`);
413
414
  check(typeof p.title === 'string' && p.title.trim() && [...p.title].length <= 40 && !/[\0\r\n]/.test(p.title), 'invalid_plugin', `${where} 的 title 须为不超过 40 字的一行`);
414
- check(typeof p.api === 'string' && COMMAND.test(p.api), 'invalid_plugin', `${where} 的 api 只用小写字母、数字和「-」,如 openai-completions`);
415
+ check(isModelApi(p.api), 'invalid_plugin', `${where} 的 api 须为 Coda 认得的接口:${MODEL_APIS.join('、')}`);
415
416
  check(typeof p.url === 'string' && p.url && p.url.length <= 4096 && !/[\0\r\n]/.test(p.url), 'invalid_plugin', `${where} 的 url 须为一行地址`);
416
417
  for (const [, place] of p.url.matchAll(PLACE)) {
417
418
  const setting = /^config:(.+)$/.exec(place)?.[1];
@@ -99,19 +99,20 @@ export function firstMessage(value) {
99
99
  }, attachments(value.attachments));
100
100
  }
101
101
 
102
- // Agent tool calls. The calling agent never chooses the child's approval mode: the child follows its parent's
103
- // (see `delegateMode`), so a manually approved session cannot start an unattended one. `turn` is a ticket checked inside the commit transaction and
102
+ // Agent tool calls. The calling agent may ask for the child's approval mode (as an agent reference gives it) but never one
103
+ // more unattended than its parent's hands on (see `delegateMode`), so a manually approved session cannot start an
104
+ // unattended one. `turn` is a ticket checked inside the commit transaction and
104
105
  // is not part of request equality: a replay may arrive after the turn has ended.
105
106
  export function childSpawn(value) {
106
107
  object(value, 'spawn');
107
- keys(value, ['turn', 'requestId', 'agent', 'prompt', 'title', 'model', 'effort', 'checkout', 'project']);
108
+ keys(value, ['turn', 'requestId', 'agent', 'prompt', 'title', 'model', 'effort', 'mode', 'options', 'checkout', 'project']);
108
109
  check([undefined, 'shared', 'worktree'].includes(value.checkout), 'invalid_input', 'checkout 必须是 shared 或 worktree');
109
110
  check(typeof value.agent === 'string' && AGENT_ID.test(value.agent), 'invalid_input', 'agent 须为 Agent 的 ID(agents 工具列出的)');
110
111
  const prompt = text(value.prompt, 'prompt', 100_000);
111
112
  return { turn: text(value.turn, 'turn', 100), requestId: text(value.requestId, 'requestId', 100), agent: value.agent, prompt,
112
113
  title: text(value.title ?? prompt.trim().slice(0, 80), 'title'), checkout: value.checkout ?? 'shared',
113
114
  ...(value.project === undefined ? {} : { project: text(value.project, 'project', 200) }),
114
- settings: settings(Object.fromEntries(['model', 'effort'].filter(k => value[k] !== undefined).map(k => [k, value[k]]))) };
115
+ settings: settings(Object.fromEntries(['model', 'effort', 'mode', 'options'].filter(k => value[k] !== undefined).map(k => [k, value[k]]))) };
115
116
  }
116
117
 
117
118
 
@@ -1,5 +1,5 @@
1
1
  {
2
- "commit": "2c629f95c2691fa0f98a1f20e72d3ce5037e75e2",
2
+ "commit": "93e1f9059276267bbf0aa4cd2979a98e199b6547",
3
3
  "packages": {
4
4
  "@0dep/piso": "5.2.0",
5
5
  "@agentclientprotocol/sdk": "1.4.0",
@@ -7,12 +7,13 @@
7
7
  },
8
8
  "files": {
9
9
  "check/coda/components/plugins/agent-plugins.mjs": "23016dd0f7350a10f71565a2c44e2c1179299a93e8c859529071099f2ce862d1",
10
+ "check/coda/components/plugins/model-protocols.mjs": "762244c01266cf61384377bdfbb84bef5ab157b1783f9254ddc1ae3d576a73c5",
10
11
  "check/coda/components/plugins/plugin-extensions.mjs": "e527800a109ec9849975357f841b0c05ecfa50c9d9c34e26d828aef3cb7d3cb3",
11
- "check/coda/components/plugins/plugin-rules.mjs": "ec7e0dc818dadc973480f34c911c148b3ee30df99aa566d0f7202bbe3c9bf844",
12
+ "check/coda/components/plugins/plugin-rules.mjs": "78d9431c1b4f6354457f153bb74a0fd085c771eaadd9f7523633915cb700f4f9",
12
13
  "check/coda/components/plugins/plugin-source-rules.mjs": "d620ee62fb372e31e5389e27f7202308aab74324b6f5552ffef3844afc7d0001",
13
14
  "check/coda/components/plugins/skill-document.mjs": "c5b5e815c42cd836572f7b60e22a46af6ac607fd9df0170fa36f955825636ce6",
14
15
  "check/coda/components/prompt-recovery/prompt-recovery.mjs": "f43f21d24c19a58113d3304f9248225b12080ab00ed15eab74bf7b94642732de",
15
- "check/coda/components/session-config/commands.mjs": "d980a585dbe13f10c49b3b2a7869ac65933feadfc82d7f86dd6decebbf1b6afa",
16
+ "check/coda/components/session-config/commands.mjs": "96247da877e455f835e0ee41622e531936e2600e911c2e9a4638fda00e987ec3",
16
17
  "check/coda/components/workflows/executor-labels.mjs": "dceca6ae60c0a4f3c3cc72a6c84f1489831790774c93caab96e4ddb493bc89e1",
17
18
  "check/coda/domain/agent-protocol.mjs": "7337cf0af97a9592bbcad98a0e4f3837d8bb4d48b53c22846a8c56a0c88a4630",
18
19
  "check/coda/domain/duration.mjs": "15dd64ef9b02342ad521c66e5968a569432a89dc7568d11afd3e6f3fe37e104b",
@@ -23,7 +24,7 @@
23
24
  "check/coda/resources/plugins/resources/panels/panels.mjs": "aee040febb37fd6eebaf1a1da5b3299d2b6a9dfc982e649d9a628291af298179",
24
25
  "check/coda/resources/plugins/resources/panels/rules.mjs": "c024c5ede7c1516877128aa6d6796fbe5fd0e14642741b0745481bb1c5ca41d3",
25
26
  "check/coda/resources/plugins/resources/panels/sign-in.mjs": "1271a24e33b1b882a1fb9bee03b8e240db8b9bee1b5208f0e1c84499cfb1be7e",
26
- "check/coda/builtin.json": "2b19c654aec9652470cacdaf1b4a9f128d1e34aa76974e8643e29c462fdfb8cf",
27
+ "check/coda/builtin.json": "0e04c5a9bb82db5573d865791df6fe9e52295be470b1bcdf0add719d2d2c0b85",
27
28
  "docs/agent-protocol.md": "2a40fac029e93bc512d0405105c9d74fa3e5a59e92788b6951dba182775875c1"
28
29
  }
29
30
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coda-console/plugin-check",
3
- "version": "0.5.4",
3
+ "version": "0.5.6",
4
4
  "description": "Coda 插件的契约检查:扮演 Coda 读清单、启动 Agent 讲 ACP 与 _coda/wait、读面板。",
5
5
  "license": "MIT",
6
6
  "repository": {