oh-my-opencode-cohub 1.12.13 → 1.13.0-beta.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 +1 -0
- package/dist/cli/index.js +115 -15
- package/dist/config/loader.d.ts +5 -16
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/context/engine.d.ts +15 -1
- package/dist/context/engine.d.ts.map +1 -1
- package/dist/context/extractor.d.ts +8 -0
- package/dist/context/extractor.d.ts.map +1 -1
- package/dist/context/truncate.test.d.ts +2 -0
- package/dist/context/truncate.test.d.ts.map +1 -0
- package/dist/context/types.d.ts +2 -0
- package/dist/context/types.d.ts.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +924 -109
- package/dist/task-manager/quality.d.ts +51 -0
- package/dist/task-manager/quality.d.ts.map +1 -0
- package/dist/task-manager/quality.test.d.ts +2 -0
- package/dist/task-manager/quality.test.d.ts.map +1 -0
- package/dist/task-manager/stats.test.d.ts +2 -0
- package/dist/task-manager/stats.test.d.ts.map +1 -0
- package/dist/task-manager/tracker.d.ts +57 -6
- package/dist/task-manager/tracker.d.ts.map +1 -1
- package/dist/task-manager/types.d.ts +11 -0
- package/dist/task-manager/types.d.ts.map +1 -1
- package/dist/tools/adaptive-params.d.ts +63 -0
- package/dist/tools/adaptive-params.d.ts.map +1 -0
- package/dist/tools/adaptive-params.test.d.ts +2 -0
- package/dist/tools/adaptive-params.test.d.ts.map +1 -0
- package/dist/tools/council.d.ts +78 -1
- package/dist/tools/council.d.ts.map +1 -1
- package/dist/tools/council.test.d.ts +2 -0
- package/dist/tools/council.test.d.ts.map +1 -0
- package/dist/tools/model-stats.d.ts +56 -0
- package/dist/tools/model-stats.d.ts.map +1 -0
- package/dist/tools/model-stats.test.d.ts +2 -0
- package/dist/tools/model-stats.test.d.ts.map +1 -0
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.js +26 -5
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -480,6 +480,7 @@ npm run build
|
|
|
480
480
|
|
|
481
481
|
| 版本 | 日期 | 主要变更 |
|
|
482
482
|
|------|------|---------|
|
|
483
|
+
| [v1.12.13](https://github.com/Mr-cjf/oh-my-opencode-cohub/releases/tag/v1.12.13) | 2026-08-07 | 修复 messages.transform 仅对最后一条 user 消息做占位修复,恢复含 file-only 历史消息的旧会话时触发 API 空 content 错误 |
|
|
483
484
|
| [v1.12.12](https://github.com/Mr-cjf/oh-my-opencode-cohub/releases/tag/v1.12.12) | 2026-08-04 | 子代理模型降级 Flash(适配 DeepSeek-V4-Flash 2026-07-31 增强),仅 orchestrator 保留 Pro;Board 会话复用修复 |
|
|
484
485
|
| [1.12.10-beta.1](https://github.com/Mr-cjf/oh-my-opencode-cohub/releases/tag/v1.12.10-beta.1) | 2026-07-30 | 调度策略优化、四阶段并行决策框架 |
|
|
485
486
|
| [1.12.9](https://github.com/Mr-cjf/oh-my-opencode-cohub/releases/tag/v1.12.9) | 2026-07-29 | 安装架构修复、配置双保险回退、prerelease 发布 |
|
package/dist/cli/index.js
CHANGED
|
@@ -1,18 +1,67 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
// src/cli/index.ts
|
|
4
|
+
import * as fs2 from "node:fs";
|
|
5
|
+
|
|
6
|
+
// src/task-manager/tracker.ts
|
|
7
|
+
import * as os from "node:os";
|
|
8
|
+
import * as path from "node:path";
|
|
9
|
+
var DEFAULT_STATS_WINDOW = 50;
|
|
10
|
+
var STATS_FILE = path.join(os.homedir(), ".local", "share", "opencode", "storage", "oh-my-opencode-cohub", "stats.json");
|
|
11
|
+
function computeStats(records, window = DEFAULT_STATS_WINDOW) {
|
|
12
|
+
const recent = records.slice(-Math.max(1, window));
|
|
13
|
+
const buckets = new Map;
|
|
14
|
+
for (const r of recent) {
|
|
15
|
+
const key = r.strategy + "\x00" + r.agent;
|
|
16
|
+
let bucket = buckets.get(key);
|
|
17
|
+
if (!bucket) {
|
|
18
|
+
bucket = {
|
|
19
|
+
strategy: r.strategy,
|
|
20
|
+
agent: r.agent,
|
|
21
|
+
count: 0,
|
|
22
|
+
successCount: 0,
|
|
23
|
+
successRate: 0,
|
|
24
|
+
avgLatencyMs: 0,
|
|
25
|
+
latencySamples: 0,
|
|
26
|
+
avgTokens: 0,
|
|
27
|
+
tokenSamples: 0
|
|
28
|
+
};
|
|
29
|
+
buckets.set(key, bucket);
|
|
30
|
+
}
|
|
31
|
+
bucket.count += 1;
|
|
32
|
+
if (r.status === "completed")
|
|
33
|
+
bucket.successCount += 1;
|
|
34
|
+
if (typeof r.latencyMs === "number") {
|
|
35
|
+
bucket.avgLatencyMs = (bucket.avgLatencyMs * bucket.latencySamples + r.latencyMs) / (bucket.latencySamples + 1);
|
|
36
|
+
bucket.latencySamples += 1;
|
|
37
|
+
}
|
|
38
|
+
if (r.tokens && typeof r.tokens.input === "number" && typeof r.tokens.output === "number") {
|
|
39
|
+
const total = r.tokens.input + r.tokens.output;
|
|
40
|
+
bucket.avgTokens = (bucket.avgTokens * bucket.tokenSamples + total) / (bucket.tokenSamples + 1);
|
|
41
|
+
bucket.tokenSamples += 1;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
const result = Array.from(buckets.values());
|
|
45
|
+
for (const b of result) {
|
|
46
|
+
b.successRate = b.count > 0 ? b.successCount / b.count * 100 : 0;
|
|
47
|
+
}
|
|
48
|
+
result.sort((a, b) => a.strategy.localeCompare(b.strategy) || a.agent.localeCompare(b.agent));
|
|
49
|
+
return result;
|
|
50
|
+
}
|
|
2
51
|
// package.json
|
|
3
|
-
var version = "1.
|
|
52
|
+
var version = "1.13.0-beta.0";
|
|
4
53
|
|
|
5
54
|
// src/cli/config-io.ts
|
|
6
55
|
import * as fs from "node:fs";
|
|
7
|
-
import * as
|
|
8
|
-
import * as
|
|
56
|
+
import * as path2 from "node:path";
|
|
57
|
+
import * as os2 from "node:os";
|
|
9
58
|
import { execSync } from "node:child_process";
|
|
10
59
|
var PACKAGE_NAME = "oh-my-opencode-cohub";
|
|
11
60
|
function getOpencodeConfigPath() {
|
|
12
|
-
return
|
|
61
|
+
return path2.join(os2.homedir(), ".config", "opencode", "opencode.json");
|
|
13
62
|
}
|
|
14
63
|
function getTuiConfigPath() {
|
|
15
|
-
return
|
|
64
|
+
return path2.join(os2.homedir(), ".config", "opencode", "tui.json");
|
|
16
65
|
}
|
|
17
66
|
function readJSON(filePath) {
|
|
18
67
|
try {
|
|
@@ -29,7 +78,7 @@ function readJSON(filePath) {
|
|
|
29
78
|
}
|
|
30
79
|
}
|
|
31
80
|
function writeJSON(filePath, data) {
|
|
32
|
-
const dir =
|
|
81
|
+
const dir = path2.dirname(filePath);
|
|
33
82
|
if (!fs.existsSync(dir))
|
|
34
83
|
fs.mkdirSync(dir, { recursive: true });
|
|
35
84
|
const content = JSON.stringify(data, null, 2) + `
|
|
@@ -69,7 +118,7 @@ function addPluginToTuiConfig() {
|
|
|
69
118
|
return { success: true, message: `✓ 已添加 "${PACKAGE_NAME}" 到 tui.json 的 plugin 数组` };
|
|
70
119
|
}
|
|
71
120
|
function getOhMyConfigPath() {
|
|
72
|
-
return
|
|
121
|
+
return path2.join(os2.homedir(), ".config", "opencode", "oh-my-opencode-slim.json");
|
|
73
122
|
}
|
|
74
123
|
function registerCoHubAgents() {
|
|
75
124
|
const configPath = getOpencodeConfigPath();
|
|
@@ -149,8 +198,8 @@ function registerCoHubAgents() {
|
|
|
149
198
|
msgParts.push("Agent 定义已由插件运行时接管(参照 slim 架构)");
|
|
150
199
|
return { success: true, message: `✓ ${msgParts.join(",")}` };
|
|
151
200
|
}
|
|
152
|
-
var COHUB_CONFIG_PATH =
|
|
153
|
-
var PACKAGES_CACHE =
|
|
201
|
+
var COHUB_CONFIG_PATH = path2.join(os2.homedir(), ".config", "opencode", "oh-my-opencode-cohub.json");
|
|
202
|
+
var PACKAGES_CACHE = path2.join(os2.homedir(), ".cache", "opencode", "packages", PACKAGE_NAME);
|
|
154
203
|
var HEAVY_KEYWORDS = ["pro", "preview", "opus", "max", "sonnet", "gpt-5.6"];
|
|
155
204
|
var LIGHT_KEYWORDS = ["flash", "mini", "haiku", "gpt-5.4", "gpt-5.3"];
|
|
156
205
|
var DESIGN_KEYWORDS = ["minimax", "m3", "sonnet", "claude"];
|
|
@@ -216,7 +265,7 @@ function writeDefaultConfig() {
|
|
|
216
265
|
_comment: "未找到可用供应商。请在 opencode.json 中配置 provider 后重新运行 install,或手动在此文件中配置 model 和 variant。"
|
|
217
266
|
};
|
|
218
267
|
try {
|
|
219
|
-
const dir =
|
|
268
|
+
const dir = path2.dirname(COHUB_CONFIG_PATH);
|
|
220
269
|
if (!fs.existsSync(dir))
|
|
221
270
|
fs.mkdirSync(dir, { recursive: true });
|
|
222
271
|
fs.writeFileSync(COHUB_CONFIG_PATH, JSON.stringify(fallbackConfig, null, 2), "utf-8");
|
|
@@ -294,7 +343,7 @@ function writeDefaultConfig() {
|
|
|
294
343
|
} : { presets: {} }
|
|
295
344
|
};
|
|
296
345
|
try {
|
|
297
|
-
const dir =
|
|
346
|
+
const dir = path2.dirname(COHUB_CONFIG_PATH);
|
|
298
347
|
if (!fs.existsSync(dir))
|
|
299
348
|
fs.mkdirSync(dir, { recursive: true });
|
|
300
349
|
fs.writeFileSync(COHUB_CONFIG_PATH, JSON.stringify(defaultConfig, null, 2), "utf-8");
|
|
@@ -359,7 +408,7 @@ function uninstallCoHub() {
|
|
|
359
408
|
}
|
|
360
409
|
}
|
|
361
410
|
}
|
|
362
|
-
const tuiStatePath =
|
|
411
|
+
const tuiStatePath = path2.join(os2.homedir(), ".local", "share", "opencode", "storage", "oh-my-opencode-slim", "tui-state.json");
|
|
363
412
|
if (fs.existsSync(tuiStatePath)) {
|
|
364
413
|
let tuiState = readJSON(tuiStatePath);
|
|
365
414
|
if (tuiState) {
|
|
@@ -414,7 +463,7 @@ function uninstallCoHub() {
|
|
|
414
463
|
messages.push("⚠ 清理缓存目录失败,请手动删除: " + PACKAGES_CACHE);
|
|
415
464
|
}
|
|
416
465
|
}
|
|
417
|
-
const legacyPluginsDir =
|
|
466
|
+
const legacyPluginsDir = path2.join(os2.homedir(), ".config", "opencode", "plugins", PACKAGE_NAME);
|
|
418
467
|
if (fs.existsSync(legacyPluginsDir)) {
|
|
419
468
|
try {
|
|
420
469
|
fs.rmSync(legacyPluginsDir, { recursive: true, force: true });
|
|
@@ -432,11 +481,11 @@ function installToCacheDir(version2) {
|
|
|
432
481
|
}
|
|
433
482
|
fs.mkdirSync(targetDir, { recursive: true });
|
|
434
483
|
const pkgJson = { private: true };
|
|
435
|
-
fs.writeFileSync(
|
|
484
|
+
fs.writeFileSync(path2.join(targetDir, "package.json"), JSON.stringify(pkgJson, null, 2), "utf-8");
|
|
436
485
|
const pkgSpec = `${PACKAGE_NAME}@${version2}`;
|
|
437
486
|
const cmd = `npm install "${pkgSpec}" --save --legacy-peer-deps`;
|
|
438
487
|
execSync(cmd, { cwd: targetDir, stdio: "pipe", timeout: 120000 });
|
|
439
|
-
const entryPath =
|
|
488
|
+
const entryPath = path2.join(targetDir, "node_modules", PACKAGE_NAME, "dist", "index.js");
|
|
440
489
|
if (!fs.existsSync(entryPath)) {
|
|
441
490
|
return { success: false, message: `⚠ npm install 成功但入口文件缺失: ${entryPath}` };
|
|
442
491
|
}
|
|
@@ -592,6 +641,8 @@ council 是内置的多模型共识机制,会将同一个问题发给 3 个 co
|
|
|
592
641
|
}
|
|
593
642
|
console.log(`
|
|
594
643
|
${"=".repeat(60)}`);
|
|
644
|
+
} else if (command === "stats") {
|
|
645
|
+
printStats(parseWindow(args[1]));
|
|
595
646
|
} else if (command === "uninstall") {
|
|
596
647
|
console.log(`\uD83E\uDDF9 CoHub 卸载中...
|
|
597
648
|
`);
|
|
@@ -605,6 +656,55 @@ ${"=".repeat(60)}`);
|
|
|
605
656
|
console.log("用法:");
|
|
606
657
|
console.log(" bunx oh-my-opencode-cohub install 安装 CoHub");
|
|
607
658
|
console.log(" bunx oh-my-opencode-cohub uninstall 卸载 CoHub");
|
|
659
|
+
console.log(" bunx oh-my-opencode-cohub stats [N] 查看最近 N 个任务统计(默认 50)");
|
|
608
660
|
}
|
|
609
661
|
}
|
|
610
662
|
main().catch(console.error);
|
|
663
|
+
function parseWindow(raw) {
|
|
664
|
+
const n = Number.parseInt(raw ?? "", 10);
|
|
665
|
+
return Number.isFinite(n) && n > 0 ? n : DEFAULT_STATS_WINDOW;
|
|
666
|
+
}
|
|
667
|
+
function printStats(window) {
|
|
668
|
+
console.log("\uD83D\uDCCA CoHub 任务统计(最近 " + window + ` 个任务)
|
|
669
|
+
`);
|
|
670
|
+
let records = [];
|
|
671
|
+
try {
|
|
672
|
+
if (fs2.existsSync(STATS_FILE)) {
|
|
673
|
+
const raw = JSON.parse(fs2.readFileSync(STATS_FILE, "utf8"));
|
|
674
|
+
records = computeStats(raw, window);
|
|
675
|
+
}
|
|
676
|
+
} catch {
|
|
677
|
+
records = [];
|
|
678
|
+
}
|
|
679
|
+
if (records.length === 0) {
|
|
680
|
+
console.log("暂无统计数据。插件运行产生任务后会持久化统计记录,届时再执行 stats 查看。");
|
|
681
|
+
return;
|
|
682
|
+
}
|
|
683
|
+
const pad = (s, w) => s.padEnd(w);
|
|
684
|
+
const fmtRate = (r) => r.toFixed(1) + "%";
|
|
685
|
+
const fmtMs = (ms, samples) => samples > 0 ? (ms / 1000).toFixed(1) + "s" : "-";
|
|
686
|
+
const fmtTokens = (t, samples) => samples > 0 ? String(Math.round(t)) : "-";
|
|
687
|
+
console.log(pad("策略", 10) + pad("代理", 16) + pad("任务数", 6) + pad("成功率", 8) + pad("平均延迟", 10) + "平均Token");
|
|
688
|
+
let totalCount = 0;
|
|
689
|
+
let totalSuccess = 0;
|
|
690
|
+
let latencySum = 0;
|
|
691
|
+
let latencySamples = 0;
|
|
692
|
+
let tokenSum = 0;
|
|
693
|
+
let tokenSamples = 0;
|
|
694
|
+
for (const b of records) {
|
|
695
|
+
totalCount += b.count;
|
|
696
|
+
totalSuccess += b.successCount;
|
|
697
|
+
latencySum += b.avgLatencyMs * b.latencySamples;
|
|
698
|
+
latencySamples += b.latencySamples;
|
|
699
|
+
tokenSum += b.avgTokens * b.tokenSamples;
|
|
700
|
+
tokenSamples += b.tokenSamples;
|
|
701
|
+
console.log(pad(b.strategy, 10) + pad(b.agent, 16) + pad(String(b.count), 6) + pad(fmtRate(b.successRate), 8) + pad(fmtMs(b.avgLatencyMs, b.latencySamples), 10) + fmtTokens(b.avgTokens, b.tokenSamples));
|
|
702
|
+
}
|
|
703
|
+
if (records.length > 1) {
|
|
704
|
+
const totalRate = totalCount > 0 ? totalSuccess / totalCount * 100 : 0;
|
|
705
|
+
const totalMs = latencySamples > 0 ? latencySum / latencySamples : 0;
|
|
706
|
+
const totalTok = tokenSamples > 0 ? tokenSum / tokenSamples : 0;
|
|
707
|
+
console.log("-".repeat(52));
|
|
708
|
+
console.log(pad("合计", 10) + pad(totalCount + " 个任务", 16) + pad("", 6) + pad(fmtRate(totalRate), 8) + pad(fmtMs(totalMs, latencySamples), 10) + fmtTokens(totalTok, tokenSamples));
|
|
709
|
+
}
|
|
710
|
+
}
|
package/dist/config/loader.d.ts
CHANGED
|
@@ -1,21 +1,8 @@
|
|
|
1
1
|
import type { ContextConfig } from '../context/types';
|
|
2
|
+
import type { QualityConfig } from '../task-manager/quality';
|
|
2
3
|
import { DEFAULT_CONTEXT_CONFIG } from '../context/types';
|
|
3
|
-
|
|
4
|
-
export
|
|
5
|
-
model: string;
|
|
6
|
-
variant?: string;
|
|
7
|
-
prompt?: string;
|
|
8
|
-
}
|
|
9
|
-
export interface CouncilPreset {
|
|
10
|
-
[councillorName: string]: CouncillorConfig;
|
|
11
|
-
}
|
|
12
|
-
export interface CouncilConfig {
|
|
13
|
-
presets: Record<string, CouncilPreset>;
|
|
14
|
-
timeout?: number;
|
|
15
|
-
default_preset?: string;
|
|
16
|
-
councillor_execution_mode?: 'parallel' | 'serial';
|
|
17
|
-
councillor_retries?: number;
|
|
18
|
-
}
|
|
4
|
+
import type { CouncilConfig, CouncilPreset, CouncillorConfig } from '../tools/council';
|
|
5
|
+
export type { CouncilConfig, CouncilPreset, CouncillorConfig };
|
|
19
6
|
/** 用户配置中单个代理的覆盖项 */
|
|
20
7
|
export interface AgentOverride {
|
|
21
8
|
model?: string;
|
|
@@ -26,6 +13,8 @@ export interface CoHubConfig {
|
|
|
26
13
|
agents?: Record<string, AgentOverride>;
|
|
27
14
|
council?: CouncilConfig;
|
|
28
15
|
context?: Partial<ContextConfig>;
|
|
16
|
+
/** 质量回送配置(P0-1 负反馈闭环,默认开启) */
|
|
17
|
+
quality?: Partial<QualityConfig>;
|
|
29
18
|
}
|
|
30
19
|
/** 加载用户配置(项目级优先覆盖用户级) */
|
|
31
20
|
export declare function loadCoHubConfig(projectDir?: string): CoHubConfig;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAI1D,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACvF,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAE,CAAC;AAE/D,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;IACvC,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACjC,8BAA8B;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;CAClC;AAKD,yBAAyB;AACzB,wBAAgB,eAAe,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,WAAW,CAuBhE;AAYD,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
|
package/dist/context/engine.d.ts
CHANGED
|
@@ -22,6 +22,11 @@ export declare class ContextEngine {
|
|
|
22
22
|
fillContextAsync(contextId: string, parentSessionId: string, args: {
|
|
23
23
|
strategy: ContextStrategy;
|
|
24
24
|
}): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* summary 策略:读取相关文件正文并按 token 预算截断。
|
|
27
|
+
* 预算按文件数均摊,总注入不超过 summarizeMaxTokens;读取失败的文件保留 summary 回退。
|
|
28
|
+
*/
|
|
29
|
+
private attachTruncatedBodies;
|
|
25
30
|
/**
|
|
26
31
|
* Phase B: 消费标记文本。
|
|
27
32
|
* 从消息文本中提取 contextId → 查 registry → 替换标记为格式化上下文。
|
|
@@ -36,8 +41,17 @@ export declare class ContextEngine {
|
|
|
36
41
|
/**
|
|
37
42
|
* Phase C: 捕获子代理结果。
|
|
38
43
|
* 读取子 session 的最终输出 → 提取关键信息 → 存入 dependencyCache。
|
|
44
|
+
* 同时返回质量判定输入(output / decisions / tokens)供 P0-1 质量回送使用。
|
|
45
|
+
* dependencyPropagation 为 false 时跳过 dependencyCache 写入,不影响质量数据提取。
|
|
39
46
|
*/
|
|
40
|
-
captureResult(childSessionId: string, alias: string, agent: string): Promise<
|
|
47
|
+
captureResult(childSessionId: string, alias: string, agent: string): Promise<{
|
|
48
|
+
output: string;
|
|
49
|
+
decisions: number;
|
|
50
|
+
tokens?: {
|
|
51
|
+
input: number;
|
|
52
|
+
output: number;
|
|
53
|
+
};
|
|
54
|
+
} | null>;
|
|
41
55
|
/**
|
|
42
56
|
* 生成上下文标记文本,追加到 task description 末尾。
|
|
43
57
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/context/engine.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAe,aAAa,
|
|
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;IAsChB;;;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;IAoD/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"}
|
|
@@ -32,5 +32,13 @@ export declare function extractDecisions(messages: SdkMessage[], maxDecisions: n
|
|
|
32
32
|
* 从 bash 输出中提取编译/测试错误。
|
|
33
33
|
*/
|
|
34
34
|
export declare function extractErrors(messages: SdkMessage[], maxErrors: number, windowSize: number): string[];
|
|
35
|
+
/**
|
|
36
|
+
* 按 token 预算截断文本。
|
|
37
|
+
* P2-5: 估算规则区分中西文——中文字符(CJK 及东亚表意区)按 1 token/字符,
|
|
38
|
+
* 其余字符按 4 字符 ≈ 1 token(原统一 4 字符/token 对中文低估 2-4 倍)。
|
|
39
|
+
* 仅用于 summary 策略下文件正文裁剪;空文本或 maxTokens<=0 返回空串;
|
|
40
|
+
* 未超预算时原样返回,超预算时保留头部并在末尾追加省略标记。
|
|
41
|
+
*/
|
|
42
|
+
export declare function truncateByTokens(text: string, maxTokens: number): string;
|
|
35
43
|
export {};
|
|
36
44
|
//# sourceMappingURL=extractor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extractor.d.ts","sourceRoot":"","sources":["../../src/context/extractor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAuB5C,yBAAyB;AACzB,UAAU,OAAO;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE;QACN,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChC,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED,sBAAsB;AACtB,UAAU,UAAU;IAClB,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACzB,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,UAAU,EAAE,EACtB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,YAAY,EAAE,CAoFhB;AAUD;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,UAAU,EAAE,EACtB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,GACjB,MAAM,EAAE,CAqBV;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,UAAU,EAAE,EACtB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,MAAM,EAAE,CAwBV"}
|
|
1
|
+
{"version":3,"file":"extractor.d.ts","sourceRoot":"","sources":["../../src/context/extractor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAuB5C,yBAAyB;AACzB,UAAU,OAAO;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE;QACN,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChC,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED,sBAAsB;AACtB,UAAU,UAAU;IAClB,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACzB,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,UAAU,EAAE,EACtB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,YAAY,EAAE,CAoFhB;AAUD;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,UAAU,EAAE,EACtB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,GACjB,MAAM,EAAE,CAqBV;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,UAAU,EAAE,EACtB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,MAAM,EAAE,CAwBV;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAqBxE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"truncate.test.d.ts","sourceRoot":"","sources":["../../src/context/truncate.test.ts"],"names":[],"mappings":""}
|
package/dist/context/types.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ export interface RelevantFile {
|
|
|
5
5
|
path: string;
|
|
6
6
|
lines?: string;
|
|
7
7
|
summary: string;
|
|
8
|
+
body?: string;
|
|
8
9
|
}
|
|
9
10
|
/** 前置子代理的完成结果 */
|
|
10
11
|
export interface DependencyResult {
|
|
@@ -20,6 +21,7 @@ export interface TaskContext {
|
|
|
20
21
|
decisions: string[];
|
|
21
22
|
errors: string[];
|
|
22
23
|
dependencies: DependencyResult[];
|
|
24
|
+
strategy?: ContextStrategy;
|
|
23
25
|
}
|
|
24
26
|
/** 上下文系统配置 */
|
|
25
27
|
export interface ContextConfig {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/context/types.ts"],"names":[],"mappings":"AAEA,cAAc;AACd,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;AAEvE,eAAe;AACf,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/context/types.ts"],"names":[],"mappings":"AAEA,cAAc;AACd,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;AAEvE,eAAe;AACf,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,iBAAiB;AACjB,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,oBAAoB;AACpB,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,EAAE,gBAAgB,EAAE,CAAC;IACjC,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC5B;AAED,cAAc;AACd,MAAM,WAAW,aAAa;IAC5B,kBAAkB;IAClB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC1C,kBAAkB;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,gCAAgC;IAChC,qBAAqB,EAAE,OAAO,CAAC;IAC/B,uBAAuB;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,4BAA4B;IAC5B,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED,WAAW;AACX,eAAO,MAAM,sBAAsB,EAAE,aAqBpC,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;AA0HlD,QAAA,MAAM,WAAW,EAAE,MAmiBlB,CAAC;AAEF,eAAO,MAAM,MAAM,QAAc,CAAC;AAClC,eAAe,WAAW,CAAC"}
|