oh-my-opencode-cohub 1.0.1 → 1.0.3

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.
@@ -13,6 +13,11 @@ export declare function registerCoOrchestratorToAgent(): {
13
13
  success: boolean;
14
14
  message: string;
15
15
  };
16
+ /** 写入默认配置模板(如文件不存在) */
17
+ export declare function writeDefaultConfig(): {
18
+ success: boolean;
19
+ message: string;
20
+ };
16
21
  /** 卸载 CoHub——精确清理,不碰其他插件数据 */
17
22
  export declare function uninstallCoHub(): {
18
23
  success: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"config-io.d.ts","sourceRoot":"","sources":["../../src/cli/config-io.ts"],"names":[],"mappings":"AA4BA,2CAA2C;AAC3C,wBAAgB,yBAAyB,IAAI;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAajF;AAED,sCAAsC;AACtC,wBAAgB,oBAAoB,IAAI;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAa5E;AAOD,gFAAgF;AAChF,wBAAgB,6BAA6B,IAAI;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAuBrF;AAED,8BAA8B;AAC9B,wBAAgB,cAAc,IAAI;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAuGzE"}
1
+ {"version":3,"file":"config-io.d.ts","sourceRoot":"","sources":["../../src/cli/config-io.ts"],"names":[],"mappings":"AA4BA,2CAA2C;AAC3C,wBAAgB,yBAAyB,IAAI;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAajF;AAED,sCAAsC;AACtC,wBAAgB,oBAAoB,IAAI;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAa5E;AAOD,gFAAgF;AAChF,wBAAgB,6BAA6B,IAAI;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAuBrF;AAID,uBAAuB;AACvB,wBAAgB,kBAAkB,IAAI;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CA6B1E;AAED,8BAA8B;AAC9B,wBAAgB,cAAc,IAAI;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAuGzE"}
package/dist/cli/index.js CHANGED
@@ -75,6 +75,38 @@ function registerCoOrchestratorToAgent() {
75
75
  writeJSON(configPath, config);
76
76
  return { success: true, message: "✓ 已将 co-orchestrator (primary) 注册到 opencode.json 的 agent 字段" };
77
77
  }
