@zooique/memora 3.0.1 → 5.0.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/CHANGELOG.md +161 -1033
- package/README.en.md +46 -39
- package/README.md +40 -35
- package/config.example.json +1 -8
- package/dist/agent/agent.d.ts +88 -80
- package/dist/agent/agent.d.ts.map +1 -1
- package/dist/agent/agent.js +272 -221
- package/dist/agent/agent.js.map +1 -1
- package/dist/agent/assembler.d.ts +22 -21
- package/dist/agent/assembler.d.ts.map +1 -1
- package/dist/agent/assembler.js +120 -46
- package/dist/agent/assembler.js.map +1 -1
- package/dist/agent/backgroundTasks.d.ts +194 -0
- package/dist/agent/backgroundTasks.d.ts.map +1 -0
- package/dist/agent/backgroundTasks.js +314 -0
- package/dist/agent/backgroundTasks.js.map +1 -0
- package/dist/agent/budget.d.ts +23 -5
- package/dist/agent/budget.d.ts.map +1 -1
- package/dist/agent/budget.js +8 -2
- package/dist/agent/budget.js.map +1 -1
- package/dist/agent/builtinToolHandlers.d.ts +29 -9
- package/dist/agent/builtinToolHandlers.d.ts.map +1 -1
- package/dist/agent/builtinToolHandlers.js +53 -13
- package/dist/agent/builtinToolHandlers.js.map +1 -1
- package/dist/agent/builtinTools.d.ts +15 -1
- package/dist/agent/builtinTools.d.ts.map +1 -1
- package/dist/agent/builtinTools.js +111 -30
- package/dist/agent/builtinTools.js.map +1 -1
- package/dist/agent/constants.d.ts +31 -6
- package/dist/agent/constants.d.ts.map +1 -1
- package/dist/agent/constants.js +38 -8
- package/dist/agent/constants.js.map +1 -1
- package/dist/agent/contextManager.d.ts +8 -0
- package/dist/agent/contextManager.d.ts.map +1 -1
- package/dist/agent/contextManager.js +45 -3
- package/dist/agent/contextManager.js.map +1 -1
- package/dist/agent/contextPreparer.d.ts +1 -1
- package/dist/agent/contextPreparer.d.ts.map +1 -1
- package/dist/agent/contextPreparer.js +15 -10
- package/dist/agent/contextPreparer.js.map +1 -1
- package/dist/agent/guardRail.d.ts +12 -1
- package/dist/agent/guardRail.d.ts.map +1 -1
- package/dist/agent/guardRail.js +37 -2
- package/dist/agent/guardRail.js.map +1 -1
- package/dist/agent/loop.d.ts +319 -34
- package/dist/agent/loop.d.ts.map +1 -1
- package/dist/agent/loop.js +713 -110
- package/dist/agent/loop.js.map +1 -1
- package/dist/agent/managers/archiveCoordinator.d.ts +19 -4
- package/dist/agent/managers/archiveCoordinator.d.ts.map +1 -1
- package/dist/agent/managers/archiveCoordinator.js +25 -4
- package/dist/agent/managers/archiveCoordinator.js.map +1 -1
- package/dist/agent/managers/chatLockManager.d.ts +3 -9
- package/dist/agent/managers/chatLockManager.d.ts.map +1 -1
- package/dist/agent/managers/chatLockManager.js +7 -25
- package/dist/agent/managers/chatLockManager.js.map +1 -1
- package/dist/agent/managers/llmCaller.d.ts.map +1 -1
- package/dist/agent/managers/llmCaller.js +27 -1
- package/dist/agent/managers/llmCaller.js.map +1 -1
- package/dist/agent/managers/loopMetrics.d.ts +14 -0
- package/dist/agent/managers/loopMetrics.d.ts.map +1 -1
- package/dist/agent/managers/loopMetrics.js +15 -0
- package/dist/agent/managers/loopMetrics.js.map +1 -1
- package/dist/agent/managers/memoryInspector.d.ts +13 -15
- package/dist/agent/managers/memoryInspector.d.ts.map +1 -1
- package/dist/agent/managers/memoryInspector.js +38 -49
- package/dist/agent/managers/memoryInspector.js.map +1 -1
- package/dist/agent/managers/roundSummaryGenerator.d.ts +31 -1
- package/dist/agent/managers/roundSummaryGenerator.d.ts.map +1 -1
- package/dist/agent/managers/roundSummaryGenerator.js +81 -6
- package/dist/agent/managers/roundSummaryGenerator.js.map +1 -1
- package/dist/agent/managers/sessionArchiver.d.ts +35 -3
- package/dist/agent/managers/sessionArchiver.d.ts.map +1 -1
- package/dist/agent/managers/sessionArchiver.js +34 -3
- package/dist/agent/managers/sessionArchiver.js.map +1 -1
- package/dist/agent/managers/sessionManager.d.ts +21 -88
- package/dist/agent/managers/sessionManager.d.ts.map +1 -1
- package/dist/agent/managers/sessionManager.js +94 -278
- package/dist/agent/managers/sessionManager.js.map +1 -1
- package/dist/agent/managers/toolCallHelpers.d.ts +109 -28
- package/dist/agent/managers/toolCallHelpers.d.ts.map +1 -1
- package/dist/agent/managers/toolCallHelpers.js +93 -37
- package/dist/agent/managers/toolCallHelpers.js.map +1 -1
- package/dist/agent/messageHistory.d.ts.map +1 -1
- package/dist/agent/messageHistory.js +9 -5
- package/dist/agent/messageHistory.js.map +1 -1
- package/dist/agent/seed/orchestrator.d.ts +12 -1
- package/dist/agent/seed/orchestrator.d.ts.map +1 -1
- package/dist/agent/seed/orchestrator.js +15 -4
- package/dist/agent/seed/orchestrator.js.map +1 -1
- package/dist/agent/seed/prepare.d.ts.map +1 -1
- package/dist/agent/seed/prepare.js +9 -4
- package/dist/agent/seed/prepare.js.map +1 -1
- package/dist/agent/seed/types.d.ts +11 -4
- package/dist/agent/seed/types.d.ts.map +1 -1
- package/dist/agent/seed/types.js +2 -2
- package/dist/agent/textSanitize.d.ts +36 -0
- package/dist/agent/textSanitize.d.ts.map +1 -0
- package/dist/agent/textSanitize.js +55 -0
- package/dist/agent/textSanitize.js.map +1 -0
- package/dist/agent/toolExecutor.d.ts +97 -26
- package/dist/agent/toolExecutor.d.ts.map +1 -1
- package/dist/agent/toolExecutor.js +444 -78
- package/dist/agent/toolExecutor.js.map +1 -1
- package/dist/agent/toolLedger.d.ts +93 -41
- package/dist/agent/toolLedger.d.ts.map +1 -1
- package/dist/agent/toolLedger.js +114 -42
- package/dist/agent/toolLedger.js.map +1 -1
- package/dist/agent/toolResultCache.js +1 -1
- package/dist/agent/toolResultOffload.d.ts +8 -0
- package/dist/agent/toolResultOffload.d.ts.map +1 -1
- package/dist/agent/toolResultOffload.js +10 -3
- package/dist/agent/toolResultOffload.js.map +1 -1
- package/dist/agent/toolRunner.d.ts +16 -7
- package/dist/agent/toolRunner.d.ts.map +1 -1
- package/dist/agent/toolRunner.js +74 -29
- package/dist/agent/toolRunner.js.map +1 -1
- package/dist/agent/tracer.d.ts +13 -1
- package/dist/agent/tracer.d.ts.map +1 -1
- package/dist/agent/types.d.ts +74 -30
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/code-exec/types.d.ts +9 -0
- package/dist/code-exec/types.d.ts.map +1 -1
- package/dist/index.d.ts +28 -41
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +65 -54
- package/dist/index.js.map +1 -1
- package/dist/logging/logger.d.ts +4 -1
- package/dist/logging/logger.d.ts.map +1 -1
- package/dist/logging/logger.js +5 -2
- package/dist/logging/logger.js.map +1 -1
- package/dist/memory/gcService.d.ts.map +1 -1
- package/dist/memory/gcService.js +3 -5
- package/dist/memory/gcService.js.map +1 -1
- package/dist/memory/inMemorySessionStore.d.ts +2 -2
- package/dist/memory/inMemorySessionStore.js +2 -2
- package/dist/memory/inMemoryStorage.d.ts +4 -3
- package/dist/memory/inMemoryStorage.d.ts.map +1 -1
- package/dist/memory/inMemoryStorage.js +2 -2
- package/dist/memory/inMemoryStorage.js.map +1 -1
- package/dist/memory/nodeSqliteStorage.d.ts +17 -0
- package/dist/memory/nodeSqliteStorage.d.ts.map +1 -0
- package/dist/memory/nodeSqliteStorage.js +393 -0
- package/dist/memory/nodeSqliteStorage.js.map +1 -0
- package/dist/memory/projectManager.d.ts +10 -20
- package/dist/memory/projectManager.d.ts.map +1 -1
- package/dist/memory/projectManager.js +27 -41
- package/dist/memory/projectManager.js.map +1 -1
- package/dist/memory/roundStore.d.ts +143 -82
- package/dist/memory/roundStore.d.ts.map +1 -1
- package/dist/memory/roundStore.js +4 -15
- package/dist/memory/roundStore.js.map +1 -1
- package/dist/memory/roundSummaryLookup.d.ts +26 -0
- package/dist/memory/roundSummaryLookup.d.ts.map +1 -0
- package/dist/memory/roundSummaryLookup.js +19 -0
- package/dist/memory/roundSummaryLookup.js.map +1 -0
- package/dist/memory/sessionStore.d.ts +19 -2
- package/dist/memory/sessionStore.d.ts.map +1 -1
- package/dist/memory/sessionStore.js.map +1 -1
- package/dist/memory/sourceValidation.d.ts +2 -13
- package/dist/memory/sourceValidation.d.ts.map +1 -1
- package/dist/memory/sourceValidation.js +5 -16
- package/dist/memory/sourceValidation.js.map +1 -1
- package/dist/memory/storageInterface.d.ts +26 -16
- package/dist/memory/storageInterface.d.ts.map +1 -1
- package/dist/memory/supersedeResolve.d.ts +39 -0
- package/dist/memory/supersedeResolve.d.ts.map +1 -0
- package/dist/memory/supersedeResolve.js +16 -0
- package/dist/memory/supersedeResolve.js.map +1 -0
- package/dist/memory/types.d.ts +10 -2
- package/dist/memory/types.d.ts.map +1 -1
- package/dist/memory/types.js +6 -1
- package/dist/memory/types.js.map +1 -1
- package/dist/role-pack/rolePackManager.d.ts +74 -33
- package/dist/role-pack/rolePackManager.d.ts.map +1 -1
- package/dist/role-pack/rolePackManager.js +112 -53
- package/dist/role-pack/rolePackManager.js.map +1 -1
- package/dist/role-pack/strategyKeys.d.ts +44 -0
- package/dist/role-pack/strategyKeys.d.ts.map +1 -1
- package/dist/role-pack/strategyKeys.js +55 -0
- package/dist/role-pack/strategyKeys.js.map +1 -1
- package/dist/role-pack/strategyResolver.d.ts +6 -1
- package/dist/role-pack/strategyResolver.d.ts.map +1 -1
- package/dist/role-pack/strategyResolver.js +20 -2
- package/dist/role-pack/strategyResolver.js.map +1 -1
- package/dist/role-pack/types.d.ts +5 -1
- package/dist/role-pack/types.d.ts.map +1 -1
- package/dist/security/confirmEntries.d.ts +44 -0
- package/dist/security/confirmEntries.d.ts.map +1 -0
- package/dist/security/confirmEntries.js +59 -0
- package/dist/security/confirmEntries.js.map +1 -0
- package/dist/security/pathGuard.d.ts +42 -6
- package/dist/security/pathGuard.d.ts.map +1 -1
- package/dist/security/pathGuard.js +126 -5
- package/dist/security/pathGuard.js.map +1 -1
- package/dist/skill/skillScriptRunner.d.ts +147 -15
- package/dist/skill/skillScriptRunner.d.ts.map +1 -1
- package/dist/skill/skillScriptRunner.js +479 -68
- package/dist/skill/skillScriptRunner.js.map +1 -1
- package/dist/utils/backgroundTask.d.ts +56 -34
- package/dist/utils/backgroundTask.d.ts.map +1 -1
- package/dist/utils/backgroundTask.js +130 -99
- package/dist/utils/backgroundTask.js.map +1 -1
- package/dist/utils/configResourceManager.d.ts +6 -2
- package/dist/utils/configResourceManager.d.ts.map +1 -1
- package/dist/utils/configResourceManager.js +8 -2
- package/dist/utils/configResourceManager.js.map +1 -1
- package/dist/utils/errors.d.ts +12 -2
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +12 -2
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/eventEmitter.d.ts +76 -23
- package/dist/utils/eventEmitter.d.ts.map +1 -1
- package/dist/utils/eventEmitter.js +23 -3
- package/dist/utils/eventEmitter.js.map +1 -1
- package/dist/utils/time.d.ts +8 -5
- package/dist/utils/time.d.ts.map +1 -1
- package/dist/utils/time.js +8 -5
- package/dist/utils/time.js.map +1 -1
- package/dist/utils/toError.d.ts +1 -1
- package/dist/utils/toError.js +1 -1
- package/dist/web-fetch/loginWall.d.ts +39 -0
- package/dist/web-fetch/loginWall.d.ts.map +1 -0
- package/dist/web-fetch/loginWall.js +78 -0
- package/dist/web-fetch/loginWall.js.map +1 -0
- package/dist/web-fetch/types.d.ts +8 -0
- package/dist/web-fetch/types.d.ts.map +1 -1
- package/dist/web-fetch/webFetchProvider.d.ts.map +1 -1
- package/dist/web-fetch/webFetchProvider.js +3 -1
- package/dist/web-fetch/webFetchProvider.js.map +1 -1
- package/dist/web-search/fetchWebSearchProvider.js +28 -23
- package/dist/web-search/fetchWebSearchProvider.js.map +1 -1
- package/docs/architecture/role-pack-authoring-guide.md +3 -1
- package/docs/architecture/role-pack-spec.md +2 -1
- package/docs/memora-api-reference.md +1349 -1175
- package/docs/memora-/345/215/207/347/272/247/346/214/207/345/215/227-4.x-/345/210/260-5.0.0.md +385 -0
- package/docs/memora-/346/216/245/345/205/245/346/214/207/345/215/227.md +91 -52
- package/docs/role-pack-/345/274/200/346/224/276/351/224/256/346/214/207/345/215/227.md +148 -148
- package/package.json +9 -4
- package/role-packs/README.md +41 -40
- package/role-packs/memora/345/212/251/346/211/213/rules.md +4 -4
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/manifest.json +1 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/persona.md +1 -1
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/rules.md +1 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/emotion-wave.md +1 -1
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/foreshadow.md +1 -1
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/outline-expand.md +32 -5
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/project-init/scripts/init-novel-project.mjs +10 -6
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/story-bible.md +3 -1
- package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/manifest.json +1 -0
- package/dist/agent/managers/dedupManager.d.ts +0 -85
- package/dist/agent/managers/dedupManager.d.ts.map +0 -1
- package/dist/agent/managers/dedupManager.js +0 -248
- package/dist/agent/managers/dedupManager.js.map +0 -1
- package/dist/agent/managers/goalConsistencyChecker.d.ts +0 -42
- package/dist/agent/managers/goalConsistencyChecker.d.ts.map +0 -1
- package/dist/agent/managers/goalConsistencyChecker.js +0 -178
- package/dist/agent/managers/goalConsistencyChecker.js.map +0 -1
- package/dist/agent/managers/llmJudgeHelper.d.ts +0 -21
- package/dist/agent/managers/llmJudgeHelper.d.ts.map +0 -1
- package/dist/agent/managers/llmJudgeHelper.js +0 -32
- package/dist/agent/managers/llmJudgeHelper.js.map +0 -1
- package/dist/agent/managers/memoryAdvisor.d.ts +0 -105
- package/dist/agent/managers/memoryAdvisor.d.ts.map +0 -1
- package/dist/agent/managers/memoryAdvisor.js +0 -322
- package/dist/agent/managers/memoryAdvisor.js.map +0 -1
- package/dist/agent/managers/memoryGovernance.d.ts +0 -24
- package/dist/agent/managers/memoryGovernance.d.ts.map +0 -1
- package/dist/agent/managers/memoryGovernance.js +0 -46
- package/dist/agent/managers/memoryGovernance.js.map +0 -1
- package/dist/memory/governance.d.ts +0 -17
- package/dist/memory/governance.d.ts.map +0 -1
- package/dist/memory/governance.js +0 -17
- package/dist/memory/governance.js.map +0 -1
- package/dist/memory/projectRegistry.d.ts +0 -47
- package/dist/memory/projectRegistry.d.ts.map +0 -1
- package/dist/memory/projectRegistry.js +0 -151
- package/dist/memory/projectRegistry.js.map +0 -1
- package/dist/utils/recallDefaults.d.ts +0 -16
- package/dist/utils/recallDefaults.d.ts.map +0 -1
- package/dist/utils/recallDefaults.js +0 -16
- package/dist/utils/recallDefaults.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolLedger.js","sourceRoot":"","sources":["../../src/agent/toolLedger.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"toolLedger.js","sourceRoot":"","sources":["../../src/agent/toolLedger.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* 同一参数重复调用既浪费 token 又无增量价值(文件未变 / 同 query 网络结果近似)。
|
|
6
6
|
* 本缓存以「闭环内去重」为粒度——闭环结束即清空,跨闭环不复用。
|
|
7
7
|
*
|
|
8
|
-
* 拦截语义与 loop 已有的 web_search
|
|
8
|
+
* 拦截语义与 loop 已有的 web_search 搜索上限护栏 / ask_user askLimit 同级:
|
|
9
9
|
* 检测到重复 → blocked=true(不算工具失败)→ 返回 [ALREADY_READ] 拒绝文案。
|
|
10
10
|
*
|
|
11
11
|
* **去重主体是结构化的**(`DedupSubject`),不是预先拼好的字符串 key:
|
|
@@ -44,6 +44,14 @@ export interface ToolResultOffloadOptions {
|
|
|
44
44
|
thresholdTokens?: number;
|
|
45
45
|
/** 预览字符数(默认 1,000) */
|
|
46
46
|
previewChars?: number;
|
|
47
|
+
/**
|
|
48
|
+
* 尾部预览字符数(默认 0 = 只留头部)。
|
|
49
|
+
*
|
|
50
|
+
* >0 时从**总预览预算内**划出尾部份额(头 = previewChars − 尾),**不扩大预算**——
|
|
51
|
+
* 预算扩大会让替换文本逼近单条上限,破坏「替换后不二次落盘」的结构性保证。
|
|
52
|
+
* 用途同 `SCRIPT_RESULT_TAIL_CHARS`:长输出的关键信息常在尾部(见缺口 D)。
|
|
53
|
+
*/
|
|
54
|
+
tailPreviewChars?: number;
|
|
47
55
|
}
|
|
48
56
|
/**
|
|
49
57
|
* 单条工具结果超阈 → 落盘 + 生成替换文本;否则原样返回。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolResultOffload.d.ts","sourceRoot":"","sources":["../../src/agent/toolResultOffload.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAYH,oCAAoC;AACpC,MAAM,WAAW,wBAAwB;IACvC,sDAAsD;IACtD,OAAO,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,SAAS,EAAE,OAAO,CAAC;IACnB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,WAAW;AACX,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sBAAsB;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"toolResultOffload.d.ts","sourceRoot":"","sources":["../../src/agent/toolResultOffload.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAYH,oCAAoC;AACpC,MAAM,WAAW,wBAAwB;IACvC,sDAAsD;IACtD,OAAO,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,SAAS,EAAE,OAAO,CAAC;IACnB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,WAAW;AACX,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sBAAsB;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,wBAAwB,GAC7B,wBAAwB,CA0C1B"}
|
|
@@ -57,11 +57,18 @@ export function offloadLargeToolResult(content, opts) {
|
|
|
57
57
|
logger.warn({ err, filePath, tokens }, '工具结果卸载失败,已降级为原文入上下文(未产生引用)');
|
|
58
58
|
return { content, offloaded: false };
|
|
59
59
|
}
|
|
60
|
-
|
|
61
|
-
const
|
|
60
|
+
// 头(+可选尾)份额均在 previewChars 预算内划分,不扩大总预览量
|
|
61
|
+
const tailChars = Math.min(Math.max(opts.tailPreviewChars ?? 0, 0), Math.max(previewChars - 1, 0));
|
|
62
|
+
const headChars = previewChars - tailChars;
|
|
63
|
+
const head = content.slice(0, headChars);
|
|
64
|
+
const tail = tailChars > 0 ? content.slice(content.length - tailChars) : '';
|
|
65
|
+
const omitted = Math.max(0, content.length - headChars - tailChars);
|
|
66
|
+
const previewBlock = tailChars > 0
|
|
67
|
+
? `[预览(头 ${headChars} + 尾 ${tailChars} 字符)]\n${head}\n…[省略 ${omitted} 字符]…\n${tail}`
|
|
68
|
+
: `[预览(前 ${previewChars} 字符)]\n${head}…`;
|
|
62
69
|
return {
|
|
63
70
|
content: `[工具结果已卸载至磁盘] 原文 ${content.length} 字符(≈${tokens} tokens)写入:${filePath}\n` +
|
|
64
|
-
|
|
71
|
+
`${previewBlock}\n` +
|
|
65
72
|
`[省略 ${omitted} 字符。需要完整内容请用 read_file 读取上述路径,大文件可配合 offset/limit 分段读取]`,
|
|
66
73
|
offloaded: true,
|
|
67
74
|
filePath,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolResultOffload.js","sourceRoot":"","sources":["../../src/agent/toolResultOffload.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,wCAAwC;AACxC,MAAM,qBAAqB,GAAG,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"toolResultOffload.js","sourceRoot":"","sources":["../../src/agent/toolResultOffload.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,wCAAwC;AACxC,MAAM,qBAAqB,GAAG,KAAK,CAAC;AAoCpC;;;;;;;;;GASG;AACH,MAAM,UAAU,sBAAsB,CACpC,OAAe,EACf,IAA8B;IAE9B,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,IAAI,cAAc,CAAC,6BAA6B,CAAC;IACvF,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC3C,IAAI,MAAM,IAAI,SAAS,EAAE,CAAC;QACxB,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IACvC,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,qBAAqB,CAAC;IAChE,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;IACvE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAEtD,IAAI,CAAC;QACH,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,sCAAsC;QACtC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,4BAA4B,CAAC,CAAC;QACrE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IACvC,CAAC;IAED,yCAAyC;IACzC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CACxB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,EAAE,CAAC,CAAC,EACvC,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC,CAAC,CAC9B,CAAC;IACF,MAAM,SAAS,GAAG,YAAY,GAAG,SAAS,CAAC;IAC3C,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5E,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC,CAAC;IACpE,MAAM,YAAY,GAChB,SAAS,GAAG,CAAC;QACX,CAAC,CAAC,SAAS,SAAS,QAAQ,SAAS,UAAU,IAAI,UAAU,OAAO,UAAU,IAAI,EAAE;QACpF,CAAC,CAAC,SAAS,YAAY,UAAU,IAAI,GAAG,CAAC;IAE7C,OAAO;QACL,OAAO,EACL,mBAAmB,OAAO,CAAC,MAAM,QAAQ,MAAM,cAAc,QAAQ,IAAI;YACzE,GAAG,YAAY,IAAI;YACnB,OAAO,OAAO,yDAAyD;QACzE,SAAS,EAAE,IAAI;QACf,QAAQ;KACT,CAAC;AACJ,CAAC"}
|
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
* 工具执行器(ToolRunner)— 从 AgentLoop 抽出的「单工具执行」独立单元
|
|
3
3
|
*
|
|
4
4
|
* 承载一个工具的完整生命周期:执行前检查(三重闸门)→ 并发/中断竞争执行 → 异常转结构化错误串。
|
|
5
|
-
* 状态独立(不触碰 loop 工作记忆 / 指标 /
|
|
6
|
-
* onToolExecuted,故可独立单测。
|
|
5
|
+
* 状态独立(不触碰 loop 工作记忆 / 指标 / 自主步标志),输入工具调用元素、输出结构化
|
|
6
|
+
* ToolOutcome(status 为判据面真源)并触发 onToolExecuted,故可独立单测。
|
|
7
|
+
* loop 的 executeToolCalls 只做批量编排,逐工具委托本执行器。
|
|
7
8
|
*
|
|
8
9
|
* 依赖经 deps 注入(execute / preExecutionCheck / onToolExecuted / getStrategy / tracer),
|
|
9
10
|
* 其中 getStrategy 每次执行读最新策略——setStrategy 的动态更新在此依然生效。
|
|
@@ -12,14 +13,17 @@ import type { PreExecutionResult } from '../agent/types.js';
|
|
|
12
13
|
import type { ToolDefinition } from '../agent/toolExecutor.js';
|
|
13
14
|
import type { L2RuntimeStrategy } from '../role-pack/types.js';
|
|
14
15
|
import type { ITracer } from '../agent/tracer.js';
|
|
16
|
+
import { type ToolOutcome } from '../agent/managers/toolCallHelpers.js';
|
|
15
17
|
/** 工具调用元素契约(OpenAI 协议结构)——单一真源 llm/types.ToolCall(Message.toolCalls 同源) */
|
|
16
18
|
import type { ToolCall } from '../llm/types.js';
|
|
17
19
|
/** 一次工具调用(LLM 输出的工具调用元素)——SSOT:形状真源在 llm/types.ToolCall(协议契约单一实现;re-export 保留本文件测试判据点) */
|
|
18
20
|
export type { ToolCall };
|
|
19
|
-
/**
|
|
21
|
+
/** 工具执行器依赖注入(loop 稳定的窄面;策略动态经 getStrategy 读取) */
|
|
20
22
|
export interface ToolRunnerDeps {
|
|
21
|
-
/** 执行单个工具(loop 的 opts.toolExecutor
|
|
22
|
-
|
|
23
|
+
/** 执行单个工具(loop 的 opts.toolExecutor)。
|
|
24
|
+
* 第 3 参 emitOutcome:执行器按调用独立产出原生 outcome 的通道(见 toolExecutor.execute)
|
|
25
|
+
* 第 4 参 toolCallId:本次工具调用唯一 ID(web_search 证据配对通道,透传至 toolExecutor.execute) */
|
|
26
|
+
execute: (name: string, args: string, emitOutcome?: (outcome: ToolOutcome) => void, toolCallId?: string) => Promise<string>;
|
|
23
27
|
/** 内置工具定义(只读闸查 readonly 标记) */
|
|
24
28
|
builtinTools?: ToolDefinition[];
|
|
25
29
|
/** 宿主执行前检查(拒绝 / 跳过 / 改写参数) */
|
|
@@ -41,9 +45,10 @@ export declare class ToolRunner {
|
|
|
41
45
|
* 执行单个工具(并行独立执行单元,无共享状态,可安全并发)。
|
|
42
46
|
* @param tc 工具调用元素
|
|
43
47
|
* @param signal 中止信号(与工具执行 race,signal 先 abort 返回 ABORTED 错误串)
|
|
44
|
-
* @returns
|
|
48
|
+
* @returns 结构化结果(`status` 为判据面唯一真源,`text` 为渲染面——B4 判据切换后
|
|
49
|
+
* 编排层全部决策读 `status`,文本只喂 LLM / 渲染,不再参与成败判定)
|
|
45
50
|
*/
|
|
46
|
-
runOne(tc: ToolCall, signal?: AbortSignal): Promise<
|
|
51
|
+
runOne(tc: ToolCall, signal?: AbortSignal): Promise<ToolOutcome>;
|
|
47
52
|
/**
|
|
48
53
|
* 执行前检查:按顺序叠加两层闸门——只读 → 宿主 preExecutionCheck,任一命中提前返回。
|
|
49
54
|
* (内核不提供"审批"闸门:无"需审批"标签与回调,审批决策统一归宿主 preExecutionCheck。)
|
|
@@ -53,6 +58,10 @@ export declare class ToolRunner {
|
|
|
53
58
|
* 工具执行与 signal abort 竞争包裹。toolExecutor 签名不接受 signal,无法真正中断;
|
|
54
59
|
* 用 Promise.race 竞争,signal 先 abort 则返回 [ERR:TOOL:ABORTED](而非抛 AbortError,
|
|
55
60
|
* 避免破坏"工具失败回传 LLM"契约;ABORTED 不入错误码体系,不触发 Reflection)
|
|
61
|
+
*
|
|
62
|
+
* @param emitOutcome 原生 outcome 回调(透传给 execute;abort 出口也经它显式 emit failed,
|
|
63
|
+
* 保证 runOne 兜底(nativeOutcome ?? ok)读到中断事实而非误判 ok)
|
|
64
|
+
* @param toolCallId 工具调用唯一 ID(透传给 execute,web_search 证据配对通道)
|
|
56
65
|
*/
|
|
57
66
|
private raceToolWithSignal;
|
|
58
67
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolRunner.d.ts","sourceRoot":"","sources":["../../src/agent/toolRunner.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"toolRunner.d.ts","sourceRoot":"","sources":["../../src/agent/toolRunner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAKjD,OAAO,EAKL,KAAK,WAAW,EAEjB,MAAM,qCAAqC,CAAC;AAE7C,2EAA2E;AAC3E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,0FAA0F;AAC1F,YAAY,EAAE,QAAQ,EAAE,CAAC;AASzB,iDAAiD;AACjD,MAAM,WAAW,cAAc;IAC7B;;mFAE+E;IAC/E,OAAO,EAAE,CACP,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,EAC5C,UAAU,CAAC,EAAE,MAAM,KAChB,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,+BAA+B;IAC/B,YAAY,CAAC,EAAE,cAAc,EAAE,CAAC;IAChC,8BAA8B;IAC9B,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,kBAAkB,CAAC;IACvE,iCAAiC;IACjC,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,KAAK,IAAI,CAAC;IACnF,iDAAiD;IACjD,WAAW,EAAE,MAAM,iBAAiB,CAAC;IACrC,kBAAkB;IAClB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,qBAAa,UAAU;IACT,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,cAAc;IAEjD;;;;;;OAMG;IACG,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IAyFtE;;;OAGG;IACH,OAAO,CAAC,cAAc;IAoDtB;;;;;;;;OAQG;YACW,kBAAkB;CAyCjC"}
|
package/dist/agent/toolRunner.js
CHANGED
|
@@ -2,16 +2,18 @@
|
|
|
2
2
|
* 工具执行器(ToolRunner)— 从 AgentLoop 抽出的「单工具执行」独立单元
|
|
3
3
|
*
|
|
4
4
|
* 承载一个工具的完整生命周期:执行前检查(三重闸门)→ 并发/中断竞争执行 → 异常转结构化错误串。
|
|
5
|
-
* 状态独立(不触碰 loop 工作记忆 / 指标 /
|
|
6
|
-
* onToolExecuted,故可独立单测。
|
|
5
|
+
* 状态独立(不触碰 loop 工作记忆 / 指标 / 自主步标志),输入工具调用元素、输出结构化
|
|
6
|
+
* ToolOutcome(status 为判据面真源)并触发 onToolExecuted,故可独立单测。
|
|
7
|
+
* loop 的 executeToolCalls 只做批量编排,逐工具委托本执行器。
|
|
7
8
|
*
|
|
8
9
|
* 依赖经 deps 注入(execute / preExecutionCheck / onToolExecuted / getStrategy / tracer),
|
|
9
10
|
* 其中 getStrategy 每次执行读最新策略——setStrategy 的动态更新在此依然生效。
|
|
10
11
|
*/
|
|
11
12
|
import { TRACE_SPANS } from '../agent/tracer.js';
|
|
12
|
-
import { MemoraError } from '../utils/errors.js';
|
|
13
|
+
import { MemoraError, ToolErrorCode } from '../utils/errors.js';
|
|
13
14
|
import { toError } from '../utils/toError.js';
|
|
14
15
|
import { logger } from '../logging/logger.js';
|
|
16
|
+
import { failedOutcome, failedOutcomeWithCode, okOutcome, blockedOutcome, } from '../agent/managers/toolCallHelpers.js';
|
|
15
17
|
/**
|
|
16
18
|
* 工具执行器:单工具执行单元(异常捕获转结构化错误串回传 LLM,不中断对话)。
|
|
17
19
|
*/
|
|
@@ -24,7 +26,8 @@ export class ToolRunner {
|
|
|
24
26
|
* 执行单个工具(并行独立执行单元,无共享状态,可安全并发)。
|
|
25
27
|
* @param tc 工具调用元素
|
|
26
28
|
* @param signal 中止信号(与工具执行 race,signal 先 abort 返回 ABORTED 错误串)
|
|
27
|
-
* @returns
|
|
29
|
+
* @returns 结构化结果(`status` 为判据面唯一真源,`text` 为渲染面——B4 判据切换后
|
|
30
|
+
* 编排层全部决策读 `status`,文本只喂 LLM / 渲染,不再参与成败判定)
|
|
28
31
|
*/
|
|
29
32
|
async runOne(tc, signal) {
|
|
30
33
|
// 工具执行 Span(并发时多个 span 时间重叠,tracer 可观测并发度)
|
|
@@ -38,21 +41,33 @@ export class ToolRunner {
|
|
|
38
41
|
const decision = this.applyPrechecks(tc);
|
|
39
42
|
if (decision.kind === 'denied') {
|
|
40
43
|
span.setAttribute('denied', true);
|
|
41
|
-
|
|
44
|
+
// denied = 主动挡下(只读拒绝 / 宿主审批拒绝)⇒ blocked,原因随该闸门事实带出
|
|
45
|
+
return blockedOutcome(decision.reason, decision.result);
|
|
42
46
|
}
|
|
43
47
|
if (decision.kind === 'skip') {
|
|
44
48
|
span.setAttribute('skipped', true);
|
|
45
|
-
|
|
49
|
+
// skip = outbox 幂等跳过(主动挡下)⇒ blocked(idempotent_skip)
|
|
50
|
+
return blockedOutcome(decision.reason, decision.result);
|
|
46
51
|
}
|
|
52
|
+
// 每调用独立的原生 outcome 捕获器:执行器在返回字符串的同点按事实产出。
|
|
53
|
+
let nativeOutcome;
|
|
47
54
|
// raceToolWithSignal 兼容 signal 中断(每个调用独立 race,监听器无并发副作用)
|
|
48
|
-
const result = await this.raceToolWithSignal(tc.function.name, decision.args, signal)
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
55
|
+
const result = await this.raceToolWithSignal(tc.function.name, decision.args, signal, (native) => {
|
|
56
|
+
nativeOutcome = native;
|
|
57
|
+
},
|
|
58
|
+
// 工具调用唯一 ID 透传:web_search 执行时随证据一并留痕,供宿主唯一配对渲染
|
|
59
|
+
tc.id);
|
|
60
|
+
// SCRIPT-2 B5 后无文本判据:失败事实一律由执行器在同点显式 emit(结构化产出,
|
|
61
|
+
// status 与 text 同源);未 emit = 工具正常完成(裸文本含软降级说明与成功输出),
|
|
62
|
+
// runOne 统一兜底 ok——兜底不再扫文本前缀。
|
|
63
|
+
const outcome = nativeOutcome ?? okOutcome(result);
|
|
64
|
+
// 通知上层工具执行完成(供 outbox 幂等模式记录是否已执行);
|
|
65
|
+
// ok 判据单点 = outcome.status(与文本派生/native 产出同源,无第二次独立判断)
|
|
66
|
+
this.deps.onToolExecuted?.(tc.function.name, decision.args, outcome.text, outcome.status === 'ok');
|
|
52
67
|
// 记录工具执行结果摘要到 Span(可观测性增强:宿主可追踪每次工具调用的结果)
|
|
53
|
-
span.setAttribute('result',
|
|
54
|
-
span.setAttribute('ok', ok);
|
|
55
|
-
return
|
|
68
|
+
span.setAttribute('result', outcome.text.slice(0, 200));
|
|
69
|
+
span.setAttribute('ok', outcome.status === 'ok');
|
|
70
|
+
return outcome;
|
|
56
71
|
}
|
|
57
72
|
catch (err) {
|
|
58
73
|
// 捕获异常转为结构化错误串回传 LLM 自行调整策略,避免传播中断对话
|
|
@@ -64,17 +79,21 @@ export class ToolRunner {
|
|
|
64
79
|
// 若建议只在 `error.format()` 给宿主 UI、LLM 只收 title+detail——首击失败后
|
|
65
80
|
// LLM 收不到「使用 list_dir 查看目录结构」这类确切指令,只能凭证据自己悟(多绕一次)。
|
|
66
81
|
// 证据(siblingDirHint 清单)在 detail 内,本拼接补上命令式建议,双管齐下。
|
|
67
|
-
|
|
68
|
-
|
|
82
|
+
// 错误码与文本前缀经 failedOutcomeWithCode **同源产出一次**:
|
|
83
|
+
// 此前 `code` 算了却只拼进文本、结构化面被丢弃 ⇒ 重试分类(isRetryableToolError)
|
|
84
|
+
// 只能回头解析前缀,正是 ToolOutcome 自述文档痛批的「判据与渲染耦合」反模式。
|
|
85
|
+
const failed = failedOutcomeWithCode(code, `错误:${err.title}${err.detail ? ` — ${err.detail}` : ''}` +
|
|
86
|
+
(err.suggestions.length > 0 ? ` 建议:${err.suggestions.join(';')}` : ''));
|
|
69
87
|
logger.warn({ tool: tc.function.name, errorCode: code, title: err.title }, '工具执行失败,错误已回传给 LLM');
|
|
70
|
-
this.deps.onToolExecuted?.(tc.function.name, tc.function.arguments,
|
|
71
|
-
return
|
|
88
|
+
this.deps.onToolExecuted?.(tc.function.name, tc.function.arguments, failed.text, false);
|
|
89
|
+
return failed;
|
|
72
90
|
}
|
|
73
91
|
else {
|
|
74
|
-
|
|
92
|
+
// 非 MemoraError 归入 UNKNOWN;同样经带码构造器产出,前缀不手抄
|
|
93
|
+
const failed = failedOutcomeWithCode('UNKNOWN', `错误:工具执行异常 — ${e.message}`);
|
|
75
94
|
logger.error({ tool: tc.function.name, err }, '工具执行异常');
|
|
76
|
-
this.deps.onToolExecuted?.(tc.function.name, tc.function.arguments,
|
|
77
|
-
return
|
|
95
|
+
this.deps.onToolExecuted?.(tc.function.name, tc.function.arguments, failed.text, false);
|
|
96
|
+
return failed;
|
|
78
97
|
}
|
|
79
98
|
}
|
|
80
99
|
finally {
|
|
@@ -94,9 +113,12 @@ export class ToolRunner {
|
|
|
94
113
|
const toolDef = this.deps.builtinTools?.find((t) => t.name === name);
|
|
95
114
|
if (toolDef && !toolDef.readonly) {
|
|
96
115
|
logger.warn({ tool: name }, '工具只读模式:阻止写入工具执行');
|
|
116
|
+
// 只读拦截前缀 [ERR:TOOL:READONLY_DENIED] 是独立登记标签(非 ToolErrorCode 枚举成员,
|
|
117
|
+
// 见 toolFailurePrefixGuard TOOL_RESULT_TAGS);denied 通道机器维度用 reason(readonly_denied)。
|
|
97
118
|
return {
|
|
98
119
|
kind: 'denied',
|
|
99
120
|
result: `[ERR:TOOL:READONLY_DENIED] 工具 "${name}" 是写入操作,在只读模式下不可用`,
|
|
121
|
+
reason: 'readonly_denied',
|
|
100
122
|
};
|
|
101
123
|
}
|
|
102
124
|
}
|
|
@@ -105,13 +127,23 @@ export class ToolRunner {
|
|
|
105
127
|
if (preCheck?.denied) {
|
|
106
128
|
const reason = preCheck.reason ?? '工具调用被拒绝';
|
|
107
129
|
logger.warn({ tool: name, reason }, '工具调用被拒绝(执行前检查)');
|
|
108
|
-
//
|
|
109
|
-
|
|
130
|
+
// 前缀经 failedOutcomeWithCode 由错误码派生(SSOT 单源出口),与 builtinToolHandlers 同口径;
|
|
131
|
+
// PERMISSION_DENIED 不可重试,LLM 见后会调整策略而非重试。denied 通道机器维度仍用 reason。
|
|
132
|
+
return {
|
|
133
|
+
kind: 'denied',
|
|
134
|
+
result: failedOutcomeWithCode(ToolErrorCode.PERMISSION_DENIED, reason).text,
|
|
135
|
+
reason: 'permission_denied',
|
|
136
|
+
};
|
|
110
137
|
}
|
|
111
138
|
if (preCheck?.skip) {
|
|
112
139
|
const result = preCheck.previousResult ?? '[SKIP:TOOL:IDEMPOTENT] 工具已执行(outbox 模式跳过)';
|
|
113
140
|
logger.debug({ tool: name, argsSignature: args.slice(0, 80) }, '工具已执行,跳过(仅一次语义)');
|
|
114
|
-
return {
|
|
141
|
+
return {
|
|
142
|
+
kind: 'skip',
|
|
143
|
+
result,
|
|
144
|
+
// outbox 幂等跳过:idempotent_skip
|
|
145
|
+
reason: 'idempotent_skip',
|
|
146
|
+
};
|
|
115
147
|
}
|
|
116
148
|
// 放行:有改写参数则用改写后的执行(审计/参数改写)
|
|
117
149
|
return { kind: 'execute', args: preCheck?.overrideArgs ?? args };
|
|
@@ -120,25 +152,38 @@ export class ToolRunner {
|
|
|
120
152
|
* 工具执行与 signal abort 竞争包裹。toolExecutor 签名不接受 signal,无法真正中断;
|
|
121
153
|
* 用 Promise.race 竞争,signal 先 abort 则返回 [ERR:TOOL:ABORTED](而非抛 AbortError,
|
|
122
154
|
* 避免破坏"工具失败回传 LLM"契约;ABORTED 不入错误码体系,不触发 Reflection)
|
|
155
|
+
*
|
|
156
|
+
* @param emitOutcome 原生 outcome 回调(透传给 execute;abort 出口也经它显式 emit failed,
|
|
157
|
+
* 保证 runOne 兜底(nativeOutcome ?? ok)读到中断事实而非误判 ok)
|
|
158
|
+
* @param toolCallId 工具调用唯一 ID(透传给 execute,web_search 证据配对通道)
|
|
123
159
|
*/
|
|
124
|
-
async raceToolWithSignal(name, args, signal) {
|
|
160
|
+
async raceToolWithSignal(name, args, signal, emitOutcome, toolCallId) {
|
|
125
161
|
const { execute } = this.deps;
|
|
126
162
|
// 无 signal 时直接执行工具(保持原行为,测试场景常用)
|
|
127
163
|
if (!signal) {
|
|
128
|
-
return execute(name, args);
|
|
164
|
+
return execute(name, args, emitOutcome, toolCallId);
|
|
129
165
|
}
|
|
130
166
|
// signal 已 abort:直接返回中断错误,不发起工具调用
|
|
131
167
|
if (signal.aborted) {
|
|
132
|
-
|
|
168
|
+
const abortedText = '[ERR:TOOL:ABORTED] 错误:工具执行被中断';
|
|
169
|
+
// 中断 = 失败事实(执行被夺走),显式 emit 防兜底误判 ok
|
|
170
|
+
emitOutcome(failedOutcome(abortedText));
|
|
171
|
+
return abortedText;
|
|
133
172
|
}
|
|
134
173
|
// abort 监听 Promise(signal abort 时 resolve 错误串);onAbort 提外层便于 race 后清理
|
|
135
174
|
let onAbort = null;
|
|
136
175
|
const abortPromise = new Promise((resolve) => {
|
|
137
|
-
onAbort = () =>
|
|
176
|
+
onAbort = () => {
|
|
177
|
+
const abortedText = '[ERR:TOOL:ABORTED] 错误:工具执行被中断';
|
|
178
|
+
// 中断胜出 = 失败事实(execute 仍在后台跑但结果丢弃),显式 emit 防兜底误判 ok
|
|
179
|
+
emitOutcome(failedOutcome(abortedText));
|
|
180
|
+
resolve(abortedText);
|
|
181
|
+
};
|
|
138
182
|
signal.addEventListener('abort', onAbort, { once: true });
|
|
139
183
|
});
|
|
140
|
-
// race 结束清理监听器,避免并发工具调用累积残留监听器({ once: true }
|
|
141
|
-
|
|
184
|
+
// race 结束清理监听器,避免并发工具调用累积残留监听器({ once: true } 不保证未触发时被移除)。
|
|
185
|
+
// ⚠️ 注意:execute 胜出时已完成(含可能的 emitOutcome);abort 胜出时执行仍在后台跑但结果丢弃。
|
|
186
|
+
return Promise.race([execute(name, args, emitOutcome, toolCallId), abortPromise]).finally(() => {
|
|
142
187
|
if (onAbort)
|
|
143
188
|
signal.removeEventListener('abort', onAbort);
|
|
144
189
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolRunner.js","sourceRoot":"","sources":["../../src/agent/toolRunner.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"toolRunner.js","sourceRoot":"","sources":["../../src/agent/toolRunner.ts"],"names":[],"mappings":"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"}
|
package/dist/agent/tracer.d.ts
CHANGED
|
@@ -90,7 +90,11 @@ export interface AgentMetrics {
|
|
|
90
90
|
tools: {
|
|
91
91
|
/** 工具调用总次数 */
|
|
92
92
|
callCount: number;
|
|
93
|
-
/**
|
|
93
|
+
/**
|
|
94
|
+
* 失败次数(判据 = `ToolOutcome.status === 'failed'`,SCRIPT-2 B4 判据切换)。
|
|
95
|
+
* **口径变更(Breaking)**:执行层闸门(宿主审批拒绝 / 只读拒绝 / 幂等跳过)归
|
|
96
|
+
* `blocked`、不再计入本值 ⇒ 数字较双轨期下降且历史不可比;主动挡下看 `toolBlockedCount`。
|
|
97
|
+
*/
|
|
94
98
|
failureCount: number;
|
|
95
99
|
/**
|
|
96
100
|
* 未解析工具意图数(文本骨架 <tool_call>/<function=> 但无常原生 toolCalls)。
|
|
@@ -107,6 +111,14 @@ export interface AgentMetrics {
|
|
|
107
111
|
/** read_dedup 护栏硬拦命中(同主体重复获取且结果仍在上下文)次数。
|
|
108
112
|
* 与 ledgerStubEchoCount 互补:本计数 = L2 精确判重(模型乒乓信号,撞墙升级文案的量化基线)。 */
|
|
109
113
|
readDedupBlockCount: number;
|
|
114
|
+
/**
|
|
115
|
+
* 主动挡下总数(SCRIPT-2):loop 护栏 + 旁路拒绝 + 台账替身 + 执行层闸门
|
|
116
|
+
* (宿主审批拒绝 / 只读拒绝 / 幂等跳过)。B4 起本计数从 `failureCount` 剥离
|
|
117
|
+
* 独立承载「主动挡下」语义 ⇒ `failureCount` 下降且历史不可比(CHANGELOG 登记)。
|
|
118
|
+
*/
|
|
119
|
+
toolBlockedCount: number;
|
|
120
|
+
/** 挡下中藏真失败的次数(`read_failed` 子集;独立于 failureCount) */
|
|
121
|
+
toolBlockedWithFailureCount: number;
|
|
110
122
|
};
|
|
111
123
|
/** 上下文管理指标 */
|
|
112
124
|
context: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracer.d.ts","sourceRoot":"","sources":["../../src/agent/tracer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAIzE,iBAAiB;AACjB,KAAK,kBAAkB,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAIpD,mBAAmB;AACnB,MAAM,WAAW,KAAK;IACpB,yBAAyB;IACzB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC3D,iBAAiB;IACjB,GAAG,IAAI,IAAI,CAAC;IACZ,4BAA4B;IAC5B,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACrC;AAID,8BAA8B;AAC9B,MAAM,WAAW,OAAO;IACtB,+DAA+D;IAC/D,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,GAAG,KAAK,CAAC;CACjF;AA4BD,oCAAoC;AACpC,eAAO,MAAM,WAAW,EAAE,OAA0B,CAAC;AAIrD;;;;;;;;;GASG;AACH,eAAO,MAAM,WAAW;IACtB,iBAAiB;;IAEjB,WAAW;;IAEX,aAAa;;IAEb,wEAAwE;;IAExE,4EAA4E;;IAE5E,sDAAsD;;IAEtD,uDAAuD;;CAE/C,CAAC;AAIX;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,eAAe;IACf,GAAG,EAAE;QACH,sCAAsC;QACtC,SAAS,EAAE,MAAM,CAAC;QAClB,oCAAoC;QACpC,gBAAgB,EAAE,MAAM,CAAC;QACzB,oCAAoC;QACpC,iBAAiB,EAAE,MAAM,CAAC;QAC1B,6DAA6D;QAC7D,iBAAiB,EAAE,MAAM,CAAC;QAC1B,6DAA6D;QAC7D,kBAAkB,EAAE,MAAM,CAAC;QAC3B;;;WAGG;QACH,kBAAkB,EAAE,MAAM,CAAC;QAC3B;;;;;WAKG;QACH,uBAAuB,EAAE,MAAM,CAAC;QAChC;;;;;WAKG;QACH,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,aAAa;IACb,KAAK,EAAE;QACL,cAAc;QACd,SAAS,EAAE,MAAM,CAAC;QAClB
|
|
1
|
+
{"version":3,"file":"tracer.d.ts","sourceRoot":"","sources":["../../src/agent/tracer.ts"],"names":[],"mappings":"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"}
|
package/dist/agent/types.d.ts
CHANGED
|
@@ -43,9 +43,10 @@ export type AgentChunk = ({
|
|
|
43
43
|
ok: boolean;
|
|
44
44
|
summary?: string;
|
|
45
45
|
/**
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
46
|
+
* 主动挡下标记(B4 口径):工具被**我们**拦下未实际执行——loop 护栏(搜索上限等)、
|
|
47
|
+
* 执行层闸门(宿主审批拒绝 / 只读拒绝 / 幂等跳过)、旁路拒绝均归此。
|
|
48
|
+
* ok=false + blocked=true:区别于「执行失败」,UI 显示「已拦截」,不计成功数亦不计失败数;
|
|
49
|
+
* LLM 收到的是拒绝文案而非真实结果。
|
|
49
50
|
*/
|
|
50
51
|
blocked?: boolean;
|
|
51
52
|
}
|
|
@@ -128,7 +129,12 @@ export type AgentChunk = ({
|
|
|
128
129
|
maxRetries: number;
|
|
129
130
|
delayMs: number;
|
|
130
131
|
error: string;
|
|
131
|
-
}
|
|
132
|
+
}
|
|
133
|
+
/** 挂起(step 边界暂停 / ask_user 提问挂起共用)。
|
|
134
|
+
* 来源与原因**不由此事件承载**——唯一真源是 SessionStateMachine 的 pendingPause:
|
|
135
|
+
* 提问挂起同样经 assembler 的 onPendingQuestion → requestPause(reason, 'agent') 注册,
|
|
136
|
+
* 与用户暂停同一入口、同一套判据。事件带来源会造出第二个真源(并列即漂移)。 */
|
|
137
|
+
| {
|
|
132
138
|
type: 'paused';
|
|
133
139
|
}
|
|
134
140
|
/**
|
|
@@ -173,6 +179,29 @@ export type AgentChunk = ({
|
|
|
173
179
|
*/
|
|
174
180
|
| {
|
|
175
181
|
type: 'step_boundary';
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* 任务表收尾快照:turn 收尾清空运行时任务表(clearPlanOnTurnEnd)**之前**拍的全量终态。
|
|
185
|
+
* 宿主桥接为 ProcessEvent `plan_snapshot` 落盘(重放恢复任务项完成态的唯一真源);
|
|
186
|
+
* 中断轮同样经过收尾兜底产出;暂停/ask 挂起轮 pauseMeta guard 保留 plan → 不拍。
|
|
187
|
+
*/
|
|
188
|
+
| {
|
|
189
|
+
type: 'plan_snapshot';
|
|
190
|
+
items: {
|
|
191
|
+
planItemId: string;
|
|
192
|
+
status: PlanItem['status'];
|
|
193
|
+
}[];
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* 后台任务收尾报告:turn 终态对存活后台进程**脱管**(不杀,跨轮存活)后 emit
|
|
197
|
+
* (定案锚:ADR-036;无存活进程则不产,纯问答常态零块)。
|
|
198
|
+
* 与 `plan_snapshot` 同型(turn 收尾瞬态信号):宿主上屏收尾条并桥接为 ProcessEvent 落盘
|
|
199
|
+
* (重放可见);中断硬关闭(generator.return())路径下 yield 被丢弃不上屏,但 LLM 历史
|
|
200
|
+
* 的 system 消息已由内核写入(脱管报告双通道:chunk 上屏 + system 消息进史,不双写渲染)。
|
|
201
|
+
*/
|
|
202
|
+
| {
|
|
203
|
+
type: 'background_report';
|
|
204
|
+
content: string;
|
|
176
205
|
} | {
|
|
177
206
|
type: 'done';
|
|
178
207
|
}) & RoundTagged;
|
|
@@ -237,13 +266,13 @@ export interface UIMessages {
|
|
|
237
266
|
emptyResponseFallbackTruncated?: (attempts: number) => string;
|
|
238
267
|
}
|
|
239
268
|
/**
|
|
240
|
-
* 归档模式二态:'full'(默认,content
|
|
241
|
-
*
|
|
269
|
+
* 归档模式二态:'full'(默认,content 在会话切走/分叉离场/暂停超时时自动归档)/'manual'
|
|
270
|
+
* (全部手动触发,自动触发传 autoTriggered 时被跳过)。
|
|
242
271
|
*/
|
|
243
272
|
export type ArchiveMode = 'full' | 'manual';
|
|
244
273
|
/** 会话状态(三态状态机) */
|
|
245
274
|
export type SessionStatus = 'running' | 'paused' | 'error';
|
|
246
|
-
/**
|
|
275
|
+
/** 计划中单个任务项,用于任务表进度追踪(task_table 工具读写、暂停检查点随内存携带) */
|
|
247
276
|
export interface PlanItem {
|
|
248
277
|
/** 任务项唯一标识 */
|
|
249
278
|
id: string;
|
|
@@ -338,15 +367,6 @@ export interface SessionCheckpoint {
|
|
|
338
367
|
/** 是否已恢复(ERROR→RUNNING 前须为 true) */
|
|
339
368
|
recovered: boolean;
|
|
340
369
|
};
|
|
341
|
-
/** 原始目标(防漂移锚点,不随迭代改变) */
|
|
342
|
-
mainGoal: string;
|
|
343
|
-
/** 当前迭代目标(可随 plan 推进更新) */
|
|
344
|
-
currentGoal: string;
|
|
345
|
-
/**
|
|
346
|
-
* 目标变更事件序号(每次 currentGoal 变更递增,goalDriftDetected 事件载荷)。
|
|
347
|
-
* 仅作事件序号,不承担版本一致性校验——漂移碰撞由文本相似度完成,勿误用为版本校验。
|
|
348
|
-
*/
|
|
349
|
-
goalChangeSeq: number;
|
|
350
370
|
/** 执行计划任务项列表 */
|
|
351
371
|
plan: PlanItem[];
|
|
352
372
|
/**
|
|
@@ -409,11 +429,6 @@ import type { IProjectSearchProvider } from '../project-search/types.js';
|
|
|
409
429
|
import type { ProviderRouter } from '../llm/types.js';
|
|
410
430
|
import type { BehaviorStrategy } from '../role-pack/types.js';
|
|
411
431
|
import type { RolePackTeam } from '../role-pack/types.js';
|
|
412
|
-
/**
|
|
413
|
-
* 文件层前置条件断言回调:注入时 deleteRule/deleteSkill/updateRule 入口先校验宿主是否已完成
|
|
414
|
-
* 文件操作。expected='absent'/'exists' 分别校验已删/已写。id 格式 `rule:NAME` 或 `skill:NAME`。
|
|
415
|
-
*/
|
|
416
|
-
export type FileConsistencyCheck = (id: string, expected: 'exists' | 'absent') => boolean;
|
|
417
432
|
/**
|
|
418
433
|
* 工具执行前检查的三态结果(所有工具调用统一入口,由 preExecutionCheck 做执行前检查):
|
|
419
434
|
* - 放行(skip=false):允许执行,可选 overrideArgs 改写参数(审计/参数改写)
|
|
@@ -469,6 +484,35 @@ export interface DuplicateCheckContext {
|
|
|
469
484
|
/** 当前阈值(默认 3) */
|
|
470
485
|
readonly threshold: number;
|
|
471
486
|
}
|
|
487
|
+
/**
|
|
488
|
+
* 宿主环境事实快照(命令执行能力方案 §10.4-②,IEnvironmentProvider 的上报载荷)
|
|
489
|
+
*
|
|
490
|
+
* 全字段可选:宿主只上报它知道的事实,未探测/未知的字段省略,内核不补猜。
|
|
491
|
+
* 内核对快照**零解释转发**(仅格式化为 system prompt 段落)——环境事实不得
|
|
492
|
+
* 升级为内核判据(命令执行能力方案 §10.5 刻意不做:内核内置探测 = 派生判定律违规)。
|
|
493
|
+
*/
|
|
494
|
+
export interface HostEnvironmentInfo {
|
|
495
|
+
/** 操作系统描述(如 "win32 10.0.22631";宿主自行决定详细程度) */
|
|
496
|
+
os?: string;
|
|
497
|
+
/** 默认 shell(如 "PowerShell"、"/bin/zsh";供模型避免跨平台命令误用) */
|
|
498
|
+
shell?: string;
|
|
499
|
+
/**
|
|
500
|
+
* 可用运行时清单(每项一行,如 "node v22.10.0"、"python 3.12.1"):
|
|
501
|
+
* 宿主探测结果(探测失败/不存在的运行时不上报),模型据此决定用什么语言写脚本。
|
|
502
|
+
*/
|
|
503
|
+
runtimes?: string[];
|
|
504
|
+
}
|
|
505
|
+
/**
|
|
506
|
+
* 宿主环境提供者接口:宿主实现并注入 AgentOptions.environmentProvider。
|
|
507
|
+
*
|
|
508
|
+
* getEnvironment 为**同步**返回快照——探测节奏(异步 spawn / 启动期缓存)由宿主自理,
|
|
509
|
+
* 内核装配与前缀刷新路径同步读取,零等待、零解释。
|
|
510
|
+
* 返回 null / undefined = 本轮无环境信息(system prompt 不注入该段,非错误)。
|
|
511
|
+
*/
|
|
512
|
+
export interface IEnvironmentProvider {
|
|
513
|
+
/** 返回环境事实快照;null = 无环境信息(不注入 prompt 段) */
|
|
514
|
+
getEnvironment(): HostEnvironmentInfo | null;
|
|
515
|
+
}
|
|
472
516
|
/** Agent 构造选项 */
|
|
473
517
|
export interface AgentOptions {
|
|
474
518
|
/** 项目路径(必须) */
|
|
@@ -506,13 +550,7 @@ export interface AgentOptions {
|
|
|
506
550
|
* 是宿主的产品决策,内核不置喙,也不假设其下的文件形态。
|
|
507
551
|
*/
|
|
508
552
|
dataDir: string;
|
|
509
|
-
/**
|
|
510
|
-
* 项目注册表目录(可选,缺省随 dataDir)。注册表存在的意义是**跨项目按名解析**,
|
|
511
|
-
* 故只有多项目共用同一 dataDir(或显式指定共同的 registryDir)时才真正兑现;
|
|
512
|
-
* 若 dataDir 是项目级目录,注册表随之落进各项目内、只含项目自身条目,按名切换不成立。
|
|
513
|
-
*/
|
|
514
|
-
registryDir?: string;
|
|
515
|
-
/** 最大上下文 token 数(默认 120000) */
|
|
553
|
+
/** 最大上下文 token 数(缺省 = AGENT_CONSTANTS.DEFAULT_MAX_CONTEXT_TOKENS,数字以该常量为真源、不在此落账) */
|
|
516
554
|
maxContextTokens?: number;
|
|
517
555
|
/**
|
|
518
556
|
* per-LLM 输出预算默认值(token,可选):宿主 per-LLM 配置(配置面板「输出上限」)透传,
|
|
@@ -557,6 +595,14 @@ export interface AgentOptions {
|
|
|
557
595
|
codeExecutionProvider?: ICodeExecutionProvider;
|
|
558
596
|
/** 项目搜索提供者(可选,不配则不启用 search_project;等价 IDE 全局搜索,由宿主实现) */
|
|
559
597
|
projectSearchProvider?: IProjectSearchProvider;
|
|
598
|
+
/**
|
|
599
|
+
* 宿主环境提供者(可选,不配则 system prompt 不注入环境段):宿主上报运行环境事实
|
|
600
|
+
* (OS / shell / 可用运行时),内核经 buildEnvironmentContextBlock 注入 system prompt。
|
|
601
|
+
* 命令执行能力方案 §10.4-②:探测环境 → 把事实告诉模型 → 由模型自己决定(对齐 Cline System
|
|
602
|
+
* Information 支柱与 Claude Code 每轮环境注入)。内核不裁决平台差异——环境事实
|
|
603
|
+
* 只有宿主知道,内核零解释转发(宿主内部事实不得提升为内核判据,命令执行能力方案 §10.5)。
|
|
604
|
+
*/
|
|
605
|
+
environmentProvider?: IEnvironmentProvider;
|
|
560
606
|
/**
|
|
561
607
|
* node 可执行文件路径(可选):宿主注入真实 node 路径
|
|
562
608
|
* (如 IDE 内置 node / 用户配置的 node)给 L3 脚本执行器(run_skill_script /
|
|
@@ -571,8 +617,6 @@ export interface AgentOptions {
|
|
|
571
617
|
* 缺省空 = 全量技能可用(向后兼容)。
|
|
572
618
|
*/
|
|
573
619
|
disabledSkills?: string[];
|
|
574
|
-
/** 文件层前置条件断言回调(可选,未注入则完全降级为现状) */
|
|
575
|
-
fileConsistencyCheck?: FileConsistencyCheck;
|
|
576
620
|
/**
|
|
577
621
|
* 工具执行前检查回调(宿主审批/审计/参数改写通道):装配时与内部幂等检查组合为单点入口。
|
|
578
622
|
*
|