oh-my-opencode-cohub 1.0.1 → 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/dist/cli/config-io.d.ts +5 -0
- package/dist/cli/config-io.d.ts.map +1 -1
- package/dist/cli/index.js +34 -0
- package/dist/config/loader.d.ts +14 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +88 -40
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.js +12 -15
- package/package.json +1 -1
package/dist/cli/config-io.d.ts
CHANGED
|
@@ -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"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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;
|
|
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/
|
|
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(
|
|
591
|
+
searchDirs.push(path2.join(projectDir, ".opencode", "oh-my-opencode-cohub"));
|
|
576
592
|
}
|
|
577
|
-
searchDirs.push(
|
|
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 =
|
|
581
|
-
if (!overrides[agent]?.replace &&
|
|
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:
|
|
599
|
+
overrides[agent] = { ...overrides[agent], replace: fs2.readFileSync(replacePath, "utf-8") };
|
|
584
600
|
} catch {}
|
|
585
601
|
}
|
|
586
|
-
const appendPath =
|
|
587
|
-
if (!overrides[agent]?.append &&
|
|
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:
|
|
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 =
|
|
607
|
-
const STATE_FILE =
|
|
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 (!
|
|
611
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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;
|
|
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
|
|
7
|
-
|
|
8
|
-
{
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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
|
-
...
|
|
68
|
+
...loadAgentConfig().map((a) => {
|
|
72
69
|
const isRunning = runningSet.has(a.name);
|
|
73
70
|
return jsx("box", {
|
|
74
71
|
width: "100%",
|