78
+ var COHUB_CONFIG_PATH = path.join(os.homedir(), ".config", "opencode", "oh-my-opencode-cohub.json");
79
+ function writeDefaultConfig() {
80
+ if (fs.existsSync(COHUB_CONFIG_PATH)) {
81
+ return { success: true, message: "oh-my-opencode-cohub.json 已存在,跳过" };
82
+ }
83
+ const defaultConfig = {
84
+ $schema: "https://unpkg.com/oh-my-opencode-cohub@latest/oh-my-opencode-cohub.schema.json",
85
+ agents: {
86
+ "co-orchestrator": { model: "deepseek/deepseek-v4-pro", variant: "max" },
87
+ "co-oracle": { model: "deepseek/deepseek-v4-pro", variant: "max" },
88
+ "co-librarian": { model: "deepseek/deepseek-v4-flash", variant: "low" },
89
+ "co-explorer": { model: "deepseek/deepseek-v4-flash", variant: "low" },
90
+ "co-designer": { model: "minimax/MiniMax-M3", variant: "medium" },
91
+ "co-fixer": { model: "deepseek/deepseek-v4-flash", variant: "high" },
92
+ "co-observer": { model: "codermxtest/gpt-5.5", variant: "low" },
93
+ "co-council": { model: "deepseek/deepseek-v4-pro", variant: "high" },
94
+ "co-rule-user": { model: "deepseek/deepseek-v4-flash", variant: "medium" },
95
+ "co-rule-project": { model: "deepseek/deepseek-v4-flash", variant: "medium" },
96
+ "co-rule-app": { model: "deepseek/deepseek-v4-flash", variant: "medium" },
97
+ "co-planner": { model: "deepseek/deepseek-v4-pro", variant: "high" }
98
+ }
99
+ };
100
+ try {
101
+ const dir = path.dirname(COHUB_CONFIG_PATH);
102
+ if (!fs.existsSync(dir))
103
+ fs.mkdirSync(dir, { recursive: true });
104
+ fs.writeFileSync(COHUB_CONFIG_PATH, JSON.stringify(defaultConfig, null, 2), "utf-8");
105
+ return { success: true, message: "✓ 已创建 oh-my-opencode-cohub.json 配置模板" };
106
+ } catch {
107
+ return { success: false, message: "⚠ 无法创建配置文件" };
108
+ }
109
+ }
78
110
  function uninstallCoHub() {
79
111
  const messages = [];
80
112
  const configPath = getOpencodeConfigPath();
@@ -189,6 +221,8 @@ async function main() {
189
221
  console.log(r2.message);
190
222
  const r3 = registerCoOrchestratorToAgent();
191
223
  console.log(r3.message);
224
+ const r4 = writeDefaultConfig();
225
+ console.log(r4.message);
192
226
  console.log(`
193
227
  ✅ CoHub 安装完成!`);
194
228
  console.log(' 重启 OpenCode 后,TAB 选择 "co-orchestrator" 开始纯调度模式。');
@@ -0,0 +1,14 @@
1
+ /** 用户配置中单个代理的覆盖项 */
2
+ export interface AgentOverride {
3
+ model?: string;
4
+ variant?: string;
5
+ prompt?: string;
6
+ }
7
+ export interface CoHubConfig {
8
+ agents?: Record<string, AgentOverride>;
9
+ }
10
+ /** 加载用户配置 */
11
+ export declare function loadCoHubConfig(): CoHubConfig;
12
+ /** 示例配置模板 */
13
+ export declare const DEFAULT_CONFIG: CoHubConfig;
14
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAIA,oBAAoB;AACpB,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CACxC;AAKD,aAAa;AACb,wBAAgB,eAAe,IAAI,WAAW,CAQ7C;AAED,aAAa;AACb,eAAO,MAAM,cAAc,EAAE,WAe5B,CAAC"}
@@ -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;AAoClD,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,MAkKlB,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,MAsMlB,CAAC;AAEF,eAAe,WAAW,CAAC"}
package/dist/index.js CHANGED
@@ -62,6 +62,7 @@ var ORCHESTRATOR_PROMPT = `<角色>
62
62
 
63
63
  ## 5. 验证(全部委派)
64
64
  @co-fixer 编译测试 → @co-oracle 代码审查 → @co-designer UI审查。发现问题重新委派。
65
+ **效率原则**:多文件修改全部完成后一次性编译验证,不要每改一个文件就跑一次。
65
66
 
66
67
  </工作流>
67
68
  `;
@@ -536,10 +537,26 @@ class TaskTracker {
536
537
  }
537
538
  }
538
539
 
539
- // src/index.ts
540
+ // src/config/loader.ts
540
541
  import * as fs from "node:fs";
541
542
  import * as path from "node:path";
542
543
  import * as os from "node:os";
544
+ var CONFIG_PATH = path.join(os.homedir(), ".config", "opencode", "oh-my-opencode-cohub.json");
545
+ function loadCoHubConfig() {
546
+ try {
547
+ if (!fs.existsSync(CONFIG_PATH))
548
+ return {};
549
+ const raw = fs.readFileSync(CONFIG_PATH, "utf-8");
550
+ return JSON.parse(raw);
551
+ } catch {
552
+ return {};
553
+ }
554
+ }
555
+
556
+ // src/index.ts
557
+ import * as fs2 from "node:fs";
558
+ import * as path2 from "node:path";
559
+ import * as os2 from "node:os";
543
560
  var CHINESE_PROMPTS = {
544
561
  "co-orchestrator": ORCHESTRATOR_PROMPT,
545
562
  "co-oracle": ORACLE_PROMPT,
@@ -572,21 +589,21 @@ function loadFileOverrides(projectDir) {
572
589
  ];
573
590
  const searchDirs = [];
574
591
  if (projectDir) {
575
- searchDirs.push(path.join(projectDir, ".opencode", "oh-my-opencode-cohub"));
592
+ searchDirs.push(path2.join(projectDir, ".opencode", "oh-my-opencode-cohub"));
576
593
  }
577
- searchDirs.push(path.join(os.homedir(), ".config", "opencode", "oh-my-opencode-cohub"));
594
+ searchDirs.push(path2.join(os2.homedir(), ".config", "opencode", "oh-my-opencode-cohub"));
578
595
  for (const agent of agentNames) {
579
596
  for (const dir of searchDirs) {
580
- const replacePath = path.join(dir, `${agent}.md`);
581
- if (!overrides[agent]?.replace && fs.existsSync(replacePath)) {
597
+ const replacePath = path2.join(dir, `${agent}.md`);
598
+ if (!overrides[agent]?.replace && fs2.existsSync(replacePath)) {
582
599
  try {
583
- overrides[agent] = { ...overrides[agent], replace: fs.readFileSync(replacePath, "utf-8") };
600
+ overrides[agent] = { ...overrides[agent], replace: fs2.readFileSync(replacePath, "utf-8") };
584
601
  } catch {}
585
602
  }
586
- const appendPath = path.join(dir, `${agent}_append.md`);
587
- if (!overrides[agent]?.append && fs.existsSync(appendPath)) {
603
+ const appendPath = path2.join(dir, `${agent}_append.md`);
604
+ if (!overrides[agent]?.append && fs2.existsSync(appendPath)) {
588
605
  try {
589
- overrides[agent] = { ...overrides[agent], append: fs.readFileSync(appendPath, "utf-8") };
606
+ overrides[agent] = { ...overrides[agent], append: fs2.readFileSync(appendPath, "utf-8") };
590
607
  } catch {}
591
608
  }
592
609
  }
@@ -603,91 +620,123 @@ var CoHubPlugin = async (input, options) => {
603
620
  }
604
621
  const promptOverrides = { ...configOverrides, ...fileOverrides };
605
622
  const tracker = new TaskTracker;
606
- const STATE_DIR = path.join(os.homedir(), ".local", "share", "opencode", "storage", "oh-my-opencode-cohub");
607
- const STATE_FILE = path.join(STATE_DIR, "tracker-state.json");
623
+ const STATE_DIR = path2.join(os2.homedir(), ".local", "share", "opencode", "storage", "oh-my-opencode-cohub");
624
+ const STATE_FILE = path2.join(STATE_DIR, "tracker-state.json");
608
625
  function syncTrackerState(sessionId) {
609
626
  try {
610
- if (!fs.existsSync(STATE_DIR)) {
611
- fs.mkdirSync(STATE_DIR, { recursive: true });
627
+ if (!fs2.existsSync(STATE_DIR)) {
628
+ fs2.mkdirSync(STATE_DIR, { recursive: true });
612
629
  }
613
630
  const state = {
614
631
  updatedAt: Date.now(),
615
632
  runningAgents: tracker.getRunningAgents(sessionId),
616
633
  runningCount: tracker.getRunningCount(sessionId)
617
634
  };
618
- fs.writeFileSync(STATE_FILE, JSON.stringify(state), "utf-8");
635
+ fs2.writeFileSync(STATE_FILE, JSON.stringify(state), "utf-8");
636
+ } catch {}
637
+ }
638
+ const AGENT_CONFIG_FILE = path2.join(STATE_DIR, "cohub-state.json");
639
+ function syncAgentConfig() {
640
+ try {
641
+ if (!fs2.existsSync(STATE_DIR)) {
642
+ fs2.mkdirSync(STATE_DIR, { recursive: true });
643
+ }
644
+ const configs = agents.map((a) => ({
645
+ name: a.name,
646
+ description: a.description,
647
+ model: a.config.model,
648
+ variant: a.config.variant || null,
649
+ provider: a.config.model.startsWith("deepseek") ? "deepseek" : a.config.model.startsWith("minimax") || a.config.model.startsWith("MiniMax") ? "minimax" : "codermxtest"
650
+ }));
651
+ fs2.writeFileSync(AGENT_CONFIG_FILE, JSON.stringify({ updatedAt: Date.now(), agents: configs }), "utf-8");
619
652
  } catch {}
620
653
  }
621
654
  const agents = [
655
+ {
656
+ name: "co-orchestrator",
657
+ config: { mode: "primary", model: "deepseek/deepseek-v4-pro", variant: "max", prompt: "你是 CoHub 纯调度者。用中文回复。" }
658
+ },
622
659
  {
623
660
  name: "co-oracle",
624
- mode: "subagent",
625
- description: "战略顾问——架构决策、代码审查、YAGNI 简化",
626
- config: { model: "deepseek/deepseek-v4-pro", variant: "max", prompt: "你是战略顾问。用中文回复。" }
661
+ config: { mode: "subagent", model: "deepseek/deepseek-v4-pro", variant: "max", temperature: 0.1, prompt: "你是战略顾问。用中文回复。" }
627
662
  },
628
663
  {
629
664
  name: "co-librarian",
630
- mode: "subagent",
631
- description: "研究员——外部文档、API 参考、GitHub 示例",
632
- config: { model: "deepseek/deepseek-v4-flash", prompt: "你是研究员。用中文回复。" }
665
+ config: { mode: "subagent", model: "deepseek/deepseek-v4-flash", prompt: "你是研究员。用中文回复。" }
633
666
  },
634
667
  {
635
668
  name: "co-explorer",
636
- mode: "subagent",
637
- description: "代码探索者——Grep/Glob/AST 搜索、文件定位",
638
- config: { model: "deepseek/deepseek-v4-flash", prompt: "你是代码探索者。用中文回复。" }
669
+ config: { mode: "subagent", model: "deepseek/deepseek-v4-flash", prompt: "你是代码探索者。用中文回复。" }
639
670
  },
640
671
  {
641
672
  name: "co-designer",
642
- mode: "subagent",
643
- description: "设计师——UI/UX 设计、视觉润色、响应式布局",
644
- config: { model: "minimax/MiniMax-M3", prompt: "你是设计师。用中文回复。" }
673
+ config: { mode: "subagent", model: "minimax/MiniMax-M3", variant: "medium", prompt: "你是设计师。用中文回复。" }
645
674
  },
646
675
  {
647
676
  name: "co-fixer",
648
677
  mode: "subagent",
649
678
  description: "执行者——代码修改、构建、测试",
650
- config: { model: "deepseek/deepseek-v4-flash", variant: "high", prompt: "你是执行者。用中文回复。" }
679
+ config: { mode: "subagent", model: "deepseek/deepseek-v4-flash", variant: "high", prompt: "你是执行者。用中文回复。" }
651
680
  },
652
681
  {
653
682
  name: "co-observer",
654
- mode: "subagent",
655
683
  description: "观察者——图片/PDF/截图视觉分析",
656
- config: { model: "codermxtest/gpt-5.5", prompt: "你是观察者。用中文回复。" }
684
+ config: { mode: "subagent", model: "codermxtest/gpt-5.5", prompt: "你是观察者。用中文回复。" }
657
685
  },
658
686
  {
659
687
  name: "co-council",
660
- mode: "subagent",
661
688
  description: "多模型共识——并行 LLM 综合",
662
- config: { model: "deepseek/deepseek-v4-pro", variant: "high", prompt: "你是多模型共识协调者。用中文回复。" }
689
+ config: { mode: "subagent", model: "deepseek/deepseek-v4-pro", variant: "high", prompt: "你是多模型共识协调者。用中文回复。" }
663
690
  },
664
691
  {
665
692
  name: "co-rule-user",
666
- mode: "subagent",
667
693
  description: "用户规范分析——~/.config/opencode/AGENTS.md",
668
- config: { model: "deepseek/deepseek-v4-flash", prompt: "你是用户规范分析代理。用中文回复。" }
694
+ config: { mode: "subagent", model: "deepseek/deepseek-v4-flash", prompt: "你是用户规范分析代理。用中文回复。" }
669
695
  },
670
696
  {
671
697
  name: "co-rule-project",
672
- mode: "subagent",
673
698
  description: "项目规范分析——项目 AGENTS.md",
674
- config: { model: "deepseek/deepseek-v4-flash", prompt: "你是项目规范分析代理。用中文回复。" }
699
+ config: { mode: "subagent", model: "deepseek/deepseek-v4-flash", prompt: "你是项目规范分析代理。用中文回复。" }
675
700
  },
676
701
  {
677
702
  name: "co-rule-app",
678
- mode: "subagent",
679
703
  description: "应用规则分析——.opencode/rules/*.md",
680
- config: { model: "deepseek/deepseek-v4-flash", prompt: "你是应用规则分析代理。用中文回复。" }
704
+ config: { mode: "subagent", model: "deepseek/deepseek-v4-flash", prompt: "你是应用规则分析代理。用中文回复。" }
681
705
  },
682
706
  {
683
707
  name: "co-planner",
684
- mode: "subagent",
685
708
  description: "方案制定——综合需求+信息+规范输出任务分解",
686
- config: { model: "deepseek/deepseek-v4-pro", prompt: "你是方案制定代理。用中文回复。" }
709
+ config: { mode: "subagent", model: "deepseek/deepseek-v4-pro", variant: "high", prompt: "你是方案制定代理。用中文回复。" }
687
710
  }
688
711
  ];
712
+ const userConfig = loadCoHubConfig();
713
+ if (userConfig.agents) {
714
+ for (const agent of agents) {
715
+ const override = userConfig.agents[agent.name];
716
+ if (override) {
717
+ if (override.model)
718
+ agent.config.model = override.model;
719
+ if (override.variant)
720
+ agent.config.variant = override.variant;
721
+ if (override.prompt)
722
+ agent.config.prompt = override.prompt;
723
+ }
724
+ }
725
+ }
726
+ syncAgentConfig();
689
727
  return {
690
- agent: agents,
728
+ name: "oh-my-opencode-cohub",
729
+ config: async (cfg) => {
730
+ const c = cfg;
731
+ c.agent ??= {};
732
+ for (const agent of agents) {
733
+ c.agent[agent.name] = {
734
+ ...agent.config,
735
+ name: agent.name,
736
+ description: agent.description
737
+ };
738
+ }
739
+ },
691
740
  "tool.execute.before": async (input2, output) => {
692
741
  try {
693
742
  if (input2.tool === "task") {
@@ -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\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<\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,w5MAiE/B,CAAC"}
1
+ {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/prompts/orchestrator.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,snNAkE/B,CAAC"}
package/dist/tui.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../src/tui.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAiC/D,QAAA,MAAM,MAAM,EAAE,eA2Gb,CAAC;AAEF,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../src/tui.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AA8B/D,QAAA,MAAM,MAAM,EAAE,eA2Gb,CAAC;AAEF,eAAe,MAAM,CAAC"}
package/dist/tui.js CHANGED
@@ -3,20 +3,17 @@ import { jsx } from "@opentui/solid/jsx-runtime";
3
3
  import * as fs from "node:fs";
4
4
  import * as path from "node:path";
5
5
  import * as os from "node:os";
6
- var AGENTS = [
7
- { name: "co-orchestrator", model: "deepseek-v4-pro", provider: "deepseek", desc: "纯调度者" },
8
- { name: "co-oracle", model: "deepseek-v4-pro", provider: "deepseek", desc: "战略顾问", variant: "max" },
9
- { name: "co-librarian", model: "deepseek-v4-flash", provider: "deepseek", desc: "研究员" },
10
- { name: "co-explorer", model: "deepseek-v4-flash", provider: "deepseek", desc: "代码探索者" },
11
- { name: "co-designer", model: "MiniMax-M3", provider: "minimax", desc: "设计师" },
12
- { name: "co-fixer", model: "deepseek-v4-flash", provider: "deepseek", desc: "执行者", variant: "high" },
13
- { name: "co-observer", model: "gpt-5.5", provider: "codermxtest", desc: "观察者" },
14
- { name: "co-council", model: "deepseek-v4-pro", provider: "deepseek", desc: "多模型共识", variant: "high" },
15
- { name: "co-rule-user", model: "deepseek-v4-flash", provider: "deepseek", desc: "用户规范分析" },
16
- { name: "co-rule-project", model: "deepseek-v4-flash", provider: "deepseek", desc: "项目规范分析" },
17
- { name: "co-rule-app", model: "deepseek-v4-flash", provider: "deepseek", desc: "应用规则分析" },
18
- { name: "co-planner", model: "deepseek-v4-pro", provider: "deepseek", desc: "方案制定" }
19
- ];
6
+ var AGENT_CONFIG_FILE = path.join(os.homedir(), ".local", "share", "opencode", "storage", "oh-my-opencode-cohub", "cohub-state.json");
7
+ function loadAgentConfig() {
8
+ try {
9
+ if (!fs.existsSync(AGENT_CONFIG_FILE))
10
+ return [];
11
+ const data = JSON.parse(fs.readFileSync(AGENT_CONFIG_FILE, "utf-8"));
12
+ return data.agents ?? [];
13
+ } catch {
14
+ return [];
15
+ }
16
+ }
20
17
  var STATE_FILE = path.join(os.homedir(), ".local", "share", "opencode", "storage", "oh-my-opencode-cohub", "tracker-state.json");
21
18
  var SPINNER_FRAMES = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
22
19
  function readState() {
@@ -68,7 +65,7 @@ var plugin = {
68
65
  }),
69
66
  jsx("box", { height: 1 }),
70
67
  jsx("text", { fg: theme.text, bold: true, children: "Agents" }),
71
- ...AGENTS.map((a) => {
68
+ ...loadAgentConfig().map((a) => {
72
69
  const isRunning = runningSet.has(a.name);
73
70
  return jsx("box", {
74
71
  width: "100%",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oh-my-opencode-cohub",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "description": "OpenCode 中文智能体编排插件 CoHub - 纯调度模式 / 全中文提示词 / 规范分析代理 / 方案制定代理 / 独立运行",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",