oh-my-opencode-cohub 1.0.6 → 1.0.11
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/index.js +14 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -7
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.js +40 -15
- package/package.json +1 -1
package/dist/cli/index.js
CHANGED
|
@@ -64,18 +64,20 @@ function registerCoHubAgents() {
|
|
|
64
64
|
config.agent = config.agent ?? {};
|
|
65
65
|
const agents = config.agent;
|
|
66
66
|
const cohubAgents = {
|
|
67
|
-
"co-orchestrator": { description: "纯调度者", mode: "primary", prompt:
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
"co-
|
|
71
|
-
"co-
|
|
72
|
-
"co-
|
|
73
|
-
"co-
|
|
74
|
-
"co-
|
|
75
|
-
"co-
|
|
76
|
-
"co-
|
|
77
|
-
"co-rule-
|
|
78
|
-
"co-
|
|
67
|
+
"co-orchestrator": { description: "纯调度者", mode: "primary", prompt: `你是 CoHub 纯调度者。唯一职责:理解需求→委派信息收集→制定方案→调度执行→验证。绝不亲自使用文件工具。
|
|
68
|
+
子代理:@co-explorer(代码搜索) @co-librarian(文档研究) @co-oracle(架构审查) @co-designer(UI/UX) @co-fixer(代码执行) @co-observer(图片分析) @co-council(多模型共识) @co-rule-user/project/app(规范分析) @co-planner(方案制定)。错了还能改→@co-oracle,错了就完了→@co-council。
|
|
69
|
+
规则:1.需求必须先输出方案 2.所有操作必须委派无例外 3.并行优先。工作流:理解→信息收集→制定方案→调度→验证。委派指令用中文。多文件修改全部完成后一次性验证。`, model: "deepseek/deepseek-v4-pro", variant: "max" },
|
|
70
|
+
"co-oracle": { description: "战略顾问", mode: "subagent", prompt: "你是战略技术顾问。架构决策、代码审查、YAGNI 简化、复杂调试。只读分析,不实施。用中文回复。", model: "deepseek/deepseek-v4-pro", variant: "max" },
|
|
71
|
+
"co-librarian": { description: "研究员", mode: "subagent", prompt: "你是文档研究员。查官方文档、API 参考、GitHub 示例。区分官方和社区模式。用中文回复。", model: "deepseek/deepseek-v4-flash", variant: "low" },
|
|
72
|
+
"co-explorer": { description: "代码探索者", mode: "subagent", prompt: "你是代码搜索专家。Grep/Glob/AST 快速定位文件和模式。只读搜索,不修改。用中文回复。", model: "deepseek/deepseek-v4-flash", variant: "low" },
|
|
73
|
+
"co-designer": { description: "设计师", mode: "subagent", prompt: "你是 UI/UX 设计师。布局/配色/动效/响应式。视觉卓越优先,尊重现有设计系统。用中文回复。", model: "minimax/MiniMax-M3", variant: "medium" },
|
|
74
|
+
"co-fixer": { description: "执行者", mode: "subagent", prompt: "你是代码执行者。高效实现代码变更,不研究不规划不委派。完成后报告变更摘要。用中文回复。", model: "deepseek/deepseek-v4-flash", variant: "high" },
|
|
75
|
+
"co-observer": { description: "观察者", mode: "subagent", prompt: "你是视觉分析专家。图片/PDF/截图 OCR 提取。模糊图像明确标注不确定部分。用中文回复。", model: "codermxtest/gpt-5.5", variant: "low" },
|
|
76
|
+
"co-council": { description: "多模型共识", mode: "subagent", prompt: "你是多模型共识协调者。并行运行多个 LLM,识别一致与矛盾,综合最优答案。用中文回复。", model: "deepseek/deepseek-v4-pro", variant: "high" },
|
|
77
|
+
"co-rule-user": { description: "用户规范分析", mode: "subagent", prompt: "你是用户规范分析代理。读取 ~/.config/opencode/AGENTS.md,对照方案分析约束适配。用中文回复。", model: "deepseek/deepseek-v4-flash", variant: "medium" },
|
|
78
|
+
"co-rule-project": { description: "项目规范分析", mode: "subagent", prompt: "你是项目规范分析代理。读取项目 AGENTS.md,对照方案分析约束适配。用中文回复。", model: "deepseek/deepseek-v4-flash", variant: "medium" },
|
|
79
|
+
"co-rule-app": { description: "应用规则分析", mode: "subagent", prompt: "你是应用规则分析代理。读取 .opencode/rules/*.md,对照方案分析安全/测试/数据库等规则适配。用中文回复。", model: "deepseek/deepseek-v4-flash", variant: "medium" },
|
|
80
|
+
"co-planner": { description: "方案制定", mode: "subagent", prompt: "你是方案制定代理。综合需求+信息+规范反馈,输出结构化任务分解(子任务/委派/并行策略/验证步骤)。方案须具体到文件和操作粒度。用中文回复。", model: "deepseek/deepseek-v4-pro", variant: "high" }
|
|
79
81
|
};
|
|
80
82
|
let added = 0;
|
|
81
83
|
for (const [name, agentConfig] of Object.entries(cohubAgents)) {
|
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;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,
|
|
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,MA2MlB,CAAC;AAEF,eAAe,WAAW,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -641,13 +641,19 @@ var CoHubPlugin = async (input, options) => {
|
|
|
641
641
|
if (!fs2.existsSync(STATE_DIR)) {
|
|
642
642
|
fs2.mkdirSync(STATE_DIR, { recursive: true });
|
|
643
643
|
}
|
|
644
|
-
const configs = agents.map((a) =>
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
644
|
+
const configs = agents.map((a) => {
|
|
645
|
+
const modelStr = a.config.model;
|
|
646
|
+
const parts = modelStr.split("/");
|
|
647
|
+
const provider = parts.length > 1 ? parts[0] : "default";
|
|
648
|
+
const shortModel = parts.length > 1 ? parts.slice(1).join("/") : modelStr;
|
|
649
|
+
return {
|
|
650
|
+
name: a.name,
|
|
651
|
+
description: a.description,
|
|
652
|
+
model: shortModel,
|
|
653
|
+
variant: a.config.variant || null,
|
|
654
|
+
provider
|
|
655
|
+
};
|
|
656
|
+
});
|
|
651
657
|
fs2.writeFileSync(AGENT_CONFIG_FILE, JSON.stringify({ updatedAt: Date.now(), agents: configs }), "utf-8");
|
|
652
658
|
} catch {}
|
|
653
659
|
}
|
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;AAwE/D,QAAA,MAAM,MAAM,EAAE,eA2Gb,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
package/dist/tui.js
CHANGED
|
@@ -3,32 +3,57 @@ 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 AGENT_CONFIG_FILE = path.join(os.homedir(), ".
|
|
6
|
+
var AGENT_CONFIG_FILE = path.join(os.homedir(), ".config", "opencode", "oh-my-opencode-cohub.json");
|
|
7
7
|
function loadAgentConfig() {
|
|
8
8
|
try {
|
|
9
9
|
if (!fs.existsSync(AGENT_CONFIG_FILE))
|
|
10
10
|
return DEFAULT_AGENTS();
|
|
11
11
|
const data = JSON.parse(fs.readFileSync(AGENT_CONFIG_FILE, "utf-8"));
|
|
12
|
-
|
|
12
|
+
const agents = data.agents;
|
|
13
|
+
if (!agents)
|
|
14
|
+
return DEFAULT_AGENTS();
|
|
15
|
+
return Object.entries(agents).map(([name, cfg]) => {
|
|
16
|
+
const model = cfg.model ?? "";
|
|
17
|
+
const parts = model.split("/");
|
|
18
|
+
const provider = parts.length > 1 ? parts[0] : "default";
|
|
19
|
+
const shortModel = parts.length > 1 ? parts.slice(1).join("/") : model;
|
|
20
|
+
return {
|
|
21
|
+
name,
|
|
22
|
+
description: model,
|
|
23
|
+
model: shortModel,
|
|
24
|
+
variant: cfg.variant ?? null,
|
|
25
|
+
provider
|
|
26
|
+
};
|
|
27
|
+
});
|
|
13
28
|
} catch {
|
|
14
29
|
return DEFAULT_AGENTS();
|
|
15
30
|
}
|
|
16
31
|
}
|
|
17
32
|
function DEFAULT_AGENTS() {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
33
|
+
const list = [
|
|
34
|
+
["co-orchestrator", "deepseek/deepseek-v4-pro"],
|
|
35
|
+
["co-oracle", "deepseek/deepseek-v4-pro"],
|
|
36
|
+
["co-librarian", "deepseek/deepseek-v4-flash"],
|
|
37
|
+
["co-explorer", "deepseek/deepseek-v4-flash"],
|
|
38
|
+
["co-designer", "minimax/MiniMax-M3"],
|
|
39
|
+
["co-fixer", "deepseek/deepseek-v4-flash"],
|
|
40
|
+
["co-observer", "codermxtest/gpt-5.5"],
|
|
41
|
+
["co-council", "deepseek/deepseek-v4-pro"],
|
|
42
|
+
["co-rule-user", "deepseek/deepseek-v4-flash"],
|
|
43
|
+
["co-rule-project", "deepseek/deepseek-v4-flash"],
|
|
44
|
+
["co-rule-app", "deepseek/deepseek-v4-flash"],
|
|
45
|
+
["co-planner", "deepseek/deepseek-v4-pro"]
|
|
31
46
|
];
|
|
47
|
+
return list.map(([name, fullModel]) => {
|
|
48
|
+
const parts = fullModel.split("/");
|
|
49
|
+
return {
|
|
50
|
+
name,
|
|
51
|
+
description: name,
|
|
52
|
+
provider: parts[0],
|
|
53
|
+
model: parts.slice(1).join("/"),
|
|
54
|
+
variant: null
|
|
55
|
+
};
|
|
56
|
+
});
|
|
32
57
|
}
|
|
33
58
|
var STATE_FILE = path.join(os.homedir(), ".local", "share", "opencode", "storage", "oh-my-opencode-cohub", "tracker-state.json");
|
|
34
59
|
var SPINNER_FRAMES = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
|