@zooique/memora 2.0.3 → 3.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 +1028 -0
- package/README.en.md +305 -272
- package/README.md +303 -260
- package/config.example.json +43 -0
- package/dist/agent/agent.d.ts +376 -408
- package/dist/agent/agent.d.ts.map +1 -1
- package/dist/agent/agent.js +1166 -926
- package/dist/agent/agent.js.map +1 -1
- package/dist/agent/assembler.d.ts +105 -43
- package/dist/agent/assembler.d.ts.map +1 -1
- package/dist/agent/assembler.js +543 -75
- package/dist/agent/assembler.js.map +1 -1
- package/dist/agent/budget.d.ts +131 -0
- package/dist/agent/budget.d.ts.map +1 -0
- package/dist/agent/budget.js +128 -0
- package/dist/agent/budget.js.map +1 -0
- package/dist/agent/builtinToolHandlers.d.ts +225 -38
- package/dist/agent/builtinToolHandlers.d.ts.map +1 -1
- package/dist/agent/builtinToolHandlers.js +748 -132
- package/dist/agent/builtinToolHandlers.js.map +1 -1
- package/dist/agent/builtinTools.d.ts +198 -7
- package/dist/agent/builtinTools.d.ts.map +1 -1
- package/dist/agent/builtinTools.js +646 -14
- package/dist/agent/builtinTools.js.map +1 -1
- package/dist/agent/compaction.d.ts +93 -0
- package/dist/agent/compaction.d.ts.map +1 -0
- package/dist/agent/compaction.js +192 -0
- package/dist/agent/compaction.js.map +1 -0
- package/dist/agent/constants.d.ts +137 -20
- package/dist/agent/constants.d.ts.map +1 -1
- package/dist/agent/constants.js +152 -20
- package/dist/agent/constants.js.map +1 -1
- package/dist/agent/contextManager.d.ts +119 -77
- package/dist/agent/contextManager.d.ts.map +1 -1
- package/dist/agent/contextManager.js +192 -135
- package/dist/agent/contextManager.js.map +1 -1
- package/dist/agent/contextPreparer.d.ts +78 -0
- package/dist/agent/contextPreparer.d.ts.map +1 -0
- package/dist/agent/contextPreparer.js +128 -0
- package/dist/agent/contextPreparer.js.map +1 -0
- package/dist/agent/duplicateInterceptor.d.ts +67 -0
- package/dist/agent/duplicateInterceptor.d.ts.map +1 -0
- package/dist/agent/duplicateInterceptor.js +82 -0
- package/dist/agent/duplicateInterceptor.js.map +1 -0
- package/dist/agent/guardRail.d.ts +166 -0
- package/dist/agent/guardRail.d.ts.map +1 -0
- package/dist/agent/guardRail.js +333 -0
- package/dist/agent/guardRail.js.map +1 -0
- package/dist/agent/loop.d.ts +716 -295
- package/dist/agent/loop.d.ts.map +1 -1
- package/dist/agent/loop.js +2178 -664
- package/dist/agent/loop.js.map +1 -1
- package/dist/agent/managers/archiveCoordinator.d.ts +14 -171
- package/dist/agent/managers/archiveCoordinator.d.ts.map +1 -1
- package/dist/agent/managers/archiveCoordinator.js +19 -287
- package/dist/agent/managers/archiveCoordinator.js.map +1 -1
- package/dist/agent/managers/chatLockManager.d.ts +20 -88
- package/dist/agent/managers/chatLockManager.d.ts.map +1 -1
- package/dist/agent/managers/chatLockManager.js +31 -103
- package/dist/agent/managers/chatLockManager.js.map +1 -1
- package/dist/agent/managers/dedupManager.d.ts +31 -115
- package/dist/agent/managers/dedupManager.d.ts.map +1 -1
- package/dist/agent/managers/dedupManager.js +48 -136
- package/dist/agent/managers/dedupManager.js.map +1 -1
- package/dist/agent/managers/goalConsistencyChecker.d.ts +42 -0
- package/dist/agent/managers/goalConsistencyChecker.d.ts.map +1 -0
- package/dist/agent/managers/goalConsistencyChecker.js +178 -0
- package/dist/agent/managers/goalConsistencyChecker.js.map +1 -0
- package/dist/agent/managers/llmCaller.d.ts +124 -0
- package/dist/agent/managers/llmCaller.d.ts.map +1 -0
- package/dist/agent/managers/llmCaller.js +417 -0
- package/dist/agent/managers/llmCaller.js.map +1 -0
- package/dist/agent/managers/llmJudgeHelper.d.ts +8 -25
- package/dist/agent/managers/llmJudgeHelper.d.ts.map +1 -1
- package/dist/agent/managers/llmJudgeHelper.js +7 -24
- package/dist/agent/managers/llmJudgeHelper.js.map +1 -1
- package/dist/agent/managers/loopMetrics.d.ts +58 -0
- package/dist/agent/managers/loopMetrics.d.ts.map +1 -0
- package/dist/agent/managers/loopMetrics.js +68 -0
- package/dist/agent/managers/loopMetrics.js.map +1 -0
- package/dist/agent/managers/memoryAdvisor.d.ts +27 -120
- package/dist/agent/managers/memoryAdvisor.d.ts.map +1 -1
- package/dist/agent/managers/memoryAdvisor.js +85 -207
- package/dist/agent/managers/memoryAdvisor.js.map +1 -1
- package/dist/agent/managers/memoryGovernance.d.ts +10 -42
- package/dist/agent/managers/memoryGovernance.d.ts.map +1 -1
- package/dist/agent/managers/memoryGovernance.js +19 -36
- package/dist/agent/managers/memoryGovernance.js.map +1 -1
- package/dist/agent/managers/memoryInspector.d.ts +59 -268
- package/dist/agent/managers/memoryInspector.d.ts.map +1 -1
- package/dist/agent/managers/memoryInspector.js +91 -442
- package/dist/agent/managers/memoryInspector.js.map +1 -1
- package/dist/agent/managers/roundSummaryGenerator.d.ts +56 -0
- package/dist/agent/managers/roundSummaryGenerator.d.ts.map +1 -0
- package/dist/agent/managers/roundSummaryGenerator.js +201 -0
- package/dist/agent/managers/roundSummaryGenerator.js.map +1 -0
- package/dist/agent/managers/sessionArchiver.d.ts +19 -68
- package/dist/agent/managers/sessionArchiver.d.ts.map +1 -1
- package/dist/agent/managers/sessionArchiver.js +76 -147
- package/dist/agent/managers/sessionArchiver.js.map +1 -1
- package/dist/agent/managers/sessionManager.d.ts +286 -57
- package/dist/agent/managers/sessionManager.d.ts.map +1 -1
- package/dist/agent/managers/sessionManager.js +846 -85
- package/dist/agent/managers/sessionManager.js.map +1 -1
- package/dist/agent/managers/sessionNamer.d.ts +35 -0
- package/dist/agent/managers/sessionNamer.d.ts.map +1 -0
- package/dist/agent/managers/sessionNamer.js +104 -0
- package/dist/agent/managers/sessionNamer.js.map +1 -0
- package/dist/agent/managers/streamAccumulator.d.ts +8 -33
- package/dist/agent/managers/streamAccumulator.d.ts.map +1 -1
- package/dist/agent/managers/streamAccumulator.js +4 -29
- package/dist/agent/managers/streamAccumulator.js.map +1 -1
- package/dist/agent/managers/textPolishManager.d.ts +8 -44
- package/dist/agent/managers/textPolishManager.d.ts.map +1 -1
- package/dist/agent/managers/textPolishManager.js +9 -41
- package/dist/agent/managers/textPolishManager.js.map +1 -1
- package/dist/agent/managers/toolCallHelpers.d.ts +105 -0
- package/dist/agent/managers/toolCallHelpers.d.ts.map +1 -0
- package/dist/agent/managers/toolCallHelpers.js +161 -0
- package/dist/agent/managers/toolCallHelpers.js.map +1 -0
- package/dist/agent/managers/workProjection.d.ts +55 -100
- package/dist/agent/managers/workProjection.d.ts.map +1 -1
- package/dist/agent/managers/workProjection.js +164 -268
- package/dist/agent/managers/workProjection.js.map +1 -1
- package/dist/agent/messageHistory.d.ts +134 -84
- package/dist/agent/messageHistory.d.ts.map +1 -1
- package/dist/agent/messageHistory.js +419 -133
- package/dist/agent/messageHistory.js.map +1 -1
- package/dist/agent/needsPlanning.d.ts +28 -0
- package/dist/agent/needsPlanning.d.ts.map +1 -0
- package/dist/agent/needsPlanning.js +68 -0
- package/dist/agent/needsPlanning.js.map +1 -0
- package/dist/agent/seed/index.d.ts +11 -0
- package/dist/agent/seed/index.d.ts.map +1 -0
- package/dist/agent/seed/index.js +10 -0
- package/dist/agent/seed/index.js.map +1 -0
- package/dist/agent/seed/orchestrator.d.ts +83 -0
- package/dist/agent/seed/orchestrator.d.ts.map +1 -0
- package/dist/agent/seed/orchestrator.js +260 -0
- package/dist/agent/seed/orchestrator.js.map +1 -0
- package/dist/agent/seed/prepare.d.ts +49 -0
- package/dist/agent/seed/prepare.d.ts.map +1 -0
- package/dist/agent/seed/prepare.js +107 -0
- package/dist/agent/seed/prepare.js.map +1 -0
- package/dist/agent/seed/types.d.ts +115 -0
- package/dist/agent/seed/types.d.ts.map +1 -0
- package/dist/agent/seed/types.js +15 -0
- package/dist/agent/seed/types.js.map +1 -0
- package/dist/agent/sessionStateMachine.d.ts +78 -0
- package/dist/agent/sessionStateMachine.d.ts.map +1 -0
- package/dist/agent/sessionStateMachine.js +182 -0
- package/dist/agent/sessionStateMachine.js.map +1 -0
- package/dist/agent/taskTableRenderer.d.ts +51 -0
- package/dist/agent/taskTableRenderer.d.ts.map +1 -0
- package/dist/agent/taskTableRenderer.js +115 -0
- package/dist/agent/taskTableRenderer.js.map +1 -0
- package/dist/agent/toolExecutor.d.ts +236 -10
- package/dist/agent/toolExecutor.d.ts.map +1 -1
- package/dist/agent/toolExecutor.js +932 -21
- package/dist/agent/toolExecutor.js.map +1 -1
- package/dist/agent/toolLedger.d.ts +120 -0
- package/dist/agent/toolLedger.d.ts.map +1 -0
- package/dist/agent/toolLedger.js +149 -0
- package/dist/agent/toolLedger.js.map +1 -0
- package/dist/agent/toolResultCache.d.ts +134 -0
- package/dist/agent/toolResultCache.d.ts.map +1 -0
- package/dist/agent/toolResultCache.js +243 -0
- package/dist/agent/toolResultCache.js.map +1 -0
- package/dist/agent/toolResultOffload.d.ts +59 -0
- package/dist/agent/toolResultOffload.d.ts.map +1 -0
- package/dist/agent/toolResultOffload.js +70 -0
- package/dist/agent/toolResultOffload.js.map +1 -0
- package/dist/agent/toolRunner.d.ts +59 -0
- package/dist/agent/toolRunner.d.ts.map +1 -0
- package/dist/agent/toolRunner.js +147 -0
- package/dist/agent/toolRunner.js.map +1 -0
- package/dist/agent/tracer.d.ts +99 -107
- package/dist/agent/tracer.d.ts.map +1 -1
- package/dist/agent/tracer.js +24 -69
- package/dist/agent/tracer.js.map +1 -1
- package/dist/agent/types.d.ts +510 -169
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js +2 -51
- package/dist/agent/types.js.map +1 -1
- package/dist/code-exec/codeExecutionProvider.d.ts +16 -0
- package/dist/code-exec/codeExecutionProvider.d.ts.map +1 -0
- package/dist/code-exec/codeExecutionProvider.js +57 -0
- package/dist/code-exec/codeExecutionProvider.js.map +1 -0
- package/dist/code-exec/types.d.ts +37 -0
- package/dist/code-exec/types.d.ts.map +1 -0
- package/dist/code-exec/types.js +12 -0
- package/dist/code-exec/types.js.map +1 -0
- package/dist/config/expandEnvVars.d.ts +22 -0
- package/dist/config/expandEnvVars.d.ts.map +1 -0
- package/dist/config/expandEnvVars.js +38 -0
- package/dist/config/expandEnvVars.js.map +1 -0
- package/dist/config/loader.d.ts +27 -98
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +110 -223
- package/dist/config/loader.js.map +1 -1
- package/dist/index.d.ts +67 -77
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +90 -69
- package/dist/index.js.map +1 -1
- package/dist/llm/abortSignal.d.ts +2 -3
- package/dist/llm/abortSignal.d.ts.map +1 -1
- package/dist/llm/abortSignal.js +2 -3
- package/dist/llm/abortSignal.js.map +1 -1
- package/dist/llm/factory.d.ts +22 -32
- package/dist/llm/factory.d.ts.map +1 -1
- package/dist/llm/factory.js +29 -46
- package/dist/llm/factory.js.map +1 -1
- package/dist/llm/openaiCompatible.d.ts +25 -40
- package/dist/llm/openaiCompatible.d.ts.map +1 -1
- package/dist/llm/openaiCompatible.js +179 -120
- package/dist/llm/openaiCompatible.js.map +1 -1
- package/dist/llm/provider.d.ts +29 -42
- package/dist/llm/provider.d.ts.map +1 -1
- package/dist/llm/provider.js +11 -10
- package/dist/llm/provider.js.map +1 -1
- package/dist/llm/types.d.ts +54 -11
- package/dist/llm/types.d.ts.map +1 -1
- package/dist/llm/types.js +0 -5
- package/dist/llm/types.js.map +1 -1
- package/dist/logging/logger.d.ts +8 -31
- package/dist/logging/logger.d.ts.map +1 -1
- package/dist/logging/logger.js +28 -215
- package/dist/logging/logger.js.map +1 -1
- package/dist/logging/loggerInterface.d.ts +9 -8
- package/dist/logging/loggerInterface.d.ts.map +1 -1
- package/dist/memory/gcService.d.ts +164 -0
- package/dist/memory/gcService.d.ts.map +1 -0
- package/dist/memory/gcService.js +215 -0
- package/dist/memory/gcService.js.map +1 -0
- package/dist/memory/governance.d.ts +11 -44
- package/dist/memory/governance.d.ts.map +1 -1
- package/dist/memory/governance.js +11 -64
- package/dist/memory/governance.js.map +1 -1
- package/dist/memory/inMemoryRoundStore.d.ts +124 -0
- package/dist/memory/inMemoryRoundStore.d.ts.map +1 -0
- package/dist/memory/inMemoryRoundStore.js +216 -0
- package/dist/memory/inMemoryRoundStore.js.map +1 -0
- package/dist/memory/inMemorySessionStore.d.ts +92 -0
- package/dist/memory/inMemorySessionStore.d.ts.map +1 -0
- package/dist/memory/inMemorySessionStore.js +219 -0
- package/dist/memory/inMemorySessionStore.js.map +1 -0
- package/dist/memory/inMemorySessionViewLoader.d.ts +89 -0
- package/dist/memory/inMemorySessionViewLoader.d.ts.map +1 -0
- package/dist/memory/inMemorySessionViewLoader.js +183 -0
- package/dist/memory/inMemorySessionViewLoader.js.map +1 -0
- package/dist/memory/inMemoryStorage.d.ts +25 -175
- package/dist/memory/inMemoryStorage.d.ts.map +1 -1
- package/dist/memory/inMemoryStorage.js +32 -221
- package/dist/memory/inMemoryStorage.js.map +1 -1
- package/dist/memory/keywordsTouch.d.ts +20 -0
- package/dist/memory/keywordsTouch.d.ts.map +1 -0
- package/dist/memory/keywordsTouch.js +25 -0
- package/dist/memory/keywordsTouch.js.map +1 -0
- package/dist/memory/lockManager.d.ts +2 -2
- package/dist/memory/lockManager.d.ts.map +1 -1
- package/dist/memory/lockManager.js +6 -8
- package/dist/memory/lockManager.js.map +1 -1
- package/dist/memory/projectManager.d.ts +30 -129
- package/dist/memory/projectManager.d.ts.map +1 -1
- package/dist/memory/projectManager.js +39 -189
- package/dist/memory/projectManager.js.map +1 -1
- package/dist/memory/projectRegistry.d.ts +14 -62
- package/dist/memory/projectRegistry.d.ts.map +1 -1
- package/dist/memory/projectRegistry.js +27 -111
- package/dist/memory/projectRegistry.js.map +1 -1
- package/dist/memory/roundStore.d.ts +629 -0
- package/dist/memory/roundStore.d.ts.map +1 -0
- package/dist/memory/roundStore.js +116 -0
- package/dist/memory/roundStore.js.map +1 -0
- package/dist/memory/sessionStore.d.ts +70 -61
- package/dist/memory/sessionStore.d.ts.map +1 -1
- package/dist/memory/sessionStore.js +23 -1
- package/dist/memory/sessionStore.js.map +1 -1
- package/dist/memory/sessionViewLoader.d.ts +141 -0
- package/dist/memory/sessionViewLoader.d.ts.map +1 -0
- package/dist/memory/sessionViewLoader.js +65 -0
- package/dist/memory/sessionViewLoader.js.map +1 -0
- package/dist/memory/sourceValidation.d.ts +10 -12
- package/dist/memory/sourceValidation.d.ts.map +1 -1
- package/dist/memory/sourceValidation.js +16 -32
- package/dist/memory/sourceValidation.js.map +1 -1
- package/dist/memory/storageInterface.d.ts +44 -150
- package/dist/memory/storageInterface.d.ts.map +1 -1
- package/dist/memory/types.d.ts +65 -164
- package/dist/memory/types.d.ts.map +1 -1
- package/dist/memory/types.js +81 -83
- package/dist/memory/types.js.map +1 -1
- package/dist/project-search/projectSearchProvider.d.ts +29 -0
- package/dist/project-search/projectSearchProvider.d.ts.map +1 -0
- package/dist/project-search/projectSearchProvider.js +57 -0
- package/dist/project-search/projectSearchProvider.js.map +1 -0
- package/dist/project-search/terms.d.ts +14 -0
- package/dist/project-search/terms.d.ts.map +1 -0
- package/dist/project-search/terms.js +68 -0
- package/dist/project-search/terms.js.map +1 -0
- package/dist/project-search/types.d.ts +139 -0
- package/dist/project-search/types.d.ts.map +1 -0
- package/dist/project-search/types.js +8 -0
- package/dist/project-search/types.js.map +1 -0
- package/dist/role-pack/capabilityMap.d.ts +28 -0
- package/dist/role-pack/capabilityMap.d.ts.map +1 -0
- package/dist/role-pack/capabilityMap.js +56 -0
- package/dist/role-pack/capabilityMap.js.map +1 -0
- package/dist/role-pack/constants.d.ts +21 -0
- package/dist/role-pack/constants.d.ts.map +1 -0
- package/dist/role-pack/constants.js +21 -0
- package/dist/role-pack/constants.js.map +1 -0
- package/dist/role-pack/rolePackManager.d.ts +269 -0
- package/dist/role-pack/rolePackManager.d.ts.map +1 -0
- package/dist/role-pack/rolePackManager.js +1082 -0
- package/dist/role-pack/rolePackManager.js.map +1 -0
- package/dist/role-pack/strategyKeys.d.ts +100 -0
- package/dist/role-pack/strategyKeys.d.ts.map +1 -0
- package/dist/role-pack/strategyKeys.js +184 -0
- package/dist/role-pack/strategyKeys.js.map +1 -0
- package/dist/role-pack/strategyResolver.d.ts +109 -0
- package/dist/role-pack/strategyResolver.d.ts.map +1 -0
- package/dist/role-pack/strategyResolver.js +304 -0
- package/dist/role-pack/strategyResolver.js.map +1 -0
- package/dist/role-pack/types.d.ts +237 -0
- package/dist/role-pack/types.d.ts.map +1 -0
- package/dist/role-pack/types.js +8 -0
- package/dist/role-pack/types.js.map +1 -0
- package/dist/role-pack/validator.d.ts +38 -0
- package/dist/role-pack/validator.d.ts.map +1 -0
- package/dist/role-pack/validator.js +436 -0
- package/dist/role-pack/validator.js.map +1 -0
- package/dist/security/pathGuard.d.ts +69 -72
- package/dist/security/pathGuard.d.ts.map +1 -1
- package/dist/security/pathGuard.js +151 -131
- package/dist/security/pathGuard.js.map +1 -1
- package/dist/skill/skillLayer3.d.ts +91 -0
- package/dist/skill/skillLayer3.d.ts.map +1 -0
- package/dist/skill/skillLayer3.js +104 -0
- package/dist/skill/skillLayer3.js.map +1 -0
- package/dist/skill/skillManager.d.ts +136 -19
- package/dist/skill/skillManager.d.ts.map +1 -1
- package/dist/skill/skillManager.js +312 -61
- package/dist/skill/skillManager.js.map +1 -1
- package/dist/skill/skillScriptRunner.d.ts +97 -0
- package/dist/skill/skillScriptRunner.d.ts.map +1 -0
- package/dist/skill/skillScriptRunner.js +271 -0
- package/dist/skill/skillScriptRunner.js.map +1 -0
- package/dist/skill/types.d.ts +73 -16
- package/dist/skill/types.d.ts.map +1 -1
- package/dist/skill/types.js +5 -1
- package/dist/skill/types.js.map +1 -1
- package/dist/utils/array.d.ts +5 -6
- package/dist/utils/array.d.ts.map +1 -1
- package/dist/utils/array.js +6 -6
- package/dist/utils/array.js.map +1 -1
- package/dist/utils/atomicWrite.d.ts +8 -0
- package/dist/utils/atomicWrite.d.ts.map +1 -0
- package/dist/utils/atomicWrite.js +31 -0
- package/dist/utils/atomicWrite.js.map +1 -0
- package/dist/utils/backgroundTask.d.ts +38 -0
- package/dist/utils/backgroundTask.d.ts.map +1 -0
- package/dist/utils/backgroundTask.js +117 -0
- package/dist/utils/backgroundTask.js.map +1 -0
- package/dist/utils/configResourceManager.d.ts +40 -72
- package/dist/utils/configResourceManager.d.ts.map +1 -1
- package/dist/utils/configResourceManager.js +78 -76
- package/dist/utils/configResourceManager.js.map +1 -1
- package/dist/utils/errors.d.ts +44 -69
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +54 -71
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/eventEmitter.d.ts +104 -103
- package/dist/utils/eventEmitter.d.ts.map +1 -1
- package/dist/utils/eventEmitter.js +37 -45
- package/dist/utils/eventEmitter.js.map +1 -1
- package/dist/utils/fileSafe.d.ts +20 -0
- package/dist/utils/fileSafe.d.ts.map +1 -0
- package/dist/utils/fileSafe.js +56 -0
- package/dist/utils/fileSafe.js.map +1 -0
- package/dist/utils/frontmatter.d.ts +2 -3
- package/dist/utils/frontmatter.d.ts.map +1 -1
- package/dist/utils/frontmatter.js +2 -3
- package/dist/utils/frontmatter.js.map +1 -1
- package/dist/utils/hash.d.ts +12 -0
- package/dist/utils/hash.d.ts.map +1 -0
- package/dist/utils/hash.js +27 -0
- package/dist/utils/hash.js.map +1 -0
- package/dist/utils/http.d.ts +17 -0
- package/dist/utils/http.d.ts.map +1 -0
- package/dist/utils/http.js +29 -0
- package/dist/utils/http.js.map +1 -0
- package/dist/utils/json.d.ts +1 -1
- package/dist/utils/json.js +1 -1
- package/dist/utils/math.d.ts +25 -3
- package/dist/utils/math.d.ts.map +1 -1
- package/dist/utils/math.js +32 -16
- package/dist/utils/math.js.map +1 -1
- package/dist/utils/objects.d.ts +2 -3
- package/dist/utils/objects.d.ts.map +1 -1
- package/dist/utils/objects.js +2 -3
- package/dist/utils/objects.js.map +1 -1
- package/dist/utils/recallDefaults.d.ts +16 -0
- package/dist/utils/recallDefaults.d.ts.map +1 -0
- package/dist/utils/recallDefaults.js +16 -0
- package/dist/utils/recallDefaults.js.map +1 -0
- package/dist/utils/safeTimer.d.ts +8 -36
- package/dist/utils/safeTimer.d.ts.map +1 -1
- package/dist/utils/safeTimer.js +9 -37
- package/dist/utils/safeTimer.js.map +1 -1
- package/dist/utils/scanner.d.ts +97 -17
- package/dist/utils/scanner.d.ts.map +1 -1
- package/dist/utils/scanner.js +269 -47
- package/dist/utils/scanner.js.map +1 -1
- package/dist/utils/segmenter.d.ts +20 -19
- package/dist/utils/segmenter.d.ts.map +1 -1
- package/dist/utils/segmenter.js +230 -97
- package/dist/utils/segmenter.js.map +1 -1
- package/dist/utils/strings.d.ts +15 -32
- package/dist/utils/strings.d.ts.map +1 -1
- package/dist/utils/strings.js +25 -44
- package/dist/utils/strings.js.map +1 -1
- package/dist/utils/time.d.ts +37 -0
- package/dist/utils/time.d.ts.map +1 -1
- package/dist/utils/time.js +56 -0
- package/dist/utils/time.js.map +1 -1
- package/dist/utils/toError.d.ts +13 -1
- package/dist/utils/toError.d.ts.map +1 -1
- package/dist/utils/toError.js +18 -1
- package/dist/utils/toError.js.map +1 -1
- package/dist/web-fetch/fetchWebFetchProvider.d.ts +14 -0
- package/dist/web-fetch/fetchWebFetchProvider.d.ts.map +1 -0
- package/dist/web-fetch/fetchWebFetchProvider.js +69 -0
- package/dist/web-fetch/fetchWebFetchProvider.js.map +1 -0
- package/dist/web-fetch/types.d.ts +30 -0
- package/dist/web-fetch/types.d.ts.map +1 -0
- package/dist/web-fetch/types.js +7 -0
- package/dist/web-fetch/types.js.map +1 -0
- package/dist/web-fetch/webFetchProvider.d.ts +10 -0
- package/dist/web-fetch/webFetchProvider.d.ts.map +1 -0
- package/dist/web-fetch/webFetchProvider.js +28 -0
- package/dist/web-fetch/webFetchProvider.js.map +1 -0
- package/dist/web-search/fetchWebSearchProvider.d.ts +27 -0
- package/dist/web-search/fetchWebSearchProvider.d.ts.map +1 -0
- package/dist/web-search/fetchWebSearchProvider.js +199 -0
- package/dist/web-search/fetchWebSearchProvider.js.map +1 -0
- package/dist/web-search/types.d.ts +46 -0
- package/dist/web-search/types.d.ts.map +1 -0
- package/dist/web-search/types.js +2 -0
- package/dist/{persona → web-search}/types.js.map +1 -1
- package/dist/web-search/webSearchProvider.d.ts +10 -0
- package/dist/web-search/webSearchProvider.d.ts.map +1 -0
- package/dist/web-search/webSearchProvider.js +30 -0
- package/dist/web-search/webSearchProvider.js.map +1 -0
- package/docs/architecture/role-pack-authoring-guide.md +243 -0
- package/docs/architecture/role-pack-spec.md +767 -0
- package/docs/memora-api-reference.md +416 -476
- package/docs/memora-/346/216/245/345/205/245/346/214/207/345/215/227.md +841 -806
- package/docs/role-pack-/345/274/200/346/224/276/351/224/256/346/214/207/345/215/227.md +148 -0
- package/package.json +105 -100
- package/role-packs/README.md +41 -0
- package/role-packs/memora/345/212/251/346/211/213/manifest.json +12 -0
- package/role-packs/memora/345/212/251/346/211/213/persona.md +12 -0
- package/role-packs/memora/345/212/251/346/211/213/rules.md +4 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/manifest.json +44 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/persona.md +46 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/rules.md +15 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/character-sheet.md +34 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/core-extractor.md +37 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/craft-review.md +69 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/dialogue-craft.md +45 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/emotion-wave.md +46 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/empathy-craft.md +79 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/foreshadow.md +29 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/hotspot-mapping.md +121 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/idea-lever.md +42 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/logline-craft.md +47 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/longform-guard.md +64 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/need-finder.md +40 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/outline-expand.md +46 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/pacing-hook.md +34 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/polish-method.md +113 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/pov-discipline.md +79 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/project-init/SKILL.md +112 -0
- 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 +441 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/relationship-web.md +47 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/scene-craft.md +46 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/story-bible.md +60 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/story-structure.md +36 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/style-weaver.md +109 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/three-layer-check.md +27 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/world-builder.md +41 -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/manifest.json +48 -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/persona.md +73 -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 +19 -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/skills/api-doc-writer.md +40 -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/skills/doc-planner.md +42 -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/skills/nutrient-search.md +28 -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/skills/seed-finder.md +28 -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/skills/ssot-audit.md +34 -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/skills/style-guide.md +40 -0
- package/dist/agent/guardrail.d.ts +0 -49
- package/dist/agent/guardrail.d.ts.map +0 -1
- package/dist/agent/guardrail.js +0 -59
- package/dist/agent/guardrail.js.map +0 -1
- package/dist/agent/managers/autoConfigRefiner.d.ts +0 -39
- package/dist/agent/managers/autoConfigRefiner.d.ts.map +0 -1
- package/dist/agent/managers/autoConfigRefiner.js +0 -146
- package/dist/agent/managers/autoConfigRefiner.js.map +0 -1
- package/dist/agent/managers/configManager.d.ts +0 -209
- package/dist/agent/managers/configManager.d.ts.map +0 -1
- package/dist/agent/managers/configManager.js +0 -331
- package/dist/agent/managers/configManager.js.map +0 -1
- package/dist/agent/managers/insightExtractor.d.ts +0 -139
- package/dist/agent/managers/insightExtractor.d.ts.map +0 -1
- package/dist/agent/managers/insightExtractor.js +0 -401
- package/dist/agent/managers/insightExtractor.js.map +0 -1
- package/dist/agent/managers/memoryDecayScheduler.d.ts +0 -239
- package/dist/agent/managers/memoryDecayScheduler.d.ts.map +0 -1
- package/dist/agent/managers/memoryDecayScheduler.js +0 -413
- package/dist/agent/managers/memoryDecayScheduler.js.map +0 -1
- package/dist/agent/managers/relationBuilder.d.ts +0 -131
- package/dist/agent/managers/relationBuilder.d.ts.map +0 -1
- package/dist/agent/managers/relationBuilder.js +0 -192
- package/dist/agent/managers/relationBuilder.js.map +0 -1
- package/dist/agent/personaMatcher.d.ts +0 -29
- package/dist/agent/personaMatcher.d.ts.map +0 -1
- package/dist/agent/personaMatcher.js +0 -60
- package/dist/agent/personaMatcher.js.map +0 -1
- package/dist/agent/userFactExtractor.d.ts +0 -25
- package/dist/agent/userFactExtractor.d.ts.map +0 -1
- package/dist/agent/userFactExtractor.js +0 -88
- package/dist/agent/userFactExtractor.js.map +0 -1
- package/dist/eval/evalRunner.d.ts +0 -94
- package/dist/eval/evalRunner.d.ts.map +0 -1
- package/dist/eval/evalRunner.js +0 -141
- package/dist/eval/evalRunner.js.map +0 -1
- package/dist/eval/evalTypes.d.ts +0 -148
- package/dist/eval/evalTypes.d.ts.map +0 -1
- package/dist/eval/evalTypes.js +0 -118
- package/dist/eval/evalTypes.js.map +0 -1
- package/dist/eval/scenarios.d.ts +0 -33
- package/dist/eval/scenarios.d.ts.map +0 -1
- package/dist/eval/scenarios.js +0 -109
- package/dist/eval/scenarios.js.map +0 -1
- package/dist/llm/embedding.d.ts +0 -79
- package/dist/llm/embedding.d.ts.map +0 -1
- package/dist/llm/embedding.js +0 -184
- package/dist/llm/embedding.js.map +0 -1
- package/dist/memory/hybridMerge.d.ts +0 -50
- package/dist/memory/hybridMerge.d.ts.map +0 -1
- package/dist/memory/hybridMerge.js +0 -51
- package/dist/memory/hybridMerge.js.map +0 -1
- package/dist/memory/inMemoryRelationStore.d.ts +0 -58
- package/dist/memory/inMemoryRelationStore.d.ts.map +0 -1
- package/dist/memory/inMemoryRelationStore.js +0 -80
- package/dist/memory/inMemoryRelationStore.js.map +0 -1
- package/dist/memory/loader.d.ts +0 -51
- package/dist/memory/loader.d.ts.map +0 -1
- package/dist/memory/loader.js +0 -100
- package/dist/memory/loader.js.map +0 -1
- package/dist/memory/recall.d.ts +0 -82
- package/dist/memory/recall.d.ts.map +0 -1
- package/dist/memory/recall.js +0 -157
- package/dist/memory/recall.js.map +0 -1
- package/dist/memory/relationStore.d.ts +0 -95
- package/dist/memory/relationStore.d.ts.map +0 -1
- package/dist/memory/relationStore.js +0 -2
- package/dist/memory/relationStore.js.map +0 -1
- package/dist/memory/store.d.ts +0 -71
- package/dist/memory/store.d.ts.map +0 -1
- package/dist/memory/store.js +0 -199
- package/dist/memory/store.js.map +0 -1
- package/dist/memory/userProfile.d.ts +0 -180
- package/dist/memory/userProfile.d.ts.map +0 -1
- package/dist/memory/userProfile.js +0 -381
- package/dist/memory/userProfile.js.map +0 -1
- package/dist/memory/vectorStore.d.ts +0 -179
- package/dist/memory/vectorStore.d.ts.map +0 -1
- package/dist/memory/vectorStore.js +0 -284
- package/dist/memory/vectorStore.js.map +0 -1
- package/dist/persona/personaManager.d.ts +0 -109
- package/dist/persona/personaManager.d.ts.map +0 -1
- package/dist/persona/personaManager.js +0 -315
- package/dist/persona/personaManager.js.map +0 -1
- package/dist/persona/types.d.ts +0 -32
- package/dist/persona/types.d.ts.map +0 -1
- package/dist/persona/types.js +0 -5
|
@@ -1,322 +1,54 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* 职责:
|
|
5
|
-
* 1. 归档用户画像事实(archiveProfileFacts)
|
|
6
|
-
* 2. 归档洞察记忆(archiveInsight)
|
|
7
|
-
* 3. 归档会话内容(archiveSessionContent)
|
|
8
|
-
* 4. 归档完成事件发射(memoryAdded / insightExtracted / archiveFailed)
|
|
9
|
-
* 5. archiveMode 三态控制集中判断(FIX-P1-4)
|
|
10
|
-
*
|
|
11
|
-
* 设计理由:
|
|
12
|
-
* agent.ts 原承担 15+ 职责,归档操作是独立的领域职责,
|
|
13
|
-
* 拆分后 Agent 聚焦对话编排,ArchiveCoordinator 聚焦归档操作 + 模式判断。
|
|
14
|
-
*
|
|
15
|
-
* FIX-P1-4(2026-07-24):archiveMode 三态控制集中到本类
|
|
16
|
-
* 原实现三态判断散落在 3 处:
|
|
17
|
-
* - Agent.postProcessInner 判断 'manual' 跳过 profile/insight 自动归档
|
|
18
|
-
* - 宿主 sessionHandlers.ts 判断 'full' 触发 content 自动归档
|
|
19
|
-
* - ArchiveCoordinator 名为"协调器"实为"执行器",不感知模式
|
|
20
|
-
* 修复后:
|
|
21
|
-
* - ArchiveCoordinator 构造时注入 getArchiveMode getter
|
|
22
|
-
* - 3 个归档方法新增 autoTriggered 参数区分自动/手动触发
|
|
23
|
-
* - 自动触发时由本类内部按模式判断是否跳过(统一协调点)
|
|
24
|
-
* - setArchiveMode/getArchiveMode 仍保留在 Agent(涉及 _chatBusy 和 #config)
|
|
25
|
-
*
|
|
26
|
-
* 自然生长原则:
|
|
27
|
-
* - 使用 getter 回调注入依赖(getUserProfile / getInsightExtractor / getSessionArchiver / getArchiveMode)
|
|
28
|
-
* 避免 close 时额外清理,Agent null 化字段后 getter 自然返回 null
|
|
29
|
-
* - 通过回调发射事件(不继承 TypedEventEmitter)
|
|
30
|
-
* - 不做 assertInitialized 检查(由 Agent 在调用前保证)
|
|
2
|
+
* 归档协调器:归档会话元数据(SessionMeta)+ 二态归档模式统一判断 + 失败事件发射。
|
|
3
|
+
* 归档=更新 SessionMeta(summary/keyTopics/autoName),仅用于搜索索引,不进记忆召回。
|
|
31
4
|
*/
|
|
32
|
-
import { extractUserFacts } from '../../agent/userFactExtractor.js';
|
|
33
5
|
import { logger } from '../../logging/logger.js';
|
|
34
|
-
/**
|
|
35
|
-
* 归档协调器
|
|
36
|
-
*
|
|
37
|
-
* 使用方式:
|
|
38
|
-
* const coordinator = new ArchiveCoordinator({
|
|
39
|
-
* getUserProfile: () => this.#userProfile,
|
|
40
|
-
* getInsightExtractor: () => this.insightExtractor,
|
|
41
|
-
* getSessionArchiver: () => this.sessionArchiver,
|
|
42
|
-
* getArchiveMode: () => this.#config.archiveMode,
|
|
43
|
-
* emit: this.emit.bind(this),
|
|
44
|
-
* });
|
|
45
|
-
* // 手动触发(用户主动)
|
|
46
|
-
* await coordinator.archiveProfileFacts(input);
|
|
47
|
-
* // 自动触发(postProcess / 会话切换)
|
|
48
|
-
* await coordinator.archiveProfileFacts(input, { autoTriggered: true });
|
|
49
|
-
*/
|
|
50
6
|
export class ArchiveCoordinator {
|
|
51
|
-
/** pending 队列上限——超过则丢弃最旧项,避免 LLM 长时间不可用时无限增长 */
|
|
52
|
-
static MAX_PENDING = 50;
|
|
53
|
-
/** 获取 UserProfile 的回调 */
|
|
54
|
-
getUserProfile;
|
|
55
|
-
/** 获取 InsightExtractor 的回调 */
|
|
56
|
-
getInsightExtractor;
|
|
57
|
-
/** 获取 SessionArchiver 的回调 */
|
|
58
7
|
getSessionArchiver;
|
|
59
|
-
/** 获取当前 archiveMode 的回调(FIX-P1-4) */
|
|
60
8
|
getArchiveMode;
|
|
61
|
-
/** 事件发射回调 */
|
|
62
9
|
emit;
|
|
63
|
-
/**
|
|
64
|
-
* 待重试归档队列(MIND2-C3)
|
|
65
|
-
*
|
|
66
|
-
* 归档失败时入队,下次同阶段归档调用时先重试。
|
|
67
|
-
* 仅 profile/insight 阶段入队(content 从 session store 读取,可手动重试)。
|
|
68
|
-
*/
|
|
69
|
-
pendingArchives = [];
|
|
70
10
|
constructor(opts) {
|
|
71
|
-
this.getUserProfile = opts.getUserProfile;
|
|
72
|
-
this.getInsightExtractor = opts.getInsightExtractor;
|
|
73
11
|
this.getSessionArchiver = opts.getSessionArchiver;
|
|
74
12
|
this.getArchiveMode = opts.getArchiveMode;
|
|
75
13
|
this.emit = opts.emit;
|
|
76
14
|
}
|
|
77
15
|
/**
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
* 模式判断(FIX-P1-4,集中到本类):
|
|
81
|
-
* - 自动触发 + manual 模式 → 跳过(返回空),用户需手动调用
|
|
82
|
-
* - 自动触发 + full/insights-only 模式 → 执行
|
|
83
|
-
* - 手动触发(任何模式) → 执行(用户意图优先)
|
|
84
|
-
*
|
|
85
|
-
* @param input 本轮用户输入
|
|
86
|
-
* @param options 触发选项(autoTriggered 默认 false)
|
|
87
|
-
* @returns 写入/更新的 UserProfileEntry 列表
|
|
16
|
+
* 派生会话归档自动触发允许性(archiveMode → 是否自动归档的唯一显式映射):
|
|
17
|
+
* ArchiveMode 'full' → 自动触发允许;'manual' → 仅手动。轮次摘要不受本映射影响(无模式开关,总是生成)。
|
|
88
18
|
*/
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
if (options?.autoTriggered && this.getArchiveMode() === 'manual') {
|
|
92
|
-
logger.debug({ mode: 'manual', stage: 'profile' }, 'manual 模式跳过自动 profile 归档');
|
|
93
|
-
return [];
|
|
94
|
-
}
|
|
95
|
-
const userProfile = this.getUserProfile();
|
|
96
|
-
if (!userProfile)
|
|
97
|
-
return [];
|
|
98
|
-
// MIND2-C3:先重试 pending 队列中同阶段的失败归档(LLM 恢复后自动补录)
|
|
99
|
-
await this.retryPendingArchives('profile');
|
|
100
|
-
try {
|
|
101
|
-
const turnIndex = `turn-${Date.now()}`;
|
|
102
|
-
const facts = extractUserFacts(input, turnIndex);
|
|
103
|
-
const entries = await userProfile.archiveFacts(facts);
|
|
104
|
-
// 发射 memoryAdded 事件:与自动归档路径一致,保持宿主 UI 行为统一
|
|
105
|
-
for (const entry of entries) {
|
|
106
|
-
if (entry.confirmed) {
|
|
107
|
-
this.emit('memoryAdded', { id: entry.id, source: 'profile', name: entry.value });
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
return entries;
|
|
111
|
-
}
|
|
112
|
-
catch (err) {
|
|
113
|
-
this.handleArchiveError('profile', err);
|
|
114
|
-
// MIND2-C3:失败入队,下次同阶段归档时自动重试(不再永久丢失)
|
|
115
|
-
this.enqueuePending('profile', input);
|
|
116
|
-
return [];
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* 提取并归档洞察记忆
|
|
121
|
-
*
|
|
122
|
-
* 模式判断(FIX-P1-4,集中到本类):
|
|
123
|
-
* - 自动触发 + manual 模式 → 跳过(返回空),用户需手动调用
|
|
124
|
-
* - 自动触发 + full/insights-only 模式 → 执行
|
|
125
|
-
* - 手动触发(任何模式) → 执行(用户意图优先)
|
|
126
|
-
*
|
|
127
|
-
* 内部仍走 classify 判断(避免无价值输入浪费 LLM 调用)。
|
|
128
|
-
*
|
|
129
|
-
* @param input 本轮用户输入
|
|
130
|
-
* @param assistantContent 本轮助手回复内容
|
|
131
|
-
* @param options 触发选项(autoTriggered 默认 false)
|
|
132
|
-
* @returns 写入/更新的 Memory 列表
|
|
133
|
-
*/
|
|
134
|
-
async archiveInsight(input, assistantContent, options) {
|
|
135
|
-
// FIX-P1-4:自动触发 + manual 模式 → 跳过(原 Agent.postProcessInner 的 skipAutoArchive 逻辑)
|
|
136
|
-
if (options?.autoTriggered && this.getArchiveMode() === 'manual') {
|
|
137
|
-
logger.debug({ mode: 'manual', stage: 'insight' }, 'manual 模式跳过自动 insight 归档');
|
|
138
|
-
return [];
|
|
139
|
-
}
|
|
140
|
-
const insightExtractor = this.getInsightExtractor();
|
|
141
|
-
if (!insightExtractor)
|
|
142
|
-
return [];
|
|
143
|
-
// MIND2-C3:先重试 pending 队列中同阶段的失败归档(LLM 恢复后自动补录)
|
|
144
|
-
await this.retryPendingArchives('insight');
|
|
145
|
-
try {
|
|
146
|
-
// 内部仍走 classify 判断,避免无价值输入浪费 LLM 调用
|
|
147
|
-
const shouldExtract = insightExtractor.classify(input);
|
|
148
|
-
if (shouldExtract !== 'extract')
|
|
149
|
-
return [];
|
|
150
|
-
const memories = await insightExtractor.extract(input, assistantContent);
|
|
151
|
-
// 发射 memoryAdded + insightExtracted 事件:与自动归档路径一致
|
|
152
|
-
for (const memory of memories) {
|
|
153
|
-
this.emit('memoryAdded', { id: memory.id, source: memory.source, name: memory.name });
|
|
154
|
-
this.emit('insightExtracted', { source: memory.source, insight: memory.content });
|
|
155
|
-
}
|
|
156
|
-
return memories;
|
|
157
|
-
}
|
|
158
|
-
catch (err) {
|
|
159
|
-
this.handleArchiveError('insight', err);
|
|
160
|
-
// MIND2-C3:失败入队(含 assistantContent),下次同阶段归档时自动重试
|
|
161
|
-
this.enqueuePending('insight', input, assistantContent);
|
|
162
|
-
return [];
|
|
163
|
-
}
|
|
19
|
+
resolveAutoArchiveAllowed() {
|
|
20
|
+
return this.getArchiveMode() === 'full';
|
|
164
21
|
}
|
|
165
22
|
/**
|
|
166
|
-
*
|
|
167
|
-
*
|
|
168
|
-
*
|
|
169
|
-
* - 自动触发 + full 模式 → 执行(会话切换前自动归档)
|
|
170
|
-
* - 自动触发 + insights-only/manual 模式 → 跳过,用户需手动调用
|
|
171
|
-
* - 手动触发(任何模式) → 执行(用户意图优先,如"一键归档"按钮)
|
|
172
|
-
*
|
|
173
|
-
* 错误传播契约:
|
|
174
|
-
* - SessionArchiver LLM 异常 / 写入失败向上抛出(不内部吞掉)。
|
|
175
|
-
* - 本方法 catch 异常并发射 archiveFailed({ stage: 'content' }) 事件,
|
|
176
|
-
* 让宿主 UI 可感知会话内容归档失败。
|
|
177
|
-
* - archiveProfileFacts / archiveInsight 同样 catch 并发射 archiveFailed
|
|
178
|
-
* 事件(stage 分别为 'profile' / 'insight'),三阶段统一闭环。
|
|
179
|
-
* - 失败时返回空降级结果,保证调用方(如 SESSION_SWITCH 自动归档)不中断主流程。
|
|
180
|
-
*
|
|
181
|
-
* @param date 会话日期 YYYY-MM-DD
|
|
182
|
-
* @param session 会话标识(不含日期前缀)
|
|
183
|
-
* @param options 触发选项(autoTriggered 默认 false)
|
|
184
|
-
* @returns 归档结果(memories 可能为空,表示无归档价值或 LLM 失败)
|
|
23
|
+
* 归档会话。模式判断:自动触发+manual→跳过;自动+auto→执行;手动触发→无条件执行。
|
|
24
|
+
* 异常 catch 后发射 archiveFailed 事件并返回空降级结果,保证调用方不中断主流程。
|
|
25
|
+
* @returns updatedFields 可能为空(无归档价值或 LLM 失败)
|
|
185
26
|
*/
|
|
186
|
-
async
|
|
187
|
-
//
|
|
188
|
-
if (options?.autoTriggered && this.
|
|
189
|
-
logger.debug({ mode: this.getArchiveMode(), stage: '
|
|
190
|
-
return {
|
|
27
|
+
async archiveSession(date, session, options) {
|
|
28
|
+
// 手动触发无条件执行;自动触发受 resolveAutoArchiveAllowed 门控
|
|
29
|
+
if (options?.autoTriggered && !this.resolveAutoArchiveAllowed()) {
|
|
30
|
+
logger.debug({ mode: this.getArchiveMode(), stage: 'session' }, 'sessionArchive=manual 跳过自动会话归档');
|
|
31
|
+
return { updatedFields: [], sessionLabel: `${date}-${session}`, messageCount: 0 };
|
|
191
32
|
}
|
|
192
33
|
const sessionArchiver = this.getSessionArchiver();
|
|
193
34
|
if (!sessionArchiver) {
|
|
194
|
-
return {
|
|
35
|
+
return { updatedFields: [], sessionLabel: `${date}-${session}`, messageCount: 0 };
|
|
195
36
|
}
|
|
196
37
|
try {
|
|
197
|
-
const result = await sessionArchiver.
|
|
198
|
-
// 发射 memoryAdded 事件:与 insight 自动归档路径一致,宿主可据此刷新记忆面板
|
|
199
|
-
for (const memory of result.memories) {
|
|
200
|
-
this.emit('memoryAdded', { id: memory.id, source: memory.source, name: memory.name });
|
|
201
|
-
}
|
|
38
|
+
const result = await sessionArchiver.archiveSession(date, session);
|
|
202
39
|
return result;
|
|
203
40
|
}
|
|
204
41
|
catch (err) {
|
|
205
|
-
this.handleArchiveError('
|
|
206
|
-
return {
|
|
42
|
+
this.handleArchiveError('session', err);
|
|
43
|
+
return { updatedFields: [], sessionLabel: `${date}-${session}`, messageCount: 0 };
|
|
207
44
|
}
|
|
208
45
|
}
|
|
209
|
-
/**
|
|
210
|
-
* 统一处理归档异常:记录日志 + 发射 archiveFailed 事件
|
|
211
|
-
*
|
|
212
|
-
* 三段归档方法(profile/insight/content)的 catch 模板完全相同,
|
|
213
|
-
* 提取为私有方法消除重复(ADR-017 枝叶层 2 次提取原则,3 次阈值已满足)。
|
|
214
|
-
*
|
|
215
|
-
* @param stage 归档阶段标识(用于日志结构化字段 + archiveFailed 事件 payload)
|
|
216
|
-
* @param err 捕获的异常
|
|
217
|
-
*/
|
|
46
|
+
/** 统一处理归档异常:记日志 + 发射 archiveFailed 事件。日志与事件二者互补不替代。 */
|
|
218
47
|
handleArchiveError(stage, err) {
|
|
219
|
-
// 记录根因到日志(UI 通知走 archiveFailed 事件,日志走 logger.error,两者不替代)
|
|
220
|
-
// 首字母大写拼接方法名(profile → Profile)保持日志可读性
|
|
221
48
|
const label = stage.charAt(0).toUpperCase() + stage.slice(1);
|
|
222
49
|
logger.error({ err, stage }, `archive${label} 异常`);
|
|
223
50
|
const message = err instanceof Error ? err.message : String(err);
|
|
224
51
|
this.emit('archiveFailed', { stage, message: message.slice(0, 200) });
|
|
225
52
|
}
|
|
226
|
-
// ─── MIND2-C3:pending 队列管理 ──────────────────────────
|
|
227
|
-
/**
|
|
228
|
-
* 将失败的归档输入入队(MIND2-C3)
|
|
229
|
-
*
|
|
230
|
-
* 仅 profile/insight 阶段入队——content 从 session store 读取可手动重试。
|
|
231
|
-
* 队列满时丢弃最旧项(FIFO 淘汰),避免 LLM 长时间不可用时无限增长。
|
|
232
|
-
*
|
|
233
|
-
* @param stage 归档阶段(profile / insight)
|
|
234
|
-
* @param input 本轮用户输入
|
|
235
|
-
* @param assistantContent 助手回复(仅 insight 阶段)
|
|
236
|
-
*/
|
|
237
|
-
enqueuePending(stage, input, assistantContent) {
|
|
238
|
-
if (this.pendingArchives.length >= ArchiveCoordinator.MAX_PENDING) {
|
|
239
|
-
// 队列满,丢弃最旧项(shift 弹出队首)
|
|
240
|
-
const dropped = this.pendingArchives.shift();
|
|
241
|
-
logger.warn({ droppedStage: dropped?.stage, queueSize: this.pendingArchives.length }, 'pending 归档队列已满,丢弃最旧项');
|
|
242
|
-
}
|
|
243
|
-
this.pendingArchives.push({
|
|
244
|
-
stage,
|
|
245
|
-
input,
|
|
246
|
-
assistantContent,
|
|
247
|
-
enqueuedAt: Date.now(),
|
|
248
|
-
});
|
|
249
|
-
logger.info({ stage, queueSize: this.pendingArchives.length }, '归档失败已入 pending 队列,下次同阶段归档时自动重试');
|
|
250
|
-
}
|
|
251
|
-
/**
|
|
252
|
-
* 重试 pending 队列中指定阶段的所有失败归档(MIND2-C3)
|
|
253
|
-
*
|
|
254
|
-
* 在 archiveProfileFacts / archiveInsight 入口调用,先清空同阶段 pending 项:
|
|
255
|
-
* - 成功 → 从队列移除(补录完成)
|
|
256
|
-
* - 失败 → 保留在队列(等下次再试,不无限重试——每次调用只重试一轮)
|
|
257
|
-
*
|
|
258
|
-
* 重试失败不发射 archiveFailed 事件(避免重复 toast 节流),仅 debug 日志。
|
|
259
|
-
* 重试成功正常发射 memoryAdded / insightExtracted 事件(与首次成功一致)。
|
|
260
|
-
*
|
|
261
|
-
* @param stage 要重试的阶段(profile / insight)
|
|
262
|
-
*/
|
|
263
|
-
async retryPendingArchives(stage) {
|
|
264
|
-
// 筛选同阶段的 pending 项(保留其他阶段的不动)
|
|
265
|
-
const pending = this.pendingArchives.filter((p) => p.stage === stage);
|
|
266
|
-
if (pending.length === 0)
|
|
267
|
-
return;
|
|
268
|
-
logger.debug({ stage, count: pending.length }, '开始重试 pending 归档');
|
|
269
|
-
for (const item of pending) {
|
|
270
|
-
try {
|
|
271
|
-
if (stage === 'profile') {
|
|
272
|
-
const userProfile = this.getUserProfile();
|
|
273
|
-
if (!userProfile)
|
|
274
|
-
continue; // UserProfile 仍不可用,保留在队列
|
|
275
|
-
const turnIndex = `turn-${item.enqueuedAt}`;
|
|
276
|
-
const facts = extractUserFacts(item.input, turnIndex);
|
|
277
|
-
const entries = await userProfile.archiveFacts(facts);
|
|
278
|
-
for (const entry of entries) {
|
|
279
|
-
if (entry.confirmed) {
|
|
280
|
-
this.emit('memoryAdded', { id: entry.id, source: 'profile', name: entry.value });
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
else {
|
|
285
|
-
// stage === 'insight'
|
|
286
|
-
const insightExtractor = this.getInsightExtractor();
|
|
287
|
-
if (!insightExtractor)
|
|
288
|
-
continue;
|
|
289
|
-
const shouldExtract = insightExtractor.classify(item.input);
|
|
290
|
-
if (shouldExtract !== 'extract')
|
|
291
|
-
continue;
|
|
292
|
-
const memories = await insightExtractor.extract(item.input, item.assistantContent ?? '');
|
|
293
|
-
for (const memory of memories) {
|
|
294
|
-
this.emit('memoryAdded', { id: memory.id, source: memory.source, name: memory.name });
|
|
295
|
-
this.emit('insightExtracted', { source: memory.source, insight: memory.content });
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
// 重试成功 → 从队列移除
|
|
299
|
-
const idx = this.pendingArchives.indexOf(item);
|
|
300
|
-
if (idx !== -1)
|
|
301
|
-
this.pendingArchives.splice(idx, 1);
|
|
302
|
-
logger.info({ stage }, 'pending 归档重试成功,已从队列移除');
|
|
303
|
-
}
|
|
304
|
-
catch (err) {
|
|
305
|
-
// 重试失败 → 保留在队列,下次再试(仅 debug 日志,不重复发射 archiveFailed)
|
|
306
|
-
logger.debug({ err, stage }, 'pending 归档重试仍失败,保留在队列');
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
/**
|
|
311
|
-
* 获取 pending 归档队列长度(MIND2-C3)
|
|
312
|
-
*
|
|
313
|
-
* 供宿主 UI 查询是否有待补归档,展示"N 条待补"提示。
|
|
314
|
-
* Agent 不直接消费此值——通过 IPC 暴露给渲染层。
|
|
315
|
-
*
|
|
316
|
-
* @returns pending 队列中的待重试归档数
|
|
317
|
-
*/
|
|
318
|
-
getPendingArchiveCount() {
|
|
319
|
-
return this.pendingArchives.length;
|
|
320
|
-
}
|
|
321
53
|
}
|
|
322
54
|
//# sourceMappingURL=archiveCoordinator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archiveCoordinator.js","sourceRoot":"","sources":["../../../src/agent/managers/archiveCoordinator.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"archiveCoordinator.js","sourceRoot":"","sources":["../../../src/agent/managers/archiveCoordinator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAwB7C,MAAM,OAAO,kBAAkB;IACZ,kBAAkB,CAA+B;IACjD,cAAc,CAAoB;IAClC,IAAI,CAAe;IAEpC,YAAY,IAA+B;QACzC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;QAClD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACxB,CAAC;IAED;;;OAGG;IACK,yBAAyB;QAC/B,OAAO,IAAI,CAAC,cAAc,EAAE,KAAK,MAAM,CAAC;IAC1C,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,cAAc,CAClB,IAAY,EACZ,OAAe,EACf,OAA+B;QAE/B,+CAA+C;QAC/C,IAAI,OAAO,EAAE,aAAa,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAE,CAAC;YAChE,MAAM,CAAC,KAAK,CACV,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EACjD,gCAAgC,CACjC,CAAC;YACF,OAAO,EAAE,aAAa,EAAE,EAAE,EAAE,YAAY,EAAE,GAAG,IAAI,IAAI,OAAO,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;QACpF,CAAC;QACD,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAClD,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,OAAO,EAAE,aAAa,EAAE,EAAE,EAAE,YAAY,EAAE,GAAG,IAAI,IAAI,OAAO,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;QACpF,CAAC;QACD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACnE,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YACxC,OAAO,EAAE,aAAa,EAAE,EAAE,EAAE,YAAY,EAAE,GAAG,IAAI,IAAI,OAAO,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;QACpF,CAAC;IACH,CAAC;IAED,uDAAuD;IAC/C,kBAAkB,CAAC,KAAgB,EAAE,GAAY;QACvD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7D,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,UAAU,KAAK,KAAK,CAAC,CAAC;QACnD,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IACxE,CAAC;CACF"}
|
|
@@ -1,115 +1,47 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* ChatLockManager — chat()
|
|
2
|
+
* ChatLockManager — chat() 并发锁管理器:并发锁 + token 校验 + 超时保护 + 外部 signal 合并。
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* - 超时保护(LLM 卡死时中断 generator + 释放锁)
|
|
8
|
-
* - 外部 signal 合并(外部 abort 时触发内部 abort)
|
|
9
|
-
*
|
|
10
|
-
* 从 agent.ts 提取(AUDIT-1-1,ADR-017 架构层先行原则首次实践)
|
|
11
|
-
*
|
|
12
|
-
* race condition 防护设计:
|
|
13
|
-
* 原锁是简单布尔值 `_chatBusy`,无 owner 校验。超时回调与 finally 块无差别清理,
|
|
14
|
-
* 导致 race condition:T=0 A 获取锁 → T=180s 超时释放 → T=181s B 获取锁
|
|
15
|
-
* → T=182s A 的 finally 误清 B 的锁/计时器/controller。
|
|
16
|
-
*
|
|
17
|
-
* 防护方案:
|
|
18
|
-
* - 获取锁时 token 递增:`const myToken = ++this._chatLockToken`
|
|
19
|
-
* - 超时回调校验 `this._chatLockToken === myToken` 后才释放
|
|
20
|
-
* - finally 块校验 `this._chatLockToken === myToken` 后才清理
|
|
21
|
-
* - 不匹配时跳过清理,避免误清新调用者的资源
|
|
22
|
-
*
|
|
23
|
-
* 选择 number 而非 Symbol:递增计数器可序列化、零依赖、足够唯一(同一 Agent 实例内)
|
|
4
|
+
* race condition 防护(token 机制):原锁仅布尔 _chatBusy,超时回调与 finally 块无差别清理,
|
|
5
|
+
* 可能误清新调用者的资源(T=0 A 获取→超时释放→B 获取→A finally 误清 B)。
|
|
6
|
+
* 故获取锁时递增 token,超时回调/finally 均校验 token 是否仍是当前持有者,不匹配则跳过清理。
|
|
24
7
|
*/
|
|
25
8
|
/**
|
|
26
|
-
* chat()
|
|
27
|
-
*
|
|
28
|
-
* 使用方式:
|
|
29
|
-
* const mgr = new ChatLockManager();
|
|
30
|
-
* const { token, internalAbort } = mgr.acquire(180_000);
|
|
31
|
-
* const cleanup = mgr.attachExternalSignal(externalSignal, internalAbort);
|
|
32
|
-
* try {
|
|
33
|
-
* // ... 使用 internalAbort.signal 传递给 generator ...
|
|
34
|
-
* } finally {
|
|
35
|
-
* mgr.release(token);
|
|
36
|
-
* cleanup();
|
|
37
|
-
* }
|
|
38
|
-
*
|
|
39
|
-
* 强制释放(宿主兜底):
|
|
40
|
-
* mgr.forceRelease();
|
|
41
|
-
*
|
|
42
|
-
* 销毁(Agent.close 时):
|
|
43
|
-
* mgr.dispose();
|
|
9
|
+
* chat() 并发锁管理器。acquire 返回 token+internalAbort,finally 中 release(token)。
|
|
10
|
+
* forceRelease 供宿主无进展超时兜底;dispose 供 Agent.close。
|
|
44
11
|
*/
|
|
45
12
|
export declare class ChatLockManager {
|
|
46
|
-
/**
|
|
13
|
+
/** 并发锁标志 */
|
|
47
14
|
private _chatBusy;
|
|
48
|
-
/**
|
|
49
|
-
* chat() 锁持有者 token(race condition 防护)
|
|
50
|
-
*
|
|
51
|
-
* 获取锁时递增,超时回调和 finally 块据此判断是否仍是当前持有者。
|
|
52
|
-
* 不匹配时跳过清理,避免误清新调用者的资源。
|
|
53
|
-
*/
|
|
15
|
+
/** 锁持有者 token(race condition 防护,校验当前持有者避免误清新调用者资源) */
|
|
54
16
|
private _chatLockToken;
|
|
55
|
-
/**
|
|
17
|
+
/** 锁超时计时器(防 LLM 卡死时锁永久持有) */
|
|
56
18
|
private chatLockTimer;
|
|
57
|
-
/**
|
|
19
|
+
/** 内部 AbortController(超时时中断 generator) */
|
|
58
20
|
private chatAbortController;
|
|
59
21
|
/** 当前是否持有锁 */
|
|
60
22
|
get isBusy(): boolean;
|
|
61
23
|
/**
|
|
62
|
-
* 获取锁,返回 token
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
* @param onTimeout 超时回调(用于日志记录等)
|
|
66
|
-
* @returns token(用于 finally 校验)+ internalAbort(用于传递给 loop.processUserInput)
|
|
24
|
+
* 获取锁,返回 token(finally 校验)+ internalAbort(传给 loop.processUserInput)。
|
|
25
|
+
* 超时保护:锁超时后自动释放锁(允许新对话进入),但不中断生成流——
|
|
26
|
+
* LLM 无进展由 provider 层请求级/事件停滞超时兜底,锁不对整次对话时长设硬上限。
|
|
67
27
|
*/
|
|
68
28
|
acquire(timeoutMs: number, onTimeout?: () => void): {
|
|
69
29
|
token: number;
|
|
70
30
|
internalAbort: AbortController;
|
|
71
31
|
};
|
|
72
|
-
/**
|
|
73
|
-
* 合并外部 signal:外部 abort 时触发内部 abort
|
|
74
|
-
*
|
|
75
|
-
* addEventListener 对已 aborted 的 signal 不触发回调,
|
|
76
|
-
* 需手动检查并触发 internalAbort,否则外部已取消的请求仍会进入主流程。
|
|
77
|
-
*
|
|
78
|
-
* @returns 清理函数(finally 块中调用 removeEventListener)
|
|
79
|
-
*/
|
|
32
|
+
/** 合并外部 signal:外部 abort 时触发内部 abort;返回 cleanup。addEventListener 对已 aborted 的 signal 不触发,需手动检查。 */
|
|
80
33
|
attachExternalSignal(externalSignal: AbortSignal | undefined, internalAbort: AbortController): () => void;
|
|
81
|
-
/**
|
|
82
|
-
* finally 块清理(token 校验后)
|
|
83
|
-
*
|
|
84
|
-
* 仅当本调用仍是当前锁持有者时才清理资源。
|
|
85
|
-
* 若 token 已变(超时释放后被新调用者获取),跳过清理避免误清新调用者的状态。
|
|
86
|
-
*/
|
|
34
|
+
/** finally 清理(token 校验):仅当前持有者清理,token 已变则跳过避免误清新调用者状态 */
|
|
87
35
|
release(token: number): void;
|
|
88
36
|
/**
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
*
|
|
92
|
-
* (executeToolCalls 和 generateContextSummary 已覆盖 signal 响应,但其他
|
|
93
|
-
* 第三方库或未来新增的 await 点仍可能不响应 signal)。
|
|
94
|
-
* 此时 _chatBusy 锁未释放,用户再发消息会被 chat() 的竞态保护拒绝,
|
|
95
|
-
* 表现为"UI 能操作但发不出消息",需等到 3 分钟锁超时才能恢复。
|
|
96
|
-
*
|
|
97
|
-
* 安全机制:
|
|
98
|
-
* - 递增 _chatLockToken,让原 chat() 的 finally 块检测到 token 不匹配后
|
|
99
|
-
* 跳过资源清理(避免误清新调用者的 _chatBusy/chatAbortController)
|
|
100
|
-
* - abort chatAbortController,让响应 signal 的 await 点(如 fetch)退出
|
|
101
|
-
* - 原 generator 仍可能在后台运行(无法真正中断不响应 signal 的 await),
|
|
102
|
-
* 但其 finally 块的 token 校验会阻止它影响新调用
|
|
103
|
-
*
|
|
104
|
-
* 幂等性:_chatBusy 已 false 时 no-op(多次调用安全)
|
|
37
|
+
* 强制释放对话锁(宿主无进展超时兜底)。幂等:_chatBusy 已 false 时 no-op。
|
|
38
|
+
* generator 可能卡在不可响应的 await 点,递增 token 让原 finally 跳过清理;
|
|
39
|
+
* abort controller 让响应 signal 的 await 点退出。原 generator 后台残留也无法影响新调用。
|
|
105
40
|
*/
|
|
106
41
|
forceRelease(): void;
|
|
107
42
|
/**
|
|
108
|
-
* 销毁管理器(Agent.close
|
|
109
|
-
*
|
|
110
|
-
* 与 forceRelease() 的区别:不记录 warn 日志(close 是正常生命周期,非异常场景)。
|
|
111
|
-
* 递增 token 使任何进行中的 chat() generator 的 finally 块检测到 token 变化后
|
|
112
|
-
* 跳过资源清理(close 已接管清理职责)。
|
|
43
|
+
* 销毁管理器(Agent.close 时调用)。与 forceRelease 同行为但不记 warn 日志
|
|
44
|
+
* (close 为正常生命周期)。递增 token 使进行中 generator 的 finally 跳过清理。
|
|
113
45
|
*/
|
|
114
46
|
dispose(): void;
|
|
115
47
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chatLockManager.d.ts","sourceRoot":"","sources":["../../../src/agent/managers/chatLockManager.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"chatLockManager.d.ts","sourceRoot":"","sources":["../../../src/agent/managers/chatLockManager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH;;;GAGG;AACH,qBAAa,eAAe;IAC1B,YAAY;IACZ,OAAO,CAAC,SAAS,CAAS;IAC1B,sDAAsD;IACtD,OAAO,CAAC,cAAc,CAAa;IACnC,6BAA6B;IAC7B,OAAO,CAAC,aAAa,CAA8C;IACnE,0CAA0C;IAC1C,OAAO,CAAC,mBAAmB,CAAgC;IAE3D,cAAc;IACd,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED;;;;OAIG;IACH,OAAO,CACL,SAAS,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,IAAI,GACrB;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,eAAe,CAAA;KAAE;IA2BpD,kGAAkG;IAClG,oBAAoB,CAClB,cAAc,EAAE,WAAW,GAAG,SAAS,EACvC,aAAa,EAAE,eAAe,GAC7B,MAAM,IAAI;IAWb,0DAA0D;IAC1D,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAY5B;;;;OAIG;IACH,YAAY,IAAI,IAAI;IAgBpB;;;OAGG;IACH,OAAO,IAAI,IAAI;CAahB"}
|