@zooique/memora 2.0.3 → 3.0.1
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 +1037 -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,413 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 记忆衰减调度器(从 agent.ts 拆分)
|
|
3
|
-
*
|
|
4
|
-
* 职责:
|
|
5
|
-
* 1. 定期执行记忆 score 衰减(体现"自然遗忘")
|
|
6
|
-
* 2. 衰减指标统计(执行次数 / 累计衰减记忆数 / 上次衰减时间)
|
|
7
|
-
* 3. 衰减可观测性(Tracer Span 埋点)
|
|
8
|
-
* 4. 衰减完成事件发射(decayCompleted)
|
|
9
|
-
* 5. L2 时效性评估(可选,backgroundProvider + index 注入后启用)
|
|
10
|
-
*
|
|
11
|
-
* 设计理由:
|
|
12
|
-
* agent.ts 原承担 15+ 职责,记忆衰减是独立的生命周期职责,
|
|
13
|
-
* 拆分后 Agent 聚焦对话编排,MemoryDecayScheduler 聚焦记忆自然遗忘。
|
|
14
|
-
*
|
|
15
|
-
* 衰减范围:
|
|
16
|
-
* - insight(洞察记忆)
|
|
17
|
-
* - profile(用户画像记忆)
|
|
18
|
-
* - work-projection(作品投影)
|
|
19
|
-
* 不衰减 persona/rule/skill(配置型记忆不应衰减)
|
|
20
|
-
*
|
|
21
|
-
* L2 时效性评估(可选增强):
|
|
22
|
-
* - 衰减后扫描低分记忆(score < TIMELINESS_LOW_SCORE_THRESHOLD)
|
|
23
|
-
* - 调用 LLM 判断是否"已过时"(如过时的技术栈、已变更的偏好)
|
|
24
|
-
* - 过时则进一步降级(score → TIMELINESS_OUTDATED_SCORE)
|
|
25
|
-
* - backgroundProvider / index 未注入时静默跳过(向后兼容)
|
|
26
|
-
*
|
|
27
|
-
* 自然生长原则:
|
|
28
|
-
* - 不持有 storage 引用(start 时注入,stop 时释放)
|
|
29
|
-
* - 通过回调发射事件(不继承 TypedEventEmitter,避免与 Agent 事件系统耦合)
|
|
30
|
-
* - 指标统计内聚(getMetrics 返回快照,Agent.getMetrics 直接合并)
|
|
31
|
-
*/
|
|
32
|
-
import { safeSetInterval, clearSafeInterval } from '../../utils/safeTimer.js';
|
|
33
|
-
import { logger } from '../../logging/logger.js';
|
|
34
|
-
import { toError } from '../../utils/errors.js';
|
|
35
|
-
import { nowIso } from '../../utils/time.js';
|
|
36
|
-
import { NOOP_TRACER, TRACE_SPANS } from '../../agent/tracer.js';
|
|
37
|
-
// LLM judge 三件套高阶函数(流式累积 + parseLlmJson + configError 异常封装)
|
|
38
|
-
import { judgeWithLlm } from '../../agent/managers/llmJudgeHelper.js';
|
|
39
|
-
import { truncate } from '../../utils/strings.js';
|
|
40
|
-
// LLM 治理源列表(v2 REPEAT-1 闭环,消除 5 处独立维护的 [INSIGHT, PROFILE, WORK_PROJECTION] 列表)
|
|
41
|
-
import { GOVERNANCE_SOURCES } from '../../memory/governance.js';
|
|
42
|
-
// ─── L2 时效性评估常量 ────────────────────────────────────
|
|
43
|
-
// 注:TIMELINESS_SOURCES 已统一为 GOVERNANCE_SOURCES(governance.ts),消除 5 处独立维护
|
|
44
|
-
/** 低分记忆阈值(score 低于此值的记忆进入 LLM 时效性评估) */
|
|
45
|
-
const TIMELINESS_LOW_SCORE_THRESHOLD = 0.3;
|
|
46
|
-
/** 单次时效性评估的记忆条数上限(控制 LLM 调用量) */
|
|
47
|
-
const TIMELINESS_EVALUATE_LIMIT = 20;
|
|
48
|
-
/** LLM 时效性判断超时(ms) */
|
|
49
|
-
const TIMELINESS_TIMEOUT_MS = 15_000;
|
|
50
|
-
/** 被判定为过时的记忆降级到此 score(接近物理删除阈值,但保留可恢复性) */
|
|
51
|
-
const TIMELINESS_OUTDATED_SCORE = 0.05;
|
|
52
|
-
/** 候选记忆内容预览长度(截断后送入 LLM) */
|
|
53
|
-
const TIMELINESS_CONTENT_PREVIEW_LEN = 200;
|
|
54
|
-
/**
|
|
55
|
-
* 记忆衰减调度器
|
|
56
|
-
*
|
|
57
|
-
* 使用方式:
|
|
58
|
-
* const scheduler = new MemoryDecayScheduler({ tracer, onDecayCompleted });
|
|
59
|
-
* scheduler.start(storage, intervalMs); // 启动定时衰减
|
|
60
|
-
* scheduler.runOnce(); // 立即执行一次衰减
|
|
61
|
-
* scheduler.stop(); // 停止定时衰减
|
|
62
|
-
* scheduler.getMetrics(); // 获取衰减指标快照
|
|
63
|
-
*/
|
|
64
|
-
export class MemoryDecayScheduler {
|
|
65
|
-
/** 可观测性 Tracer(默认 NOOP,零开销) */
|
|
66
|
-
tracer;
|
|
67
|
-
/** 衰减完成事件发射回调 */
|
|
68
|
-
onDecayCompleted;
|
|
69
|
-
/** 后台 LLM Provider(可选,用于 L2 时效性评估,未注入时跳过) */
|
|
70
|
-
backgroundProvider;
|
|
71
|
-
/** 完整记忆存储(可选,用于 L2 读取低分记忆和降级,未注入时跳过) */
|
|
72
|
-
index;
|
|
73
|
-
/** 衰减定时器(null 表示未启动) */
|
|
74
|
-
decayTimer = null;
|
|
75
|
-
/** 衰减目标存储(start 时注入,stop 时释放) */
|
|
76
|
-
storage = null;
|
|
77
|
-
/**
|
|
78
|
-
* L2 时效性评估的 AbortController
|
|
79
|
-
*
|
|
80
|
-
* FIX-P0-1:stop() 时 abort,让正在进行的 evaluateTimeliness 尽快结束,
|
|
81
|
-
* 防止 close 后 LLM 回调 upsert 已关闭的 storage。
|
|
82
|
-
* 每次 evaluateTimeliness 启动时重置为新的 controller。
|
|
83
|
-
*/
|
|
84
|
-
evaluateAbortController = null;
|
|
85
|
-
/**
|
|
86
|
-
* 当前正在进行的 evaluateTimeliness Promise(null 表示无)
|
|
87
|
-
*
|
|
88
|
-
* FIX-P0-1:close() 通过 awaitInflight() 等待此 Promise 完成,
|
|
89
|
-
* 确保关闭时所有 L2 评估的 upsert 都落在 storage 关闭前。
|
|
90
|
-
*/
|
|
91
|
-
inflightEvaluate = null;
|
|
92
|
-
// ─── 衰减指标统计字段 ──────────────────────────────────
|
|
93
|
-
/** 衰减执行次数(每次 runOnce 实际执行 +1) */
|
|
94
|
-
metricDecayRunCount = 0;
|
|
95
|
-
/** 累计衰减记忆数(score 被调低的记忆条数总和) */
|
|
96
|
-
metricTotalDecayedCount = 0;
|
|
97
|
-
/** 上次衰减时间(ISO 8601,null 表示从未执行过) */
|
|
98
|
-
metricLastDecayAt = null;
|
|
99
|
-
constructor(opts) {
|
|
100
|
-
this.tracer = opts.tracer ?? NOOP_TRACER;
|
|
101
|
-
this.onDecayCompleted = opts.onDecayCompleted;
|
|
102
|
-
// L2 可选依赖:未注入时 evaluateTimeliness 静默跳过
|
|
103
|
-
this.backgroundProvider = opts.backgroundProvider ?? null;
|
|
104
|
-
this.index = opts.index ?? null;
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* 启动定期衰减
|
|
108
|
-
*
|
|
109
|
-
* @param storage 衰减目标存储(IMemoryStorage.decayScores)
|
|
110
|
-
* @param intervalMs 衰减间隔(毫秒,通常为 1 小时)
|
|
111
|
-
*/
|
|
112
|
-
start(storage, intervalMs) {
|
|
113
|
-
this.storage = storage;
|
|
114
|
-
// 立即执行一次首次衰减
|
|
115
|
-
this.runOnce();
|
|
116
|
-
// 注册定期衰减
|
|
117
|
-
this.decayTimer = safeSetInterval(() => this.runOnce(), intervalMs);
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* 停止定期衰减,释放资源
|
|
121
|
-
*
|
|
122
|
-
* FIX-P0-1:清理定时器 + abort 正在进行的 L2 时效性评估 + 释放 storage 引用,
|
|
123
|
-
* 防止 close 后回调触发 upsert 已关闭的 storage。
|
|
124
|
-
*
|
|
125
|
-
* 注意:stop() 不等待 inflightEvaluate 完成(避免阻塞 close 流程),
|
|
126
|
-
* 调用方如需等待应使用 awaitInflight()。abort 后 LLM 调用会快速失败,
|
|
127
|
-
* evaluateTimeliness 内部的 try/catch 会捕获并降级返回。
|
|
128
|
-
*/
|
|
129
|
-
stop() {
|
|
130
|
-
if (this.decayTimer) {
|
|
131
|
-
clearSafeInterval(this.decayTimer);
|
|
132
|
-
this.decayTimer = null;
|
|
133
|
-
}
|
|
134
|
-
// FIX-P0-1:abort 正在进行的 L2 评估,让 LLM 调用快速失败
|
|
135
|
-
if (this.evaluateAbortController) {
|
|
136
|
-
this.evaluateAbortController.abort();
|
|
137
|
-
this.evaluateAbortController = null;
|
|
138
|
-
}
|
|
139
|
-
this.storage = null;
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
* 等待正在进行的 L2 时效性评估完成
|
|
143
|
-
*
|
|
144
|
-
* FIX-P0-1:Agent.close() 在 stop() 后调用此方法,确保所有 inflight 的
|
|
145
|
-
* evaluateTimeliness Promise 完成(要么正常返回,要么因 abort 快速 reject),
|
|
146
|
-
* 防止 close 后 LLM 回调 upsert 已关闭的 storage。
|
|
147
|
-
*
|
|
148
|
-
* @returns 完成 Promise,无 inflight 时立即 resolve
|
|
149
|
-
*/
|
|
150
|
-
async awaitInflight() {
|
|
151
|
-
if (this.inflightEvaluate) {
|
|
152
|
-
try {
|
|
153
|
-
await this.inflightEvaluate;
|
|
154
|
-
}
|
|
155
|
-
catch {
|
|
156
|
-
// abort 导致的 reject 是预期行为,吞掉即可
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
/**
|
|
161
|
-
* 执行一次记忆衰减
|
|
162
|
-
*
|
|
163
|
-
* 对 insight/profile/work-projection 记忆执行 score 衰减,
|
|
164
|
-
* 长期未访问的记忆 score 逐渐降低,体现"自然遗忘"。
|
|
165
|
-
* 不影响 persona/rule/skill(这些是配置型记忆,不应衰减)。
|
|
166
|
-
*
|
|
167
|
-
* 衰减逻辑委派给 IMemoryStorage.decayScores(),
|
|
168
|
-
* 宿主(SqliteStorage)可用一条 SQL UPDATE 批量完成,避免 O(n) 全量加载。
|
|
169
|
-
*/
|
|
170
|
-
runOnce() {
|
|
171
|
-
if (!this.storage)
|
|
172
|
-
return;
|
|
173
|
-
// 衰减 Span:记录衰减执行过程,补全衰减可观测性缺口
|
|
174
|
-
const decaySpan = this.tracer.startSpan(TRACE_SPANS.DECAY);
|
|
175
|
-
try {
|
|
176
|
-
// 治理源列表统一来自 governance.ts(v2 REPEAT-1 闭环)
|
|
177
|
-
const decayedCount = this.storage.decayScores([...GOVERNANCE_SOURCES], new Date());
|
|
178
|
-
logger.debug({ decayedCount }, '记忆衰减完成');
|
|
179
|
-
// 衰减指标统计:累计执行次数和衰减记忆数
|
|
180
|
-
this.metricDecayRunCount++;
|
|
181
|
-
this.metricTotalDecayedCount += decayedCount;
|
|
182
|
-
this.metricLastDecayAt = nowIso();
|
|
183
|
-
decaySpan.setAttribute('decayedCount', decayedCount);
|
|
184
|
-
decaySpan.setAttribute('totalRuns', this.metricDecayRunCount);
|
|
185
|
-
this.onDecayCompleted({ decayedCount });
|
|
186
|
-
}
|
|
187
|
-
catch (err) {
|
|
188
|
-
logger.warn({ err }, '记忆衰减异常,跳过本轮');
|
|
189
|
-
decaySpan.recordException(toError(err));
|
|
190
|
-
}
|
|
191
|
-
finally {
|
|
192
|
-
decaySpan.end();
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
/**
|
|
196
|
-
* 获取衰减指标快照
|
|
197
|
-
*
|
|
198
|
-
* 供 Agent.getMetrics() 合并到完整 AgentMetrics 中。
|
|
199
|
-
*/
|
|
200
|
-
getMetrics() {
|
|
201
|
-
return {
|
|
202
|
-
runCount: this.metricDecayRunCount,
|
|
203
|
-
totalDecayedCount: this.metricTotalDecayedCount,
|
|
204
|
-
lastRunAt: this.metricLastDecayAt,
|
|
205
|
-
};
|
|
206
|
-
}
|
|
207
|
-
// ─── L2 时效性评估(可选,backgroundProvider + index 注入后启用) ───
|
|
208
|
-
/**
|
|
209
|
-
* 时效性评估:扫描低分记忆,调用 LLM 判断是否已过时
|
|
210
|
-
*
|
|
211
|
-
* 流程:
|
|
212
|
-
* 1. 从 insight/profile/work-projection 加载低分记忆(score < 0.3)
|
|
213
|
-
* 2. 对每条低分记忆(上限 20 条),调用 LLM 判断是否"已过时"
|
|
214
|
-
* 3. 过时则进一步降级(score → 0.05,接近物理删除阈值但保留可恢复性)
|
|
215
|
-
* 4. 返回评估报告
|
|
216
|
-
*
|
|
217
|
-
* 使用场景:
|
|
218
|
-
* - 衰减后调用(onDecayCompleted 回调中),对低分记忆做 LLM 二次评估
|
|
219
|
-
* - 宿主定时任务定期调用(如每天一次)
|
|
220
|
-
* - 用户手动触发(记忆管理面板的"清理过时记忆"按钮)
|
|
221
|
-
*
|
|
222
|
-
* 安全设计:
|
|
223
|
-
* - 不物理删除——仅降级 score,保留可恢复性
|
|
224
|
-
* - LLM 失败降级——返回已处理的报告,不阻塞调用方
|
|
225
|
-
* - 单条 LLM 失败不阻塞后续评估
|
|
226
|
-
* - backgroundProvider / index 未注入时静默跳过(向后兼容)
|
|
227
|
-
*
|
|
228
|
-
* FIX-P0-1:每次启动评估创建新的 AbortController,注册到 inflightEvaluate。
|
|
229
|
-
* stop() 时 abort 让 LLM 调用快速失败,awaitInflight() 等待 Promise 完成。
|
|
230
|
-
* 外部 signal 仍可与内部 abort 信号同时使用(任一触发即取消)。
|
|
231
|
-
*
|
|
232
|
-
* @param signal 可选的外部 AbortSignal(与内部 abort 信号叠加,任一触发即取消)
|
|
233
|
-
* @returns 评估报告
|
|
234
|
-
*/
|
|
235
|
-
async evaluateTimeliness(signal) {
|
|
236
|
-
// 可选依赖未注入时静默降级(向后兼容)
|
|
237
|
-
if (!this.backgroundProvider || !this.index) {
|
|
238
|
-
return {
|
|
239
|
-
scannedCount: 0,
|
|
240
|
-
outdatedCount: 0,
|
|
241
|
-
demotedIds: [],
|
|
242
|
-
skippedReason: 'backgroundProvider 或 index 未注入',
|
|
243
|
-
};
|
|
244
|
-
}
|
|
245
|
-
// FIX-P0-1:每次评估创建新的 AbortController,stop() 可主动 abort
|
|
246
|
-
this.evaluateAbortController = new AbortController();
|
|
247
|
-
const internalSignal = this.evaluateAbortController.signal;
|
|
248
|
-
// 外部 signal 与内部 signal 叠加:任一 abort 即触发
|
|
249
|
-
// 使用 AbortSignal.any 需 Node 18+,兼容方案是手动转发
|
|
250
|
-
const combinedSignal = signal
|
|
251
|
-
? AbortSignal.any([internalSignal, signal])
|
|
252
|
-
: internalSignal;
|
|
253
|
-
// 注册到 inflightEvaluate,让 awaitInflight() 可等待
|
|
254
|
-
const promise = this.doEvaluateTimeliness(combinedSignal);
|
|
255
|
-
this.inflightEvaluate = promise;
|
|
256
|
-
try {
|
|
257
|
-
return await promise;
|
|
258
|
-
}
|
|
259
|
-
finally {
|
|
260
|
-
// 评估完成(成功/失败/abort)后清理引用
|
|
261
|
-
if (this.inflightEvaluate === promise) {
|
|
262
|
-
this.inflightEvaluate = null;
|
|
263
|
-
}
|
|
264
|
-
if (this.evaluateAbortController?.signal === internalSignal) {
|
|
265
|
-
this.evaluateAbortController = null;
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
/**
|
|
270
|
-
* 实际执行 L2 时效性评估的核心逻辑
|
|
271
|
-
*
|
|
272
|
-
* 从 evaluateTimeliness 拆出,便于 inflightEvaluate Promise 注册和清理。
|
|
273
|
-
*
|
|
274
|
-
* @param combinedSignal 已叠加内部 + 外部的 AbortSignal
|
|
275
|
-
*/
|
|
276
|
-
async doEvaluateTimeliness(signal) {
|
|
277
|
-
// ── 步骤 1:加载低分记忆 ──
|
|
278
|
-
const lowScoreMemories = [];
|
|
279
|
-
for (const source of GOVERNANCE_SOURCES) {
|
|
280
|
-
const memories = this.index.getBySource(source);
|
|
281
|
-
// 筛选低分记忆(score 低于阈值)
|
|
282
|
-
lowScoreMemories.push(...memories.filter((m) => m.score < TIMELINESS_LOW_SCORE_THRESHOLD));
|
|
283
|
-
}
|
|
284
|
-
if (lowScoreMemories.length === 0) {
|
|
285
|
-
return {
|
|
286
|
-
scannedCount: 0,
|
|
287
|
-
outdatedCount: 0,
|
|
288
|
-
demotedIds: [],
|
|
289
|
-
skippedReason: '无低分记忆需评估',
|
|
290
|
-
};
|
|
291
|
-
}
|
|
292
|
-
// 按 score 升序排列(最低分优先评估),取前 20 条
|
|
293
|
-
lowScoreMemories.sort((a, b) => a.score - b.score);
|
|
294
|
-
const limited = lowScoreMemories.slice(0, TIMELINESS_EVALUATE_LIMIT);
|
|
295
|
-
// ── 步骤 2:逐条调用 LLM 判断时效性 ──
|
|
296
|
-
const demotedIds = [];
|
|
297
|
-
let outdatedCount = 0;
|
|
298
|
-
for (const memory of limited) {
|
|
299
|
-
// abort 后提前退出循环,避免无谓的 LLM 调用
|
|
300
|
-
if (signal.aborted)
|
|
301
|
-
break;
|
|
302
|
-
try {
|
|
303
|
-
const verdict = await this.judgeTimeliness(memory, signal);
|
|
304
|
-
if (verdict.isOutdated) {
|
|
305
|
-
this.demoteOutdatedMemory(memory);
|
|
306
|
-
demotedIds.push(memory.id);
|
|
307
|
-
outdatedCount++;
|
|
308
|
-
logger.info({ memoryId: memory.id, reason: verdict.reason }, '时效性评估:降级过时记忆');
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
|
-
catch (err) {
|
|
312
|
-
// 单条 LLM 判断失败不阻塞后续评估(abort 导致的失败也走此分支)
|
|
313
|
-
logger.warn({ err, memoryId: memory.id }, '时效性评估:LLM 判断失败,跳过此条');
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
return {
|
|
317
|
-
scannedCount: limited.length,
|
|
318
|
-
outdatedCount,
|
|
319
|
-
demotedIds,
|
|
320
|
-
};
|
|
321
|
-
}
|
|
322
|
-
/**
|
|
323
|
-
* 调用 LLM 判断单条记忆的时效性
|
|
324
|
-
*
|
|
325
|
-
* 使用结构化 JSON 输出(isOutdated + reason),
|
|
326
|
-
* 流式累积 + parseLlmJson + 异常封装委托给 llmJudgeHelper.judgeWithLlm。
|
|
327
|
-
*
|
|
328
|
-
* LLM 失败时抛出 MemoraError(由 evaluateTimeliness 捕获并降级跳过此条)。
|
|
329
|
-
*
|
|
330
|
-
* @param memory 待评估的记忆
|
|
331
|
-
* @param signal 可选的 AbortSignal
|
|
332
|
-
* @returns LLM 判断结果
|
|
333
|
-
*/
|
|
334
|
-
async judgeTimeliness(memory, signal) {
|
|
335
|
-
const messages = buildTimelinessMessages(memory);
|
|
336
|
-
const parsed = await judgeWithLlm(this.backgroundProvider, messages, { maxTokens: 200, timeoutMs: TIMELINESS_TIMEOUT_MS, signal }, 'LLM 时效性判断返回非法 JSON');
|
|
337
|
-
return {
|
|
338
|
-
memoryId: memory.id,
|
|
339
|
-
isOutdated: parsed.isOutdated === true,
|
|
340
|
-
reason: typeof parsed.reason === 'string' ? parsed.reason : '(LLM 未提供理由)',
|
|
341
|
-
};
|
|
342
|
-
}
|
|
343
|
-
/**
|
|
344
|
-
* 降级过时记忆(score → TIMELINESS_OUTDATED_SCORE)
|
|
345
|
-
*
|
|
346
|
-
* 安全设计:
|
|
347
|
-
* - 不物理删除,仅降低 score,保留可恢复性
|
|
348
|
-
* - 更新 accessedAt,标记最近被处理过
|
|
349
|
-
*
|
|
350
|
-
* @param memory 待降级的过时记忆
|
|
351
|
-
*/
|
|
352
|
-
demoteOutdatedMemory(memory) {
|
|
353
|
-
// MIND2-L3:改用 setScore 原子操作,消除 spread 旧快照覆盖其他字段
|
|
354
|
-
// 原模式 spread 旧快照后整条 upsert,会覆盖期间被 boost/decay 改的 content 等字段
|
|
355
|
-
this.index.setScore(memory.id, TIMELINESS_OUTDATED_SCORE, nowIso());
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
// ─── L2 时效性评估 Prompt 模板(模块级函数,与 buildDedupMessages 同模式) ───
|
|
359
|
-
/**
|
|
360
|
-
* 构建时效性判断的 LLM 消息
|
|
361
|
-
*
|
|
362
|
-
* 设计要点:
|
|
363
|
-
* - system 消息定义判断规则(过时 = 信息已失效/不再适用)
|
|
364
|
-
* - user 消息携带记忆内容和元数据(source/score/createdAt)
|
|
365
|
-
* - 要求输出结构化 JSON(isOutdated + reason)
|
|
366
|
-
* - few-shot 示例降低 LLM 误判率
|
|
367
|
-
*
|
|
368
|
-
* @param memory 待评估的记忆
|
|
369
|
-
* @returns system + user 消息数组
|
|
370
|
-
*/
|
|
371
|
-
function buildTimelinessMessages(memory) {
|
|
372
|
-
const content = memory.content.length > TIMELINESS_CONTENT_PREVIEW_LEN
|
|
373
|
-
? truncate(memory.content, TIMELINESS_CONTENT_PREVIEW_LEN, '…[截断]')
|
|
374
|
-
: memory.content;
|
|
375
|
-
return [
|
|
376
|
-
{
|
|
377
|
-
role: 'system',
|
|
378
|
-
content: `你是记忆时效性评估助手。判断给定的记忆是否已过时(信息已失效或不再适用)。
|
|
379
|
-
|
|
380
|
-
判断规则:
|
|
381
|
-
- 已过时 = 信息明确失效(如旧版本号、已废弃的 API、已变更的偏好)
|
|
382
|
-
- 未过时 = 信息仍然有效(如通用编程原则、长期偏好、历史事件记录)
|
|
383
|
-
- 不确定时倾向"未过时"(避免误删有效记忆)
|
|
384
|
-
|
|
385
|
-
输出 JSON 格式:
|
|
386
|
-
{
|
|
387
|
-
"isOutdated": true/false,
|
|
388
|
-
"reason": "判断理由(简短说明)"
|
|
389
|
-
}
|
|
390
|
-
|
|
391
|
-
示例:
|
|
392
|
-
输入: "用户使用 React 16 进行开发"(createdAt: 2020-01-01)
|
|
393
|
-
输出: {"isOutdated": true, "reason": "React 16 已是旧版本,当前普遍使用 React 18+"}
|
|
394
|
-
|
|
395
|
-
输入: "用户偏好函数式编程风格"
|
|
396
|
-
输出: {"isOutdated": false, "reason": "编程风格偏好通常是长期的"}`,
|
|
397
|
-
},
|
|
398
|
-
{
|
|
399
|
-
role: 'user',
|
|
400
|
-
content: `请判断以下记忆是否已过时:
|
|
401
|
-
|
|
402
|
-
记忆详情:
|
|
403
|
-
- 名称:${memory.name}
|
|
404
|
-
- 来源:${memory.source}
|
|
405
|
-
- 当前 score:${memory.score}(低分,可能因长期未访问而衰减)
|
|
406
|
-
- 创建时间:${memory.createdAt}
|
|
407
|
-
- 内容:${content}
|
|
408
|
-
|
|
409
|
-
请输出 JSON 判断结果。`,
|
|
410
|
-
},
|
|
411
|
-
];
|
|
412
|
-
}
|
|
413
|
-
//# sourceMappingURL=memoryDecayScheduler.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"memoryDecayScheduler.js","sourceRoot":"","sources":["../../../src/agent/managers/memoryDecayScheduler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 关系构建器 — ADR-014 记忆关系构建的专职 Manager
|
|
3
|
-
*
|
|
4
|
-
* 从 InsightExtractor 拆分出来,负责:
|
|
5
|
-
* - 召回关系判断候选记忆(top-5 关键词搜索)
|
|
6
|
-
* - 构建关系判断 prompt 片段(候选列表 + 关系类型说明)
|
|
7
|
-
* - 解析 LLM 输出的 relations 字段并写入 IMemoryRelationStore
|
|
8
|
-
* - contradicts 关系检测 + onConflict 回调通知
|
|
9
|
-
*
|
|
10
|
-
* 设计原则:
|
|
11
|
-
* - 独立于 InsightExtractor 生命周期,仅依赖 IMemoryStorage + IMemoryRelationStore
|
|
12
|
-
* - 静默降级——relationStore 未注入时所有方法返回空/no-op(ADR-014 降级优先)
|
|
13
|
-
* - 薄层代理——关系写入直接透传到 IMemoryRelationStore,仅增加 weight 推断 + targetId 校验
|
|
14
|
-
*
|
|
15
|
-
* 与 InsightExtractor 的分工(1.0 接口稳定化):
|
|
16
|
-
* - InsightExtractor:insight 提取 + 去重 + 写入 + 输入分类
|
|
17
|
-
* - RelationBuilder:候选召回 + prompt 构建 + 关系写入 + 冲突检测
|
|
18
|
-
*
|
|
19
|
-
* 详见 ADR-014(记忆关系侧车模型)
|
|
20
|
-
*/
|
|
21
|
-
import type { Memory } from '../../memory/types.js';
|
|
22
|
-
import type { IMemoryStorage } from '../../memory/storageInterface.js';
|
|
23
|
-
import type { IMemoryRelationStore } from '../../memory/relationStore.js';
|
|
24
|
-
/**
|
|
25
|
-
* 冲突信息(contradicts 关系检测到时传递给宿主)
|
|
26
|
-
*
|
|
27
|
-
* 由 RelationBuilder.buildRelations 检测到 contradicts 关系时构造,
|
|
28
|
-
* 通过 onConflict 回调传递给 Agent,Agent emit('conflictDetected') 通知宿主。
|
|
29
|
-
*/
|
|
30
|
-
export interface ConflictInfo {
|
|
31
|
-
/** 新写入的 insight 记忆 ID */
|
|
32
|
-
newMemoryId: string;
|
|
33
|
-
/** 新洞察内容(用于 UI 展示) */
|
|
34
|
-
newInsight: string;
|
|
35
|
-
/** 被矛盾的已有记忆 ID */
|
|
36
|
-
targetId: string;
|
|
37
|
-
/** 被矛盾的已有记忆内容(用于 UI 展示) */
|
|
38
|
-
targetContent: string;
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* 关系构建器
|
|
42
|
-
*
|
|
43
|
-
* 封装 ADR-014 记忆关系构建的全部逻辑,从 InsightExtractor 拆分。
|
|
44
|
-
* relationStore 未注入时所有方法静默降级(返回空/no-op)。
|
|
45
|
-
*/
|
|
46
|
-
export declare class RelationBuilder {
|
|
47
|
-
private readonly index;
|
|
48
|
-
private readonly relationStore;
|
|
49
|
-
/** 冲突检测回调(由 Agent 通过 bindOnConflict 注入,检测到 contradicts 时触发) */
|
|
50
|
-
private onConflict;
|
|
51
|
-
/**
|
|
52
|
-
* @param index 记忆存储(用于候选召回的关键词搜索)
|
|
53
|
-
* @param relationStore 记忆关系存储(可选,未注入时所有方法静默降级)
|
|
54
|
-
*/
|
|
55
|
-
constructor(index: IMemoryStorage, relationStore?: IMemoryRelationStore | null);
|
|
56
|
-
/** 关系构建是否启用(relationStore 已注入时为 true) */
|
|
57
|
-
get enabled(): boolean;
|
|
58
|
-
/**
|
|
59
|
-
* 绑定冲突检测回调
|
|
60
|
-
*
|
|
61
|
-
* 由 Agent.init() 在创建 InsightExtractor 后调用(与 bindGetRecentHistory 同模式),
|
|
62
|
-
* 解决 Agent 实例晚于 InsightExtractor 创建的时序循环依赖。
|
|
63
|
-
* buildRelations 检测到 contradicts 关系时调用此回调,Agent 在回调中 emit('conflictDetected')。
|
|
64
|
-
*
|
|
65
|
-
* @param fn 冲突检测回调(传入 null 可解除绑定)
|
|
66
|
-
*/
|
|
67
|
-
bindOnConflict(fn: ((info: ConflictInfo) => void) | null): void;
|
|
68
|
-
/**
|
|
69
|
-
* 召回关系判断候选记忆(top-5)
|
|
70
|
-
*
|
|
71
|
-
* 用用户输入关键词搜索已有记忆,作为 LLM 关系判断的参考。
|
|
72
|
-
* 用户输入与提取出的 insight 通常相关,候选记忆也相关。
|
|
73
|
-
* relationStore 未注入时返回空数组(降级)。
|
|
74
|
-
*
|
|
75
|
-
* @param userInput 用户输入(用于关键词搜索)
|
|
76
|
-
* @returns 候选记忆列表(id + content 截断)
|
|
77
|
-
*/
|
|
78
|
-
recallRelationCandidates(userInput: string): Memory[];
|
|
79
|
-
/**
|
|
80
|
-
* 构建候选记忆列表的 prompt 片段
|
|
81
|
-
*
|
|
82
|
-
* 格式:
|
|
83
|
-
* 已有记忆(供关系判断参考):
|
|
84
|
-
* [1] id: xxx, content: xxx
|
|
85
|
-
* [2] id: xxx, content: xxx
|
|
86
|
-
*
|
|
87
|
-
* @param candidates 候选记忆列表
|
|
88
|
-
* @returns prompt 片段(空候选时返回空字符串)
|
|
89
|
-
*/
|
|
90
|
-
buildCandidatesPrompt(candidates: Memory[]): string;
|
|
91
|
-
/**
|
|
92
|
-
* 构建关系判断的 prompt 指令片段
|
|
93
|
-
*
|
|
94
|
-
* 包含 relations 字段格式说明 + 关系类型说明 + 注意事项。
|
|
95
|
-
* relationStore 未注入时返回空字符串(降级,不影响 insight 提取主流程)。
|
|
96
|
-
*
|
|
97
|
-
* @returns prompt 指令片段(relationStore 未注入时为空字符串)
|
|
98
|
-
*/
|
|
99
|
-
buildRelationsPrompt(): string;
|
|
100
|
-
/**
|
|
101
|
-
* 构建关系(写入 IMemoryRelationStore)
|
|
102
|
-
*
|
|
103
|
-
* 解析 LLM 输出的 relations 字段,验证 targetId 在候选列表中,写入关系存储。
|
|
104
|
-
* 降级策略:relationStore 未注入/relations 为空/targetId 无效 → 跳过,不阻塞主流程。
|
|
105
|
-
*
|
|
106
|
-
* 检测到 contradicts 关系时,通过 onConflict 回调通知 Agent,
|
|
107
|
-
* Agent emit('conflictDetected') 触发宿主消费链路(ProactiveBanner 通知用户)。
|
|
108
|
-
*
|
|
109
|
-
* @param insightId 新写入的 insight ID
|
|
110
|
-
* @param insightContent 新写入的 insight 内容(用于冲突通知 UI 展示)
|
|
111
|
-
* @param relations LLM 输出的关系列表
|
|
112
|
-
* @param candidates 候选记忆列表(用于验证 targetId + 查找 targetContent)
|
|
113
|
-
*/
|
|
114
|
-
buildRelations(insightId: string, insightContent: string, relations: Array<{
|
|
115
|
-
targetId?: unknown;
|
|
116
|
-
type?: unknown;
|
|
117
|
-
}>, candidates: Memory[]): void;
|
|
118
|
-
/**
|
|
119
|
-
* 根据关系类型推断 weight(ADR-014 §4)
|
|
120
|
-
*
|
|
121
|
-
* LLM 只输出 type,weight 由代码层推断:
|
|
122
|
-
* - contradicts → 1.0(确定关系,矛盾是强关系)
|
|
123
|
-
* - supports/follows/refines/caused → 0.7(强相关)
|
|
124
|
-
* - related → 0.3(弱相关)
|
|
125
|
-
* - 未知类型 → 0.5(未判断兜底)
|
|
126
|
-
*
|
|
127
|
-
* 设计理由:降低 LLM 认知负担,离散值比连续浮点稳定
|
|
128
|
-
*/
|
|
129
|
-
private weightByType;
|
|
130
|
-
}
|
|
131
|
-
//# sourceMappingURL=relationBuilder.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"relationBuilder.d.ts","sourceRoot":"","sources":["../../../src/agent/managers/relationBuilder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAGhD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAetE;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,yBAAyB;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,sBAAsB;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,2BAA2B;IAC3B,aAAa,EAAE,MAAM,CAAC;CACvB;AAID;;;;;GAKG;AACH,qBAAa,eAAe;IASxB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAThC,+DAA+D;IAC/D,OAAO,CAAC,UAAU,CAA+C;IAEjE;;;OAGG;gBAEgB,KAAK,EAAE,cAAc,EACrB,aAAa,GAAE,oBAAoB,GAAG,IAAW;IAGpE,yCAAyC;IACzC,IAAI,OAAO,IAAI,OAAO,CAErB;IAED;;;;;;;;OAQG;IACH,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI;IAM/D;;;;;;;;;OASG;IACH,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE;IAMrD;;;;;;;;;;OAUG;IACH,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM;IAWnD;;;;;;;OAOG;IACH,oBAAoB,IAAI,MAAM;IAqB9B;;;;;;;;;;;;;OAaG;IACH,cAAc,CACZ,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,KAAK,CAAC;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,EACxD,UAAU,EAAE,MAAM,EAAE,GACnB,IAAI;IA4CP;;;;;;;;;;OAUG;IACH,OAAO,CAAC,YAAY;CAYrB"}
|