@coda-console/grok-bot 0.3.1 → 0.3.2

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
@@ -44,7 +44,7 @@ node /workspace/.coda-bot/coda-bot.mjs mcp <Coda-sessionId>
44
44
 
45
45
  `net` 将 Tailscale 状态放在 `/workspace/.coda-bot/tailscale/`;缺软件时安装,恢复守护进程,必要时显示登录链接。多个 Bot 共用云电脑,MCP 命令必须指定各自的 Coda sessionId。`bind` 只确认工具绑定,不再向 Bot 交付 Coda systemPrompt。
46
46
 
47
- 工具包括 `read_thread`、`read_tool_call`、`agents`、`status`、`workflow_status`、`workflow_list`、`telemetry`、`machines`、`machine_diagnostics`、`new_session`、`send`(MCP 名加 `coda_` 前缀)。Coda 工具调用保留完整输入输出;轮外只读调用仅写日志,不开启空轮次。`new_session` 在目标目录开独立会话,`send` 给已有会话发消息,均由 Coda 授权卡片批准;稳定 requestId、turn 票据和后台 send 结果由适配器处理。
47
+ 工具包括 `read_thread`、`read_tool_call`、`agents`、`status`、`workflow_status`、`workflow_list`、`telemetry`、`machines`、`machine_diagnostics`、`new_session`、`send`(MCP 名加 `coda_` 前缀)。Coda 工具调用保留完整输入输出;轮外只读调用仅写日志,不开启空轮次。`new_session` 在目标目录开独立会话(`agent` 可原样填用户给的 Agent 链接 `coda://agents/…`,由 Coda 解析出 Agent、机器与参数,需要支持链接的 Coda 后端),`send` 给已有会话发消息,均由 Coda 授权卡片批准;稳定 requestId、turn 票据和后台 send 结果由适配器处理。
48
48
 
49
49
  巡检按远端 Skill 先开只归因的独立会话(不改代码、不开 PR),prompt 写清现象、证据、时间和版本,要求结论、证据链、置信度与是否建议修复。下次巡检读取结论,确认需要修复的代码问题才开修复会话,引用归因会话与结论并走完仓库 PR 流程;偶发、外部因素或用户暂不处理的问题只记忆。用户指定的 Agent、暂不处理事项等也写进记忆,开会话前先读取遵守,不在 Skill 固定模型或推理强度。卡片审批、不重复开会话、不轮询等规则照旧;GitHub 只读限制只约束 Bot 自己。
50
50
 
