@coda-console/plugin-check 0.4.9 → 0.5.1

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.
@@ -0,0 +1,1273 @@
1
+ [
2
+ {
3
+ "id": "approve-command",
4
+ "displayName": "批准执行",
5
+ "description": "Agent 自己跑不了、或要你明确点头(例如改生产环境)的命令,在会话里出一张卡片,写着理由、目录和完整命令;你点「执行」后由 Coda 在本机执行,结果交回 Agent。",
6
+ "version": "1.0.0",
7
+ "category": "工作流程",
8
+ "source": {
9
+ "kind": "builtin"
10
+ },
11
+ "dir": "src/resources/plugins/approve-command",
12
+ "title": "批准执行",
13
+ "properties": {},
14
+ "workflows": [],
15
+ "capabilities": [
16
+ "approve-command"
17
+ ],
18
+ "services": [],
19
+ "groups": [],
20
+ "commands": [],
21
+ "gitCredentials": [],
22
+ "endpoints": [],
23
+ "views": [],
24
+ "agents": [],
25
+ "dependencies": [],
26
+ "extensionPoints": {},
27
+ "extensions": [],
28
+ "instructions": "权限受阻时,先走原生权限升级或审批(如 Codex 的 require_escalated)。原生机制不可用、仍受权限阻拦或需用户明确授权时,才调用 workflow_run,workflow 为 approve-command,inputs 给 command、cwd(绝对路径)、reason(一行)。用户批准后由 Coda 执行,结果随调用或稍后送达;用户明确拒绝后不换方式重试。"
29
+ },
30
+ {
31
+ "id": "changes",
32
+ "displayName": "变更",
33
+ "description": "会话旁的「变更」页:新建工作树的会话从起点到现在改了哪些文件、每个文件改了什么(Mac 会话侧栏、iPhone 会话菜单);Mac 输入框上方写着改了几个文件、多少行,点开就是这一页。",
34
+ "version": "1.0.0",
35
+ "category": "工作流程",
36
+ "source": {
37
+ "kind": "builtin"
38
+ },
39
+ "dir": "src/resources/plugins/changes",
40
+ "title": "变更",
41
+ "properties": {},
42
+ "main": "main.mjs",
43
+ "workflows": [],
44
+ "capabilities": [],
45
+ "services": [],
46
+ "groups": [],
47
+ "commands": [],
48
+ "gitCredentials": [],
49
+ "endpoints": [],
50
+ "views": [
51
+ {
52
+ "id": "changes",
53
+ "title": "变更",
54
+ "entry": "view/index.html",
55
+ "in": [
56
+ "side"
57
+ ],
58
+ "icon": "plus.forwardslash.minus",
59
+ "readout": "changes",
60
+ "checkout": "worktree"
61
+ }
62
+ ],
63
+ "agents": [],
64
+ "dependencies": [],
65
+ "extensionPoints": {},
66
+ "extensions": []
67
+ },
68
+ {
69
+ "id": "cliproxy",
70
+ "displayName": "CLIProxy",
71
+ "description": "在资源页显示这台机器上 CLIProxy 里 Antigravity 登录的额度;填了地址和 Key 时,把 CLIProxy 作为模型服务提供给 Pi 等插件选用。",
72
+ "version": "1.2.0",
73
+ "category": "模型与账号",
74
+ "source": {
75
+ "kind": "builtin"
76
+ },
77
+ "dir": "src/resources/plugins/cliproxy",
78
+ "title": "CLIProxy",
79
+ "properties": {
80
+ "cliproxy.url": {
81
+ "type": "string",
82
+ "format": "coda-model-url",
83
+ "description": "CLIProxy 的 OpenAI 兼容地址,如本机的 http://127.0.0.1:8317/v1;留空就不作为模型服务提供",
84
+ "title": "地址",
85
+ "order": 1,
86
+ "modelKey": "cliproxy.key"
87
+ },
88
+ "cliproxy.key": {
89
+ "type": "string",
90
+ "description": "CLIProxy 配置里 api-keys 中的一个",
91
+ "title": "Key",
92
+ "order": 2,
93
+ "writeOnly": true
94
+ }
95
+ },
96
+ "workflows": [],
97
+ "capabilities": [],
98
+ "services": [],
99
+ "groups": [],
100
+ "commands": [],
101
+ "gitCredentials": [],
102
+ "endpoints": [],
103
+ "views": [],
104
+ "offers": {
105
+ "panels": [
106
+ {
107
+ "id": "antigravity",
108
+ "title": "Antigravity · CLIProxy",
109
+ "command": "node \"$CODA_PLUGIN_PATH/scripts/antigravity.mjs\"",
110
+ "maxAge": "PT5M"
111
+ }
112
+ ]
113
+ },
114
+ "agents": [],
115
+ "dependencies": [],
116
+ "extensionPoints": {},
117
+ "extensions": [],
118
+ "modelProviders": [
119
+ {
120
+ "id": "cliproxy",
121
+ "title": "CLIProxy",
122
+ "api": "openai-completions",
123
+ "url": "${config:cliproxy.url}",
124
+ "key": "cliproxy.key"
125
+ }
126
+ ]
127
+ },
128
+ {
129
+ "id": "github",
130
+ "displayName": "GitHub",
131
+ "description": "在 Coda 里登录 GitHub 账号,可以登录多个。Coda 启动的会话、流程步骤与插件安装访问 GitHub 时,按仓库的 owner 自动试出能推送的账号并记下,之后这个 owner 的仓库都用它;账号按面板上的顺序试,可以上移下移;会话里的 gh 与提交署名也跟着这个账号;gh 的只读命令遇到网络类失败会自动重试。添加项目、安装插件时可以从这些账号的仓库里挑。",
132
+ "version": "1.6.0",
133
+ "category": "模型与账号",
134
+ "source": {
135
+ "kind": "builtin"
136
+ },
137
+ "dir": "src/resources/plugins/github",
138
+ "title": "GitHub",
139
+ "properties": {
140
+ "github.pullRequestPoll": {
141
+ "type": "string",
142
+ "format": "duration",
143
+ "description": "PR 观察多久看一次 PR(ISO 8601 时长)。",
144
+ "default": "PT1M"
145
+ }
146
+ },
147
+ "workflows": [
148
+ "pull-request-watch"
149
+ ],
150
+ "capabilities": [],
151
+ "services": [],
152
+ "groups": [],
153
+ "commands": [
154
+ {
155
+ "name": "gh",
156
+ "command": "exec \"$CODA_NODE\" \"$CODA_PLUGIN_PATH/scripts/gh.mjs\""
157
+ },
158
+ {
159
+ "name": "github-reported-pr",
160
+ "command": "exec \"$CODA_NODE\" \"$CODA_PLUGIN_PATH/scripts/reported-pr.mjs\""
161
+ }
162
+ ],
163
+ "events": [
164
+ {
165
+ "name": "github.pull_request_reported",
166
+ "starts": true
167
+ },
168
+ {
169
+ "name": "pull_request.opened",
170
+ "starts": true
171
+ },
172
+ {
173
+ "name": "pull_request.synchronize",
174
+ "starts": true
175
+ },
176
+ {
177
+ "name": "pull_request.ready_for_review",
178
+ "starts": false
179
+ },
180
+ {
181
+ "name": "pull_request.converted_to_draft",
182
+ "starts": false
183
+ },
184
+ {
185
+ "name": "pull_request.edited",
186
+ "starts": false
187
+ },
188
+ {
189
+ "name": "pull_request.closed",
190
+ "starts": false,
191
+ "ends": true
192
+ }
193
+ ],
194
+ "gitCredentials": [
195
+ {
196
+ "url": "https://github.com",
197
+ "command": "exec \"$CODA_NODE\" \"$CODA_PLUGIN_PATH/scripts/credential.mjs\""
198
+ }
199
+ ],
200
+ "endpoints": [],
201
+ "views": [],
202
+ "offers": {
203
+ "panels": [
204
+ {
205
+ "id": "accounts",
206
+ "title": "GitHub 账号",
207
+ "command": "node \"$CODA_PLUGIN_PATH/scripts/panel.mjs\"",
208
+ "maxAge": "PT1M",
209
+ "actions": {
210
+ "remove": {
211
+ "command": "node \"$CODA_PLUGIN_PATH/scripts/action.mjs\" remove",
212
+ "confirm": "移除这个账号的登录?\n它负责的 owner 之后会重新试出用哪个账号。"
213
+ },
214
+ "assign": {
215
+ "command": "node \"$CODA_PLUGIN_PATH/scripts/action.mjs\" assign"
216
+ },
217
+ "forget": {
218
+ "command": "node \"$CODA_PLUGIN_PATH/scripts/action.mjs\" forget"
219
+ },
220
+ "move": {
221
+ "command": "node \"$CODA_PLUGIN_PATH/scripts/action.mjs\" move"
222
+ }
223
+ },
224
+ "signIn": {
225
+ "command": "exec node \"$CODA_PLUGIN_PATH/scripts/login.mjs\"",
226
+ "installed": "command -v gh",
227
+ "note": "可以登录多个账号:再登录一个即添加,登录已有账号会更新它的凭据。Coda 按仓库的 owner 自动选用能推送的那个。"
228
+ }
229
+ }
230
+ ]
231
+ },
232
+ "agents": [],
233
+ "dependencies": [],
234
+ "extensionPoints": {},
235
+ "extensions": [],
236
+ "instructions": "GitHub 仓库用 HTTPS 地址(https://github.com/<owner>/<repo>.git),不要改成 SSH 别名。用哪个账号、提交署什么名,由 Coda 按仓库的 owner 决定:不要自己设 user.name、user.email 或 GH_CONFIG_DIR。",
237
+ "environment": [
238
+ {
239
+ "name": "GIT_CONFIG_PARAMETERS",
240
+ "value": "'include.path=${CODA_PLUGIN_STATE}/git/config'"
241
+ }
242
+ ],
243
+ "repositories": {
244
+ "command": "exec \"$CODA_NODE\" \"$CODA_PLUGIN_PATH/scripts/repositories.mjs\""
245
+ }
246
+ },
247
+ {
248
+ "id": "guide",
249
+ "displayName": "Coda 使用指南",
250
+ "description": "给会话里的 Agent 一份 Coda 使用指南(Skill `coda`):你问 Coda 怎么用、某个界面或状态是什么意思时,Agent 按它回答。",
251
+ "version": "1.0.0",
252
+ "category": "工作流程",
253
+ "source": {
254
+ "kind": "builtin"
255
+ },
256
+ "dir": "src/resources/plugins/guide",
257
+ "title": "Coda 使用指南",
258
+ "properties": {},
259
+ "workflows": [],
260
+ "capabilities": [],
261
+ "services": [],
262
+ "groups": [],
263
+ "commands": [],
264
+ "gitCredentials": [],
265
+ "endpoints": [],
266
+ "views": [],
267
+ "agents": [],
268
+ "dependencies": [],
269
+ "extensionPoints": {},
270
+ "extensions": [],
271
+ "skills": [
272
+ {
273
+ "name": "coda",
274
+ "path": "src/resources/plugins/guide/skills/coda",
275
+ "description": "Coda 的使用指南:Coda 是什么、连接、项目、会话、卡片、流程、插件、空间各是什么、怎么配合。用户问 Coda 怎么用、某个界面、菜单、状态或标记是什么意思时,先读这里再回答。"
276
+ }
277
+ ]
278
+ },
279
+ {
280
+ "id": "maintenance",
281
+ "displayName": "维护",
282
+ "description": "按周期为每个项目做维护:把旧的工具详情移到冷文件,清掉空闲工作树的构建产物,以及已归档会话的密钥与命令输出;整台机器清一次没人引用的旧附件。",
283
+ "version": "1.0.0",
284
+ "category": "工作流程",
285
+ "source": {
286
+ "kind": "builtin"
287
+ },
288
+ "dir": "src/resources/plugins/maintenance",
289
+ "title": "维护",
290
+ "properties": {
291
+ "maintenance.schedule": {
292
+ "type": "string",
293
+ "description": "ISO 8601 重复间隔。R/PT6H 是每 6 小时一次,从 Coda 第一次登记这个周期起算;R/2026-01-01T03:00:00+08:00/P1D 是每天 3 点。最短 5 分钟。",
294
+ "title": "维护周期",
295
+ "order": 1,
296
+ "default": "R/PT6H"
297
+ },
298
+ "maintenance.coldAfterAny": {
299
+ "type": "string",
300
+ "format": "duration",
301
+ "description": "已结束的工具调用多久没有变化,就把详情移出数据库、存进冷文件;会话里打开这一步时照常读回。ISO 8601 时长,如 P30D。",
302
+ "title": "工具详情多久后转冷",
303
+ "order": 2,
304
+ "default": "P30D"
305
+ },
306
+ "maintenance.coldAfterArchived": {
307
+ "type": "string",
308
+ "format": "duration",
309
+ "description": "会话(或它的根会话)已归档时,工具详情多久没有变化就转冷。ISO 8601 时长,如 P7D。",
310
+ "title": "已归档会话的工具详情多久后转冷",
311
+ "order": 3,
312
+ "default": "P7D"
313
+ },
314
+ "maintenance.buildIdle": {
315
+ "type": "string",
316
+ "format": "duration",
317
+ "description": "未归档会话的工作树多久没有动静(输入、请求、轮次),就删掉其中的构建产物(.build、node_modules、DerivedData),下次构建重新生成;源码、分支和其他被忽略的文件都保留。ISO 8601 时长,如 PT6H。",
318
+ "title": "工作树空闲多久清构建产物",
319
+ "order": 4,
320
+ "default": "PT6H"
321
+ },
322
+ "maintenance.uploadsAfter": {
323
+ "type": "string",
324
+ "format": "duration",
325
+ "description": "上传后既没有发送、也没有留在草稿里的附件,过了这么久就删掉;已发送消息里的附件与消息同寿命。附件不属于任何项目,由流程 clean-uploads 按维护周期整台机器清一次。ISO 8601 时长,如 P1D。",
326
+ "title": "没人引用的附件多久后清掉",
327
+ "order": 5,
328
+ "default": "P1D"
329
+ },
330
+ "maintenance.archivedGrace": {
331
+ "type": "string",
332
+ "format": "duration",
333
+ "description": "会话(随它的根会话)归档满这么久,就删掉它的密钥文件、人机验证截图和批准执行命令的输出;期间取消归档就保留。实际删除发生在这之后的下一次维护。ISO 8601 时长,如 PT10M。",
334
+ "title": "归档后多久删掉会话的密钥与命令输出",
335
+ "order": 6,
336
+ "default": "PT10M"
337
+ }
338
+ },
339
+ "workflows": [
340
+ "clean-uploads",
341
+ "maintenance"
342
+ ],
343
+ "capabilities": [],
344
+ "services": [],
345
+ "groups": [],
346
+ "commands": [],
347
+ "gitCredentials": [],
348
+ "endpoints": [],
349
+ "views": [],
350
+ "agents": [],
351
+ "dependencies": [],
352
+ "extensionPoints": {},
353
+ "extensions": []
354
+ },
355
+ {
356
+ "id": "resources",
357
+ "displayName": "资源",
358
+ "description": "资源页:这台电脑(看一组电脑时是每一台)上已安装插件的面板,如账号与额度,按插件排列;可以隐藏、从 Coda 登录、选择显示的指标。",
359
+ "version": "1.1.0",
360
+ "category": "机器与资源",
361
+ "source": {
362
+ "kind": "builtin"
363
+ },
364
+ "dir": "src/resources/plugins/resources",
365
+ "title": "资源",
366
+ "properties": {},
367
+ "main": "main.mjs",
368
+ "workflows": [],
369
+ "capabilities": [],
370
+ "services": [],
371
+ "groups": [],
372
+ "commands": [],
373
+ "gitCredentials": [],
374
+ "endpoints": [],
375
+ "views": [
376
+ {
377
+ "id": "panels",
378
+ "title": "资源",
379
+ "entry": "view/index.html",
380
+ "in": [
381
+ "page"
382
+ ],
383
+ "icon": "square.stack.3d.up",
384
+ "readout": "machines"
385
+ }
386
+ ],
387
+ "agents": [],
388
+ "dependencies": [],
389
+ "extensionPoints": {
390
+ "panels": {
391
+ "description": "资源页上的面板:插件在 contributes.panels 里声明,由资源插件读取、执行动作与登录",
392
+ "contributes": "panels",
393
+ "title": "面板",
394
+ "commands": {
395
+ "command": "读取",
396
+ "actions.*.command": "动作",
397
+ "signIn.command": "登录",
398
+ "signIn.installed": "安装检查",
399
+ "signIn.install": "安装"
400
+ }
401
+ }
402
+ },
403
+ "extensions": []
404
+ },
405
+ {
406
+ "id": "secrets",
407
+ "displayName": "密钥",
408
+ "description": "用卡片填写凭据,Agent 只拿到密文路径或句柄;Coda 代填指定网站。Mac 系统身份验证密码只在后端内存中供本会话复用,归档或重启后清除。",
409
+ "version": "1.0.0",
410
+ "category": "工作流程",
411
+ "source": {
412
+ "kind": "builtin"
413
+ },
414
+ "dir": "src/resources/plugins/secrets",
415
+ "title": "密钥",
416
+ "properties": {},
417
+ "workflows": [],
418
+ "capabilities": [
419
+ "secret-fill",
420
+ "secret-request"
421
+ ],
422
+ "services": [],
423
+ "groups": [],
424
+ "commands": [],
425
+ "gitCredentials": [],
426
+ "endpoints": [],
427
+ "views": [],
428
+ "agents": [],
429
+ "dependencies": [],
430
+ "extensionPoints": {},
431
+ "extensions": [],
432
+ "instructions": "凭据用 workflow_run 调 secret-request(name、purpose、fields JSON、网页加 host),勿贴对话或读密文。网页用 secret-fill(path、field);Mac 验证用 secret-fill(target=system、purpose),密码在本会话内存复用。submitted 后核对原操作;管理员、钥匙串、Touch ID 由本人处理。"
433
+ },
434
+ {
435
+ "id": "session",
436
+ "displayName": "会话生命周期",
437
+ "description": "所有会话共用:存续期间管理空闲进程和任务转交,归档宽限后收尾,按设置回收托管工作树。停用后不自动执行这些政策。",
438
+ "version": "1.0.0",
439
+ "category": "工作流程",
440
+ "source": {
441
+ "kind": "builtin"
442
+ },
443
+ "dir": "src/resources/plugins/session",
444
+ "title": "会话生命周期",
445
+ "properties": {
446
+ "session.reclaimWorktree": {
447
+ "type": "boolean",
448
+ "description": "归档收尾时回收 Coda 托管的工作树,包含未提交与未跟踪文件;分支保留提交。关掉则保留工作树,生命周期照常结束。",
449
+ "title": "归档后收回工作树",
450
+ "order": 1,
451
+ "default": true
452
+ },
453
+ "session.archiveGrace": {
454
+ "type": "string",
455
+ "format": "duration",
456
+ "description": "所有会话从归档起算,期间取消归档就回到会话存续;收尾暂未完成时也按此间隔重试。",
457
+ "title": "归档后多久收尾",
458
+ "order": 2,
459
+ "default": "PT10M"
460
+ },
461
+ "session.idleProcess": {
462
+ "type": "string",
463
+ "format": "duration",
464
+ "description": "会话空闲或只在等外部结果时,从进程最后一次干活算起;归档收尾使用归档宽限期。",
465
+ "title": "会话静止多久停掉进程",
466
+ "order": 5,
467
+ "default": "PT1H"
468
+ },
469
+ "session.handToUser": {
470
+ "type": "boolean",
471
+ "description": "流程交给会话 Agent 的任务,Agent 停下没答复、也没有别的东西会叫醒它时,转成你的卡片;关掉就一直留在 Agent 那里,等它下次被叫醒。",
472
+ "title": "Agent 停下没答复的任务转给你",
473
+ "order": 8,
474
+ "default": true
475
+ },
476
+ "session.handToUserAfter": {
477
+ "type": "string",
478
+ "format": "duration",
479
+ "description": "从 Agent 最后一次干活算起。期间它刚做完的事让流程撤掉了任务(如推送新提交),就不转;进程已停就立即转。",
480
+ "title": "Agent 停下多久后转给你",
481
+ "order": 9,
482
+ "default": "PT2M"
483
+ }
484
+ },
485
+ "workflows": [
486
+ "session"
487
+ ],
488
+ "capabilities": [],
489
+ "services": [],
490
+ "groups": [],
491
+ "commands": [],
492
+ "gitCredentials": [],
493
+ "endpoints": [],
494
+ "views": [],
495
+ "agents": [],
496
+ "dependencies": [],
497
+ "extensionPoints": {},
498
+ "extensions": []
499
+ },
500
+ {
501
+ "id": "space",
502
+ "displayName": "空间",
503
+ "description": "把几台电脑组成一个空间:在一处看各台的项目与会话,把任务派到另一台上,在一处对各台的插件一起改。安装或卸载后,这台电脑的后端会重启一下。",
504
+ "version": "1.1.0",
505
+ "category": "机器与资源",
506
+ "source": {
507
+ "kind": "builtin"
508
+ },
509
+ "dir": "src/resources/plugins/space",
510
+ "title": "空间",
511
+ "properties": {},
512
+ "workflows": [],
513
+ "capabilities": [],
514
+ "services": [
515
+ "space"
516
+ ],
517
+ "groups": [],
518
+ "commands": [],
519
+ "gitCredentials": [],
520
+ "endpoints": [],
521
+ "views": [],
522
+ "agents": [],
523
+ "dependencies": [
524
+ "tailnet"
525
+ ],
526
+ "extensionPoints": {},
527
+ "extensions": []
528
+ },
529
+ {
530
+ "id": "tailnet",
531
+ "displayName": "网络",
532
+ "description": "这台电脑在 tailnet 里的节点:空间的机器经它互相访问;也给插件中继(coda-relay)。由空间插件带来,安装或卸载后,这台电脑的后端会重启一下。",
533
+ "version": "1.2.0",
534
+ "category": "机器与资源",
535
+ "source": {
536
+ "kind": "builtin"
537
+ },
538
+ "dir": "src/resources/plugins/tailnet",
539
+ "title": "网络",
540
+ "properties": {},
541
+ "workflows": [],
542
+ "capabilities": [],
543
+ "services": [
544
+ "tailnet"
545
+ ],
546
+ "groups": [],
547
+ "commands": [
548
+ {
549
+ "name": "coda-relay",
550
+ "command": "\"$CODA_NODE\" \"$CODA_PLUGIN_PATH/scripts/relay.mjs\""
551
+ }
552
+ ],
553
+ "gitCredentials": [],
554
+ "endpoints": [],
555
+ "views": [],
556
+ "agents": [],
557
+ "dependencies": [],
558
+ "extensionPoints": {
559
+ "ports": {
560
+ "description": "要发布到 tailnet 上、或到达别的节点的端口:命令按插件自己的设置打印 { publish: [{ name, port }], reach: [{ name, port, machine }] }"
561
+ }
562
+ },
563
+ "extensions": []
564
+ },
565
+ {
566
+ "id": "workflows",
567
+ "displayName": "工作流",
568
+ "description": "工作流的页面:会话的流程模板与相关运行(会话侧栏、iPhone 会话菜单),所有机器的流程运行(一页),运行的进度与流程图、每个节点的执行记录与步骤输出。打开运行的卡片与链接也由它接管。",
569
+ "version": "1.0.0",
570
+ "category": "工作流程",
571
+ "source": {
572
+ "kind": "builtin"
573
+ },
574
+ "dir": "src/resources/plugins/workflows",
575
+ "title": "工作流",
576
+ "properties": {},
577
+ "main": "main.mjs",
578
+ "workflows": [],
579
+ "capabilities": [],
580
+ "services": [],
581
+ "groups": [],
582
+ "commands": [],
583
+ "gitCredentials": [],
584
+ "endpoints": [],
585
+ "views": [
586
+ {
587
+ "id": "session",
588
+ "title": "工作流",
589
+ "entry": "view/index.html",
590
+ "in": [
591
+ "side"
592
+ ],
593
+ "icon": "point.3.connected.trianglepath.dotted",
594
+ "handles": [
595
+ "workflow-runs"
596
+ ]
597
+ },
598
+ {
599
+ "id": "runs",
600
+ "title": "流程运行",
601
+ "entry": "view/runs.html",
602
+ "in": [
603
+ "page"
604
+ ],
605
+ "icon": "point.3.connected.trianglepath.dotted",
606
+ "readout": "workflow-runs"
607
+ },
608
+ {
609
+ "id": "graph",
610
+ "title": "流程图",
611
+ "entry": "view/graph.html"
612
+ }
613
+ ],
614
+ "agents": [],
615
+ "dependencies": [],
616
+ "extensionPoints": {},
617
+ "extensions": []
618
+ },
619
+ {
620
+ "id": "claude",
621
+ "displayName": "Claude",
622
+ "description": "Claude SDK Agent:Coda 基于 Claude Agent SDK 写的 ACP 入口,一个进程一个 SDK 会话;资源页的「Claude」面板显示会话报告的额度,可从 Coda 登录。",
623
+ "version": "1.7.0",
624
+ "category": "Agent",
625
+ "source": {
626
+ "kind": "builtin",
627
+ "package": "@coda-console/claude",
628
+ "tag": "latest",
629
+ "version": "1.7.0",
630
+ "integrity": "sha512-Tgxgv1nLRiPDlGuCII1QpFqZQS/K+Sov7fX+01owIL3Q9cB4M0Ny9Kd5fnmdKyz1dJRwgGEz8WYpBbDjxIBsBg==",
631
+ "repo": "https://github.com/coda-console/coda-plugins.git",
632
+ "path": "plugins/claude"
633
+ },
634
+ "dir": "node_modules/@coda-console/claude",
635
+ "title": "Claude",
636
+ "properties": {
637
+ "claude.modelProviders": {
638
+ "type": "array",
639
+ "description": "勾选插件提供的模型服务(如 Magpie),每个服务各成一组,它列出的模型和 Claude 自己的模型一起出现在会话的模型里;选中哪个服务的模型,那个会话就走那个服务,Claude 自己的模型照旧。只列 Anthropic 接口(anthropic-messages)的服务。",
640
+ "title": "模型服务",
641
+ "order": 1,
642
+ "format": "coda-model-provider",
643
+ "modelApis": [
644
+ "anthropic-messages"
645
+ ]
646
+ },
647
+ "claude.idleCompaction": {
648
+ "type": "boolean",
649
+ "description": "会话停下后还要接着用时(在 Coda 里置顶了,或还在等你、等流程或子会话、等后台命令、子 Agent 与定时唤醒),在一小时的提示词缓存过期前(最后一次请求模型 54 分钟后)压缩一次上下文,同 /compact:回来接着做时只需重新缓存摘要,不必按原价重新缓存整段对话。由插件的生命周期流程「Claude 缓存过期前压缩」按会话计时与判断:只压一小时的缓存、上下文超过 15 万 token 的,最近一件事已经是压缩就不再压;每次做了什么、为什么没做都记在那条流程的运行里。",
650
+ "title": "缓存过期前压缩",
651
+ "order": 2,
652
+ "default": false
653
+ }
654
+ },
655
+ "workflows": [
656
+ "claude-compaction"
657
+ ],
658
+ "capabilities": [],
659
+ "services": [],
660
+ "groups": [],
661
+ "commands": [],
662
+ "gitCredentials": [],
663
+ "endpoints": [],
664
+ "views": [],
665
+ "offers": {
666
+ "panels": [
667
+ {
668
+ "id": "limits",
669
+ "title": "Claude",
670
+ "command": "node \"$CODA_PLUGIN_PATH/scripts/panel.mjs\"",
671
+ "signIn": {
672
+ "command": "exec node \"$CODA_PLUGIN_PATH/scripts/login.mjs\"",
673
+ "installed": "node \"$CODA_PLUGIN_PATH/scripts/login.mjs\" --installed",
674
+ "input": "authorizationCode",
675
+ "note": "登录保存在这台机器上,供 Claude SDK 使用;额度在会话运行后出现。这台机器若已配置 OAuth token、API key 或云服务商,会话仍优先用那些配置。"
676
+ }
677
+ }
678
+ ]
679
+ },
680
+ "agents": [
681
+ {
682
+ "id": "claude-sdk",
683
+ "displayName": "Claude SDK",
684
+ "icon": {
685
+ "light": "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",
686
+ "template": false
687
+ },
688
+ "command": "exec \"$CODA_NODE\" \"$CODA_PLUGIN_PATH/agent/entry.mjs\"",
689
+ "modes": {
690
+ "title": "审批模式",
691
+ "unset": "人工审批",
692
+ "auto": "auto",
693
+ "full": "bypassPermissions"
694
+ },
695
+ "skillsDir": ".claude/skills",
696
+ "configFiles": [
697
+ "${CLAUDE_CONFIG_DIR:-~/.claude}/settings.json",
698
+ ".claude/settings.json",
699
+ ".claude/settings.local.json"
700
+ ],
701
+ "setupHint": "请在运行机配置 Claude SDK 认证;若指定了 token 文件,请检查路径和权限。"
702
+ }
703
+ ],
704
+ "dependencies": [],
705
+ "extensionPoints": {},
706
+ "extensions": [],
707
+ "defaultInstalled": true
708
+ },
709
+ {
710
+ "id": "codex",
711
+ "displayName": "Codex",
712
+ "description": "Codex Agent:Coda 自带的入口运行 codex-acp,报告子 Agent 与后台命令。额度与登录由账号来源插件接管;未接入账号来源时使用 Codex 自己的登录面板。",
713
+ "version": "1.8.3",
714
+ "category": "Agent",
715
+ "source": {
716
+ "kind": "builtin",
717
+ "package": "@coda-console/codex",
718
+ "tag": "latest",
719
+ "version": "1.8.3",
720
+ "integrity": "sha512-1F9SFvF3pCnyLeIbSGnvKcrh9DP+84zfHyo5LmOfYcUIASmR6xyDpPEnpj/R4/tBulGSABWu4mHDDKDyxCjNkw==",
721
+ "repo": "https://github.com/coda-console/coda-plugins.git",
722
+ "path": "plugins/codex"
723
+ },
724
+ "dir": "node_modules/@coda-console/codex",
725
+ "title": "Codex",
726
+ "properties": {
727
+ "codex.modelProviders": {
728
+ "type": "array",
729
+ "description": "勾选插件提供的模型服务(如 Magpie),每个服务各成一组,它列出的模型和 Codex 自己的模型一起出现在会话的模型里;选中哪个服务的模型,那个会话就走那个服务,Codex 自己的模型照旧。只列 OpenAI Responses 接口(openai-responses)的服务:Codex 不再支持 Chat Completions。",
730
+ "title": "模型服务",
731
+ "order": 1,
732
+ "format": "coda-model-provider",
733
+ "modelApis": [
734
+ "openai-responses"
735
+ ]
736
+ }
737
+ },
738
+ "workflows": [],
739
+ "capabilities": [],
740
+ "services": [],
741
+ "groups": [],
742
+ "commands": [],
743
+ "gitCredentials": [],
744
+ "endpoints": [],
745
+ "views": [],
746
+ "offers": {
747
+ "panels": [
748
+ {
749
+ "id": "login",
750
+ "title": "Codex",
751
+ "command": "node \"$CODA_PLUGIN_PATH/scripts/panel.mjs\"",
752
+ "maxAge": "PT0S",
753
+ "actions": {
754
+ "reset": {
755
+ "command": "node \"$CODA_PLUGIN_PATH/scripts/reset.mjs\"",
756
+ "confirm": "使用一次完全重置?\n用最早到期的那一次。成功后消耗 1 次,无法撤销。"
757
+ }
758
+ },
759
+ "signIn": {
760
+ "command": "NO_COLOR=1 exec node \"$CODA_PLUGIN_PATH/scripts/cli.mjs\" login --device-auth",
761
+ "note": "接入账号插件后,登录会添加或更新插件管理的账号。"
762
+ }
763
+ }
764
+ ]
765
+ },
766
+ "agents": [
767
+ {
768
+ "id": "codex",
769
+ "displayName": "Codex",
770
+ "icon": {
771
+ "light": "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",
772
+ "template": true
773
+ },
774
+ "command": "exec \"$CODA_NODE\" \"$CODA_PLUGIN_PATH/agent/entry.mjs\"",
775
+ "modes": {
776
+ "title": "审批模式",
777
+ "unset": "人工审批",
778
+ "auto": "agent",
779
+ "full": "agent-full-access"
780
+ },
781
+ "skillsDir": ".agents/skills",
782
+ "configFiles": [
783
+ "${CODEX_HOME:-~/.codex}/config.toml",
784
+ ".codex/config.toml"
785
+ ],
786
+ "setupHint": "请在运行机为后端所属账号完成 Codex 认证。"
787
+ }
788
+ ],
789
+ "dependencies": [],
790
+ "extensionPoints": {
791
+ "account-source": {
792
+ "description": "Codex 的账号与登录入口:来源给出当前账号和令牌,响应 --login,并提供账号与额度面板;接入后 Codex 自带的额度面板隐藏。"
793
+ }
794
+ },
795
+ "extensions": [],
796
+ "defaultInstalled": true
797
+ },
798
+ {
799
+ "id": "codex-accounts",
800
+ "displayName": "Codex 多账号",
801
+ "description": "在 Coda 内管理 Codex 账号:自动纳入已有登录,添加与移除账号、自动续期、查看额度和使用完全重置;接管 Codex 额度面板,所选账号在会话开始和两轮之间生效。",
802
+ "version": "2.1.3",
803
+ "category": "模型与账号",
804
+ "source": {
805
+ "kind": "builtin",
806
+ "package": "@coda-console/codex-accounts",
807
+ "tag": "latest",
808
+ "version": "2.1.3",
809
+ "integrity": "sha512-5CECC/Lb+LNjHha039Q/caqv9OSlLb7HdEuTCXbNfhTICybMzwP66QqVhjb1U5HNBb6cIdXEZxzgWG0DZWmgyg==",
810
+ "repo": "https://github.com/coda-console/coda-plugins.git",
811
+ "path": "plugins/codex-accounts"
812
+ },
813
+ "dir": "node_modules/@coda-console/codex-accounts",
814
+ "title": "Codex 多账号",
815
+ "properties": {},
816
+ "workflows": [],
817
+ "capabilities": [],
818
+ "services": [],
819
+ "groups": [],
820
+ "commands": [],
821
+ "gitCredentials": [],
822
+ "endpoints": [],
823
+ "views": [],
824
+ "offers": {
825
+ "panels": [
826
+ {
827
+ "id": "accounts",
828
+ "title": "Codex 多账号",
829
+ "command": "node \"$CODA_PLUGIN_PATH/scripts/panel.mjs\"",
830
+ "maxAge": "PT5M",
831
+ "actions": {
832
+ "select": {
833
+ "command": "node \"$CODA_PLUGIN_PATH/scripts/select.mjs\""
834
+ },
835
+ "reset": {
836
+ "command": "node \"$CODA_PLUGIN_PATH/scripts/reset.mjs\"",
837
+ "confirm": "使用一次完全重置?\n用最早到期的那一次。成功后消耗 1 次,无法撤销。"
838
+ },
839
+ "remove": {
840
+ "command": "node \"$CODA_PLUGIN_PATH/scripts/remove.mjs\"",
841
+ "confirm": "移除此账号在插件中保存的登录?之后需要重新登录才能再次使用。"
842
+ }
843
+ },
844
+ "signIn": {
845
+ "command": "NO_COLOR=1 exec node \"$CODA_PLUGIN_PATH/scripts/login.mjs\"",
846
+ "note": "登录其他账号即可添加;登录已有账号会更新其凭据。首个账号会自动选用,之后可在面板切换。"
847
+ }
848
+ }
849
+ ]
850
+ },
851
+ "agents": [],
852
+ "dependencies": [
853
+ "codex"
854
+ ],
855
+ "extensionPoints": {},
856
+ "extensions": [
857
+ {
858
+ "plugin": "codex",
859
+ "point": "account-source",
860
+ "command": "exec node \"$CODA_PLUGIN_PATH/scripts/source.mjs\""
861
+ }
862
+ ],
863
+ "defaultInstalled": false
864
+ },
865
+ {
866
+ "id": "grok",
867
+ "displayName": "Grok",
868
+ "description": "Grok Agent:适配运行机上 Grok CLI 的 ACP 与审批模式;资源页的「Grok」面板显示账号与额度,可从 Coda 安装和登录。",
869
+ "version": "1.3.2",
870
+ "category": "Agent",
871
+ "source": {
872
+ "kind": "builtin",
873
+ "package": "@coda-console/grok",
874
+ "tag": "latest",
875
+ "version": "1.3.2",
876
+ "integrity": "sha512-/W3ko6pf/NpDvxJyizz7D1GfOuX+CvvllKdl0RnmC+KrKpytbgCqNJHsd+3UkUbAgiiNIj1fBCA1H4wHsXGt7w==",
877
+ "repo": "https://github.com/coda-console/coda-plugins.git",
878
+ "path": "plugins/grok"
879
+ },
880
+ "dir": "node_modules/@coda-console/grok",
881
+ "title": "Grok",
882
+ "properties": {},
883
+ "workflows": [],
884
+ "capabilities": [],
885
+ "services": [],
886
+ "groups": [],
887
+ "commands": [],
888
+ "gitCredentials": [],
889
+ "endpoints": [],
890
+ "views": [],
891
+ "offers": {
892
+ "panels": [
893
+ {
894
+ "id": "account",
895
+ "title": "Grok",
896
+ "command": "node \"$CODA_PLUGIN_PATH/scripts/panel.mjs\"",
897
+ "maxAge": "PT5M",
898
+ "signIn": {
899
+ "command": "g=\"$HOME/.grok/bin/grok\"; [ -x \"$g\" ] || g=grok; BROWSER=/usr/bin/true NO_COLOR=1 exec \"$g\" login --device-auth",
900
+ "installed": "test -x \"$HOME/.grok/bin/grok\" || command -v grok >/dev/null",
901
+ "install": "SHELL= PATH=\"$HOME/.grok/bin:$PATH\" exec bash -c 'set -o pipefail; curl -fsSL https://x.ai/cli/install.sh | bash'",
902
+ "note": "登录保存在这台机器的 Grok CLI 里,由它自己续期;可以用 X 账号确认。"
903
+ }
904
+ }
905
+ ]
906
+ },
907
+ "agents": [
908
+ {
909
+ "id": "grok",
910
+ "displayName": "Grok",
911
+ "icon": {
912
+ "light": "JVBERi0xLjcKJbXtrvsKNCAwIG9iago8PCAvTGVuZ3RoIDUgMCBSCiAgIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlCj4+CnN0cmVhbQp4nFVTTcoVQQzc9ymyFoxJ57eP4RFkwG/zXKj3Byv9UJCBGZLupCpVGSXB81nx0rPp+bF+Lrm5Xx/05ZvQx+9Vzpqke7Nt+kFqxaedKlg96EXqyqpGtbm3IwyOTirjMkTF0puqUL3oIQ3nszed5D3noezapHpY7KB7cIvi65y1p2AL60EmhE2CTrNnLMQA2EXVnHIu7EGjhyIvgAYSQHhRN1oHKTjsxMEeCFSU8jmJTn7eHLzZfFpo9h1O9+E4mAnDnInF361wHtuoBVL8LYha1Mrig6kpXFKE8RU3tIRDmsw4AxQOwiIQvMUHVaEIbfRDFKaLIED22MIiTjZcLxLkRZkJu/VF+pewOEiMX1ZvwyxpvSjlOqZArw54aNDMR/TNvpN8gxwcPWx1KIEPNigyHQNgdLqSwzDBiNB/ZHfgO0TU5kYRpDvqww8HmNDe8eu/eEJLFigHm1OwEGpYHsH5vvevN10zDK4/l2G1EtLhNdjWRhsTNrVz0IbZVbRAUzg3bh4uJKJAKwhoqdeFrjvCTPLQLqAHJYrRTRmE0Bpu0wIRrVl354oZyEdXWOZ+NRvAmL0dGfA1djipWH60egjCpt9VO3kWXOvEJXDGD4Y9tD2Gjx+p149ZxBd9/7S+rj95P69MCmVuZHN0cmVhbQplbmRvYmoKNSAwIG9iagogICA0ODQKZW5kb2JqCjMgMCBvYmoKPDwKICAgL0V4dEdTdGF0ZSA8PAogICAgICAvYTAgPDwgL0NBIDEgL2NhIDEgPj4KICAgPj4KPj4KZW5kb2JqCjcgMCBvYmoKPDwgL1R5cGUgL09ialN0bQogICAvTGVuZ3RoIDggMCBSCiAgIC9OIDEKICAgL0ZpcnN0IDQKICAgL0ZpbHRlciAvRmxhdGVEZWNvZGUKPj4Kc3RyZWFtCnicM1Mw4IrmiuUCAAY4AV0KZW5kc3RyZWFtCmVuZG9iago4IDAgb2JqCiAgIDE2CmVuZG9iago5IDAgb2JqCjw8IC9UeXBlIC9PYmpTdG0KICAgL0xlbmd0aCAxMiAwIFIKICAgL04gNAogICAvRmlyc3QgMjMKICAgL0ZpbHRlciAvRmxhdGVEZWNvZGUKPj4Kc3RyZWFtCnicVZFBa8MwDIXv/hW6jCUMEtlNtraEHppAGWMQ2t7GDsYxqWHEwXbG+u9nO03HMDro48nvCVFAQhFKJAxoSQmlsHopSFVBfr6OEvKW99ISAMjfVGfhAxggHOEzolpPgwNKdrs40RrdTUIaSARXRgPN6DorILk4N9ptnkfaGz5elLCZNn2azt8YyZ3SQ8OdhKTZMmTPFLFEyhA3T7h+REwXk79Y8OCtw3zLjQw5QrII3mWn+F7/+LjoH92wWEvowXm5heKuPxg9jVBVoQn97BHpgk6eGj7YMXiJ64JfwZlJLl3tVY38VkIeD/sAfebAj9LqyQhpYXX3PPlB4ebo1l/h33o1d/xL97ft/AVuy3nRLxI/bsgKZW5kc3RyZWFtCmVuZG9iagoxMiAwIG9iagogICAyNzcKZW5kb2JqCjEzIDAgb2JqCjw8IC9UeXBlIC9YUmVmCiAgIC9MZW5ndGggNTkKICAgL0ZpbHRlciAvRmxhdGVEZWNvZGUKICAgL1NpemUgMTQKICAgL1cgWzEgMiAyXQogICAvUm9vdCAxMSAwIFIKICAgL0luZm8gMTAgMCBSCj4+CnN0cmVhbQp4nGNgYPj/n4mBk4EBRDAxMoUxMDAy8AMJJgeQGDuINQ9IMCuACFOIOkYQwczIsg8oxnKVgQEA1JwFgQplbmRzdHJlYW0KZW5kb2JqCnN0YXJ0eHJlZgoxMjM3CiUlRU9GCg==",
913
+ "template": true
914
+ },
915
+ "command": "exec \"$CODA_NODE\" \"$CODA_PLUGIN_PATH/agent/entry.mjs\"",
916
+ "modes": {
917
+ "title": "审批模式",
918
+ "unset": "按运行机配置",
919
+ "note": "切换对后续消息生效;新会话未选择时沿用运行机的 Grok 配置。",
920
+ "auto": "auto",
921
+ "full": "always-approve"
922
+ },
923
+ "skillsDir": ".agents/skills",
924
+ "configFiles": [
925
+ "${GROK_HOME:-~/.grok}/config.toml"
926
+ ],
927
+ "setupHint": "请在「资源」里为运行机添加 Grok。"
928
+ }
929
+ ],
930
+ "dependencies": [],
931
+ "extensionPoints": {},
932
+ "extensions": [],
933
+ "setup": {
934
+ "command": "exec \"$CODA_NODE\" \"$CODA_PLUGIN_PATH/scripts/setup.mjs\""
935
+ },
936
+ "defaultInstalled": true
937
+ },
938
+ {
939
+ "id": "kimi",
940
+ "displayName": "Kimi Code",
941
+ "description": "Kimi Code Agent:Coda 的入口在运行机的 kimi acp 与 Coda 之间转发,读 Kimi 的会话文件报出后台命令与子 Agent;资源页的「Kimi」面板显示账号与额度,可从 Coda 安装和登录。",
942
+ "version": "1.2.2",
943
+ "category": "Agent",
944
+ "source": {
945
+ "kind": "builtin",
946
+ "package": "@coda-console/kimi",
947
+ "tag": "latest",
948
+ "version": "1.2.2",
949
+ "integrity": "sha512-9F5T2LP6YY+MzP6QlMNoNAwkfsOsir4RcDcRV5qkTGp0Dr35RlTaETcfCBbC4NwmMxynnAcJu7M1pMPoCi0viA==",
950
+ "repo": "https://github.com/coda-console/coda-plugins.git",
951
+ "path": "plugins/kimi"
952
+ },
953
+ "dir": "node_modules/@coda-console/kimi",
954
+ "title": "Kimi Code",
955
+ "properties": {},
956
+ "workflows": [],
957
+ "capabilities": [],
958
+ "services": [],
959
+ "groups": [],
960
+ "commands": [],
961
+ "gitCredentials": [],
962
+ "endpoints": [],
963
+ "views": [],
964
+ "offers": {
965
+ "panels": [
966
+ {
967
+ "id": "account",
968
+ "title": "Kimi",
969
+ "command": "node \"$CODA_PLUGIN_PATH/scripts/panel.mjs\"",
970
+ "maxAge": "PT5M",
971
+ "signIn": {
972
+ "command": "exec sh \"$CODA_PLUGIN_PATH/scripts/login.sh\"",
973
+ "installed": "test -x \"$HOME/.kimi-code/bin/kimi\" || command -v kimi >/dev/null",
974
+ "install": "exec sh \"$CODA_PLUGIN_PATH/scripts/install.sh\"",
975
+ "note": "登录保存在这台机器的 Kimi CLI 里,由它自己续期。"
976
+ }
977
+ }
978
+ ]
979
+ },
980
+ "agents": [
981
+ {
982
+ "id": "kimi",
983
+ "displayName": "Kimi Code",
984
+ "icon": {
985
+ "light": "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",
986
+ "dark": "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",
987
+ "template": false
988
+ },
989
+ "command": "exec \"$CODA_NODE\" \"$CODA_PLUGIN_PATH/agent/entry.mjs\"",
990
+ "modes": {
991
+ "title": "审批模式",
992
+ "unset": "人工审批",
993
+ "auto": "auto",
994
+ "full": "yolo"
995
+ },
996
+ "skillsDir": ".agents/skills",
997
+ "configFiles": [
998
+ "${KIMI_CODE_HOME:-~/.kimi-code}/config.toml"
999
+ ],
1000
+ "setupHint": "请在「资源」里为运行机添加 Kimi。"
1001
+ }
1002
+ ],
1003
+ "dependencies": [],
1004
+ "extensionPoints": {},
1005
+ "extensions": [],
1006
+ "setup": {
1007
+ "command": "exec \"$CODA_NODE\" \"$CODA_PLUGIN_PATH/scripts/setup.mjs\""
1008
+ },
1009
+ "defaultInstalled": true
1010
+ },
1011
+ {
1012
+ "id": "opencode",
1013
+ "displayName": "OpenCode",
1014
+ "description": "OpenCode Agent:接入原生子会话的状态、过程与停止,跟踪后台命令,并送入会话指令。",
1015
+ "version": "2.2.0",
1016
+ "category": "Agent",
1017
+ "source": {
1018
+ "kind": "builtin",
1019
+ "package": "@coda-console/opencode",
1020
+ "tag": "latest",
1021
+ "version": "2.2.0",
1022
+ "integrity": "sha512-mjssWkJr+Pg6bCI9f5JfG3zGrNfE9ecyLZhmz4z3Ij0FHZ7p/4UJ36ps+e18xC8WZDQXkwzOle4xYaxfFPoCAA==",
1023
+ "repo": "https://github.com/coda-console/coda-plugins.git",
1024
+ "path": "plugins/opencode"
1025
+ },
1026
+ "dir": "node_modules/@coda-console/opencode",
1027
+ "title": "OpenCode",
1028
+ "properties": {
1029
+ "opencode.modelProviders": {
1030
+ "type": "array",
1031
+ "description": "勾选插件提供的模型服务(如 Magpie),每个服务各成一组,它列出的模型和 OpenCode 自己的模型一起出现在会话的模型里;选中哪个服务的模型,那个会话就走那个服务。可选 OpenAI Chat、OpenAI Responses 和 Anthropic 接口的服务。",
1032
+ "title": "模型服务",
1033
+ "order": 1,
1034
+ "format": "coda-model-provider",
1035
+ "modelApis": [
1036
+ "openai-completions",
1037
+ "openai-responses",
1038
+ "anthropic-messages"
1039
+ ]
1040
+ }
1041
+ },
1042
+ "workflows": [],
1043
+ "capabilities": [],
1044
+ "services": [],
1045
+ "groups": [],
1046
+ "commands": [],
1047
+ "gitCredentials": [],
1048
+ "endpoints": [],
1049
+ "views": [],
1050
+ "agents": [
1051
+ {
1052
+ "id": "opencode",
1053
+ "displayName": "OpenCode",
1054
+ "icon": {
1055
+ "light": "JVBERi0xLjcKJbXtrvsKNCAwIG9iago8PCAvTGVuZ3RoIDUgMCBSCiAgIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlCj4+CnN0cmVhbQp4nDNUMABCXUMgYWRkqpCcy1XIVaigX2yukF6soF9hoeCSrxDIFcgFAKn0CNoKZW5kc3RyZWFtCmVuZG9iago1IDAgb2JqCiAgIDQ1CmVuZG9iagozIDAgb2JqCjw8CiAgIC9FeHRHU3RhdGUgPDwKICAgICAgL3M3IDcgMCBSCiAgID4+CiAgIC9YT2JqZWN0IDw8IC94OCA4IDAgUiA+Pgo+PgplbmRvYmoKMTAgMCBvYmoKPDwgL1R5cGUgL1hPYmplY3QKICAgL0xlbmd0aCA0MAogICAvRmlsdGVyIC9GbGF0ZURlY29kZQogICAvU3VidHlwZSAvRm9ybQogICAvQkJveCBbIDAgMCAxODAgMjI1IF0KICAgL0dyb3VwIDw8CiAgICAgIC9UeXBlIC9Hcm91cAogICAgICAvUyAvVHJhbnNwYXJlbmN5CiAgICAgIC9JIHRydWUKICAgICAgL0NTIC9EZXZpY2VSR0IKICAgPj4KICAgL1Jlc291cmNlcwo8PAogICAvRXh0R1N0YXRlIDw8CiAgICAgIC9nczAgPDwgL0JNIC9Ob3JtYWwgL1NNYXNrIC9Ob25lIC9DQSAxLjAgL2NhIDEuMCA+PgogICAgICAvYTAgPDwgL0NBIDEgL2NhIDEgPj4KICAgPj4KICAgL1hPYmplY3QgPDwgL3gxMSAxMSAwIFIgPj4KPj4KPj4Kc3RyZWFtCnicK+Qy0DM3VTAAQRgjOZdLP9FAIb1YQb/C0FDBJZ8rkAsApsoIhQplbmRzdHJlYW0KZW5kb2JqCjggMCBvYmoKPDwgL1R5cGUgL1hPYmplY3QKICAgL0xlbmd0aCAyOAogICAvRmlsdGVyIC9GbGF0ZURlY29kZQogICAvU3VidHlwZSAvRm9ybQogICAvQkJveCBbIDAgMCAxODAgMjI1IF0KICAgL0dyb3VwIDw8CiAgICAgIC9UeXBlIC9Hcm91cAogICAgICAvUyAvVHJhbnNwYXJlbmN5CiAgICAgIC9JIHRydWUKICAgICAgL0NTIC9EZXZpY2VSR0IKICAgPj4KICAgL1Jlc291cmNlcwo8PAogICAv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",
1056
+ "dark": "JVBERi0xLjcKJbXtrvsKNCAwIG9iago8PCAvTGVuZ3RoIDUgMCBSCiAgIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlCj4+CnN0cmVhbQp4nDNUMABCXUMgYWRkqpCcy1XIVaigX2yukF6soF9hoeCSrxDIFcgFAKn0CNoKZW5kc3RyZWFtCmVuZG9iago1IDAgb2JqCiAgIDQ1CmVuZG9iagozIDAgb2JqCjw8CiAgIC9FeHRHU3RhdGUgPDwKICAgICAgL3M3IDcgMCBSCiAgID4+CiAgIC9YT2JqZWN0IDw8IC94OCA4IDAgUiA+Pgo+PgplbmRvYmoKMTAgMCBvYmoKPDwgL1R5cGUgL1hPYmplY3QKICAgL0xlbmd0aCA0MAogICAvRmlsdGVyIC9GbGF0ZURlY29kZQogICAvU3VidHlwZSAvRm9ybQogICAvQkJveCBbIDAgMCAxODAgMjI1IF0KICAgL0dyb3VwIDw8CiAgICAgIC9UeXBlIC9Hcm91cAogICAgICAvUyAvVHJhbnNwYXJlbmN5CiAgICAgIC9JIHRydWUKICAgICAgL0NTIC9EZXZpY2VSR0IKICAgPj4KICAgL1Jlc291cmNlcwo8PAogICAvRXh0R1N0YXRlIDw8CiAgICAgIC9nczAgPDwgL0JNIC9Ob3JtYWwgL1NNYXNrIC9Ob25lIC9DQSAxLjAgL2NhIDEuMCA+PgogICAgICAvYTAgPDwgL0NBIDEgL2NhIDEgPj4KICAgPj4KICAgL1hPYmplY3QgPDwgL3gxMSAxMSAwIFIgPj4KPj4KPj4Kc3RyZWFtCnicK+Qy0DM3VTAAQRgjOZdLP9FAIb1YQb/C0FDBJZ8rkAsApsoIhQplbmRzdHJlYW0KZW5kb2JqCjggMCBvYmoKPDwgL1R5cGUgL1hPYmplY3QKICAgL0xlbmd0aCAyOAogICAvRmlsdGVyIC9GbGF0ZURlY29kZQogICAvU3VidHlwZSAvRm9ybQogICAvQkJveCBbIDAgMCAxODAgMjI1IF0KICAgL0dyb3VwIDw8CiAgICAgIC9UeXBlIC9Hcm91cAogICAgICAvUyAvVHJhbnNwYXJlbmN5CiAgICAgIC9JIHRydWUKICAgICAgL0NTIC9EZXZpY2VSR0IKICAgPj4KICAgL1Jlc291cmNlcwo8PAogICAv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",
1057
+ "template": false
1058
+ },
1059
+ "command": "exec \"$CODA_NODE\" \"$CODA_PLUGIN_PATH/agent/entry.mjs\"",
1060
+ "modes": {
1061
+ "title": "工作模式",
1062
+ "unset": "Agent 默认",
1063
+ "note": "工具权限沿用运行机的 OpenCode 配置。"
1064
+ },
1065
+ "skillsDir": ".agents/skills",
1066
+ "configFiles": [
1067
+ "${OPENCODE_CONFIG}",
1068
+ "${XDG_CONFIG_HOME:-~/.config}/opencode/opencode.json",
1069
+ "${XDG_CONFIG_HOME:-~/.config}/opencode/opencode.jsonc",
1070
+ "${XDG_CONFIG_HOME:-~/.config}/opencode/config.json",
1071
+ "opencode.json",
1072
+ "opencode.jsonc"
1073
+ ],
1074
+ "setupHint": "请在运行机安装并登录 OpenCode 2(2.1.4 及以上),确认后端能执行 opencode acp。"
1075
+ }
1076
+ ],
1077
+ "dependencies": [],
1078
+ "extensionPoints": {},
1079
+ "extensions": [],
1080
+ "setup": {
1081
+ "command": "exec \"$CODA_NODE\" \"$CODA_PLUGIN_PATH/scripts/setup.mjs\""
1082
+ },
1083
+ "defaultInstalled": true
1084
+ },
1085
+ {
1086
+ "id": "review",
1087
+ "displayName": "PR 生命流程",
1088
+ "description": "会话开的 PR 从开出来起一条流程:每个新版本先跑项目声明的检查,再请另一家 Agent 评审,要求修改时交给开 PR 的会话处理、有分歧时交给你仲裁;通过后请你批准合并,跑过项目的合并前检查再合并,合并后按你的选择调用项目的部署、发布流程,PR 合并或关闭时结束。",
1089
+ "version": "2.6.0",
1090
+ "category": "工作流程",
1091
+ "source": {
1092
+ "kind": "builtin",
1093
+ "package": "@coda-console/review",
1094
+ "tag": "latest",
1095
+ "version": "2.6.0",
1096
+ "integrity": "sha512-OEMg2O/4wJ3hoG/S4cbgXL3Fsmopb4hF6xwDeJbDOR5hWXQ406okHO7uxSOCJCbqp5E8vPTrwmrwvz8CN7qRWw==",
1097
+ "repo": "https://github.com/coda-console/coda-plugins.git",
1098
+ "path": "plugins/review"
1099
+ },
1100
+ "dir": "node_modules/@coda-console/review",
1101
+ "title": "PR 生命流程",
1102
+ "properties": {
1103
+ "review.reviewers": {
1104
+ "type": "object",
1105
+ "description": "一行是一类作者和评审它的 Agent。作者只选到哪一级,就只按那一级区分;越具体的一行越优先。",
1106
+ "title": "评审组合",
1107
+ "order": 1,
1108
+ "entries": {
1109
+ "type": "object",
1110
+ "format": "coda-agent"
1111
+ },
1112
+ "keys": "coda-agent-match",
1113
+ "default": {
1114
+ "claude-sdk": {
1115
+ "agent": "codex",
1116
+ "mode": "agent"
1117
+ },
1118
+ "codex": {
1119
+ "agent": "claude-sdk",
1120
+ "mode": "auto"
1121
+ },
1122
+ "kimi": {
1123
+ "agent": "codex",
1124
+ "mode": "agent"
1125
+ },
1126
+ "grok": {
1127
+ "agent": "codex",
1128
+ "mode": "agent"
1129
+ },
1130
+ "opencode": {
1131
+ "agent": "claude-sdk",
1132
+ "mode": "auto"
1133
+ }
1134
+ }
1135
+ },
1136
+ "review.blockingSeverity": {
1137
+ "type": "string",
1138
+ "enum": [
1139
+ "P0",
1140
+ "P1",
1141
+ "P2",
1142
+ "P3"
1143
+ ],
1144
+ "description": "这一级及更严重的问题要求修改:交给开 PR 的会话处理,它不同意时交给你仲裁。更轻的问题不挡住 PR,评审仍算通过,写在 PR 评论和批准卡上。P0 最严重,P3 最轻。",
1145
+ "title": "阻塞级别",
1146
+ "order": 2,
1147
+ "default": "P2"
1148
+ },
1149
+ "review.principles": {
1150
+ "type": "array",
1151
+ "description": "评审方按勾选的几项看改动,每项一段要求放进提示词;都不勾时只按通用要求评审。",
1152
+ "title": "评审重点",
1153
+ "order": 3,
1154
+ "options": [
1155
+ {
1156
+ "value": "state",
1157
+ "title": "状态与失败",
1158
+ "description": "失败、中断、部分成功之后系统处于什么状态:失败被当作成功、错误变成空值、部分写入后继续、未知值落入默认分支、等待不结束。"
1159
+ },
1160
+ {
1161
+ "value": "defense",
1162
+ "title": "多余的防御",
1163
+ "description": "指出重复检查、用不到的 fallback、吞掉错误的 catch 并建议删除;不因为\"可能出错\"就要求加检查、重试或 fallback。"
1164
+ },
1165
+ {
1166
+ "value": "architecture",
1167
+ "title": "架构与腐化",
1168
+ "description": "绕过边界、依赖反向、第二个事实来源或第二套机制、复制核心逻辑、迁移做一半、死代码、为不存在的需求做的抽象。会扩散的按 P1。"
1169
+ },
1170
+ {
1171
+ "value": "tests",
1172
+ "title": "测试",
1173
+ "description": "缺少回归测试或失败路径的测试;不能失败的测试;依赖时序、顺序、外部环境的脆弱测试;不必要的重型或缓慢测试。偶发失败、会被照搬的写法按 P1。"
1174
+ }
1175
+ ],
1176
+ "default": [
1177
+ "state",
1178
+ "defense",
1179
+ "architecture",
1180
+ "tests"
1181
+ ]
1182
+ },
1183
+ "review.maxReviews": {
1184
+ "type": "integer",
1185
+ "minimum": 1,
1186
+ "maximum": 100,
1187
+ "description": "一条运行里最多自动评审几次。到了上限,新版本交给你决定:放行,或再评审一次。手动发起不计次数。",
1188
+ "title": "每个 PR 最多自动评审",
1189
+ "order": 4,
1190
+ "default": 3
1191
+ },
1192
+ "review.mergeMethod": {
1193
+ "type": "string",
1194
+ "enum": [
1195
+ "squash",
1196
+ "merge",
1197
+ "rebase"
1198
+ ],
1199
+ "description": "你批准合并后,用哪种 GitHub 合并方式:squash 把 PR 压成一个提交,merge 留下合并提交,rebase 把提交逐个接到目标分支上。目标分支要求合并队列时按队列自己的设定。",
1200
+ "title": "合并方式",
1201
+ "order": 5,
1202
+ "default": "squash"
1203
+ }
1204
+ },
1205
+ "workflows": [
1206
+ "pull-request"
1207
+ ],
1208
+ "capabilities": [],
1209
+ "services": [],
1210
+ "groups": [],
1211
+ "commands": [],
1212
+ "gitCredentials": [],
1213
+ "endpoints": [],
1214
+ "views": [],
1215
+ "agents": [],
1216
+ "dependencies": [
1217
+ "github"
1218
+ ],
1219
+ "extensionPoints": {},
1220
+ "extensions": [],
1221
+ "instructions": "gh pr create 开出即评审,可与验证并行;合并要等别的 PR、升锁或发布的开草稿(-R 写在 --draft 前),说明写明前提,满足后 gh pr ready。只合并进默认分支,叠放的不合。合并前的验证写成流程步骤或 GitHub 必需检查。正常结束只更新状态,任务与失败送到本会话,不要轮询 PR;提前评审用 workflow_run 发起 pull-request,结论交回会话。",
1222
+ "defaultInstalled": false
1223
+ },
1224
+ {
1225
+ "id": "machine-stats",
1226
+ "displayName": "机器负载",
1227
+ "description": "在资源页显示 CPU、内存、各磁盘、网络、温度、GPU、电池与风扇数值;在插件设置中选择显示项,打开或刷新时采样。",
1228
+ "version": "1.0.2",
1229
+ "category": "机器与资源",
1230
+ "source": {
1231
+ "kind": "builtin",
1232
+ "repo": "https://github.com/coda-console/machine-stats.git",
1233
+ "path": "",
1234
+ "commit": "22e991f41d467389d485ac995f8d0f753f5ef608"
1235
+ },
1236
+ "dir": "node_modules/machine-stats",
1237
+ "title": "机器负载",
1238
+ "properties": {
1239
+ "machine-stats.display": {
1240
+ "type": "object",
1241
+ "description": "资源页显示的指标,按磁盘与网卡分别选择。",
1242
+ "title": "显示指标",
1243
+ "entries": {
1244
+ "type": "boolean"
1245
+ },
1246
+ "default": {}
1247
+ }
1248
+ },
1249
+ "workflows": [],
1250
+ "capabilities": [],
1251
+ "services": [],
1252
+ "groups": [],
1253
+ "commands": [],
1254
+ "gitCredentials": [],
1255
+ "endpoints": [],
1256
+ "views": [],
1257
+ "offers": {
1258
+ "panels": [
1259
+ {
1260
+ "id": "load",
1261
+ "title": "机器负载",
1262
+ "command": "node \"$CODA_PLUGIN_PATH/scripts/stats.mjs\"",
1263
+ "displaySetting": "machine-stats.display"
1264
+ }
1265
+ ]
1266
+ },
1267
+ "agents": [],
1268
+ "dependencies": [],
1269
+ "extensionPoints": {},
1270
+ "extensions": [],
1271
+ "defaultInstalled": true
1272
+ }
1273
+ ]