oh-my-opencode-cohub 1.0.15 → 1.0.17

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
@@ -72,47 +72,106 @@ CLI 会精确清理所有 `co-*` 代理和相关配置,不影响其他插件
72
72
  - 可用代理列表中出现 12 个 `co-*` 前缀代理(`co-orchestrator`、`co-oracle`、`co-librarian`、`co-explorer`、`co-designer`、`co-fixer`、`co-observer`、`co-council`、`co-rule-user`、`co-rule-project`、`co-rule-app`、`co-planner`)
73
73
  - Orchestrator 自动进入纯调度模式(只做规划、委派、验证,不直接操作文件)
74
74
 
75
+ ### 从源码安装(本地开发)
76
+
77
+ 如果需要修改源码或使用开发版本:
78
+
79
+ ```bash
80
+ # 1. 克隆项目
81
+ git clone <repo-url> && cd oh-my-opencode-cohub
82
+
83
+ # 2. 安装依赖
84
+ npm install
85
+
86
+ # 3. 构建(需要系统已安装 Bun)
87
+ npm run build
88
+
89
+ # 4. 方式 A:npm link 全局链接(推荐)
90
+ npm link
91
+ bunx oh-my-opencode-cohub install
92
+ # 重启 OpenCode 即可。之后修改源码只需重新 npm run build
93
+
94
+ # 4. 方式 B:手动配置绝对路径
95
+ # 编辑 ~/.config/opencode/opencode.json,在 plugin 数组中写入项目绝对路径:
96
+ # { "plugin": ["/absolute/path/to/oh-my-opencode-cohub"] }
97
+ # 然后手动运行 CLI 注册代理:
98
+ # node dist/cli/index.js install
99
+ ```
100
+
101
+ > **构建依赖**:`npm run build` 使用 `bun build` 和 `tsc`。系统需安装 [Bun](https://bun.sh)(构建工具)和 Node.js(类型声明生成)。所有 `@opencode-ai/*`、`@opentui/*`、`zod` 均为 external,不打包进 `dist/`。
102
+
75
103
  ## 代理一览
76
104
 
77
105
  ### 代理(12 个,全中文提示词)
78
106
 
79
- | 代理 | 模型 | 职责 | 读取源 |
80
- |------|------|------|--------|
81
- | orchestrator | 见默认配置 | 纯调度:规划→委派→验证 | — |
82
- | oracle | 见默认配置 | 架构审查/代码审查(含 Superpowers skills) | — |
83
- | librarian | 见默认配置 | 外部文档/API 研究 | — |
84
- | explorer | 见默认配置 | 代码库搜索定位 | — |
85
- | designer | 见默认配置 | UI/UX 设计与实现 | — |
86
- | fixer | 见默认配置 | 代码修改执行(含 TDD skill) | — |
87
- | observer | 见默认配置 | 图片/PDF 分析 | — |
88
- | council | 见默认配置 | 多模型共识 | — |
89
- | rule-user | 见默认配置 | 用户级规范分析 | `~/.config/opencode/AGENTS.md` |
90
- | rule-project | 见默认配置 | 项目级规范分析 | 项目 `AGENTS.md` |
91
- | rule-app | 见默认配置 | 应用规则分析 | `.opencode/rules/*.md` |
92
- | planner | 见默认配置 | 方案制定 | 综合需求+信息+规则 |
93
-
94
- > 模型通过 `DEFAULT_MODELS` 常量配置,默认使用 DeepSeek,可通过 plugin config 覆盖任意代理模型。
107
+ | 代理 | 默认模型 | 职责 | 读取源 |
108
+ |------|----------|------|--------|
109
+ | co-orchestrator | `deepseek/deepseek-v4-pro` | 纯调度:规划→委派→验证 | — |
110
+ | co-oracle | `deepseek/deepseek-v4-pro` | 架构审查/代码审查(含 Superpowers skills) | — |
111
+ | co-librarian | `deepseek/deepseek-v4-flash` | 外部文档/API 研究 | — |
112
+ | co-explorer | `deepseek/deepseek-v4-flash` | 代码库搜索定位 | — |
113
+ | co-designer | `minimax/MiniMax-M3` | UI/UX 设计与实现 | — |
114
+ | co-fixer | `deepseek/deepseek-v4-flash` | 代码修改执行(含 TDD skill) | — |
115
+ | co-observer | `codermxtest/gpt-5.5` | 图片/PDF 分析 | — |
116
+ | co-council | `deepseek/deepseek-v4-pro` | 多模型共识 | — |
117
+ | co-rule-user | `deepseek/deepseek-v4-flash` | 用户级规范分析 | `~/.config/opencode/AGENTS.md` |
118
+ | co-rule-project | `deepseek/deepseek-v4-flash` | 项目级规范分析 | 项目 `AGENTS.md` |
119
+ | co-rule-app | `deepseek/deepseek-v4-flash` | 应用规则分析 | `.opencode/rules/*.md` |
120
+ | co-planner | `deepseek/deepseek-v4-pro` | 方案制定 | 综合需求+信息+规则 |
121
+
122
+ > 模型可通过下文「配置文件」或「自定义模型」章节覆盖。
123
+
124
+ ## 配置文件
125
+
126
+ CLI 安装后自动创建 `~/.config/opencode/oh-my-opencode-cohub.json`,这是 CoHub 的专用配置文件,结构如下:
127
+
128
+ ```json
129
+ {
130
+ "$schema": "https://unpkg.com/oh-my-opencode-cohub@latest/oh-my-opencode-cohub.schema.json",
131
+ "agents": {
132
+ "co-orchestrator": { "model": "deepseek/deepseek-v4-pro", "variant": "max" },
133
+ "co-oracle": { "model": "deepseek/deepseek-v4-pro", "variant": "max" },
134
+ "co-librarian": { "model": "deepseek/deepseek-v4-flash", "variant": "low" },
135
+ "co-explorer": { "model": "deepseek/deepseek-v4-flash", "variant": "low" },
136
+ "co-designer": { "model": "minimax/MiniMax-M3", "variant": "medium" },
137
+ "co-fixer": { "model": "deepseek/deepseek-v4-flash", "variant": "high" },
138
+ "co-observer": { "model": "codermxtest/gpt-5.5", "variant": "low" },
139
+ "co-council": { "model": "deepseek/deepseek-v4-pro", "variant": "high" },
140
+ "co-rule-user": { "model": "deepseek/deepseek-v4-flash", "variant": "medium" },
141
+ "co-rule-project":{ "model": "deepseek/deepseek-v4-flash", "variant": "medium" },
142
+ "co-rule-app": { "model": "deepseek/deepseek-v4-flash", "variant": "medium" },
143
+ "co-planner": { "model": "deepseek/deepseek-v4-pro", "variant": "high" }
144
+ }
145
+ }
146
+ ```
147
+
148
+ 直接编辑此文件即可修改任意代理的模型和变体。`$schema` 提供 IDE 自动补全支持。
149
+
150
+ > **注意**:同一目录 `~/.config/opencode/oh-my-opencode-cohub/` 下也可放置 `{agent}.md` 提示词覆盖文件(见「自定义提示词」章节),与 JSON 配置文件共存。
95
151
 
96
152
  ## 工作流
97
153
 
98
154
  ```
99
155
  1. 理解需求
100
- 2. 信息收集(@explorer / @librarian / @observer)
101
- 3. 规范分析(并行 @rule-user / @rule-project / @rule-app)
102
- 4. 制定方案 → @planner
103
- 5. 调度执行(@fixer / @designer 等)
104
- 6. 验证(@oracle / @designer)
156
+ 2. 信息收集(@co-explorer / @co-librarian / @co-observer)
157
+ 3. 规范分析(并行 @co-rule-user / @co-rule-project / @co-rule-app)
158
+ 4. 制定方案 → @co-planner
159
+ 5. 调度执行(@co-fixer / @co-designer 等)
160
+ 6. 验证(@co-oracle / @co-designer)
105
161
  ```
106
162
 
107
163
  ## 依赖
108
164
 
109
- - OpenCode
110
- - `@opencode-ai/plugin`(TypeScript 编译依赖)
165
+ - [OpenCode](https://opencode.ai) ≥ 1.17
166
+ - `@opencode-ai/plugin@^1.17`(运行时依赖)
167
+ - `@opencode-ai/sdk@^1.3`(运行时依赖)
111
168
  - 无其他外部插件依赖
112
169
 
113
170
  ## 自定义模型
114
171
 
115
- 通过 `opencode.json` plugin config 覆盖默认模型:
172
+ **推荐**:直接编辑 `~/.config/opencode/oh-my-opencode-cohub.json`(见「配置文件」章节),修改对应代理的 `model` `variant` 即可。
173
+
174
+ **备选**:通过 `opencode.json` 的 plugin config 覆盖:
116
175
 
117
176
  ```json
118
177
  {
@@ -130,6 +189,8 @@ CLI 会精确清理所有 `co-*` 代理和相关配置,不影响其他插件
130
189
  }
131
190
  ```
132
191
 
192
+ > 注意:plugin config 中的 key 使用无 `co-` 前缀的短名(如 `orchestrator`);JSON 配置文件使用完整的 `co-` 前缀名(如 `co-orchestrator`)。
193
+
133
194
  ## 自定义提示词
134
195
 
135
196
  ### 方式一:通过 plugin config 覆盖(推荐)
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAqClD,wBAAwB;AACxB,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAalD,CAAC;AAwEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,wrBAA+B,CAAC;AAEhE,QAAA,MAAM,WAAW,EAAE,MAqNlB,CAAC;AAEF,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAqClD,wBAAwB;AACxB,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAalD,CAAC;AAwEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,wrBAA+B,CAAC;AAEhE,QAAA,MAAM,WAAW,EAAE,MAkRlB,CAAC;AAEF,eAAe,WAAW,CAAC"}
package/dist/index.js CHANGED
@@ -19,6 +19,47 @@ var ORCHESTRATOR_PROMPT = `<角色>
19
19
 
20
20
  </子代理>
21
21
 
22
+ ### @council vs @oracle 选择指南
23
+
24
+ **一句话判断**:\`@co-oracle\` = 深度推理(快、便宜、单视角),\`@co-council\` = 多模型背书的共识(慢、贵、多视角)。
25
+
26
+ | 维度 | @co-oracle | @co-council |
27
+ |------|-----------|-------------|
28
+ | 模式 | 单模型深度推理 | 多模型并行共识 |
29
+ | 适用场景 | 错了还能改的决策 | 错了就完了的决策 |
30
+ | 典型用例 | 代码审查、架构建议、bug 根因、YAGNI 简化、文案审查、重构方向 | 数据迁移方案、API 破坏性变更、安全合规审计、选型代价极大、多方案择优 |
31
+ | 输出形式 | 直接建议 + 推理 | 多专家观点 → 综合共识 → 信心评级(一致/多数/分歧) |
32
+ | 误用代价 | 低:建议错了可以讨论纠正 | 高:浪费 N 次调用成本,拖延决策 |
33
+ | 成本 | 1 次 LLM 调用 | 3–5 次并行 LLM 调用 |
34
+
35
+ **决策规则**:
36
+ 1. **可逆性优先判断**:操作错了能无代价回滚?→ \`@co-oracle\`(如代码修改、lint 修复)。操作错了数据丢失/API 不兼容?→ \`@co-council\`(如 DROP TABLE、公共 API 签名变更)。
37
+ 2. **异议价值判断**:需要单一深度分析?→ \`@co-oracle\`。需要多个独立判断互相验证?→ \`@co-council\`。
38
+ 3. **默认倾向**:不确定时优先 \`@co-oracle\`(更快更便宜)。只有满足以下**至少 2 条**时才用 \`@co-council\`:
39
+ - 决策不可逆或回滚代价极高
40
+ - 影响范围跨多个模块/团队/服务
41
+ - 单一判断出错会造成安全事故/线上故障/数据损坏
42
+ - 存在多种合理方案且选错代价大
43
+
44
+ **典型场景对照**:
45
+
46
+ | 场景 | 用谁 | 理由 |
47
+ |------|------|------|
48
+ | PR 代码审查 | @co-oracle | 错了还能改,审查意见可讨论 |
49
+ | 重构建议 | @co-oracle | 方案可迭代调整 |
50
+ | 单文件 bug 修复思路 | @co-oracle | 低风险,快速反馈 |
51
+ | 数据库 Schema 迁移(含删列/改类型) | @co-council | 数据不可逆,需要多模型背书 |
52
+ | 公共 API 签名废弃/变更 | @co-council | 下游影响不可控 |
53
+ | 安全漏洞修复方案 | @co-council | 错了可能被利用 |
54
+ | 第三方库选型(如 ORM/状态管理) | @co-council | 迁移成本极高 |
55
+ | 文案/提示词修改 | @co-oracle | 错了能改,低风险 |
56
+ | 多方案架构决策(各有利弊) | @co-council | 需要多方面权衡 |
57
+
58
+ **反面教材——不要这样用**:
59
+ - ❌ 用 \`@co-council\` 审查一个简单的 lint 修复(杀鸡用牛刀)
60
+ - ❌ 用 \`@co-oracle\` 决定是否删除生产数据库的某个表(赌单模型判断)
61
+ - ❌ 用 \`@co-council\` 做日常代码格式化建议(纯浪费)
62
+
22
63
  <核心规则>
23
64
 
24
65
  ## 硬性规则——不可违反
@@ -443,11 +484,12 @@ class TaskTracker {
443
484
  const label = typeof args.description === "string" ? args.description : alias;
444
485
  this.jobs.set(alias, {
445
486
  alias,
446
- sessionId: "",
487
+ sessionId: args.task_id ?? "",
447
488
  parentSessionId,
448
489
  agent,
449
490
  label,
450
491
  status: "running",
492
+ background: args.background ?? false,
451
493
  terminalReconciled: false,
452
494
  createdAt: Date.now()
453
495
  });
@@ -462,11 +504,24 @@ class TaskTracker {
462
504
  }
463
505
  }
464
506
  if (latest) {
507
+ if (latest.background) {
508
+ if (sessionId)
509
+ latest.sessionId = sessionId;
510
+ return;
511
+ }
465
512
  latest.status = status;
466
513
  if (sessionId)
467
514
  latest.sessionId = sessionId;
468
515
  }
469
516
  }
517
+ updateByChildSessionId(sessionId, status) {
518
+ for (const job of this.jobs.values()) {
519
+ if (job.sessionId === sessionId && job.background && job.status === "running") {
520
+ job.status = status;
521
+ return;
522
+ }
523
+ }
524
+ }
470
525
  getBoardText(parentSessionId) {
471
526
  const pid = parentSessionId || this._currentParentSessionId;
472
527
  const activeJobs = [];
@@ -513,6 +568,14 @@ class TaskTracker {
513
568
  job.terminalReconciled = true;
514
569
  }
515
570
  }
571
+ cleanupStaleJobs(timeoutMs) {
572
+ const now = Date.now();
573
+ for (const job of this.jobs.values()) {
574
+ if (job.background && job.status === "running" && now - job.createdAt > timeoutMs) {
575
+ job.status = "errored";
576
+ }
577
+ }
578
+ }
516
579
  isReusable(alias) {
517
580
  const job = this.jobs.get(alias);
518
581
  return job?.status === "completed" && job.terminalReconciled;
@@ -732,6 +795,46 @@ var CoHubPlugin = async (input, options) => {
732
795
  }
733
796
  }
734
797
  syncAgentConfig();
798
+ function extractChildSessionId(output) {
799
+ if (!output || typeof output !== "object")
800
+ return;
801
+ const o = output;
802
+ const meta = o.metadata;
803
+ if (meta) {
804
+ if (typeof meta.sessionId === "string")
805
+ return meta.sessionId;
806
+ if (typeof meta.taskId === "string")
807
+ return meta.taskId;
808
+ if (typeof meta.task_id === "string")
809
+ return meta.task_id;
810
+ if (typeof meta.id === "string")
811
+ return meta.id;
812
+ }
813
+ const text = typeof o.output === "string" ? o.output : "";
814
+ const m = text.match(/\b(session|task)[_\s]?(?:id|ID)[:\s]+(\S+)/i);
815
+ if (m)
816
+ return m[2];
817
+ return;
818
+ }
819
+ function extractSessionIdFromEvent(props) {
820
+ if (!props || typeof props !== "object")
821
+ return;
822
+ const p = props;
823
+ const info = p.info;
824
+ if (info?.id)
825
+ return info.id;
826
+ if (typeof p.sessionID === "string")
827
+ return p.sessionID;
828
+ if (typeof p.sessionId === "string")
829
+ return p.sessionId;
830
+ return;
831
+ }
832
+ const STALE_TIMEOUT_MS = 30 * 60 * 1000;
833
+ const cleanupTimer = setInterval(() => {
834
+ try {
835
+ tracker.cleanupStaleJobs(STALE_TIMEOUT_MS);
836
+ } catch {}
837
+ }, 30000);
735
838
  const agentConfigs = {};
736
839
  for (const agent of agents) {
737
840
  agentConfigs[agent.name] = {
@@ -767,14 +870,30 @@ var CoHubPlugin = async (input, options) => {
767
870
  }
768
871
  } catch {}
769
872
  },
770
- "tool.execute.after": async (input2, _output) => {
873
+ "tool.execute.after": async (input2, output) => {
771
874
  try {
772
875
  if (input2.tool === "task") {
773
- tracker.updateAfterTask(input2.sessionID, "completed");
876
+ const childSessionId = extractChildSessionId(output);
877
+ tracker.updateAfterTask(input2.sessionID, "completed", childSessionId);
774
878
  syncTrackerState(input2.sessionID ?? "");
775
879
  }
776
880
  } catch {}
777
881
  },
882
+ event: async (input2) => {
883
+ try {
884
+ const e = input2.event;
885
+ const sessionId = extractSessionIdFromEvent(e.properties);
886
+ if (!sessionId)
887
+ return;
888
+ if (e.type === "session.idle") {
889
+ tracker.updateByChildSessionId(sessionId, "completed");
890
+ syncTrackerState(tracker.currentParentSessionId);
891
+ } else if (e.type === "session.deleted" || e.type === "session.error") {
892
+ tracker.updateByChildSessionId(sessionId, "errored");
893
+ syncTrackerState(tracker.currentParentSessionId);
894
+ }
895
+ } catch {}
896
+ },
778
897
  "experimental.chat.messages.transform": async (_input, output) => {
779
898
  try {
780
899
  const board = tracker.getBoardText();
@@ -799,6 +918,9 @@ var CoHubPlugin = async (input, options) => {
799
918
  },
800
919
  "experimental.chat.system.transform": async (_input, output) => {
801
920
  output.system.push(CHINESE_LANGUAGE_INSTRUCTION);
921
+ },
922
+ dispose: async () => {
923
+ clearInterval(cleanupTimer);
802
924
  }
803
925
  };
804
926
  };
@@ -1,2 +1,2 @@
1
- export declare const ORCHESTRATOR_PROMPT = "<\u89D2\u8272>\n\u4F60\u662F\u7EAF\u8C03\u5EA6\u8005\uFF08Orchestrator\uFF09\u3002\u552F\u4E00\u804C\u8D23\uFF1A\u7406\u89E3\u9700\u6C42 \u2192 \u59D4\u6D3E\u4FE1\u606F\u6536\u96C6 \u2192 \u5236\u5B9A\u65B9\u6848 \u2192 \u8C03\u5EA6\u5B50\u4EE3\u7406\u6267\u884C \u2192 \u59D4\u6D3E\u9A8C\u8BC1\u3002**\u7EDD\u4E0D\u4EB2\u81EA\u4F7F\u7528\u4EFB\u4F55\u6587\u4EF6/\u4EE3\u7801\u64CD\u4F5C\u5DE5\u5177**\uFF08read\u3001grep\u3001glob\u3001bash\u3001edit\u3001write \u7B49\uFF09\u3002\u552F\u4E00\u53EF\u4F7F\u7528\u7684\u5DE5\u5177\u662F\u8C03\u5EA6\u5DE5\u5177\uFF08task\u3001todowrite\uFF09\u3002\n</\u89D2\u8272>\n\n<\u5B50\u4EE3\u7406>\n\n@co-explorer - \u53EA\u8BFB\u3002Grep/Glob/AST \u641C\u7D22\u5B9A\u4F4D\u3002\u59D4\u6D3E\uFF1A\u53D1\u73B0\u4EE3\u7801\u5E93\u5185\u5BB9\u65F6\u3002\n@co-librarian - \u53EA\u8BFB+Web\u3002\u5B98\u65B9\u6587\u6863/API/GitHub \u7814\u7A76\u3002\u59D4\u6D3E\uFF1A\u4E0D\u719F\u6089\u7684\u5E93/\u8FB9\u7F18\u60C5\u51B5\u3002\n@co-oracle - \u53EA\u8BFB\u3002\u67B6\u6784\u51B3\u7B56/\u4EE3\u7801\u5BA1\u67E5/YAGNI \u7B80\u5316/\u590D\u6742\u8C03\u8BD5\u3002\u59D4\u6D3E\uFF1A\u9AD8\u98CE\u9669\u51B3\u7B56/\u53CD\u590D bug/\u5B89\u5168\u5BA1\u67E5\u3002\n@co-designer - \u8BFB\u5199\u3002UI/UX \u8BBE\u8BA1/\u89C6\u89C9\u6DA6\u8272/\u54CD\u5E94\u5F0F\u5E03\u5C40\u3002\u59D4\u6D3E\uFF1A\u9700\u8981\u6DA6\u8272\u7684\u754C\u9762/UX \u7EC4\u4EF6\u3002\n@co-fixer - \u8BFB\u5199+Bash\u3002\u4EE3\u7801\u4FEE\u6539\u6267\u884C(\u65E0\u8BBA\u591A\u5C0F)\u3002\u59D4\u6D3E\uFF1A\u6240\u6709\u6587\u4EF6\u7F16\u8F91/\u5199\u5165/\u5220\u9664\u3002\n@co-observer - \u53EA\u8BFB\u3002\u56FE\u7247/PDF/\u622A\u56FE\u89C6\u89C9\u5206\u6790\u3002\u59D4\u6D3E\uFF1A\u591A\u5A92\u4F53\u6587\u4EF6\u5206\u6790\u65F6(\u542B\u5B8C\u6574\u8DEF\u5F84)\u3002\n@co-council - \u53EA\u8BFB\u3002\u591A\u6A21\u578B\u5E76\u884C\u5171\u8BC6\u3002\u59D4\u6D3E\uFF1A\u591A\u4E13\u5BB6\u89C6\u89D2/\u4E0D\u53EF\u9006\u51B3\u7B56\uFF08\u6570\u636E\u8FC1\u79FB/API \u53D8\u66F4\uFF09\u3002\u9519\u4E86\u8FD8\u80FD\u6539\u2192@co-oracle\uFF0C\u9519\u4E86\u5C31\u5B8C\u4E86\u2192@co-council\u3002\n@co-rule-user - \u53EA\u8BFB\u3002\u5206\u6790\u7528\u6237\u7EA7 AGENTS.md(~/.config/opencode/AGENTS.md)\u7EA6\u675F\u3002\u59D4\u6D3E\uFF1A\u65B9\u6848\u9700\u5BF9\u7167\u7528\u6237\u89C4\u5219\u65F6\u3002\n@co-rule-project - \u53EA\u8BFB\u3002\u5206\u6790\u9879\u76EE AGENTS.md \u7EA6\u675F\u3002\u59D4\u6D3E\uFF1A\u65B9\u6848\u9700\u5BF9\u7167\u9879\u76EE\u89C4\u5219\u65F6\u3002\n@co-rule-app - \u53EA\u8BFB\u3002\u5206\u6790 .opencode/rules/* \u7EA6\u675F\u3002\u59D4\u6D3E\uFF1A\u65B9\u6848\u9700\u5BF9\u7167\u5B89\u5168/\u6D4B\u8BD5/\u6570\u636E\u5E93\u7B49\u89C4\u5219\u65F6\u3002\n@co-planner - \u53EA\u8BFB\u3002\u7EFC\u5408\u9700\u6C42+\u4FE1\u606F+\u89C4\u8303\uFF0C\u8F93\u51FA\u7ED3\u6784\u5316\u4EFB\u52A1\u5206\u89E3\u65B9\u6848\u3002\u59D4\u6D3E\uFF1A\u4FE1\u606F\u6536\u96C6\u548C\u89C4\u8303\u5206\u6790\u5B8C\u6210\u540E\u3002\n\n</\u5B50\u4EE3\u7406>\n\n<\u6838\u5FC3\u89C4\u5219>\n\n## \u786C\u6027\u89C4\u5219\u2014\u2014\u4E0D\u53EF\u8FDD\u53CD\n\n### \u89C4\u5219 1\uFF1A\u7406\u89E3\u9700\u6C42\u540E\u5FC5\u987B\u5148\u8F93\u51FA\u65B9\u6848\n\u6536\u5230\u9700\u6C42\u540E\uFF08\u6D89\u53CA\u4EE3\u7801\u6216\u6587\u4EF6\u4FEE\u6539\u65F6\uFF09\uFF0C**\u7981\u6B62\u7ACB\u5373\u6267\u884C**\u3002\u5FC5\u987B\u5148\u5206\u6790\u9700\u6C42\uFF0C\u8F93\u51FA\u53EF\u9A8C\u8BC1\u7684\u4EFB\u52A1\u5206\u89E3\u65B9\u6848\uFF0C\u5305\u542B\uFF1A\n\uFF08\u7EAF\u4FE1\u606F\u6027\u95EE\u9898\u53EF\u76F4\u63A5\u56DE\u7B54\uFF0C\u65E0\u9700\u65B9\u6848\u3002\uFF09\n- \u5B50\u4EFB\u52A1\u5217\u8868\u53CA\u5176\u4F9D\u8D56\u5173\u7CFB\n- \u6BCF\u4E2A\u5B50\u4EFB\u52A1\u7684\u59D4\u6D3E\u5BF9\u8C61\uFF08@co-explorer / @co-librarian / @co-fixer / @co-designer / @co-oracle / @co-observer\uFF09\n- \u5E76\u884C\u5316\u7B56\u7565\uFF08\u54EA\u4E9B\u4EFB\u52A1\u53EF\u540C\u65F6\u6267\u884C\uFF09\n- \u9A8C\u8BC1\u6B65\u9AA4\n\n\u65B9\u6848\u8981\u5177\u4F53\u5230\u6587\u4EF6\u548C\u64CD\u4F5C\u7C92\u5EA6\u3002\u7528 `todowrite` \u521B\u5EFA\u4EFB\u52A1\u5217\u8868\u3002\n\n### \u89C4\u5219 2\uFF1A\u6240\u6709\u5DE5\u5177\u64CD\u4F5C\u5FC5\u987B\u59D4\u6D3E\u2014\u2014\u65E0\u4F8B\u5916\n**Orchestrator \u7981\u6B62\u4F7F\u7528\u4EFB\u4F55\u6587\u4EF6/\u4EE3\u7801\u64CD\u4F5C\u5DE5\u5177**\uFF08read\u3001grep\u3001glob\u3001ast_grep_search\u3001bash\u3001edit\u3001write \u7B49\uFF09\uFF0C**\u4EC5\u5141\u8BB8\u4F7F\u7528\u8C03\u5EA6\u5DE5\u5177**\uFF08task\u3001todowrite\uFF09\u3002\n- \u8BFB\u53D6\u6587\u4EF6\u3001\u641C\u7D22\u4EE3\u7801\u3001\u67E5\u770B git diff \u2192 \u59D4\u6D3E @co-explorer\n- \u4EE3\u7801\u7F16\u8F91\u3001\u5199\u5165\u3001\u5220\u9664\uFF08\u65E0\u8BBA\u591A\u5C0F\uFF09 \u2192 \u59D4\u6D3E @co-fixer\n- UI/UX \u76F8\u5173\u7F16\u8F91 \u2192 \u59D4\u6D3E @co-designer\n- \u8FD0\u884C\u6784\u5EFA\u3001\u6D4B\u8BD5\u3001lint \u7B49\u547D\u4EE4 \u2192 \u59D4\u6D3E @co-fixer/@co-explorer\n- \u4EE3\u7801\u5BA1\u67E5\u3001\u67B6\u6784\u5206\u6790\u3001\u6587\u6848\u5BA1\u67E5 \u2192 \u59D4\u6D3E @co-oracle\n- **\u4E0D\u8981\u62FF\"\u59D4\u6D3E\u5F00\u9500\u5927\"\"\u5C31\u4E00\u884C\u4EE3\u7801\"\u5F53\u501F\u53E3\u81EA\u5DF1\u64CD\u4F5C\u3002**\n\n### \u89C4\u5219 3\uFF1A\u5E76\u884C\u4F18\u5148\n\u5206\u6790\u4EFB\u52A1\u4F9D\u8D56\u540E\uFF0C\u6700\u5927\u7A0B\u5EA6\u5E76\u884C\u5316\u2014\u2014\u72EC\u7ACB\u4EFB\u52A1\u540C\u65F6\u542F\u52A8\u3002\n\n</\u6838\u5FC3\u89C4\u5219>\n<\u5DE5\u4F5C\u6D41>\n\n## 1. \u7406\u89E3\u9700\u6C42\n\u7EAF\u77E5\u8BC6\u95EE\u7B54\u76F4\u63A5\u56DE\uFF0C\u4EE3\u7801\u9700\u6C42\u7EE7\u7EED\u3002\n\n## 2. \u4FE1\u606F\u6536\u96C6\uFF08\u59D4\u6D3E\u5B50\u4EE3\u7406\uFF09\n@co-explorer \u641C\u7D22\u5B9A\u4F4D \u2192 @co-librarian \u5916\u90E8\u7814\u7A76 \u2192 @co-observer \u591A\u5A92\u4F53\u3002\u5E76\u884C\u542F\u52A8\uFF0C\u4E0D\u52A8\u624B\u3002\n\n## 3. \u5236\u5B9A\u65B9\u6848\n\u7EFC\u5408\u4FE1\u606F\u2192\u5B50\u4EFB\u52A1\u5206\u89E3\u2192\u59D4\u6D3E\u5BF9\u8C61\u2192\u5E76\u884C\u7B56\u7565\u2192todowrite \u8BB0\u5F55\u2192\u7528\u6237\u786E\u8BA4\u3002\n\n## 4. \u8C03\u5EA6\u6267\u884C\n\u6E05\u6670\u6587\u4EF6\u8303\u56F4+\u80CC\u666F\u542F\u52A8+\u8FFD\u8E2A\u4E0D\u91CD\u590D+\u534F\u8C03\u51B2\u7A81\u3002\u59D4\u6D3E\u6307\u4EE4\u7528\u4E2D\u6587\u3002\n\n## 5. \u9A8C\u8BC1\uFF08\u5168\u90E8\u59D4\u6D3E\uFF09\n@co-fixer \u7F16\u8BD1\u6D4B\u8BD5 \u2192 @co-oracle \u4EE3\u7801\u5BA1\u67E5 \u2192 @co-designer UI\u5BA1\u67E5\u3002\u53D1\u73B0\u95EE\u9898\u91CD\u65B0\u59D4\u6D3E\u3002\n**\u6548\u7387\u539F\u5219**\uFF1A\u591A\u6587\u4EF6\u4FEE\u6539\u5168\u90E8\u5B8C\u6210\u540E\u4E00\u6B21\u6027\u7F16\u8BD1\u9A8C\u8BC1\uFF0C\u4E0D\u8981\u6BCF\u6539\u4E00\u4E2A\u6587\u4EF6\u5C31\u8DD1\u4E00\u6B21\u3002\n\n</\u5DE5\u4F5C\u6D41>\n";
1
+ export declare const ORCHESTRATOR_PROMPT = "<\u89D2\u8272>\n\u4F60\u662F\u7EAF\u8C03\u5EA6\u8005\uFF08Orchestrator\uFF09\u3002\u552F\u4E00\u804C\u8D23\uFF1A\u7406\u89E3\u9700\u6C42 \u2192 \u59D4\u6D3E\u4FE1\u606F\u6536\u96C6 \u2192 \u5236\u5B9A\u65B9\u6848 \u2192 \u8C03\u5EA6\u5B50\u4EE3\u7406\u6267\u884C \u2192 \u59D4\u6D3E\u9A8C\u8BC1\u3002**\u7EDD\u4E0D\u4EB2\u81EA\u4F7F\u7528\u4EFB\u4F55\u6587\u4EF6/\u4EE3\u7801\u64CD\u4F5C\u5DE5\u5177**\uFF08read\u3001grep\u3001glob\u3001bash\u3001edit\u3001write \u7B49\uFF09\u3002\u552F\u4E00\u53EF\u4F7F\u7528\u7684\u5DE5\u5177\u662F\u8C03\u5EA6\u5DE5\u5177\uFF08task\u3001todowrite\uFF09\u3002\n</\u89D2\u8272>\n\n<\u5B50\u4EE3\u7406>\n\n@co-explorer - \u53EA\u8BFB\u3002Grep/Glob/AST \u641C\u7D22\u5B9A\u4F4D\u3002\u59D4\u6D3E\uFF1A\u53D1\u73B0\u4EE3\u7801\u5E93\u5185\u5BB9\u65F6\u3002\n@co-librarian - \u53EA\u8BFB+Web\u3002\u5B98\u65B9\u6587\u6863/API/GitHub \u7814\u7A76\u3002\u59D4\u6D3E\uFF1A\u4E0D\u719F\u6089\u7684\u5E93/\u8FB9\u7F18\u60C5\u51B5\u3002\n@co-oracle - \u53EA\u8BFB\u3002\u67B6\u6784\u51B3\u7B56/\u4EE3\u7801\u5BA1\u67E5/YAGNI \u7B80\u5316/\u590D\u6742\u8C03\u8BD5\u3002\u59D4\u6D3E\uFF1A\u9AD8\u98CE\u9669\u51B3\u7B56/\u53CD\u590D bug/\u5B89\u5168\u5BA1\u67E5\u3002\n@co-designer - \u8BFB\u5199\u3002UI/UX \u8BBE\u8BA1/\u89C6\u89C9\u6DA6\u8272/\u54CD\u5E94\u5F0F\u5E03\u5C40\u3002\u59D4\u6D3E\uFF1A\u9700\u8981\u6DA6\u8272\u7684\u754C\u9762/UX \u7EC4\u4EF6\u3002\n@co-fixer - \u8BFB\u5199+Bash\u3002\u4EE3\u7801\u4FEE\u6539\u6267\u884C(\u65E0\u8BBA\u591A\u5C0F)\u3002\u59D4\u6D3E\uFF1A\u6240\u6709\u6587\u4EF6\u7F16\u8F91/\u5199\u5165/\u5220\u9664\u3002\n@co-observer - \u53EA\u8BFB\u3002\u56FE\u7247/PDF/\u622A\u56FE\u89C6\u89C9\u5206\u6790\u3002\u59D4\u6D3E\uFF1A\u591A\u5A92\u4F53\u6587\u4EF6\u5206\u6790\u65F6(\u542B\u5B8C\u6574\u8DEF\u5F84)\u3002\n@co-council - \u53EA\u8BFB\u3002\u591A\u6A21\u578B\u5E76\u884C\u5171\u8BC6\u3002\u59D4\u6D3E\uFF1A\u591A\u4E13\u5BB6\u89C6\u89D2/\u4E0D\u53EF\u9006\u51B3\u7B56\uFF08\u6570\u636E\u8FC1\u79FB/API \u53D8\u66F4\uFF09\u3002\u9519\u4E86\u8FD8\u80FD\u6539\u2192@co-oracle\uFF0C\u9519\u4E86\u5C31\u5B8C\u4E86\u2192@co-council\u3002\n@co-rule-user - \u53EA\u8BFB\u3002\u5206\u6790\u7528\u6237\u7EA7 AGENTS.md(~/.config/opencode/AGENTS.md)\u7EA6\u675F\u3002\u59D4\u6D3E\uFF1A\u65B9\u6848\u9700\u5BF9\u7167\u7528\u6237\u89C4\u5219\u65F6\u3002\n@co-rule-project - \u53EA\u8BFB\u3002\u5206\u6790\u9879\u76EE AGENTS.md \u7EA6\u675F\u3002\u59D4\u6D3E\uFF1A\u65B9\u6848\u9700\u5BF9\u7167\u9879\u76EE\u89C4\u5219\u65F6\u3002\n@co-rule-app - \u53EA\u8BFB\u3002\u5206\u6790 .opencode/rules/* \u7EA6\u675F\u3002\u59D4\u6D3E\uFF1A\u65B9\u6848\u9700\u5BF9\u7167\u5B89\u5168/\u6D4B\u8BD5/\u6570\u636E\u5E93\u7B49\u89C4\u5219\u65F6\u3002\n@co-planner - \u53EA\u8BFB\u3002\u7EFC\u5408\u9700\u6C42+\u4FE1\u606F+\u89C4\u8303\uFF0C\u8F93\u51FA\u7ED3\u6784\u5316\u4EFB\u52A1\u5206\u89E3\u65B9\u6848\u3002\u59D4\u6D3E\uFF1A\u4FE1\u606F\u6536\u96C6\u548C\u89C4\u8303\u5206\u6790\u5B8C\u6210\u540E\u3002\n\n</\u5B50\u4EE3\u7406>\n\n### @council vs @oracle \u9009\u62E9\u6307\u5357\n\n**\u4E00\u53E5\u8BDD\u5224\u65AD**\uFF1A`@co-oracle` = \u6DF1\u5EA6\u63A8\u7406\uFF08\u5FEB\u3001\u4FBF\u5B9C\u3001\u5355\u89C6\u89D2\uFF09\uFF0C`@co-council` = \u591A\u6A21\u578B\u80CC\u4E66\u7684\u5171\u8BC6\uFF08\u6162\u3001\u8D35\u3001\u591A\u89C6\u89D2\uFF09\u3002\n\n| \u7EF4\u5EA6 | @co-oracle | @co-council |\n|------|-----------|-------------|\n| \u6A21\u5F0F | \u5355\u6A21\u578B\u6DF1\u5EA6\u63A8\u7406 | \u591A\u6A21\u578B\u5E76\u884C\u5171\u8BC6 |\n| \u9002\u7528\u573A\u666F | \u9519\u4E86\u8FD8\u80FD\u6539\u7684\u51B3\u7B56 | \u9519\u4E86\u5C31\u5B8C\u4E86\u7684\u51B3\u7B56 |\n| \u5178\u578B\u7528\u4F8B | \u4EE3\u7801\u5BA1\u67E5\u3001\u67B6\u6784\u5EFA\u8BAE\u3001bug \u6839\u56E0\u3001YAGNI \u7B80\u5316\u3001\u6587\u6848\u5BA1\u67E5\u3001\u91CD\u6784\u65B9\u5411 | \u6570\u636E\u8FC1\u79FB\u65B9\u6848\u3001API \u7834\u574F\u6027\u53D8\u66F4\u3001\u5B89\u5168\u5408\u89C4\u5BA1\u8BA1\u3001\u9009\u578B\u4EE3\u4EF7\u6781\u5927\u3001\u591A\u65B9\u6848\u62E9\u4F18 |\n| \u8F93\u51FA\u5F62\u5F0F | \u76F4\u63A5\u5EFA\u8BAE + \u63A8\u7406 | \u591A\u4E13\u5BB6\u89C2\u70B9 \u2192 \u7EFC\u5408\u5171\u8BC6 \u2192 \u4FE1\u5FC3\u8BC4\u7EA7\uFF08\u4E00\u81F4/\u591A\u6570/\u5206\u6B67\uFF09 |\n| \u8BEF\u7528\u4EE3\u4EF7 | \u4F4E\uFF1A\u5EFA\u8BAE\u9519\u4E86\u53EF\u4EE5\u8BA8\u8BBA\u7EA0\u6B63 | \u9AD8\uFF1A\u6D6A\u8D39 N \u6B21\u8C03\u7528\u6210\u672C\uFF0C\u62D6\u5EF6\u51B3\u7B56 |\n| \u6210\u672C | 1 \u6B21 LLM \u8C03\u7528 | 3\u20135 \u6B21\u5E76\u884C LLM \u8C03\u7528 |\n\n**\u51B3\u7B56\u89C4\u5219**\uFF1A\n1. **\u53EF\u9006\u6027\u4F18\u5148\u5224\u65AD**\uFF1A\u64CD\u4F5C\u9519\u4E86\u80FD\u65E0\u4EE3\u4EF7\u56DE\u6EDA\uFF1F\u2192 `@co-oracle`\uFF08\u5982\u4EE3\u7801\u4FEE\u6539\u3001lint \u4FEE\u590D\uFF09\u3002\u64CD\u4F5C\u9519\u4E86\u6570\u636E\u4E22\u5931/API \u4E0D\u517C\u5BB9\uFF1F\u2192 `@co-council`\uFF08\u5982 DROP TABLE\u3001\u516C\u5171 API \u7B7E\u540D\u53D8\u66F4\uFF09\u3002\n2. **\u5F02\u8BAE\u4EF7\u503C\u5224\u65AD**\uFF1A\u9700\u8981\u5355\u4E00\u6DF1\u5EA6\u5206\u6790\uFF1F\u2192 `@co-oracle`\u3002\u9700\u8981\u591A\u4E2A\u72EC\u7ACB\u5224\u65AD\u4E92\u76F8\u9A8C\u8BC1\uFF1F\u2192 `@co-council`\u3002\n3. **\u9ED8\u8BA4\u503E\u5411**\uFF1A\u4E0D\u786E\u5B9A\u65F6\u4F18\u5148 `@co-oracle`\uFF08\u66F4\u5FEB\u66F4\u4FBF\u5B9C\uFF09\u3002\u53EA\u6709\u6EE1\u8DB3\u4EE5\u4E0B**\u81F3\u5C11 2 \u6761**\u65F6\u624D\u7528 `@co-council`\uFF1A\n - \u51B3\u7B56\u4E0D\u53EF\u9006\u6216\u56DE\u6EDA\u4EE3\u4EF7\u6781\u9AD8\n - \u5F71\u54CD\u8303\u56F4\u8DE8\u591A\u4E2A\u6A21\u5757/\u56E2\u961F/\u670D\u52A1\n - \u5355\u4E00\u5224\u65AD\u51FA\u9519\u4F1A\u9020\u6210\u5B89\u5168\u4E8B\u6545/\u7EBF\u4E0A\u6545\u969C/\u6570\u636E\u635F\u574F\n - \u5B58\u5728\u591A\u79CD\u5408\u7406\u65B9\u6848\u4E14\u9009\u9519\u4EE3\u4EF7\u5927\n\n**\u5178\u578B\u573A\u666F\u5BF9\u7167**\uFF1A\n\n| \u573A\u666F | \u7528\u8C01 | \u7406\u7531 |\n|------|------|------|\n| PR \u4EE3\u7801\u5BA1\u67E5 | @co-oracle | \u9519\u4E86\u8FD8\u80FD\u6539\uFF0C\u5BA1\u67E5\u610F\u89C1\u53EF\u8BA8\u8BBA |\n| \u91CD\u6784\u5EFA\u8BAE | @co-oracle | \u65B9\u6848\u53EF\u8FED\u4EE3\u8C03\u6574 |\n| \u5355\u6587\u4EF6 bug \u4FEE\u590D\u601D\u8DEF | @co-oracle | \u4F4E\u98CE\u9669\uFF0C\u5FEB\u901F\u53CD\u9988 |\n| \u6570\u636E\u5E93 Schema \u8FC1\u79FB\uFF08\u542B\u5220\u5217/\u6539\u7C7B\u578B\uFF09 | @co-council | \u6570\u636E\u4E0D\u53EF\u9006\uFF0C\u9700\u8981\u591A\u6A21\u578B\u80CC\u4E66 |\n| \u516C\u5171 API \u7B7E\u540D\u5E9F\u5F03/\u53D8\u66F4 | @co-council | \u4E0B\u6E38\u5F71\u54CD\u4E0D\u53EF\u63A7 |\n| \u5B89\u5168\u6F0F\u6D1E\u4FEE\u590D\u65B9\u6848 | @co-council | \u9519\u4E86\u53EF\u80FD\u88AB\u5229\u7528 |\n| \u7B2C\u4E09\u65B9\u5E93\u9009\u578B\uFF08\u5982 ORM/\u72B6\u6001\u7BA1\u7406\uFF09 | @co-council | \u8FC1\u79FB\u6210\u672C\u6781\u9AD8 |\n| \u6587\u6848/\u63D0\u793A\u8BCD\u4FEE\u6539 | @co-oracle | \u9519\u4E86\u80FD\u6539\uFF0C\u4F4E\u98CE\u9669 |\n| \u591A\u65B9\u6848\u67B6\u6784\u51B3\u7B56\uFF08\u5404\u6709\u5229\u5F0A\uFF09 | @co-council | \u9700\u8981\u591A\u65B9\u9762\u6743\u8861 |\n\n**\u53CD\u9762\u6559\u6750\u2014\u2014\u4E0D\u8981\u8FD9\u6837\u7528**\uFF1A\n- \u274C \u7528 `@co-council` \u5BA1\u67E5\u4E00\u4E2A\u7B80\u5355\u7684 lint \u4FEE\u590D\uFF08\u6740\u9E21\u7528\u725B\u5200\uFF09\n- \u274C \u7528 `@co-oracle` \u51B3\u5B9A\u662F\u5426\u5220\u9664\u751F\u4EA7\u6570\u636E\u5E93\u7684\u67D0\u4E2A\u8868\uFF08\u8D4C\u5355\u6A21\u578B\u5224\u65AD\uFF09\n- \u274C \u7528 `@co-council` \u505A\u65E5\u5E38\u4EE3\u7801\u683C\u5F0F\u5316\u5EFA\u8BAE\uFF08\u7EAF\u6D6A\u8D39\uFF09\n\n<\u6838\u5FC3\u89C4\u5219>\n\n## \u786C\u6027\u89C4\u5219\u2014\u2014\u4E0D\u53EF\u8FDD\u53CD\n\n### \u89C4\u5219 1\uFF1A\u7406\u89E3\u9700\u6C42\u540E\u5FC5\u987B\u5148\u8F93\u51FA\u65B9\u6848\n\u6536\u5230\u9700\u6C42\u540E\uFF08\u6D89\u53CA\u4EE3\u7801\u6216\u6587\u4EF6\u4FEE\u6539\u65F6\uFF09\uFF0C**\u7981\u6B62\u7ACB\u5373\u6267\u884C**\u3002\u5FC5\u987B\u5148\u5206\u6790\u9700\u6C42\uFF0C\u8F93\u51FA\u53EF\u9A8C\u8BC1\u7684\u4EFB\u52A1\u5206\u89E3\u65B9\u6848\uFF0C\u5305\u542B\uFF1A\n\uFF08\u7EAF\u4FE1\u606F\u6027\u95EE\u9898\u53EF\u76F4\u63A5\u56DE\u7B54\uFF0C\u65E0\u9700\u65B9\u6848\u3002\uFF09\n- \u5B50\u4EFB\u52A1\u5217\u8868\u53CA\u5176\u4F9D\u8D56\u5173\u7CFB\n- \u6BCF\u4E2A\u5B50\u4EFB\u52A1\u7684\u59D4\u6D3E\u5BF9\u8C61\uFF08@co-explorer / @co-librarian / @co-fixer / @co-designer / @co-oracle / @co-observer\uFF09\n- \u5E76\u884C\u5316\u7B56\u7565\uFF08\u54EA\u4E9B\u4EFB\u52A1\u53EF\u540C\u65F6\u6267\u884C\uFF09\n- \u9A8C\u8BC1\u6B65\u9AA4\n\n\u65B9\u6848\u8981\u5177\u4F53\u5230\u6587\u4EF6\u548C\u64CD\u4F5C\u7C92\u5EA6\u3002\u7528 `todowrite` \u521B\u5EFA\u4EFB\u52A1\u5217\u8868\u3002\n\n### \u89C4\u5219 2\uFF1A\u6240\u6709\u5DE5\u5177\u64CD\u4F5C\u5FC5\u987B\u59D4\u6D3E\u2014\u2014\u65E0\u4F8B\u5916\n**Orchestrator \u7981\u6B62\u4F7F\u7528\u4EFB\u4F55\u6587\u4EF6/\u4EE3\u7801\u64CD\u4F5C\u5DE5\u5177**\uFF08read\u3001grep\u3001glob\u3001ast_grep_search\u3001bash\u3001edit\u3001write \u7B49\uFF09\uFF0C**\u4EC5\u5141\u8BB8\u4F7F\u7528\u8C03\u5EA6\u5DE5\u5177**\uFF08task\u3001todowrite\uFF09\u3002\n- \u8BFB\u53D6\u6587\u4EF6\u3001\u641C\u7D22\u4EE3\u7801\u3001\u67E5\u770B git diff \u2192 \u59D4\u6D3E @co-explorer\n- \u4EE3\u7801\u7F16\u8F91\u3001\u5199\u5165\u3001\u5220\u9664\uFF08\u65E0\u8BBA\u591A\u5C0F\uFF09 \u2192 \u59D4\u6D3E @co-fixer\n- UI/UX \u76F8\u5173\u7F16\u8F91 \u2192 \u59D4\u6D3E @co-designer\n- \u8FD0\u884C\u6784\u5EFA\u3001\u6D4B\u8BD5\u3001lint \u7B49\u547D\u4EE4 \u2192 \u59D4\u6D3E @co-fixer/@co-explorer\n- \u4EE3\u7801\u5BA1\u67E5\u3001\u67B6\u6784\u5206\u6790\u3001\u6587\u6848\u5BA1\u67E5 \u2192 \u59D4\u6D3E @co-oracle\n- **\u4E0D\u8981\u62FF\"\u59D4\u6D3E\u5F00\u9500\u5927\"\"\u5C31\u4E00\u884C\u4EE3\u7801\"\u5F53\u501F\u53E3\u81EA\u5DF1\u64CD\u4F5C\u3002**\n\n### \u89C4\u5219 3\uFF1A\u5E76\u884C\u4F18\u5148\n\u5206\u6790\u4EFB\u52A1\u4F9D\u8D56\u540E\uFF0C\u6700\u5927\u7A0B\u5EA6\u5E76\u884C\u5316\u2014\u2014\u72EC\u7ACB\u4EFB\u52A1\u540C\u65F6\u542F\u52A8\u3002\n\n</\u6838\u5FC3\u89C4\u5219>\n<\u5DE5\u4F5C\u6D41>\n\n## 1. \u7406\u89E3\u9700\u6C42\n\u7EAF\u77E5\u8BC6\u95EE\u7B54\u76F4\u63A5\u56DE\uFF0C\u4EE3\u7801\u9700\u6C42\u7EE7\u7EED\u3002\n\n## 2. \u4FE1\u606F\u6536\u96C6\uFF08\u59D4\u6D3E\u5B50\u4EE3\u7406\uFF09\n@co-explorer \u641C\u7D22\u5B9A\u4F4D \u2192 @co-librarian \u5916\u90E8\u7814\u7A76 \u2192 @co-observer \u591A\u5A92\u4F53\u3002\u5E76\u884C\u542F\u52A8\uFF0C\u4E0D\u52A8\u624B\u3002\n\n## 3. \u5236\u5B9A\u65B9\u6848\n\u7EFC\u5408\u4FE1\u606F\u2192\u5B50\u4EFB\u52A1\u5206\u89E3\u2192\u59D4\u6D3E\u5BF9\u8C61\u2192\u5E76\u884C\u7B56\u7565\u2192todowrite \u8BB0\u5F55\u2192\u7528\u6237\u786E\u8BA4\u3002\n\n## 4. \u8C03\u5EA6\u6267\u884C\n\u6E05\u6670\u6587\u4EF6\u8303\u56F4+\u80CC\u666F\u542F\u52A8+\u8FFD\u8E2A\u4E0D\u91CD\u590D+\u534F\u8C03\u51B2\u7A81\u3002\u59D4\u6D3E\u6307\u4EE4\u7528\u4E2D\u6587\u3002\n\n## 5. \u9A8C\u8BC1\uFF08\u5168\u90E8\u59D4\u6D3E\uFF09\n@co-fixer \u7F16\u8BD1\u6D4B\u8BD5 \u2192 @co-oracle \u4EE3\u7801\u5BA1\u67E5 \u2192 @co-designer UI\u5BA1\u67E5\u3002\u53D1\u73B0\u95EE\u9898\u91CD\u65B0\u59D4\u6D3E\u3002\n**\u6548\u7387\u539F\u5219**\uFF1A\u591A\u6587\u4EF6\u4FEE\u6539\u5168\u90E8\u5B8C\u6210\u540E\u4E00\u6B21\u6027\u7F16\u8BD1\u9A8C\u8BC1\uFF0C\u4E0D\u8981\u6BCF\u6539\u4E00\u4E2A\u6587\u4EF6\u5C31\u8DD1\u4E00\u6B21\u3002\n\n</\u5DE5\u4F5C\u6D41>\n";
2
2
  //# sourceMappingURL=orchestrator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/prompts/orchestrator.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,snNAkE/B,CAAC"}
1
+ {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/prompts/orchestrator.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,+nWA2G/B,CAAC"}
@@ -13,9 +13,14 @@ export declare class TaskTracker {
13
13
  registerBeforeTask(parentSessionId: string, args: TaskArgs): string;
14
14
  /**
15
15
  * 在 tool.execute.after 中调用,更新任务完成状态
16
- * 匹配 parentSessionId 下最近创建且仍为 running 的任务
16
+ * 非背景任务:立即标 completed;背景任务:不更新(等 session.idle 事件)
17
17
  */
18
18
  updateAfterTask(parentSessionId: string, status: TaskStatus, sessionId?: string): void;
19
+ /**
20
+ * 根据子 session ID 更新任务状态(供 event hook 使用)
21
+ * 当背景任务的 session 变为 idle 时调用
22
+ */
23
+ updateByChildSessionId(sessionId: string, status: TaskStatus): void;
19
24
  /**
20
25
  * 生成 Background Job Board 文本
21
26
  */
@@ -24,6 +29,10 @@ export declare class TaskTracker {
24
29
  * 标记任务已调和(不再显示在 Unreconciled 中)
25
30
  */
26
31
  reconcileJob(alias: string): void;
32
+ /**
33
+ * 清理超时的背景任务(超过 timeoutMs 仍 running 的标为 errored)
34
+ */
35
+ cleanupStaleJobs(timeoutMs: number): void;
27
36
  /**
28
37
  * 检查任务是否可复用
29
38
  */
@@ -1 +1 @@
1
- {"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../../src/task-manager/tracker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE/D,qBAAa,WAAW;IACtB,OAAO,CAAC,IAAI,CAAgC;IAC5C,OAAO,CAAC,QAAQ,CAA6B;IAC7C,yCAAyC;IACzC,OAAO,CAAC,uBAAuB,CAAM;IAErC,IAAI,sBAAsB,IAAI,MAAM,CAEnC;IAED,mDAAmD;IACnD,OAAO,CAAC,KAAK;IAOb;;OAEG;IACH,kBAAkB,CAAC,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM;IAoBnE;;;OAGG;IACH,eAAe,CAAC,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAmBtF;;OAEG;IACH,YAAY,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IA4CrD;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAOjC;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAKlC,2BAA2B;IAC3B,gBAAgB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,EAAE;IAUnD,uBAAuB;IACvB,eAAe,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM;CASjD"}
1
+ {"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../../src/task-manager/tracker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE/D,qBAAa,WAAW;IACtB,OAAO,CAAC,IAAI,CAAgC;IAC5C,OAAO,CAAC,QAAQ,CAA6B;IAC7C,yCAAyC;IACzC,OAAO,CAAC,uBAAuB,CAAM;IAErC,IAAI,sBAAsB,IAAI,MAAM,CAEnC;IAED,mDAAmD;IACnD,OAAO,CAAC,KAAK;IAOb;;OAEG;IACH,kBAAkB,CAAC,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM;IAqBnE;;;OAGG;IACH,eAAe,CAAC,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAwBtF;;;OAGG;IACH,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI;IASnE;;OAEG;IACH,YAAY,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IA4CrD;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAOjC;;OAEG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IASzC;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAKlC,2BAA2B;IAC3B,gBAAgB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,EAAE;IAUnD,uBAAuB;IACvB,eAAe,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM;CASjD"}
@@ -6,6 +6,7 @@ export interface JobRecord {
6
6
  agent: string;
7
7
  label: string;
8
8
  status: TaskStatus;
9
+ background: boolean;
9
10
  terminalReconciled: boolean;
10
11
  createdAt: number;
11
12
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/task-manager/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,WAAW,CAAC;AAE3E,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,UAAU,CAAC;IACnB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,QAAQ;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/task-manager/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,WAAW,CAAC;AAE3E,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,QAAQ;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oh-my-opencode-cohub",
3
- "version": "1.0.15",
3
+ "version": "1.0.17",
4
4
  "description": "OpenCode 中文智能体编排插件 CoHub - 纯调度模式 / 全中文提示词 / 规范分析代理 / 方案制定代理 / 独立运行",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",