package/agent/session.mjs CHANGED
@@ -474,7 +474,8 @@ export class Adapter {
474
474
  async tool(s, { name, arguments: args = {}, turn: id }) {
475
475
  if (!READ.has(name) && !WRITE.has(name)) fail(`不允许代理工具:${name}`);
476
476
  if (!object(args)) fail('arguments 必须是对象');
477
- if (name === 'new_session' && (typeof args.project !== 'string' || !args.project.trim()))
477
+ // An agent's link may name the project itself; Coda refuses one that does not.
478
+ if (name === 'new_session' && !/^\s*coda:\/\/agents\//i.test(args.agent ?? '') && (typeof args.project !== 'string' || !args.project.trim()))
478
479
  fail('new_session 必须指定目标 project;Bot 所在的空目录没有代码,请选择要修复的项目');
479
480
  this.provider(s, name);
480
481
  const local = !s.turn;
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "id": "grok-bot",
4
4
  "displayName": "Grok Bot",
5
5
  "description": "通过 Grok Bot 原生主会话接入 Coda,镜像回复与 Routine 运行记录。",
6
- "version": "0.3.1",
6
+ "version": "0.3.2",
7
7
  "coda": {
8
8
  "channels": ["preview"]
9
9
  },
package/remote/SKILL.md CHANGED
@@ -31,7 +31,7 @@ coda_machines 与 coda_machine_diagnostics 由 Coda 内置的「机器诊断」
31
31
 
32
32
  ## 像用户一样创建工作会话与跟进
33
33
 
34
- 开会话前先读 `/workspace/.coda-bot/memory/<sessionId>.json`,遵守用户已记录的要求(使用哪个 Agent、哪些问题暂不处理等),并查已有问题与会话,避免重复开。用 coda_agents 确认目标目录、机器与可用 Agent,再用 coda_new_session 创建独立会话;project 必填,使用目录名字或 ID,别的机器上的目录按 ID。Agent 与其他运行参数按用户要求和任务需要选择,由用户在卡片上审阅并批准;Bot 不设父会话审批档位。
34
+ 开会话前先读 `/workspace/.coda-bot/memory/<sessionId>.json`,遵守用户已记录的要求(使用哪个 Agent、哪些问题暂不处理等),并查已有问题与会话,避免重复开。用户给过 Agent 链接(`coda://agents/…`)的,原样记进记忆,开会话时原样填进 `agent`,不要拆成参数,也不要另写成不同的模型、强度或目录。否则用 coda_agents 确认目标目录、机器与可用 Agent。再用 coda_new_session 创建独立会话;project 使用目录名字或 ID,别的机器上的目录按 ID,链接已带目录时可省。Agent 与其他运行参数按用户要求和任务需要选择,由用户在卡片上审阅并批准;Bot 不设父会话审批档位。
35
35
 
36
36
  巡检发现问题,先开**归因会话**:只归因,不改代码、不开 PR。prompt 写清现象、证据(会话引用、日志)、时间、受影响版本与重点代码路径,要求给出归因结论、证据链、置信度及是否建议修复。
37
37
 
@@ -33,8 +33,12 @@ export const TOOLS = [
33
33
  proxy('status', '读取 Bot 当前会话状态;独立会话不会出现在 children 中,不能据此判断创建失败。要跟进独立会话请用 coda_read_thread,不要重复 new_session 或轮询。副作用工具的 turn 票据由适配器取得。'),
34
34
  proxy('workflow_status', '查看工作流运行的状态和失败证据。', { runId: string('工作流运行 ID 或 coda://workflow-runs/ 地址'), project: string('项目名称或 ID') }),
35
35
  proxy('workflow_list', '列出项目的工作流程。', { project: string('项目名称或 ID') }),
36
- proxy('new_session', '像用户一样在目标目录开一个独立会话,每次要用户在 Coda 卡片上批准;不是你的子会话。立即返回请用户批准的回执,只会收到已开出/被拒绝/未能开出通知,工作结果不会推给你;记下会话引用,之后用 coda_read_thread 跟进,不要重复开同一任务。任务写清证据、重点代码路径、验收方式、按仓库惯例开 PR 并走完 PR 流程直到评审通过(含检查、交叉评审和自动评审评论)。GitHub 只读限制仅约束 Bot 自己,不要转述进任务或限制会话走 PR 流程。',
37
- { project: string('必填:目标目录名字或 ID;别的机器上的目录按 ID'), agent: string('Agent ID,默认选择 codex'), prompt: string('证据、重点代码路径、验收方式;按仓库惯例提交、开 PR 并走 PR 流程直到评审通过'), title: string('会话标题'), model: string('模型'), effort: string('推理强度'), mode: string('独立会话的审批档位,codex 默认选择 agent;用户在卡片上批准'), options: anyObject }, ['project', 'agent', 'prompt']),
36
+ proxy('new_session', '像用户一样在目标目录开一个独立会话,每次要用户在 Coda 卡片上批准;不是你的子会话。立即返回请用户批准的回执,只会收到已开出/被拒绝/未能开出通知,工作结果不会推给你;记下会话引用,之后用 coda_read_thread 跟进,不要重复开同一任务。任务写清证据、重点代码路径、验收方式、按仓库惯例开 PR 并走完 PR 流程直到评审通过(含检查、交叉评审和自动评审评论)。GitHub 只读限制仅约束 Bot 自己,不要转述进任务或限制会话走 PR 流程。用户给了 Agent 链接(coda://agents/…)就原样填进 agent,不要拆成参数。',
37
+ { project: string('目标目录名字或 ID;别的机器上的目录按 ID。agent 填的链接已带目录时可省'),
38
+ agent: string('Agent ID(coda_agents 列出的),或用户给的 Agent 链接 coda://agents/…,原样照填:Coda 从链接取 Agent、机器、模型、强度、审批档位、目录与工作位置,链接写了的不要另写成不同的值'),
39
+ prompt: string('证据、重点代码路径、验收方式;按仓库惯例提交、开 PR 并走 PR 流程直到评审通过'), title: string('会话标题'), model: string('模型'), effort: string('推理强度'),
40
+ mode: string('独立会话的审批档位,codex 默认选择 agent;用户在卡片上批准'), options: anyObject,
41
+ checkout: { type: 'string', enum: ['shared', 'worktree'], description: 'shared(默认)在目录本身工作;worktree 从默认分支新建工作树' } }, ['agent', 'prompt']),
38
42
  proxy('send', '给已有会话发消息,由 Coda 授权。明确回传委派结果时带 replyTo,直接唤醒原请求方,不建立反向等待。可能先返回「已提交」;不要轮询。', {
39
43
  childId: string('目标会话 ID 或引用(沿用 Coda 参数名,不表示子会话);回传时用原委派附带的地址'), prompt: string('消息或回传正文'),
40
44
  replyTo: string('原委派附带的请求编号,只能回传给该请求的发起方'),