oh-my-opencode-cohub 1.15.2 → 1.16.0
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 +3 -3
- package/dist/cli/index.js +1 -1
- package/dist/context/engine.d.ts +6 -0
- package/dist/context/engine.d.ts.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +37 -11
- package/dist/instructions/chinese.d.ts +1 -0
- package/dist/instructions/chinese.d.ts.map +1 -1
- package/dist/prompts/explorer.d.ts +1 -1
- package/dist/prompts/explorer.d.ts.map +1 -1
- package/dist/prompts/observer.d.ts +1 -1
- package/dist/prompts/observer.d.ts.map +1 -1
- package/dist/tui.js +1 -1
- package/package.json +2 -3
package/README.md
CHANGED
|
@@ -293,7 +293,7 @@ bunx oh-my-opencode-cohub install
|
|
|
293
293
|
| co-explorer | `deepseek/deepseek-v4-flash` | 代码库搜索定位 | — |
|
|
294
294
|
| co-designer | `minimax/MiniMax-M3` | UI/UX 设计与实现 | — |
|
|
295
295
|
| co-fixer | `deepseek/deepseek-v4-flash` | 代码修改执行(含 TDD skill) | — |
|
|
296
|
-
| co-observer | `
|
|
296
|
+
| co-observer | `deepseek/deepseek-v4-flash` | 图片/PDF 分析 | — |
|
|
297
297
|
| co-council | `deepseek/deepseek-v4-flash` | 多模型共识 | — |
|
|
298
298
|
| co-rule-user | `deepseek/deepseek-v4-flash` | 用户级规范分析 | `~/.config/opencode/AGENTS.md` |
|
|
299
299
|
| co-rule-project | `deepseek/deepseek-v4-flash` | 项目级规范分析 | 项目 `AGENTS.md` |
|
|
@@ -366,7 +366,7 @@ CLI 安装后自动创建 `~/.config/opencode/oh-my-opencode-cohub.json`,这
|
|
|
366
366
|
"co-explorer": { "model": "deepseek/deepseek-v4-flash", "variant": "low" },
|
|
367
367
|
"co-designer": { "model": "minimax/MiniMax-M3", "variant": "medium" },
|
|
368
368
|
"co-fixer": { "model": "deepseek/deepseek-v4-flash", "variant": "high" },
|
|
369
|
-
"co-observer": { "model": "
|
|
369
|
+
"co-observer": { "model": "deepseek/deepseek-v4-flash", "variant": "low" },
|
|
370
370
|
"co-council": { "model": "deepseek/deepseek-v4-flash", "variant": "low" },
|
|
371
371
|
"co-rule-user": { "model": "deepseek/deepseek-v4-flash", "variant": "medium" },
|
|
372
372
|
"co-rule-project":{ "model": "deepseek/deepseek-v4-flash", "variant": "medium" },
|
|
@@ -405,7 +405,7 @@ CLI 安装后自动创建 `~/.config/opencode/oh-my-opencode-cohub.json`,这
|
|
|
405
405
|
"alpha": { "model": "deepseek/deepseek-v4-pro", "variant": "max" },
|
|
406
406
|
"beta": { "model": "deepseek/deepseek-v4-pro", "variant": "max" },
|
|
407
407
|
"gamma": { "model": "minimax/MiniMax-M3", "variant": "medium" },
|
|
408
|
-
"delta": { "model": "
|
|
408
|
+
"delta": { "model": "deepseek/deepseek-v4-flash", "variant": "high" }
|
|
409
409
|
}
|
|
410
410
|
}
|
|
411
411
|
}
|
package/dist/cli/index.js
CHANGED
package/dist/context/engine.d.ts
CHANGED
|
@@ -6,6 +6,12 @@ export declare class ContextEngine {
|
|
|
6
6
|
private registry;
|
|
7
7
|
/** alias → 前置子代理结果 */
|
|
8
8
|
private dependencyCache;
|
|
9
|
+
/**
|
|
10
|
+
* In-flight promise 去重 map:key = `${parentSessionId}::${windowSize}`。
|
|
11
|
+
* 同批次并发调用共享同一次 API 调用;promise settle 后自动从 Map 删除,
|
|
12
|
+
* 确保跨批次串行调用重新调 API(无脏读)。
|
|
13
|
+
*/
|
|
14
|
+
private inflight;
|
|
9
15
|
private client;
|
|
10
16
|
private config;
|
|
11
17
|
constructor(client: SdkClient, config?: Partial<ContextConfig>);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/context/engine.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAe,aAAa,EAAkC,MAAM,SAAS,CAAC;AAK3G,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE7D,KAAK,SAAS,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAEzD,qBAAa,aAAa;IACxB,8BAA8B;IAC9B,OAAO,CAAC,QAAQ,CAAkC;IAClD,sBAAsB;IACtB,OAAO,CAAC,eAAe,CAAuC;IAC9D,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,MAAM,CAAgB;gBAElB,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC;IAU9D;;;OAGG;IACH,eAAe,CAAC,IAAI,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;IAYtD;;OAEG;IACG,gBAAgB,CACpB,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,EACvB,IAAI,EAAE;QAAE,QAAQ,EAAE,eAAe,CAAA;KAAE,GAClC,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/context/engine.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAe,aAAa,EAAkC,MAAM,SAAS,CAAC;AAK3G,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE7D,KAAK,SAAS,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAEzD,qBAAa,aAAa;IACxB,8BAA8B;IAC9B,OAAO,CAAC,QAAQ,CAAkC;IAClD,sBAAsB;IACtB,OAAO,CAAC,eAAe,CAAuC;IAC9D;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAgG;IAChH,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,MAAM,CAAgB;gBAElB,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC;IAU9D;;;OAGG;IACH,eAAe,CAAC,IAAI,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;IAYtD;;OAEG;IACG,gBAAgB,CACpB,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,EACvB,IAAI,EAAE;QAAE,QAAQ,EAAE,eAAe,CAAA;KAAE,GAClC,OAAO,CAAC,IAAI,CAAC;IA0DhB;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAa7B;;;;OAIG;IACH,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAiBxD;;;OAGG;IACH,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAkE/C;;;;;OAKG;IACG,aAAa,CACjB,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,GAAG,IAAI,CAAC;IAqDpG;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAIvC;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe;IAI/C;;OAEG;IACH,wBAAwB,CAAC,QAAQ,GAAE,MAAuB,GAAG,IAAI;CAQlE"}
|
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;AAiIlD,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;AAiIlD,QAAA,MAAM,WAAW,EAAE,MAirBlB,CAAC;AAEF,eAAO,MAAM,MAAM,QAAc,CAAC;AAClC,eAAe,WAAW,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -350,6 +350,12 @@ var EXPLORER_PROMPT = `你是 Explorer——快速代码库导航专家。
|
|
|
350
350
|
- 并行读取多个匹配文件:定位到多个候选文件后,同一条消息内一次性并行 read,不要逐个串行读取
|
|
351
351
|
- 返回文件路径和相关代码片段
|
|
352
352
|
|
|
353
|
+
**搜索策略**:
|
|
354
|
+
- **首轮宽泛并行**:第一轮至少同时覆盖三个维度——glob(文件发现)、grep(内容搜索)、ast_grep_search(结构搜索),不要只发一个搜索等结果
|
|
355
|
+
- **轮次上限**:最多 4 轮工具调用后必须返回结果,防止无限深挖。此为上限而非目标,能提前返回就提前返回
|
|
356
|
+
- **收敛规则**:单个 grep 返回超过 50 条时缩小范围,用更精确的模式重搜;glob 匹配超过 30 个文件时按路径层级或相关性筛选,只读最相关的(约 15 个以内)
|
|
357
|
+
- **搜索优先级**:先 glob 定位文件 → 再 grep 定位行 → 最后 read 读取上下文;前两步可在同一轮并行,第三步基于结果进行
|
|
358
|
+
|
|
353
359
|
**输出格式**:
|
|
354
360
|
<results>
|
|
355
361
|
<files>
|
|
@@ -511,7 +517,7 @@ var OBSERVER_PROMPT = `你是 Observer——视觉分析专家。
|
|
|
511
517
|
- 读取提示中指定的文件
|
|
512
518
|
- 分析视觉内容——布局、UI 元素、文字、关系、流程
|
|
513
519
|
- 对于含文字/代码/错误的截图:通过 OCR 提取**精确文字**——绝不改写错误信息或代码
|
|
514
|
-
-
|
|
520
|
+
- **并行读取**:多文件时,同一条消息内一次性并行 read 所有文件,然后综合分析、比较或关联
|
|
515
521
|
- 仅返回与目标相关的提取信息
|
|
516
522
|
- 如果图像不清晰、模糊或部分可见:说明你能看到的,明确指出不确定的部分——永不猜测或编造细节
|
|
517
523
|
|
|
@@ -738,6 +744,9 @@ var CHINESE_LANGUAGE_INSTRUCTION = `# 中文语言要求
|
|
|
738
744
|
- 代码、技术术语、文件名、命令可以保留原样
|
|
739
745
|
- 此规则对所有代理(Orchestrator 和所有子代理)生效
|
|
740
746
|
- 跨所有项目生效,优先级高于项目级规则`;
|
|
747
|
+
var PARALLEL_TOOL_INSTRUCTION = `# 并行工具调用要求
|
|
748
|
+
|
|
749
|
+
你有能力在单次回复中发起多个工具调用。当需要获取多个相互独立的信息时,必须把这些工具调用合并在同一条消息中一次性并发发起,不要逐个串行等待。具体包括:同一条消息内并行 read 多个文件、并行发起多个 grep/glob/ast_grep_search 搜索、并行调用多个外部搜索工具。串行逐个调用是低效行为,必须避免。`;
|
|
741
750
|
|
|
742
751
|
// src/task-manager/tracker.ts
|
|
743
752
|
import * as fs from "node:fs";
|
|
@@ -1548,6 +1557,7 @@ function replaceMarkerWithContext(messageText, context) {
|
|
|
1548
1557
|
class ContextEngine {
|
|
1549
1558
|
registry = new Map;
|
|
1550
1559
|
dependencyCache = new Map;
|
|
1560
|
+
inflight = new Map;
|
|
1551
1561
|
client;
|
|
1552
1562
|
config;
|
|
1553
1563
|
constructor(client, config) {
|
|
@@ -1578,16 +1588,31 @@ class ContextEngine {
|
|
|
1578
1588
|
context.strategy = args.strategy;
|
|
1579
1589
|
try {
|
|
1580
1590
|
const windowSize = this.config.relevantMessageWindow;
|
|
1581
|
-
const
|
|
1582
|
-
|
|
1583
|
-
|
|
1584
|
-
|
|
1585
|
-
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
+
const cacheKey = `${parentSessionId}::${windowSize}`;
|
|
1592
|
+
let pending = this.inflight.get(cacheKey);
|
|
1593
|
+
if (!pending) {
|
|
1594
|
+
const p = (async () => {
|
|
1595
|
+
const messagesResult = await this.client.session.messages({
|
|
1596
|
+
path: { id: parentSessionId },
|
|
1597
|
+
query: { limit: windowSize }
|
|
1598
|
+
});
|
|
1599
|
+
const messages = messagesResult.data ?? [];
|
|
1600
|
+
if (args.strategy === "relevant" || args.strategy === "summary" || args.strategy === "full") {
|
|
1601
|
+
const files = extractRelevantFiles(messages, this.config.maxFiles, windowSize);
|
|
1602
|
+
const decisions = extractDecisions(messages, this.config.maxDecisions, windowSize);
|
|
1603
|
+
const errors = extractErrors(messages, this.config.maxErrors, windowSize);
|
|
1604
|
+
return { files, decisions, errors };
|
|
1605
|
+
}
|
|
1606
|
+
return { files: [], decisions: [], errors: [] };
|
|
1607
|
+
})();
|
|
1608
|
+
this.inflight.set(cacheKey, p);
|
|
1609
|
+
p.then(() => this.inflight.delete(cacheKey), () => this.inflight.delete(cacheKey));
|
|
1610
|
+
pending = p;
|
|
1611
|
+
}
|
|
1612
|
+
const result = await pending;
|
|
1613
|
+
context.relevantFiles = result.files;
|
|
1614
|
+
context.decisions = result.decisions;
|
|
1615
|
+
context.errors = result.errors;
|
|
1591
1616
|
if (args.strategy === "summary") {
|
|
1592
1617
|
this.attachTruncatedBodies(context.relevantFiles);
|
|
1593
1618
|
}
|
|
@@ -3681,6 +3706,7 @@ var CoHubPlugin = async (input, options) => {
|
|
|
3681
3706
|
try {
|
|
3682
3707
|
if (output?.system && Array.isArray(output.system)) {
|
|
3683
3708
|
output.system.push(CHINESE_LANGUAGE_INSTRUCTION);
|
|
3709
|
+
output.system.push(PARALLEL_TOOL_INSTRUCTION);
|
|
3684
3710
|
}
|
|
3685
3711
|
} catch (err) {
|
|
3686
3712
|
appendLog("system.transform", "hook 失败", err);
|
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
export declare const CHINESE_LANGUAGE_INSTRUCTION = "# \u4E2D\u6587\u8BED\u8A00\u8981\u6C42\n\n\u4F60\u5FC5\u987B\u59CB\u7EC8\u4F7F\u7528\u4E2D\u6587\u8FDB\u884C\u601D\u8003\u3001\u63A8\u7406\u548C\u56DE\u590D\u3002\n\n- \u6240\u6709\u81EA\u7136\u8BED\u8A00\u90E8\u5206\uFF08\u5206\u6790\u3001\u89C4\u5212\u3001\u89E3\u91CA\u3001\u8BA8\u8BBA\uFF09\u5FC5\u987B\u4F7F\u7528\u4E2D\u6587\n- \u4EE3\u7801\u3001\u6280\u672F\u672F\u8BED\u3001\u6587\u4EF6\u540D\u3001\u547D\u4EE4\u53EF\u4EE5\u4FDD\u7559\u539F\u6837\n- \u6B64\u89C4\u5219\u5BF9\u6240\u6709\u4EE3\u7406\uFF08Orchestrator \u548C\u6240\u6709\u5B50\u4EE3\u7406\uFF09\u751F\u6548\n- \u8DE8\u6240\u6709\u9879\u76EE\u751F\u6548\uFF0C\u4F18\u5148\u7EA7\u9AD8\u4E8E\u9879\u76EE\u7EA7\u89C4\u5219";
|
|
2
|
+
export declare const PARALLEL_TOOL_INSTRUCTION = "# \u5E76\u884C\u5DE5\u5177\u8C03\u7528\u8981\u6C42\n\n\u4F60\u6709\u80FD\u529B\u5728\u5355\u6B21\u56DE\u590D\u4E2D\u53D1\u8D77\u591A\u4E2A\u5DE5\u5177\u8C03\u7528\u3002\u5F53\u9700\u8981\u83B7\u53D6\u591A\u4E2A\u76F8\u4E92\u72EC\u7ACB\u7684\u4FE1\u606F\u65F6\uFF0C\u5FC5\u987B\u628A\u8FD9\u4E9B\u5DE5\u5177\u8C03\u7528\u5408\u5E76\u5728\u540C\u4E00\u6761\u6D88\u606F\u4E2D\u4E00\u6B21\u6027\u5E76\u53D1\u53D1\u8D77\uFF0C\u4E0D\u8981\u9010\u4E2A\u4E32\u884C\u7B49\u5F85\u3002\u5177\u4F53\u5305\u62EC\uFF1A\u540C\u4E00\u6761\u6D88\u606F\u5185\u5E76\u884C read \u591A\u4E2A\u6587\u4EF6\u3001\u5E76\u884C\u53D1\u8D77\u591A\u4E2A grep/glob/ast_grep_search \u641C\u7D22\u3001\u5E76\u884C\u8C03\u7528\u591A\u4E2A\u5916\u90E8\u641C\u7D22\u5DE5\u5177\u3002\u4E32\u884C\u9010\u4E2A\u8C03\u7528\u662F\u4F4E\u6548\u884C\u4E3A\uFF0C\u5FC5\u987B\u907F\u514D\u3002";
|
|
2
3
|
//# sourceMappingURL=chinese.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chinese.d.ts","sourceRoot":"","sources":["../../src/instructions/chinese.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,4BAA4B,wrBAOpB,CAAC"}
|
|
1
|
+
{"version":3,"file":"chinese.d.ts","sourceRoot":"","sources":["../../src/instructions/chinese.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,4BAA4B,wrBAOpB,CAAC;AAEtB,eAAO,MAAM,yBAAyB,s1BAE2H,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const EXPLORER_PROMPT = "\u4F60\u662F Explorer\u2014\u2014\u5FEB\u901F\u4EE3\u7801\u5E93\u5BFC\u822A\u4E13\u5BB6\u3002\n\n**\u89D2\u8272**: \u4EE3\u7801\u5E93\u5FEB\u901F\u4E0A\u4E0B\u6587\u641C\u7D22\u3002\u56DE\u7B54\"X \u5728\u54EA\u91CC\uFF1F\"\"\u627E\u5230 Y\"\"\u54EA\u4E2A\u6587\u4EF6\u6709 Z\"\u3002\n\n**\u5DE5\u5177\u9009\u62E9**:\n- **\u6587\u672C/\u6B63\u5219\u6A21\u5F0F**\uFF08\u5B57\u7B26\u4E32\u3001\u6CE8\u91CA\u3001\u53D8\u91CF\u540D\uFF09\uFF1Agrep\n- **\u7ED3\u6784\u6A21\u5F0F**\uFF08\u51FD\u6570\u5F62\u6001\u3001\u7C7B\u7ED3\u6784\uFF09\uFF1Aast_grep_search\n- **\u6587\u4EF6\u53D1\u73B0**\uFF08\u6309\u540D\u79F0/\u6269\u5C55\u540D\u67E5\u627E\uFF09\uFF1Aglob\n\n**\u6587\u4EF6\u64CD\u4F5C\u89C4\u5219**:\n- \u53EA\u8BFB\uFF1A\u68C0\u67E5\u5E76\u62A5\u544A\uFF0C\u4E0D\u4FEE\u6539\u6587\u4EF6\n- \u4F18\u5148\u4F7F\u7528\u4E13\u7528\u6587\u4EF6\u5DE5\u5177\u68C0\u67E5\u4EE3\u7801\u5E93\uFF1Aglob/grep/ast_grep_search \u7528\u4E8E\u53D1\u73B0\uFF0Cread \u7528\u4E8E\u8BFB\u53D6\u6587\u4EF6\u5185\u5BB9\n- Bash \u53EF\u7528\u4E8E\u975E\u53D8\u66F4\u8BCA\u65AD\u548C shell \u539F\u751F\u68C0\u67E5\uFF08\u6700\u6E05\u6670\u65F6\uFF09\uFF0C\u4F46\u4E0D\u80FD\u4FEE\u6539\u6587\u4EF6\n- \u4E0D\u8981\u7528 cat/head/tail/sed/awk \u8BFB\u53D6\u4EE3\u7801\u5230\u4E0A\u4E0B\u6587\u4E2D\uFF1B\u4F7F\u7528 read/grep\uFF0C\u9664\u975E shell \u7BA1\u9053\u786E\u5B9E\u662F\u66F4\u597D\u7684\u8BCA\u65AD\u65B9\u5F0F\n\n**\u884C\u4E3A**:\n- \u5FEB\u901F\u4E14\u5F7B\u5E95\n- \u9700\u8981\u65F6\u5E76\u884C\u53D1\u8D77\u591A\u4E2A\u641C\u7D22\uFF08grep/glob/ast_grep_search \u4E92\u76F8\u72EC\u7ACB\u65F6\u540C\u4E00\u6761\u6D88\u606F\u5185\u4E00\u6B21\u6027\u53D1\u8D77\uFF09\n- \u5E76\u884C\u8BFB\u53D6\u591A\u4E2A\u5339\u914D\u6587\u4EF6\uFF1A\u5B9A\u4F4D\u5230\u591A\u4E2A\u5019\u9009\u6587\u4EF6\u540E\uFF0C\u540C\u4E00\u6761\u6D88\u606F\u5185\u4E00\u6B21\u6027\u5E76\u884C read\uFF0C\u4E0D\u8981\u9010\u4E2A\u4E32\u884C\u8BFB\u53D6\n- \u8FD4\u56DE\u6587\u4EF6\u8DEF\u5F84\u548C\u76F8\u5173\u4EE3\u7801\u7247\u6BB5\n\n**\u8F93\u51FA\u683C\u5F0F**:\n<results>\n<files>\n- /path/to/file.ts:42 - \u7B80\u8981\u63CF\u8FF0\u5185\u5BB9\n</files>\n<answer>\n\u7B80\u6D01\u56DE\u7B54\u95EE\u9898\n</answer>\n</results>\n\n**\u7EA6\u675F**:\n- \u53EA\u8BFB\uFF1A\u641C\u7D22\u5E76\u62A5\u544A\uFF0C\u4E0D\u4FEE\u6539\n- \u8BE6\u5C3D\u4F46\u7B80\u6D01\n- \u5305\u542B\u884C\u53F7\n\n**\u8BED\u8A00\u8981\u6C42**: \u59CB\u7EC8\u4F7F\u7528\u4E2D\u6587\u8FDB\u884C\u601D\u8003\u3001\u641C\u7D22\u5206\u6790\u548C\u56DE\u590D\u3002\u4EE3\u7801\u548C\u6280\u672F\u672F\u8BED\u53EF\u7528\u539F\u6587\uFF0C\u81EA\u7136\u8BED\u8A00\u90E8\u5206\u5FC5\u987B\u7528\u4E2D\u6587\u3002";
|
|
1
|
+
export declare const EXPLORER_PROMPT = "\u4F60\u662F Explorer\u2014\u2014\u5FEB\u901F\u4EE3\u7801\u5E93\u5BFC\u822A\u4E13\u5BB6\u3002\n\n**\u89D2\u8272**: \u4EE3\u7801\u5E93\u5FEB\u901F\u4E0A\u4E0B\u6587\u641C\u7D22\u3002\u56DE\u7B54\"X \u5728\u54EA\u91CC\uFF1F\"\"\u627E\u5230 Y\"\"\u54EA\u4E2A\u6587\u4EF6\u6709 Z\"\u3002\n\n**\u5DE5\u5177\u9009\u62E9**:\n- **\u6587\u672C/\u6B63\u5219\u6A21\u5F0F**\uFF08\u5B57\u7B26\u4E32\u3001\u6CE8\u91CA\u3001\u53D8\u91CF\u540D\uFF09\uFF1Agrep\n- **\u7ED3\u6784\u6A21\u5F0F**\uFF08\u51FD\u6570\u5F62\u6001\u3001\u7C7B\u7ED3\u6784\uFF09\uFF1Aast_grep_search\n- **\u6587\u4EF6\u53D1\u73B0**\uFF08\u6309\u540D\u79F0/\u6269\u5C55\u540D\u67E5\u627E\uFF09\uFF1Aglob\n\n**\u6587\u4EF6\u64CD\u4F5C\u89C4\u5219**:\n- \u53EA\u8BFB\uFF1A\u68C0\u67E5\u5E76\u62A5\u544A\uFF0C\u4E0D\u4FEE\u6539\u6587\u4EF6\n- \u4F18\u5148\u4F7F\u7528\u4E13\u7528\u6587\u4EF6\u5DE5\u5177\u68C0\u67E5\u4EE3\u7801\u5E93\uFF1Aglob/grep/ast_grep_search \u7528\u4E8E\u53D1\u73B0\uFF0Cread \u7528\u4E8E\u8BFB\u53D6\u6587\u4EF6\u5185\u5BB9\n- Bash \u53EF\u7528\u4E8E\u975E\u53D8\u66F4\u8BCA\u65AD\u548C shell \u539F\u751F\u68C0\u67E5\uFF08\u6700\u6E05\u6670\u65F6\uFF09\uFF0C\u4F46\u4E0D\u80FD\u4FEE\u6539\u6587\u4EF6\n- \u4E0D\u8981\u7528 cat/head/tail/sed/awk \u8BFB\u53D6\u4EE3\u7801\u5230\u4E0A\u4E0B\u6587\u4E2D\uFF1B\u4F7F\u7528 read/grep\uFF0C\u9664\u975E shell \u7BA1\u9053\u786E\u5B9E\u662F\u66F4\u597D\u7684\u8BCA\u65AD\u65B9\u5F0F\n\n**\u884C\u4E3A**:\n- \u5FEB\u901F\u4E14\u5F7B\u5E95\n- \u9700\u8981\u65F6\u5E76\u884C\u53D1\u8D77\u591A\u4E2A\u641C\u7D22\uFF08grep/glob/ast_grep_search \u4E92\u76F8\u72EC\u7ACB\u65F6\u540C\u4E00\u6761\u6D88\u606F\u5185\u4E00\u6B21\u6027\u53D1\u8D77\uFF09\n- \u5E76\u884C\u8BFB\u53D6\u591A\u4E2A\u5339\u914D\u6587\u4EF6\uFF1A\u5B9A\u4F4D\u5230\u591A\u4E2A\u5019\u9009\u6587\u4EF6\u540E\uFF0C\u540C\u4E00\u6761\u6D88\u606F\u5185\u4E00\u6B21\u6027\u5E76\u884C read\uFF0C\u4E0D\u8981\u9010\u4E2A\u4E32\u884C\u8BFB\u53D6\n- \u8FD4\u56DE\u6587\u4EF6\u8DEF\u5F84\u548C\u76F8\u5173\u4EE3\u7801\u7247\u6BB5\n\n**\u641C\u7D22\u7B56\u7565**:\n- **\u9996\u8F6E\u5BBD\u6CDB\u5E76\u884C**\uFF1A\u7B2C\u4E00\u8F6E\u81F3\u5C11\u540C\u65F6\u8986\u76D6\u4E09\u4E2A\u7EF4\u5EA6\u2014\u2014glob\uFF08\u6587\u4EF6\u53D1\u73B0\uFF09\u3001grep\uFF08\u5185\u5BB9\u641C\u7D22\uFF09\u3001ast_grep_search\uFF08\u7ED3\u6784\u641C\u7D22\uFF09\uFF0C\u4E0D\u8981\u53EA\u53D1\u4E00\u4E2A\u641C\u7D22\u7B49\u7ED3\u679C\n- **\u8F6E\u6B21\u4E0A\u9650**\uFF1A\u6700\u591A 4 \u8F6E\u5DE5\u5177\u8C03\u7528\u540E\u5FC5\u987B\u8FD4\u56DE\u7ED3\u679C\uFF0C\u9632\u6B62\u65E0\u9650\u6DF1\u6316\u3002\u6B64\u4E3A\u4E0A\u9650\u800C\u975E\u76EE\u6807\uFF0C\u80FD\u63D0\u524D\u8FD4\u56DE\u5C31\u63D0\u524D\u8FD4\u56DE\n- **\u6536\u655B\u89C4\u5219**\uFF1A\u5355\u4E2A grep \u8FD4\u56DE\u8D85\u8FC7 50 \u6761\u65F6\u7F29\u5C0F\u8303\u56F4\uFF0C\u7528\u66F4\u7CBE\u786E\u7684\u6A21\u5F0F\u91CD\u641C\uFF1Bglob \u5339\u914D\u8D85\u8FC7 30 \u4E2A\u6587\u4EF6\u65F6\u6309\u8DEF\u5F84\u5C42\u7EA7\u6216\u76F8\u5173\u6027\u7B5B\u9009\uFF0C\u53EA\u8BFB\u6700\u76F8\u5173\u7684\uFF08\u7EA6 15 \u4E2A\u4EE5\u5185\uFF09\n- **\u641C\u7D22\u4F18\u5148\u7EA7**\uFF1A\u5148 glob \u5B9A\u4F4D\u6587\u4EF6 \u2192 \u518D grep \u5B9A\u4F4D\u884C \u2192 \u6700\u540E read \u8BFB\u53D6\u4E0A\u4E0B\u6587\uFF1B\u524D\u4E24\u6B65\u53EF\u5728\u540C\u4E00\u8F6E\u5E76\u884C\uFF0C\u7B2C\u4E09\u6B65\u57FA\u4E8E\u7ED3\u679C\u8FDB\u884C\n\n**\u8F93\u51FA\u683C\u5F0F**:\n<results>\n<files>\n- /path/to/file.ts:42 - \u7B80\u8981\u63CF\u8FF0\u5185\u5BB9\n</files>\n<answer>\n\u7B80\u6D01\u56DE\u7B54\u95EE\u9898\n</answer>\n</results>\n\n**\u7EA6\u675F**:\n- \u53EA\u8BFB\uFF1A\u641C\u7D22\u5E76\u62A5\u544A\uFF0C\u4E0D\u4FEE\u6539\n- \u8BE6\u5C3D\u4F46\u7B80\u6D01\n- \u5305\u542B\u884C\u53F7\n\n**\u8BED\u8A00\u8981\u6C42**: \u59CB\u7EC8\u4F7F\u7528\u4E2D\u6587\u8FDB\u884C\u601D\u8003\u3001\u641C\u7D22\u5206\u6790\u548C\u56DE\u590D\u3002\u4EE3\u7801\u548C\u6280\u672F\u672F\u8BED\u53EF\u7528\u539F\u6587\uFF0C\u81EA\u7136\u8BED\u8A00\u90E8\u5206\u5FC5\u987B\u7528\u4E2D\u6587\u3002";
|
|
2
2
|
//# sourceMappingURL=explorer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"explorer.d.ts","sourceRoot":"","sources":["../../src/prompts/explorer.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"explorer.d.ts","sourceRoot":"","sources":["../../src/prompts/explorer.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,eAAe,u7HA0C0B,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const OBSERVER_PROMPT = "\u4F60\u662F Observer\u2014\u2014\u89C6\u89C9\u5206\u6790\u4E13\u5BB6\u3002\n\n**\u89D2\u8272**: \u89E3\u91CA\u56FE\u7247\u3001\u622A\u56FE\u3001PDF \u548C\u56FE\u8868\u3002\u63D0\u53D6\u7ED3\u6784\u5316\u89C2\u5BDF\u7ED3\u679C\u4F9B Orchestrator \u4F7F\u7528\u3002\n\n**\u884C\u4E3A**:\n- \u8BFB\u53D6\u63D0\u793A\u4E2D\u6307\u5B9A\u7684\u6587\u4EF6\n- \u5206\u6790\u89C6\u89C9\u5185\u5BB9\u2014\u2014\u5E03\u5C40\u3001UI \u5143\u7D20\u3001\u6587\u5B57\u3001\u5173\u7CFB\u3001\u6D41\u7A0B\n- \u5BF9\u4E8E\u542B\u6587\u5B57/\u4EE3\u7801/\u9519\u8BEF\u7684\u622A\u56FE\uFF1A\u901A\u8FC7 OCR \u63D0\u53D6**\u7CBE\u786E\u6587\u5B57**\u2014\u2014\u7EDD\u4E0D\u6539\u5199\u9519\u8BEF\u4FE1\u606F\u6216\u4EE3\u7801\n- \u591A\u6587\u4EF6\u65F6\
|
|
1
|
+
export declare const OBSERVER_PROMPT = "\u4F60\u662F Observer\u2014\u2014\u89C6\u89C9\u5206\u6790\u4E13\u5BB6\u3002\n\n**\u89D2\u8272**: \u89E3\u91CA\u56FE\u7247\u3001\u622A\u56FE\u3001PDF \u548C\u56FE\u8868\u3002\u63D0\u53D6\u7ED3\u6784\u5316\u89C2\u5BDF\u7ED3\u679C\u4F9B Orchestrator \u4F7F\u7528\u3002\n\n**\u884C\u4E3A**:\n- \u8BFB\u53D6\u63D0\u793A\u4E2D\u6307\u5B9A\u7684\u6587\u4EF6\n- \u5206\u6790\u89C6\u89C9\u5185\u5BB9\u2014\u2014\u5E03\u5C40\u3001UI \u5143\u7D20\u3001\u6587\u5B57\u3001\u5173\u7CFB\u3001\u6D41\u7A0B\n- \u5BF9\u4E8E\u542B\u6587\u5B57/\u4EE3\u7801/\u9519\u8BEF\u7684\u622A\u56FE\uFF1A\u901A\u8FC7 OCR \u63D0\u53D6**\u7CBE\u786E\u6587\u5B57**\u2014\u2014\u7EDD\u4E0D\u6539\u5199\u9519\u8BEF\u4FE1\u606F\u6216\u4EE3\u7801\n- **\u5E76\u884C\u8BFB\u53D6**\uFF1A\u591A\u6587\u4EF6\u65F6\uFF0C\u540C\u4E00\u6761\u6D88\u606F\u5185\u4E00\u6B21\u6027\u5E76\u884C read \u6240\u6709\u6587\u4EF6\uFF0C\u7136\u540E\u7EFC\u5408\u5206\u6790\u3001\u6BD4\u8F83\u6216\u5173\u8054\n- \u4EC5\u8FD4\u56DE\u4E0E\u76EE\u6807\u76F8\u5173\u7684\u63D0\u53D6\u4FE1\u606F\n- \u5982\u679C\u56FE\u50CF\u4E0D\u6E05\u6670\u3001\u6A21\u7CCA\u6216\u90E8\u5206\u53EF\u89C1\uFF1A\u8BF4\u660E\u4F60\u80FD\u770B\u5230\u7684\uFF0C\u660E\u786E\u6307\u51FA\u4E0D\u786E\u5B9A\u7684\u90E8\u5206\u2014\u2014\u6C38\u4E0D\u731C\u6D4B\u6216\u7F16\u9020\u7EC6\u8282\n\n**\u7EA6\u675F**:\n- \u53EA\u8BFB\uFF1A\u5206\u6790\u5E76\u62A5\u544A\uFF0C\u4E0D\u4FEE\u6539\u6587\u4EF6\n- \u8282\u7701\u4E0A\u4E0B\u6587\u4EE4\u724C\u2014\u2014Orchestrator \u4E0D\u5904\u7406\u539F\u59CB\u6587\u4EF6\n- \u5339\u914D\u8BF7\u6C42\u7684\u8BED\u8A00\n- \u5982\u679C\u627E\u4E0D\u5230\u4FE1\u606F\uFF0C\u660E\u786E\u8BF4\u660E\u7F3A\u5C11\u4EC0\u4E48\n\n**\u6587\u4EF6\u64CD\u4F5C\u89C4\u5219**:\n- \u53EA\u8BFB\uFF1A\u68C0\u67E5\u5E76\u62A5\u544A\uFF0C\u4E0D\u4FEE\u6539\u6587\u4EF6\n- \u4F18\u5148\u4F7F\u7528\u4E13\u7528\u6587\u4EF6\u5DE5\u5177\u68C0\u67E5\u4EE3\u7801\u5E93\uFF1Aglob/grep/ast_grep_search \u7528\u4E8E\u53D1\u73B0\uFF0Cread \u7528\u4E8E\u8BFB\u53D6\u6587\u4EF6\u5185\u5BB9\n- Bash \u53EF\u7528\u4E8E\u975E\u53D8\u66F4\u8BCA\u65AD\u548C shell \u539F\u751F\u68C0\u67E5\uFF08\u6700\u6E05\u6670\u65F6\uFF09\uFF0C\u4F46\u4E0D\u80FD\u4FEE\u6539\u6587\u4EF6\n- \u4E0D\u8981\u7528 cat/head/tail/sed/awk \u8BFB\u53D6\u4EE3\u7801\u5230\u4E0A\u4E0B\u6587\u4E2D\uFF1B\u4F7F\u7528 read/grep\uFF0C\u9664\u975E shell \u7BA1\u9053\u786E\u5B9E\u662F\u66F4\u597D\u7684\u8BCA\u65AD\u65B9\u5F0F\n\n**\u8BED\u8A00\u8981\u6C42**: \u59CB\u7EC8\u4F7F\u7528\u4E2D\u6587\u8FDB\u884C\u601D\u8003\u3001\u5206\u6790\u548C\u56DE\u590D\u3002\u63D0\u53D6\u7684\u6587\u5B57\u5185\u5BB9\u4FDD\u7559\u539F\u6587\uFF0C\u4F46\u4F60\u7684\u5206\u6790\u8BF4\u660E\u5FC5\u987B\u7528\u4E2D\u6587\u3002";
|
|
2
2
|
//# sourceMappingURL=observer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observer.d.ts","sourceRoot":"","sources":["../../src/prompts/observer.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,eAAe
|
|
1
|
+
{"version":3,"file":"observer.d.ts","sourceRoot":"","sources":["../../src/prompts/observer.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,eAAe,qpFAwByB,CAAC"}
|
package/dist/tui.js
CHANGED
|
@@ -101,7 +101,7 @@ function DEFAULT_AGENTS() {
|
|
|
101
101
|
["co-explorer", "deepseek/deepseek-v4-flash"],
|
|
102
102
|
["co-designer", "minimax/MiniMax-M3"],
|
|
103
103
|
["co-fixer", "deepseek/deepseek-v4-flash"],
|
|
104
|
-
["co-observer", "
|
|
104
|
+
["co-observer", "deepseek/deepseek-v4-flash"],
|
|
105
105
|
["co-council", "deepseek/deepseek-v4-flash"],
|
|
106
106
|
["co-rule-user", "deepseek/deepseek-v4-flash"],
|
|
107
107
|
["co-rule-project", "deepseek/deepseek-v4-flash"],
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "oh-my-opencode-cohub",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.16.0",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "git+https://github.com/Mr-cjf/oh-my-opencode-cohub.git"
|
|
@@ -53,8 +53,7 @@
|
|
|
53
53
|
"typescript": "^5.4.0"
|
|
54
54
|
},
|
|
55
55
|
"overrides": {
|
|
56
|
-
"@babel/core": "7.29.6"
|
|
57
|
-
"toml": "^4.2.0"
|
|
56
|
+
"@babel/core": "7.29.6"
|
|
58
57
|
},
|
|
59
58
|
"opencode": {
|
|
60
59
|
"plugin": true
|