oh-my-opencode-cohub 1.0.0 → 1.0.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
@@ -14,6 +14,7 @@ OpenCode 中文智能体编排插件 CoHub——纯调度模式、全中文提
14
14
  - 🔗 **OpenSpec + Superpowers 死板路由**:收到需求即触发,不判断"大小"
15
15
  - ⚡ **六步工作流**:理解→收集→规范分析→制定方案→调度→验证
16
16
  - 📜 **AGENTS.md 全覆盖**:项目级和用户级 AGENTS.md 对**本插件所有代理**(内置 8 个 + 插件 4 个)均生效,无需额外配置
17
+ - 📖 **架构借鉴**:插件架构和代理编排理念借鉴了 oh-my-opencode-slim,但完全独立实现、无运行时依赖
17
18
 
18
19
  ## 快速开始
19
20
 
@@ -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
@@ -536,10 +536,26 @@ class TaskTracker {
536
536
  }
537
537
  }
538
538
 
539
- // src/index.ts
539
+ // src/config/loader.ts
540
540
  import * as fs from "node:fs";
541
541
  import * as path from "node:path";
542
542
  import * as os from "node:os";
543
+ var CONFIG_PATH = path.join(os.homedir(), ".config", "opencode", "oh-my-opencode-cohub.json");
544
+ function loadCoHubConfig() {
545
+ try {
546
+ if (!fs.existsSync(CONFIG_PATH))
547
+ return {};
548
+ const raw = fs.readFileSync(CONFIG_PATH, "utf-8");
549
+ return JSON.parse(raw);
550
+ } catch {
551
+ return {};
552
+ }
553
+ }
554
+
555
+ // src/index.ts
556
+ import * as fs2 from "node:fs";
557
+ import * as path2 from "node:path";
558
+ import * as os2 from "node:os";
543
559
  var CHINESE_PROMPTS = {
544
560
  "co-orchestrator": ORCHESTRATOR_PROMPT,
545
561
  "co-oracle": ORACLE_PROMPT,
@@ -572,21 +588,21 @@ function loadFileOverrides(projectDir) {
572
588
  ];
573
589
  const searchDirs = [];
574
590
  if (projectDir) {
575
- searchDirs.push(path.join(projectDir, ".opencode", "oh-my-opencode-cohub"));
591
+ searchDirs.push(path2.join(projectDir, ".opencode", "oh-my-opencode-cohub"));
576
592
  }
577
- searchDirs.push(path.join(os.homedir(), ".config", "opencode", "oh-my-opencode-cohub"));
593
+ searchDirs.push(path2.join(os2.homedir(), ".config", "opencode", "oh-my-opencode-cohub"));
578
594
  for (const agent of agentNames) {
579
595
  for (const dir of searchDirs) {
580
- const replacePath = path.join(dir, `${agent}.md`);
581
- if (!overrides[agent]?.replace && fs.existsSync(replacePath)) {
596
+ const replacePath = path2.join(dir, `${agent}.md`);
597
+ if (!overrides[agent]?.replace && fs2.existsSync(replacePath)) {
582
598
  try {
583
- overrides[agent] = { ...overrides[agent], replace: fs.readFileSync(replacePath, "utf-8") };
599
+ overrides[agent] = { ...overrides[agent], replace: fs2.readFileSync(replacePath, "utf-8") };
584
600
  } catch {}
585
601
  }
586
- const appendPath = path.join(dir, `${agent}_append.md`);
587
- if (!overrides[agent]?.append && fs.existsSync(appendPath)) {
602
+ const appendPath = path2.join(dir, `${agent}_append.md`);
603
+ if (!overrides[agent]?.append && fs2.existsSync(appendPath)) {
588
604
  try {
589
- overrides[agent] = { ...overrides[agent], append: fs.readFileSync(appendPath, "utf-8") };
605
+ overrides[agent] = { ...overrides[agent], append: fs2.readFileSync(appendPath, "utf-8") };
590
606
  } catch {}
591
607
  }
592
608
  }
@@ -603,91 +619,123 @@ var CoHubPlugin = async (input, options) => {
603
619
  }
604
620
  const promptOverrides = { ...configOverrides, ...fileOverrides };
605
621
  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");
622
+ const STATE_DIR = path2.join(os2.homedir(), ".local", "share", "opencode", "storage", "oh-my-opencode-cohub");
623
+ const STATE_FILE = path2.join(STATE_DIR, "tracker-state.json");
608
624
  function syncTrackerState(sessionId) {
609
625
  try {
610
- if (!fs.existsSync(STATE_DIR)) {
611
- fs.mkdirSync(STATE_DIR, { recursive: true });
626
+ if (!fs2.existsSync(STATE_DIR)) {
627
+ fs2.mkdirSync(STATE_DIR, { recursive: true });
612
628
  }
613
629
  const state = {
614
630
  updatedAt: Date.now(),
615
631
  runningAgents: tracker.getRunningAgents(sessionId),
616
632
  runningCount: tracker.getRunningCount(sessionId)
617
633
  };
618
- fs.writeFileSync(STATE_FILE, JSON.stringify(state), "utf-8");
634
+ fs2.writeFileSync(STATE_FILE, JSON.stringify(state), "utf-8");
635
+ } catch {}
636
+ }
637
+ const AGENT_CONFIG_FILE = path2.join(STATE_DIR, "cohub-state.json");
638
+ function syncAgentConfig() {
639
+ try {
640
+ if (!fs2.existsSync(STATE_DIR)) {
641
+ fs2.mkdirSync(STATE_DIR, { recursive: true });
642
+ }
643
+ const configs = agents.map((a) => ({
644
+ name: a.name,
645
+ description: a.description,
646
+ model: a.config.model,
647
+ variant: a.config.variant || null,
648
+ provider: a.config.model.startsWith("deepseek") ? "deepseek" : a.config.model.startsWith("minimax") || a.config.model.startsWith("MiniMax") ? "minimax" : "codermxtest"
649
+ }));
650
+ fs2.writeFileSync(AGENT_CONFIG_FILE, JSON.stringify({ updatedAt: Date.now(), agents: configs }), "utf-8");
619
651
  } catch {}
620
652
  }
621
653
  const agents = [
654
+ {
655
+ name: "co-orchestrator",
656
+ config: { mode: "primary", model: "deepseek/deepseek-v4-pro", variant: "max", prompt: "你是 CoHub 纯调度者。用中文回复。" }
657
+ },
622
658
  {
623
659
  name: "co-oracle",
624
- mode: "subagent",
625
- description: "战略顾问——架构决策、代码审查、YAGNI 简化",
626
- config: { model: "deepseek/deepseek-v4-pro", variant: "max", prompt: "你是战略顾问。用中文回复。" }
660
+ config: { mode: "subagent", model: "deepseek/deepseek-v4-pro", variant: "max", temperature: 0.1, prompt: "你是战略顾问。用中文回复。" }
627
661
  },
628
662
  {
629
663
  name: "co-librarian",
630
- mode: "subagent",
631
- description: "研究员——外部文档、API 参考、GitHub 示例",
632
- config: { model: "deepseek/deepseek-v4-flash", prompt: "你是研究员。用中文回复。" }
664
+ config: { mode: "subagent", model: "deepseek/deepseek-v4-flash", prompt: "你是研究员。用中文回复。" }
633
665
  },
634
666
  {
635
667
  name: "co-explorer",
636
- mode: "subagent",
637
- description: "代码探索者——Grep/Glob/AST 搜索、文件定位",
638
- config: { model: "deepseek/deepseek-v4-flash", prompt: "你是代码探索者。用中文回复。" }
668
+ config: { mode: "subagent", model: "deepseek/deepseek-v4-flash", prompt: "你是代码探索者。用中文回复。" }
639
669
  },
640
670
  {
641
671
  name: "co-designer",
642
- mode: "subagent",
643
- description: "设计师——UI/UX 设计、视觉润色、响应式布局",
644
- config: { model: "minimax/MiniMax-M3", prompt: "你是设计师。用中文回复。" }
672
+ config: { mode: "subagent", model: "minimax/MiniMax-M3", variant: "medium", prompt: "你是设计师。用中文回复。" }
645
673
  },
646
674
  {
647
675
  name: "co-fixer",
648
676
  mode: "subagent",
649
677
  description: "执行者——代码修改、构建、测试",
650
- config: { model: "deepseek/deepseek-v4-flash", variant: "high", prompt: "你是执行者。用中文回复。" }
678
+ config: { mode: "subagent", model: "deepseek/deepseek-v4-flash", variant: "high", prompt: "你是执行者。用中文回复。" }
651
679
  },
652
680
  {
653
681
  name: "co-observer",
654
- mode: "subagent",
655
682
  description: "观察者——图片/PDF/截图视觉分析",
656
- config: { model: "codermxtest/gpt-5.5", prompt: "你是观察者。用中文回复。" }
683
+ config: { mode: "subagent", model: "codermxtest/gpt-5.5", prompt: "你是观察者。用中文回复。" }
657
684
  },
658
685
  {
659
686
  name: "co-council",
660
- mode: "subagent",
661
687
  description: "多模型共识——并行 LLM 综合",
662
- config: { model: "deepseek/deepseek-v4-pro", variant: "high", prompt: "你是多模型共识协调者。用中文回复。" }
688
+ config: { mode: "subagent", model: "deepseek/deepseek-v4-pro", variant: "high", prompt: "你是多模型共识协调者。用中文回复。" }
663
689
  },
664
690
  {
665
691
  name: "co-rule-user",
666
- mode: "subagent",
667
692
  description: "用户规范分析——~/.config/opencode/AGENTS.md",
668
- config: { model: "deepseek/deepseek-v4-flash", prompt: "你是用户规范分析代理。用中文回复。" }
693
+ config: { mode: "subagent", model: "deepseek/deepseek-v4-flash", prompt: "你是用户规范分析代理。用中文回复。" }
669
694
  },
670
695
  {
671
696
  name: "co-rule-project",
672
- mode: "subagent",
673
697
  description: "项目规范分析——项目 AGENTS.md",
674
- config: { model: "deepseek/deepseek-v4-flash", prompt: "你是项目规范分析代理。用中文回复。" }
698
+ config: { mode: "subagent", model: "deepseek/deepseek-v4-flash", prompt: "你是项目规范分析代理。用中文回复。" }
675
699
  },
676
700
  {
677
701
  name: "co-rule-app",
678
- mode: "subagent",
679
702
  description: "应用规则分析——.opencode/rules/*.md",
680
- config: { model: "deepseek/deepseek-v4-flash", prompt: "你是应用规则分析代理。用中文回复。" }
703
+ config: { mode: "subagent", model: "deepseek/deepseek-v4-flash", prompt: "你是应用规则分析代理。用中文回复。" }
681
704
  },
682
705
  {
683
706
  name: "co-planner",
684
- mode: "subagent",
685
707
  description: "方案制定——综合需求+信息+规范输出任务分解",
686
- config: { model: "deepseek/deepseek-v4-pro", prompt: "你是方案制定代理。用中文回复。" }
708
+ config: { mode: "subagent", model: "deepseek/deepseek-v4-pro", variant: "high", prompt: "你是方案制定代理。用中文回复。" }
687
709
  }
688
710
  ];
711
+ const userConfig = loadCoHubConfig();
712
+ if (userConfig.agents) {
713
+ for (const agent of agents) {
714
+ const override = userConfig.agents[agent.name];
715
+ if (override) {
716
+ if (override.model)
717
+ agent.config.model = override.model;
718
+ if (override.variant)
719
+ agent.config.variant = override.variant;
720
+ if (override.prompt)
721
+ agent.config.prompt = override.prompt;
722
+ }
723
+ }
724
+ }
725
+ syncAgentConfig();
689
726
  return {
690
- agent: agents,
727
+ name: "oh-my-opencode-cohub",
728
+ config: async (cfg) => {
729
+ const c = cfg;
730
+ c.agent ??= {};
731
+ for (const agent of agents) {
732
+ c.agent[agent.name] = {
733
+ ...agent.config,
734
+ name: agent.name,
735
+ description: agent.description
736
+ };
737
+ }
738
+ },
691
739
  "tool.execute.before": async (input2, output) => {
692
740
  try {
693
741
  if (input2.tool === "task") {
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.0",
3
+ "version": "1.0.2",
4
4
  "description": "OpenCode 中文智能体编排插件 CoHub - 纯调度模式 / 全中文提示词 / 规范分析代理 / 方案制定代理 / 独立运行",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",