@zooique/memora 4.0.0 → 5.1.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 +235 -1743
- package/README.en.md +43 -36
- package/README.md +308 -303
- package/dist/agent/agent.d.ts +46 -82
- package/dist/agent/agent.d.ts.map +1 -1
- package/dist/agent/agent.js +153 -220
- package/dist/agent/agent.js.map +1 -1
- package/dist/agent/assembler.d.ts +3 -16
- package/dist/agent/assembler.d.ts.map +1 -1
- package/dist/agent/assembler.js +76 -47
- package/dist/agent/assembler.js.map +1 -1
- package/dist/agent/backgroundTasks.d.ts +8 -1
- package/dist/agent/backgroundTasks.d.ts.map +1 -1
- package/dist/agent/backgroundTasks.js +8 -1
- package/dist/agent/backgroundTasks.js.map +1 -1
- 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 +50 -10
- package/dist/agent/builtinToolHandlers.d.ts.map +1 -1
- package/dist/agent/builtinToolHandlers.js +67 -20
- package/dist/agent/builtinToolHandlers.js.map +1 -1
- package/dist/agent/builtinTools.d.ts +16 -0
- package/dist/agent/builtinTools.d.ts.map +1 -1
- package/dist/agent/builtinTools.js +15 -4
- package/dist/agent/builtinTools.js.map +1 -1
- package/dist/agent/constants.d.ts +0 -6
- package/dist/agent/constants.d.ts.map +1 -1
- package/dist/agent/constants.js +7 -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 +25 -10
- package/dist/agent/guardRail.d.ts.map +1 -1
- package/dist/agent/guardRail.js +154 -46
- package/dist/agent/guardRail.js.map +1 -1
- package/dist/agent/loop.d.ts +46 -13
- package/dist/agent/loop.d.ts.map +1 -1
- package/dist/agent/loop.js +145 -32
- package/dist/agent/loop.js.map +1 -1
- package/dist/agent/managers/archiveCoordinator.d.ts +15 -3
- package/dist/agent/managers/archiveCoordinator.d.ts.map +1 -1
- package/dist/agent/managers/archiveCoordinator.js +13 -7
- 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/memoryInspector.d.ts +12 -7
- package/dist/agent/managers/memoryInspector.d.ts.map +1 -1
- package/dist/agent/managers/memoryInspector.js +32 -19
- package/dist/agent/managers/memoryInspector.js.map +1 -1
- package/dist/agent/managers/roundSummaryGenerator.d.ts +3 -1
- package/dist/agent/managers/roundSummaryGenerator.d.ts.map +1 -1
- package/dist/agent/managers/roundSummaryGenerator.js +14 -4
- package/dist/agent/managers/roundSummaryGenerator.js.map +1 -1
- package/dist/agent/managers/sessionArchiver.d.ts +20 -6
- package/dist/agent/managers/sessionArchiver.d.ts.map +1 -1
- package/dist/agent/managers/sessionArchiver.js +19 -5
- 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 +77 -278
- package/dist/agent/managers/sessionManager.js.map +1 -1
- package/dist/agent/seed/orchestrator.d.ts.map +1 -1
- package/dist/agent/seed/orchestrator.js +3 -3
- 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/toolExecutor.d.ts +69 -18
- package/dist/agent/toolExecutor.d.ts.map +1 -1
- package/dist/agent/toolExecutor.js +188 -28
- package/dist/agent/toolExecutor.js.map +1 -1
- package/dist/agent/toolResultCache.js +1 -1
- package/dist/agent/toolRunner.d.ts +4 -2
- package/dist/agent/toolRunner.d.ts.map +1 -1
- package/dist/agent/toolRunner.js +7 -4
- package/dist/agent/toolRunner.js.map +1 -1
- package/dist/agent/types.d.ts +8 -25
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/index.d.ts +9 -20
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +35 -32
- 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 +76 -1
- package/dist/memory/roundStore.d.ts.map +1 -1
- 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 +3 -2
- package/dist/memory/types.d.ts.map +1 -1
- package/dist/memory/types.js +2 -1
- package/dist/memory/types.js.map +1 -1
- package/dist/role-pack/rolePackManager.d.ts +33 -24
- package/dist/role-pack/rolePackManager.d.ts.map +1 -1
- package/dist/role-pack/rolePackManager.js +48 -42
- package/dist/role-pack/rolePackManager.js.map +1 -1
- package/dist/role-pack/strategyKeys.d.ts +8 -0
- package/dist/role-pack/strategyKeys.d.ts.map +1 -1
- package/dist/role-pack/strategyKeys.js +10 -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 +21 -6
- package/dist/security/confirmEntries.d.ts.map +1 -1
- package/dist/security/confirmEntries.js +21 -6
- package/dist/security/confirmEntries.js.map +1 -1
- package/dist/security/pathGuard.d.ts +44 -10
- package/dist/security/pathGuard.d.ts.map +1 -1
- package/dist/security/pathGuard.js +70 -10
- package/dist/security/pathGuard.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/errors.d.ts +3 -2
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +3 -2
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/eventEmitter.d.ts +20 -22
- package/dist/utils/eventEmitter.d.ts.map +1 -1
- package/dist/utils/eventEmitter.js +0 -3
- package/dist/utils/eventEmitter.js.map +1 -1
- package/dist/utils/time.d.ts +3 -3
- package/dist/utils/time.d.ts.map +1 -1
- package/dist/utils/time.js +3 -3
- 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 +7 -1
- package/docs/architecture/role-pack-spec.md +11 -6
- package/docs/memora-api-reference.md +1354 -1276
- 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 +89 -49
- 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 +13 -4
- package/role-packs/README.md +41 -40
- package/role-packs/memora/345/212/251/346/211/213/rules.md +5 -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 +46 -46
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/rules.md +17 -16
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/emotion-wave.md +46 -46
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/foreshadow.md +29 -29
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/outline-expand.md +73 -48
- 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 +445 -441
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/story-bible.md +62 -62
- 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/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/rules.md +2 -1
- 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
|
@@ -42,7 +42,14 @@ export declare class BackgroundTaskRegistry {
|
|
|
42
42
|
private listener;
|
|
43
43
|
/** exit 钩子是否已注销(Agent 实例终态 shutdown 后置真,钩子空转防重复收割) */
|
|
44
44
|
private disposed;
|
|
45
|
-
/**
|
|
45
|
+
/**
|
|
46
|
+
* 进程退出兜底钩子(构造注册 / shutdown 注销,**配对**——防多实例钩子堆积)
|
|
47
|
+
*
|
|
48
|
+
* ⚠️ 已知代价(台账 `MULTI-AGENT-1` D8):监听按**实例**注册 ⇒ 同进程**同时存活 >10 个**
|
|
49
|
+
* Agent 实例会触发 Node `MaxListenersExceededWarning`——仅警告、无功能损害(钩子 `disposed`
|
|
50
|
+
* 幂等空转,`close()`→`shutdown()` 配对注销即释放)。不引模块级共享钩子(= 回退单例、反 SSOT)、
|
|
51
|
+
* 不调 `setMaxListeners`(进程级调参有副作用);触发 = 真实出现 >10 个并发存活项目。
|
|
52
|
+
*/
|
|
46
53
|
private readonly exitHook;
|
|
47
54
|
constructor();
|
|
48
55
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backgroundTasks.d.ts","sourceRoot":"","sources":["../../src/agent/backgroundTasks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAKL,KAAK,qBAAqB,EAC3B,MAAM,8BAA8B,CAAC;AAEtC,oCAAoC;AACpC,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEnF,qCAAqC;AACrC,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,oBAAoB,CAAC;IAC7B,MAAM,CAAC,EAAE,qBAAqB,CAAC;CAChC;AAED,4DAA4D;AAC5D,MAAM,MAAM,2BAA2B,GAAG,OAAO,CAAC,oBAAoB,EAAE,WAAW,GAAG,UAAU,CAAC,CAAC;AAElG,yEAAyE;AACzE,MAAM,MAAM,qBAAqB,GAAG,cAAc,GAAG;IAAE,MAAM,EAAE,2BAA2B,CAAA;CAAE,CAAC;AAE7F,iEAAiE;AACjE,MAAM,MAAM,sBAAsB,GAAG,CAAC,IAAI,EAAE,qBAAqB,KAAK,IAAI,CAAC;AAW3E,qBAAa,sBAAsB;IACjC,8BAA8B;IAC9B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgC;IACtD,8BAA8B;IAC9B,OAAO,CAAC,GAAG,CAAK;IAChB,qCAAqC;IACrC,OAAO,CAAC,QAAQ,CAAuC;IACvD,sDAAsD;IACtD,OAAO,CAAC,QAAQ,CAAS;IAEzB
|
|
1
|
+
{"version":3,"file":"backgroundTasks.d.ts","sourceRoot":"","sources":["../../src/agent/backgroundTasks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAKL,KAAK,qBAAqB,EAC3B,MAAM,8BAA8B,CAAC;AAEtC,oCAAoC;AACpC,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEnF,qCAAqC;AACrC,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,oBAAoB,CAAC;IAC7B,MAAM,CAAC,EAAE,qBAAqB,CAAC;CAChC;AAED,4DAA4D;AAC5D,MAAM,MAAM,2BAA2B,GAAG,OAAO,CAAC,oBAAoB,EAAE,WAAW,GAAG,UAAU,CAAC,CAAC;AAElG,yEAAyE;AACzE,MAAM,MAAM,qBAAqB,GAAG,cAAc,GAAG;IAAE,MAAM,EAAE,2BAA2B,CAAA;CAAE,CAAC;AAE7F,iEAAiE;AACjE,MAAM,MAAM,sBAAsB,GAAG,CAAC,IAAI,EAAE,qBAAqB,KAAK,IAAI,CAAC;AAW3E,qBAAa,sBAAsB;IACjC,8BAA8B;IAC9B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgC;IACtD,8BAA8B;IAC9B,OAAO,CAAC,GAAG,CAAK;IAChB,qCAAqC;IACrC,OAAO,CAAC,QAAQ,CAAuC;IACvD,sDAAsD;IACtD,OAAO,CAAC,QAAQ,CAAS;IAEzB;;;;;;;OAOG;IACH,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAMvB;;IASF;;;;;OAKG;IACH,qBAAqB,CAAC,QAAQ,EAAE,sBAAsB,GAAG,IAAI,GAAG,IAAI;IAIpE;;;;;;;OAOG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM;IA2BhE,+BAA+B;IAC/B,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAK1C,8BAA8B;IAC9B,IAAI,IAAI,cAAc,EAAE;IAIxB;;;;OAIG;IACH,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG;QAAE,MAAM,EAAE,oBAAoB,CAAC;QAAC,MAAM,CAAC,EAAE,qBAAqB,CAAA;KAAE,GAAG,IAAI;IAS7F;;;;;;;;;;;;;;;;;OAiBG;IACH,cAAc,IAAI,MAAM;IAUxB;;;;;;;;OAQG;IACH,QAAQ,IAAI,MAAM;IAOlB;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,SAAS,IAAI,cAAc,EAAE;IAW7B;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,SAAS;IAWjB;;;;;;;OAOG;IACH,OAAO,CAAC,gBAAgB;IAUxB,kEAAkE;IAClE,OAAO,CAAC,MAAM;IAYd,OAAO,CAAC,MAAM;IAUd,kCAAkC;IAClC,OAAO,CAAC,UAAU;CASnB;AAED;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B,EAAE,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAK9E,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,2BAA2B,EAAE,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAK5E,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAYvE"}
|
|
@@ -25,7 +25,14 @@ export class BackgroundTaskRegistry {
|
|
|
25
25
|
listener = null;
|
|
26
26
|
/** exit 钩子是否已注销(Agent 实例终态 shutdown 后置真,钩子空转防重复收割) */
|
|
27
27
|
disposed = false;
|
|
28
|
-
/**
|
|
28
|
+
/**
|
|
29
|
+
* 进程退出兜底钩子(构造注册 / shutdown 注销,**配对**——防多实例钩子堆积)
|
|
30
|
+
*
|
|
31
|
+
* ⚠️ 已知代价(台账 `MULTI-AGENT-1` D8):监听按**实例**注册 ⇒ 同进程**同时存活 >10 个**
|
|
32
|
+
* Agent 实例会触发 Node `MaxListenersExceededWarning`——仅警告、无功能损害(钩子 `disposed`
|
|
33
|
+
* 幂等空转,`close()`→`shutdown()` 配对注销即释放)。不引模块级共享钩子(= 回退单例、反 SSOT)、
|
|
34
|
+
* 不调 `setMaxListeners`(进程级调参有副作用);触发 = 真实出现 >10 个并发存活项目。
|
|
35
|
+
*/
|
|
29
36
|
exitHook = () => {
|
|
30
37
|
if (this.disposed)
|
|
31
38
|
return; // Agent.close 已收割并注销,幂等空转
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backgroundTasks.js","sourceRoot":"","sources":["../../src/agent/backgroundTasks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,sBAAsB,EACtB,4BAA4B,GAE7B,MAAM,8BAA8B,CAAC;AAgCtC,MAAM,OAAO,sBAAsB;IACjC,8BAA8B;IACb,KAAK,GAAG,IAAI,GAAG,EAAqB,CAAC;IACtD,8BAA8B;IACtB,GAAG,GAAG,CAAC,CAAC;IAChB,qCAAqC;IAC7B,QAAQ,GAAkC,IAAI,CAAC;IACvD,sDAAsD;IAC9C,QAAQ,GAAG,KAAK,CAAC;IAEzB
|
|
1
|
+
{"version":3,"file":"backgroundTasks.js","sourceRoot":"","sources":["../../src/agent/backgroundTasks.ts"],"names":[],"mappings":"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"}
|
package/dist/agent/budget.d.ts
CHANGED
|
@@ -17,7 +17,7 @@ export declare const DEFAULT_ANCHOR_ANSWER_FACTOR = 1;
|
|
|
17
17
|
export declare const MIN_RUNNABLE_DIALOGUE_TOKENS = 128;
|
|
18
18
|
/** 预算计算入参 */
|
|
19
19
|
export interface ContextBudgetInput {
|
|
20
|
-
/** 上下文窗口容量(token):唯一真理源 = 宿主在构造内核前经 resolveContextWindow(window) 解析注入的单一数字(per-LLM
|
|
20
|
+
/** 上下文窗口容量(token):唯一真理源 = 宿主在构造内核前经 resolveContextWindow(window) 解析注入的单一数字(per-LLM 窗口,缺失回退 = AGENT_CONSTANTS.DEFAULT_MAX_CONTEXT_TOKENS,数字以该常量为真源、不在此落账)。内核预算路径只消费单一数字,不认 provider/用户双层来源 */
|
|
21
21
|
readonly windowTokens: number;
|
|
22
22
|
/** 固定开销(system+persona+rules+技能L1+工具schema,token) */
|
|
23
23
|
readonly fixedOverheadTokens: number;
|
|
@@ -32,7 +32,8 @@ export interface ContextBudgetInput {
|
|
|
32
32
|
* 解析有效上下文窗口(SSOT 单源公式,宿主在构造内核 Agent 前调用)。
|
|
33
33
|
*
|
|
34
34
|
* 唯一真理源 = 用户 per-LLM 配置的上下文上限(宿主装配时传入);未配置 → 回退内核默认
|
|
35
|
-
* DEFAULT_MAX_CONTEXT_TOKENS
|
|
35
|
+
* AGENT_CONSTANTS.DEFAULT_MAX_CONTEXT_TOKENS(数字以该常量为真源,不在此落账——真源改值时
|
|
36
|
+
* 注释不跟随会变撒谎)。内核预算路径只吃单一数字 maxContextTokens,
|
|
36
37
|
* 不认 provider/用户双来源、不施加全局封顶——用户对自己填写的参数负责。
|
|
37
38
|
*/
|
|
38
39
|
export declare function resolveContextWindow(window?: number): number;
|
|
@@ -50,8 +51,11 @@ export interface ContextBudget {
|
|
|
50
51
|
/**
|
|
51
52
|
* 上下文占用快照(真实用量,供输入区指示器展示;与 `ContextBudget` 的「预算上限」互补)。
|
|
52
53
|
*
|
|
53
|
-
*
|
|
54
|
-
* 角色包基础设定(system) | 完整对话 | 当前输入锚点 | 输出预留 | 剩余。
|
|
54
|
+
* 设计:各段为当前工作记忆的**实际占用** token,互斥分段拼满整个窗口容量 `totalTokens`:
|
|
55
|
+
* 角色包基础设定(system) | 动态注入(system) | 完整对话 | 当前输入锚点 | 输出预留 | 剩余。
|
|
56
|
+
* 「动态注入」= `messages[0]` 之外的**全部** system 消息(最近对话块 / 情报区 / 任务表 /
|
|
57
|
+
* 软上限与压力提示 / 搜索收敛提示 / 反思与自审查提示等运行时注入)——必须计入占用,
|
|
58
|
+
* 否则 free 系统性偏大、指示器偏乐观(用户按圆环判断"还能贴多少"必踩坑)。
|
|
55
59
|
* 单一真理源 = 内核 prepare 计算(contextPreparer 经 loop.recordOccupancy 写入),
|
|
56
60
|
* 宿主/webview 只渲染、不重算。free 非负收敛(窗口过小/输入过大时各段归零,free 不出现负值)。
|
|
57
61
|
*/
|
|
@@ -60,7 +64,14 @@ export interface ContextOccupancy {
|
|
|
60
64
|
readonly totalTokens: number;
|
|
61
65
|
/** 角色包/系统基础设定占用(system prompt:persona + rules + 技能 L1 + 工具 schema) */
|
|
62
66
|
readonly rolePackBaseTokens: number;
|
|
63
|
-
/**
|
|
67
|
+
/**
|
|
68
|
+
* 动态注入占用(`messages[0]` 之外的 system 消息:最近对话块 / 情报区 / 任务表 /
|
|
69
|
+
* 软上限与压力提示 / 搜索收敛提示 / 反思与自审查提示等运行时注入)。
|
|
70
|
+
*
|
|
71
|
+
* 此前该段未计入任何分段、被静默算进 free ⇒ 指示器偏乐观(P1-1 修复)。
|
|
72
|
+
*/
|
|
73
|
+
readonly dynamicSystemTokens: number;
|
|
74
|
+
/** 完整对话层实际占用(全量 user+assistant 问答闭环 token) */
|
|
64
75
|
readonly dialogueTokens: number;
|
|
65
76
|
/** 完整对话层注入的对话条数(user+assistant 消息总数;条数与 token 并存供宿主 hover 明细展示) */
|
|
66
77
|
readonly dialogueCount: number;
|
|
@@ -77,6 +88,13 @@ export interface EstimateOccupancyInput {
|
|
|
77
88
|
readonly totalTokens: number;
|
|
78
89
|
/** 角色包/系统基础设定占用(system prompt 固定开销) */
|
|
79
90
|
readonly rolePackBaseTokens: number;
|
|
91
|
+
/**
|
|
92
|
+
* 动态注入占用(`messages[0]` 之外的 system 消息)。
|
|
93
|
+
*
|
|
94
|
+
* **必填**(非可选默认 0):漏填即 free 系统性偏大、指示器偏乐观——正是本段要根治的伤。
|
|
95
|
+
* 运行时路径由 `loop.getDynamicSystemTokens()` 提供;历史会话重算(无系统注入)显式传 0。
|
|
96
|
+
*/
|
|
97
|
+
readonly dynamicSystemTokens: number;
|
|
80
98
|
/** 完整对话层 token */
|
|
81
99
|
readonly dialogueTokens: number;
|
|
82
100
|
/** 完整对话层条数 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"budget.d.ts","sourceRoot":"","sources":["../../src/agent/budget.ts"],"names":[],"mappings":"AAqBA;;;;;;;;GAQG;AACH,eAAO,MAAM,4BAA4B,OAAO,CAAC;AAEjD,2CAA2C;AAC3C,eAAO,MAAM,2BAA2B,MAAM,CAAC;AAE/C,iDAAiD;AACjD,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAE9C;oDACoD;AACpD,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAEhD,aAAa;AACb,MAAM,WAAW,kBAAkB;IACjC,
|
|
1
|
+
{"version":3,"file":"budget.d.ts","sourceRoot":"","sources":["../../src/agent/budget.ts"],"names":[],"mappings":"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"}
|
package/dist/agent/budget.js
CHANGED
|
@@ -39,7 +39,8 @@ export const MIN_RUNNABLE_DIALOGUE_TOKENS = 128;
|
|
|
39
39
|
* 解析有效上下文窗口(SSOT 单源公式,宿主在构造内核 Agent 前调用)。
|
|
40
40
|
*
|
|
41
41
|
* 唯一真理源 = 用户 per-LLM 配置的上下文上限(宿主装配时传入);未配置 → 回退内核默认
|
|
42
|
-
* DEFAULT_MAX_CONTEXT_TOKENS
|
|
42
|
+
* AGENT_CONSTANTS.DEFAULT_MAX_CONTEXT_TOKENS(数字以该常量为真源,不在此落账——真源改值时
|
|
43
|
+
* 注释不跟随会变撒谎)。内核预算路径只吃单一数字 maxContextTokens,
|
|
43
44
|
* 不认 provider/用户双来源、不施加全局封顶——用户对自己填写的参数负责。
|
|
44
45
|
*/
|
|
45
46
|
export function resolveContextWindow(window) {
|
|
@@ -56,11 +57,16 @@ export function resolveContextWindow(window) {
|
|
|
56
57
|
export function estimateOccupancy(input) {
|
|
57
58
|
const outputReserveRatio = input.outputReserveRatio ?? DEFAULT_OUTPUT_RESERVE_RATIO;
|
|
58
59
|
const outputReserveTokens = Math.floor(input.totalTokens * outputReserveRatio);
|
|
59
|
-
const usedBeforeFree = input.rolePackBaseTokens +
|
|
60
|
+
const usedBeforeFree = input.rolePackBaseTokens +
|
|
61
|
+
input.dynamicSystemTokens +
|
|
62
|
+
input.dialogueTokens +
|
|
63
|
+
input.inputAnchorTokens +
|
|
64
|
+
outputReserveTokens;
|
|
60
65
|
const freeTokens = Math.max(0, input.totalTokens - usedBeforeFree);
|
|
61
66
|
return {
|
|
62
67
|
totalTokens: input.totalTokens,
|
|
63
68
|
rolePackBaseTokens: input.rolePackBaseTokens,
|
|
69
|
+
dynamicSystemTokens: input.dynamicSystemTokens,
|
|
64
70
|
dialogueTokens: input.dialogueTokens,
|
|
65
71
|
dialogueCount: input.dialogueCount,
|
|
66
72
|
inputAnchorTokens: input.inputAnchorTokens,
|
package/dist/agent/budget.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"budget.js","sourceRoot":"","sources":["../../src/agent/budget.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAC;AAEjD,2CAA2C;AAC3C,MAAM,CAAC,MAAM,2BAA2B,GAAG,GAAG,CAAC;AAE/C,iDAAiD;AACjD,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC;AAE9C;oDACoD;AACpD,MAAM,CAAC,MAAM,4BAA4B,GAAG,GAAG,CAAC;AAgBhD
|
|
1
|
+
{"version":3,"file":"budget.js","sourceRoot":"","sources":["../../src/agent/budget.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,8 +2,28 @@ import type { SecurityGuard } from '../security/pathGuard.js';
|
|
|
2
2
|
import type { IMemoryStorage } from '../memory/storageInterface.js';
|
|
3
3
|
import type { ISessionStore } from '../memory/sessionStore.js';
|
|
4
4
|
import type { WriteExtensions } from '../agent/toolExecutor.js';
|
|
5
|
+
import type { BackgroundTaskScheduler } from '../utils/backgroundTask.js';
|
|
6
|
+
import type { AgentEventMap } from '../utils/eventEmitter.js';
|
|
5
7
|
import type { MemoryInspector } from '../agent/managers/memoryInspector.js';
|
|
6
8
|
import type { LlmProvider } from '../llm/provider.js';
|
|
9
|
+
/**
|
|
10
|
+
* 脚本文件读取最大长度(run_code script_path 模式)
|
|
11
|
+
*
|
|
12
|
+
* 脚本代码要原样交给执行器,截断会破坏语法——故超限**直接报错**(不静默截断)。
|
|
13
|
+
* 与 read_file 不同:read_file 走 token 预算分段
|
|
14
|
+
* (LOOP_CONSTANTS.SINGLE_TOOL_RESULT_MAX_TOKENS),不使用字符上限,
|
|
15
|
+
* 故本常量与 read_file 不在同一量纲,无「谁更宽松」的可比关系。
|
|
16
|
+
*
|
|
17
|
+
* 消费面两处(CMD-1-CONTENT 起):`readScriptFile`(run_code / run_project_script
|
|
18
|
+
* 的读取与裁决读)+ toolExecutor 的 run_skill_script 确认点读(技能脚本正文裁决)。
|
|
19
|
+
* 三者共用本常量 = 脚本正文预算唯一上限,禁为技能脚本单造第二套。
|
|
20
|
+
*
|
|
21
|
+
* 与 utils/fileSafe.DEFAULT_MAX_CONTENT_LEN 同为 200_000 属**异义同值**,勿误合并:
|
|
22
|
+
* - 本常量:脚本原样读取上限(超限报错,内容交执行器);
|
|
23
|
+
* - DEFAULT_MAX_CONTENT_LEN:内容文件读取上限(超限截断,内容入上下文)。
|
|
24
|
+
* 两者各自独立演进,改一侧不联动另一侧。
|
|
25
|
+
*/
|
|
26
|
+
export declare const SCRIPT_READ_MAX_LEN = 200000;
|
|
7
27
|
/**
|
|
8
28
|
* 内置文件工具忽略的目录/文件名(模块级单一真理源)
|
|
9
29
|
*
|
|
@@ -44,9 +64,17 @@ export declare class BuiltinToolHandlers {
|
|
|
44
64
|
constructor(projectPath: string, security: SecurityGuard, memoryIndex: IMemoryStorage, sessionStore?: ISessionStore | undefined);
|
|
45
65
|
/** 记忆搜索器(search_memories 语义后端,装配期注入;未注入时回退关键词 memoryIndex.search) */
|
|
46
66
|
private memoryInspector;
|
|
67
|
+
/**
|
|
68
|
+
* 后台任务槽位调度器(装配期注入,与 SeedDeps 的调度器**同一实例**):
|
|
69
|
+
* search_memories 命中即 touch 经此 fire-and-forget,共享 Agent 实例的 5 槽限流,
|
|
70
|
+
* 并纳入 close() 单点等待。未注入时 touch 静默跳过(与 onMemoryRecalled?.() 同款可选链,
|
|
71
|
+
* 保持「内置工具可被测试/脚本直调、无宿主即 no-op」语义)。
|
|
72
|
+
*/
|
|
73
|
+
private backgroundTasks;
|
|
47
74
|
/** 当前会话「正文或摘要已在眼前」的轮次提供者(装配期注入;search_memories 用它与装配期内容互斥) */
|
|
48
75
|
private exclusionRoundIdsProvider;
|
|
49
|
-
/** memoryRecalled 事件发射回调(宿主感知「LLM 查询记忆命中 N
|
|
76
|
+
/** memoryRecalled 事件发射回调(宿主感知「LLM 查询记忆命中 N 条」;装配期注入,缺省不发射)。
|
|
77
|
+
* 载荷类型引用 AgentEventMap 单一真源(不内联复制,防与 eventEmitter 定义漂移)。 */
|
|
50
78
|
private onMemoryRecalled;
|
|
51
79
|
/**
|
|
52
80
|
* 注入 MemoryInspector,启用 search_memories 的纯关键词搜索后端(memory-tool-recall-design §3.3)。
|
|
@@ -60,10 +88,7 @@ export declare class BuiltinToolHandlers {
|
|
|
60
88
|
* **唯一触发位**:全库仅本类 emit memoryRecalled(无其他发射点)。
|
|
61
89
|
* 缺省不注入则静默跳过(内置工具也可被测试/脚本直调,无宿主时 no-op)。
|
|
62
90
|
*/
|
|
63
|
-
setOnMemoryRecalled(callback: (info:
|
|
64
|
-
count: number;
|
|
65
|
-
query: string;
|
|
66
|
-
}) => void): void;
|
|
91
|
+
setOnMemoryRecalled(callback: (info: AgentEventMap['memoryRecalled']) => void): void;
|
|
67
92
|
/**
|
|
68
93
|
* 注入召回互斥排除集提供者(memory-tool-recall-design §5.1 工具互斥)。
|
|
69
94
|
* search_memories 用它排除「正文或摘要已在眼前」轮次的 round-summary,避免与装配期内容重复。
|
|
@@ -72,6 +97,14 @@ export declare class BuiltinToolHandlers {
|
|
|
72
97
|
* 缺省不注入则不过滤(保持测试/独立调用可直接触发)。
|
|
73
98
|
*/
|
|
74
99
|
setExclusionRoundIdsProvider(provider: () => ReadonlySet<string>): void;
|
|
100
|
+
/**
|
|
101
|
+
* 注入后台任务槽位调度器(装配期注入,与 SeedDeps 的调度器同一实例)。
|
|
102
|
+
* 装配依赖 loop/history,toolExec 在 assembler 中先于它构造,故用「构造后注入」而非构造参数。
|
|
103
|
+
* 注入后 search_memories 命中 touch 走实例级限流,并纳入 Agent.close() 等待;未注入则 touch 静默跳过。
|
|
104
|
+
*
|
|
105
|
+
* @param scheduler Agent 实例级后台任务调度器
|
|
106
|
+
*/
|
|
107
|
+
setBackgroundTaskScheduler(scheduler: BackgroundTaskScheduler): void;
|
|
75
108
|
/**
|
|
76
109
|
* 解析相对路径为绝对路径
|
|
77
110
|
*
|
|
@@ -145,9 +178,12 @@ export declare class BuiltinToolHandlers {
|
|
|
145
178
|
* 仅做路径白名单校验 + 长度上限(SCRIPT_READ_MAX_LEN,防超大脚本滥用)。
|
|
146
179
|
*
|
|
147
180
|
* @param relativePath 相对项目根的文件路径
|
|
181
|
+
* @param label 调用面标识(默认 `run_code script_path`)。错误文案要说清"是哪个工具的
|
|
182
|
+
* 脚本"——裁决面(run_project_script 也复用本函数读正文做内容裁决)与执行面可能不同,
|
|
183
|
+
* 写死 run_code 会让项目脚本报出"run_code 脚本文件过长"(说谎)。
|
|
148
184
|
* @returns 脚本文件原始内容
|
|
149
185
|
*/
|
|
150
|
-
readScriptFile(relativePath: string): Promise<string>;
|
|
186
|
+
readScriptFile(relativePath: string, label?: string): Promise<string>;
|
|
151
187
|
/**
|
|
152
188
|
* 删除项目文件(供 delete_file 工具)
|
|
153
189
|
*
|
|
@@ -176,7 +212,7 @@ export declare class BuiltinToolHandlers {
|
|
|
176
212
|
* @param relativePath 相对项目根的文件路径
|
|
177
213
|
* @param content 要写入的内容
|
|
178
214
|
* @param extensions 写入扩展(可选,用于 diff 确认等)
|
|
179
|
-
* @param mode 写入模式(合法值集 = WriteFileMode 类型,派生自 WRITE_FILE_MODES
|
|
215
|
+
* @param mode 写入模式(合法值集 = WriteFileMode 类型,派生自 WRITE_FILE_MODES),默认取 DEFAULT_WRITE_FILE_MODE
|
|
180
216
|
* @param insertLine insert 模式下的目标行号(从 1 开始),省略则插入到末尾
|
|
181
217
|
* @param oldString replace 模式下的被替换文本(须在旧内容中唯一出现)
|
|
182
218
|
*/
|
|
@@ -215,14 +251,18 @@ export declare class BuiltinToolHandlers {
|
|
|
215
251
|
* @param query 搜索关键词
|
|
216
252
|
* @param limitStr 返回数量上限
|
|
217
253
|
* @param modeStr 搜索模式:"match"(任一命中,默认)或 "near"(全部命中)
|
|
254
|
+
* @param toolCallId 本次 tool_call 唯一 ID(可选 · 宿主配对通道,MEM-EVENT-2):原样透传进
|
|
255
|
+
* memoryRecalled 载荷,供宿主把命中明细挂回对应工具折叠块。缺省 = 载荷不带该字段,
|
|
256
|
+
* 宿主回退轮次级兜底落位(测试/直调均可省略,不新造默认值)。
|
|
218
257
|
*/
|
|
219
|
-
searchMemories(query: string, limitStr: string, modeStr: string): Promise<string>;
|
|
258
|
+
searchMemories(query: string, limitStr: string, modeStr: string, toolCallId?: string): Promise<string>;
|
|
220
259
|
/**
|
|
221
260
|
* 命中即 touch:fire-and-forget 刷新命中记忆的 accessedAt(不涉及任何重要度字段)。
|
|
222
261
|
*
|
|
223
262
|
* 收敛到 keywordsTouch.ts 的单一真理源 touchScores(§5.2 只 touch 不加权,内部只调 storage.touch)——
|
|
224
|
-
*
|
|
225
|
-
*
|
|
263
|
+
* 不为工具命中另造写分路径。实例级调度器保证 fire-and-forget 不阻塞搜索返回,
|
|
264
|
+
* 且统一并发限流(同一 Agent 实例 5 槽);失败兜底记日志即可(touch 是排序副作用,非主线流程)。
|
|
265
|
+
* 调度器未注入(测试/独立调用)→ 静默跳过 touch,不另造无主 Promise。
|
|
226
266
|
*
|
|
227
267
|
* @param hits 搜索命中项(取其 id 定位,实际写入交由 touchScores 收敛)
|
|
228
268
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builtinToolHandlers.d.ts","sourceRoot":"","sources":["../../src/agent/builtinToolHandlers.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAM7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEnE,OAAO,KAAK,EAAE,aAAa,EAAe,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"builtinToolHandlers.d.ts","sourceRoot":"","sources":["../../src/agent/builtinToolHandlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,9 +29,8 @@ import { splitSessionId } from '../utils/time.js';
|
|
|
29
29
|
// 越界提示前缀同源引入——loop 台账写侧据此识别「提示串非正文」不记账,防两侧前缀漂移
|
|
30
30
|
import { formatSegmentationFooter, READ_FILE_NOTICE_PREFIX } from '../agent/toolLedger.js';
|
|
31
31
|
// write_file 写入模式单一真理源(schema 描述与 handler 校验共用,避免双源漂移)
|
|
32
|
-
import { WRITE_FILE_MODES, isWriteFileMode } from '../agent/builtinTools.js';
|
|
32
|
+
import { DEFAULT_WRITE_FILE_MODE, WRITE_FILE_MODES, isWriteFileMode, } from '../agent/builtinTools.js';
|
|
33
33
|
import { sanitizeExternalText, stripControlChars } from '../agent/toolExecutor.js';
|
|
34
|
-
import { backgroundTask } from '../utils/backgroundTask.js';
|
|
35
34
|
import { touchScores } from '../memory/keywordsTouch.js';
|
|
36
35
|
import { AGENT_CONSTANTS, LOOP_CONSTANTS } from '../agent/constants.js';
|
|
37
36
|
// token 估算唯一真理源(CJK 感知)——read_file 的分段预算与上下文占用/截断同口径
|
|
@@ -83,12 +82,16 @@ function clampCharsToTokenBudget(line, budget) {
|
|
|
83
82
|
* (LOOP_CONSTANTS.SINGLE_TOOL_RESULT_MAX_TOKENS),不使用字符上限,
|
|
84
83
|
* 故本常量与 read_file 不在同一量纲,无「谁更宽松」的可比关系。
|
|
85
84
|
*
|
|
85
|
+
* 消费面两处(CMD-1-CONTENT 起):`readScriptFile`(run_code / run_project_script
|
|
86
|
+
* 的读取与裁决读)+ toolExecutor 的 run_skill_script 确认点读(技能脚本正文裁决)。
|
|
87
|
+
* 三者共用本常量 = 脚本正文预算唯一上限,禁为技能脚本单造第二套。
|
|
88
|
+
*
|
|
86
89
|
* 与 utils/fileSafe.DEFAULT_MAX_CONTENT_LEN 同为 200_000 属**异义同值**,勿误合并:
|
|
87
90
|
* - 本常量:脚本原样读取上限(超限报错,内容交执行器);
|
|
88
91
|
* - DEFAULT_MAX_CONTENT_LEN:内容文件读取上限(超限截断,内容入上下文)。
|
|
89
92
|
* 两者各自独立演进,改一侧不联动另一侧。
|
|
90
93
|
*/
|
|
91
|
-
const SCRIPT_READ_MAX_LEN = 200_000;
|
|
94
|
+
export const SCRIPT_READ_MAX_LEN = 200_000;
|
|
92
95
|
/**
|
|
93
96
|
* 内置文件工具忽略的目录/文件名(模块级单一真理源)
|
|
94
97
|
*
|
|
@@ -144,9 +147,17 @@ export class BuiltinToolHandlers {
|
|
|
144
147
|
}
|
|
145
148
|
/** 记忆搜索器(search_memories 语义后端,装配期注入;未注入时回退关键词 memoryIndex.search) */
|
|
146
149
|
memoryInspector = null;
|
|
150
|
+
/**
|
|
151
|
+
* 后台任务槽位调度器(装配期注入,与 SeedDeps 的调度器**同一实例**):
|
|
152
|
+
* search_memories 命中即 touch 经此 fire-and-forget,共享 Agent 实例的 5 槽限流,
|
|
153
|
+
* 并纳入 close() 单点等待。未注入时 touch 静默跳过(与 onMemoryRecalled?.() 同款可选链,
|
|
154
|
+
* 保持「内置工具可被测试/脚本直调、无宿主即 no-op」语义)。
|
|
155
|
+
*/
|
|
156
|
+
backgroundTasks = null;
|
|
147
157
|
/** 当前会话「正文或摘要已在眼前」的轮次提供者(装配期注入;search_memories 用它与装配期内容互斥) */
|
|
148
158
|
exclusionRoundIdsProvider = null;
|
|
149
|
-
/** memoryRecalled 事件发射回调(宿主感知「LLM 查询记忆命中 N
|
|
159
|
+
/** memoryRecalled 事件发射回调(宿主感知「LLM 查询记忆命中 N 条」;装配期注入,缺省不发射)。
|
|
160
|
+
* 载荷类型引用 AgentEventMap 单一真源(不内联复制,防与 eventEmitter 定义漂移)。 */
|
|
150
161
|
onMemoryRecalled = null;
|
|
151
162
|
/**
|
|
152
163
|
* 注入 MemoryInspector,启用 search_memories 的纯关键词搜索后端(memory-tool-recall-design §3.3)。
|
|
@@ -175,6 +186,16 @@ export class BuiltinToolHandlers {
|
|
|
175
186
|
setExclusionRoundIdsProvider(provider) {
|
|
176
187
|
this.exclusionRoundIdsProvider = provider;
|
|
177
188
|
}
|
|
189
|
+
/**
|
|
190
|
+
* 注入后台任务槽位调度器(装配期注入,与 SeedDeps 的调度器同一实例)。
|
|
191
|
+
* 装配依赖 loop/history,toolExec 在 assembler 中先于它构造,故用「构造后注入」而非构造参数。
|
|
192
|
+
* 注入后 search_memories 命中 touch 走实例级限流,并纳入 Agent.close() 等待;未注入则 touch 静默跳过。
|
|
193
|
+
*
|
|
194
|
+
* @param scheduler Agent 实例级后台任务调度器
|
|
195
|
+
*/
|
|
196
|
+
setBackgroundTaskScheduler(scheduler) {
|
|
197
|
+
this.backgroundTasks = scheduler;
|
|
198
|
+
}
|
|
178
199
|
// ─── 路径安全(内置 + 自定义工具共享) ──────────────────────────
|
|
179
200
|
/**
|
|
180
201
|
* 解析相对路径为绝对路径
|
|
@@ -369,20 +390,27 @@ export class BuiltinToolHandlers {
|
|
|
369
390
|
* 仅做路径白名单校验 + 长度上限(SCRIPT_READ_MAX_LEN,防超大脚本滥用)。
|
|
370
391
|
*
|
|
371
392
|
* @param relativePath 相对项目根的文件路径
|
|
393
|
+
* @param label 调用面标识(默认 `run_code script_path`)。错误文案要说清"是哪个工具的
|
|
394
|
+
* 脚本"——裁决面(run_project_script 也复用本函数读正文做内容裁决)与执行面可能不同,
|
|
395
|
+
* 写死 run_code 会让项目脚本报出"run_code 脚本文件过长"(说谎)。
|
|
372
396
|
* @returns 脚本文件原始内容
|
|
373
397
|
*/
|
|
374
|
-
async readScriptFile(relativePath) {
|
|
398
|
+
async readScriptFile(relativePath, label = 'run_code script_path') {
|
|
375
399
|
if (!relativePath) {
|
|
376
|
-
throw toolError(
|
|
400
|
+
throw toolError(`${label} 参数缺失`, 'LLM 未传 script_path', ['script_path 不能为空'], undefined, ToolErrorCode.ARGUMENT_ERROR);
|
|
377
401
|
}
|
|
378
402
|
const absolutePath = this.resolveSafePath(relativePath);
|
|
379
|
-
|
|
403
|
+
// 审计的 tool 名 = 调用面:run_project_script 复用本函数读正文做裁决时,写死 'run_code'
|
|
404
|
+
// 会把项目脚本的路径审计记到 run_code 头上(归属说谎)⇒ 传 label。
|
|
405
|
+
this.guardPathOrThrow(absolutePath, label);
|
|
380
406
|
// 读前预检:目标是目录时给出可执行指引(脚本语义是文件)
|
|
381
|
-
|
|
407
|
+
// tool 名传 label(调用面):路径审计要能看出这次读是谁发起的,写死 'run_code'
|
|
408
|
+
// 会让 run_project_script 的裁决读记到 run_code 头上(审计归属说谎)。
|
|
409
|
+
await this.assertFileNotDir(absolutePath, relativePath, label, '传入脚本文件路径');
|
|
382
410
|
try {
|
|
383
411
|
const content = await readFile(absolutePath, 'utf-8');
|
|
384
412
|
if (content.length > SCRIPT_READ_MAX_LEN) {
|
|
385
|
-
throw toolError(
|
|
413
|
+
throw toolError(`${label} 脚本文件过长`, `脚本超过 ${SCRIPT_READ_MAX_LEN} 字符上限`, ['精简脚本或拆分为多个文件'], undefined, ToolErrorCode.ARGUMENT_ERROR);
|
|
386
414
|
}
|
|
387
415
|
return content;
|
|
388
416
|
}
|
|
@@ -391,9 +419,9 @@ export class BuiltinToolHandlers {
|
|
|
391
419
|
throw err;
|
|
392
420
|
const e = toError(err);
|
|
393
421
|
if (isNodeErrorCode(err, 'ENOENT')) {
|
|
394
|
-
throw toolError(
|
|
422
|
+
throw toolError(`${label} 脚本文件不存在`, `${absolutePath}:文件不存在`, ['确认 script_path 正确', '先 write_file 创建脚本再执行'], e, ToolErrorCode.FILE_NOT_FOUND);
|
|
395
423
|
}
|
|
396
|
-
throw toolError(
|
|
424
|
+
throw toolError(`${label} 读取脚本失败`, `${absolutePath}:${e.message}`, ['确认文件可读'], e, ToolErrorCode.UNKNOWN);
|
|
397
425
|
}
|
|
398
426
|
}
|
|
399
427
|
/**
|
|
@@ -464,11 +492,11 @@ export class BuiltinToolHandlers {
|
|
|
464
492
|
* @param relativePath 相对项目根的文件路径
|
|
465
493
|
* @param content 要写入的内容
|
|
466
494
|
* @param extensions 写入扩展(可选,用于 diff 确认等)
|
|
467
|
-
* @param mode 写入模式(合法值集 = WriteFileMode 类型,派生自 WRITE_FILE_MODES
|
|
495
|
+
* @param mode 写入模式(合法值集 = WriteFileMode 类型,派生自 WRITE_FILE_MODES),默认取 DEFAULT_WRITE_FILE_MODE
|
|
468
496
|
* @param insertLine insert 模式下的目标行号(从 1 开始),省略则插入到末尾
|
|
469
497
|
* @param oldString replace 模式下的被替换文本(须在旧内容中唯一出现)
|
|
470
498
|
*/
|
|
471
|
-
async writeFile(relativePath, content, extensions, mode =
|
|
499
|
+
async writeFile(relativePath, content, extensions, mode = DEFAULT_WRITE_FILE_MODE, insertLine, oldString) {
|
|
472
500
|
if (!relativePath) {
|
|
473
501
|
throw toolError('write_file 工具调用缺少 path 参数', 'LLM 未传 path', ['检查 personality.md 是否明确了 write_file 用法'], undefined, ToolErrorCode.ARGUMENT_ERROR);
|
|
474
502
|
}
|
|
@@ -740,8 +768,11 @@ export class BuiltinToolHandlers {
|
|
|
740
768
|
* @param query 搜索关键词
|
|
741
769
|
* @param limitStr 返回数量上限
|
|
742
770
|
* @param modeStr 搜索模式:"match"(任一命中,默认)或 "near"(全部命中)
|
|
771
|
+
* @param toolCallId 本次 tool_call 唯一 ID(可选 · 宿主配对通道,MEM-EVENT-2):原样透传进
|
|
772
|
+
* memoryRecalled 载荷,供宿主把命中明细挂回对应工具折叠块。缺省 = 载荷不带该字段,
|
|
773
|
+
* 宿主回退轮次级兜底落位(测试/直调均可省略,不新造默认值)。
|
|
743
774
|
*/
|
|
744
|
-
async searchMemories(query, limitStr, modeStr) {
|
|
775
|
+
async searchMemories(query, limitStr, modeStr, toolCallId) {
|
|
745
776
|
if (!query) {
|
|
746
777
|
throw toolError('search_memories 工具调用缺少 query 参数', 'LLM 未传 query', ['query 不能为空'], undefined, ToolErrorCode.ARGUMENT_ERROR);
|
|
747
778
|
}
|
|
@@ -790,9 +821,24 @@ export class BuiltinToolHandlers {
|
|
|
790
821
|
// 只 touch 不加权(§5.2 定案):accessedAt 是「使用轨迹」唯一事实源,touchScores 内部只调 storage.touch
|
|
791
822
|
// 刷新访问时间、不写任何重要度字段——命中 = 被 LLM 想起,仅用于排序,不做记忆强化加权。查询低频,无自反馈(自动注入退役后根除正反馈)。
|
|
792
823
|
this.touchHits(hits);
|
|
793
|
-
// memoryRecalled 事件(§2.4
|
|
794
|
-
//
|
|
795
|
-
|
|
824
|
+
// memoryRecalled 事件(§2.4「保留改语义」定案;4.1.0 MEM-EVENT-1 载荷扩展):LLM 查询记忆
|
|
825
|
+
// 命中 N 条 → 宿主感知提示 + 命中明细(id/name/source/contentPreview,宿主 S3-1 可展开行渲染 /
|
|
826
|
+
// S3-3 反馈寻址)。contentPreview 5.0.0 起携带(宿主命中行按用户心智显示内容)。
|
|
827
|
+
// 唯一发射位:此处是全库唯一 emit。明细取自现成搜索结果(零新增查询);条数上限由
|
|
828
|
+
// parseLimit 钳制(50)单点保证,此处全量映射不截断(不另立截断常量)。
|
|
829
|
+
this.onMemoryRecalled?.({
|
|
830
|
+
count: hits.length,
|
|
831
|
+
query,
|
|
832
|
+
hits: hits.map((h) => ({
|
|
833
|
+
id: h.id,
|
|
834
|
+
name: h.name,
|
|
835
|
+
source: h.source,
|
|
836
|
+
contentPreview: h.contentPreview,
|
|
837
|
+
})),
|
|
838
|
+
// 条件展开而非 `toolCallId` 恒在:缺省时载荷不出现该键(老内核载荷形态零变化,
|
|
839
|
+
// 消费方按「键存在」分流配对/兜底两条路径,不靠 undefined 嗅探)。
|
|
840
|
+
...(toolCallId ? { toolCallId } : {}),
|
|
841
|
+
});
|
|
796
842
|
const lines = hits.map((m, i) => {
|
|
797
843
|
const preview = truncate(m.contentPreview ?? '', 80);
|
|
798
844
|
const access = m.accessedAt ? ` accessedAt=${m.accessedAt}` : '';
|
|
@@ -809,15 +855,16 @@ export class BuiltinToolHandlers {
|
|
|
809
855
|
* 命中即 touch:fire-and-forget 刷新命中记忆的 accessedAt(不涉及任何重要度字段)。
|
|
810
856
|
*
|
|
811
857
|
* 收敛到 keywordsTouch.ts 的单一真理源 touchScores(§5.2 只 touch 不加权,内部只调 storage.touch)——
|
|
812
|
-
*
|
|
813
|
-
*
|
|
858
|
+
* 不为工具命中另造写分路径。实例级调度器保证 fire-and-forget 不阻塞搜索返回,
|
|
859
|
+
* 且统一并发限流(同一 Agent 实例 5 槽);失败兜底记日志即可(touch 是排序副作用,非主线流程)。
|
|
860
|
+
* 调度器未注入(测试/独立调用)→ 静默跳过 touch,不另造无主 Promise。
|
|
814
861
|
*
|
|
815
862
|
* @param hits 搜索命中项(取其 id 定位,实际写入交由 touchScores 收敛)
|
|
816
863
|
*/
|
|
817
864
|
touchHits(hits) {
|
|
818
865
|
if (hits.length === 0)
|
|
819
866
|
return;
|
|
820
|
-
|
|
867
|
+
this.backgroundTasks?.schedule('search_memories.touch', () => touchScores(this.memoryIndex, hits.map((h) => h.id)));
|
|
821
868
|
}
|
|
822
869
|
/**
|
|
823
870
|
* `search_memories` 响应性护栏包装:给整次记忆搜索设上限。
|