@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,76 +1,46 @@
|
|
|
1
|
-
// LLM judge
|
|
1
|
+
// LLM judge 高阶函数(流式累积 + parseLlmJson + configError 封装)
|
|
2
2
|
import { judgeWithLlm } from '../../agent/managers/llmJudgeHelper.js';
|
|
3
|
-
// LLM
|
|
3
|
+
// LLM 治理共享常量(统一由 governance.ts 维护)
|
|
4
4
|
import { GOVERNANCE_SOURCES } from '../../memory/governance.js';
|
|
5
|
-
// levenshtein 用于名称相似度计算(复用 sourceValidation 中的实现,避免重复造轮子)
|
|
6
5
|
import { levenshtein } from '../../memory/sourceValidation.js';
|
|
7
|
-
|
|
8
|
-
import { byScoreDesc } from '../../utils/array.js';
|
|
9
|
-
// 时间戳生成(降级时更新 accessedAt)
|
|
6
|
+
import { byAccessedDesc } from '../../utils/array.js';
|
|
10
7
|
import { nowIso } from '../../utils/time.js';
|
|
11
|
-
// 内容截断(送入 LLM 前控制 token 消耗)
|
|
12
8
|
import { truncate } from '../../utils/strings.js';
|
|
13
|
-
// 日志(治理审计 + 失败降级记录)
|
|
14
9
|
import { logger } from '../../logging/logger.js';
|
|
15
10
|
// ─── L1 语义去重常量 ────────────────────────────────────
|
|
16
|
-
/**
|
|
11
|
+
/** 单次去重扫描候选条数上限 */
|
|
17
12
|
const DEDUP_CANDIDATE_LIMIT = 50;
|
|
18
|
-
/** 单次 LLM
|
|
13
|
+
/** 单次 LLM 判断候选对数上限(每对约 200 tokens) */
|
|
19
14
|
const DEDUP_PAIR_LIMIT = 10;
|
|
20
|
-
/** 名称相似度阈值(归一化 Levenshtein 距离 ≤
|
|
15
|
+
/** 名称相似度阈值(归一化 Levenshtein 距离 ≤ 此值视为高度相似进入 LLM 判断) */
|
|
21
16
|
const DEDUP_NAME_SIMILARITY_THRESHOLD = 0.3;
|
|
22
|
-
/** LLM 去重判断超时(ms
|
|
17
|
+
/** LLM 去重判断超时(ms) */
|
|
23
18
|
const DEDUP_TIMEOUT_MS = 15_000;
|
|
24
|
-
/**
|
|
25
|
-
const DEDUP_LOW_SCORE = 0.1;
|
|
26
|
-
/** 候选记忆内容预览长度(截断后送入 LLM,控制 token 消耗) */
|
|
19
|
+
/** 候选内容预览长度(送入 LLM 前截断,控制 token) */
|
|
27
20
|
const DEDUP_CONTENT_PREVIEW_LEN = 200;
|
|
28
21
|
// ─── 类 ──────────────────────────────────────────────────
|
|
29
|
-
/**
|
|
30
|
-
* 语义去重管理器
|
|
31
|
-
*
|
|
32
|
-
* 扫描名称高度相似的记忆对,调用 LLM 判断语义等价性,降级低分记忆。
|
|
33
|
-
*
|
|
34
|
-
* 装配:由 assembler.ts 在组合根创建,backgroundProvider 可选注入。
|
|
35
|
-
* 调用:Agent.deduplicateMemories() 透传至本类。
|
|
36
|
-
*/
|
|
22
|
+
/** 语义去重管理器:扫描名称高度相似的记忆对,LLM 判断语义等价性,降级低分记忆。assembler 组合根创建,由 Agent 透传调用。 */
|
|
37
23
|
export class DedupManager {
|
|
38
24
|
index;
|
|
39
25
|
onCompleted;
|
|
40
|
-
/** 后台 LLM Provider
|
|
26
|
+
/** 后台 LLM Provider(可选,未注入时降级跳过) */
|
|
41
27
|
backgroundProvider;
|
|
42
|
-
/**
|
|
43
|
-
|
|
44
|
-
* @param backgroundProvider - 后台 LLM Provider(可选,用于语义去重,未注入时降级跳过)
|
|
45
|
-
*/
|
|
28
|
+
/** 治理源列表(默认 GOVERNANCE_SOURCES;空治理源时去重空转,测试可显式注入) */
|
|
29
|
+
sources;
|
|
46
30
|
constructor(index, backgroundProvider = null,
|
|
47
|
-
/**
|
|
48
|
-
onCompleted) {
|
|
31
|
+
/** 去重完成回调(宿主据此发射事件通知用户) */
|
|
32
|
+
onCompleted, sources = GOVERNANCE_SOURCES) {
|
|
49
33
|
this.index = index;
|
|
50
34
|
this.onCompleted = onCompleted;
|
|
51
35
|
this.backgroundProvider = backgroundProvider;
|
|
36
|
+
this.sources = sources;
|
|
52
37
|
}
|
|
53
38
|
/**
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
* 流程:
|
|
57
|
-
* 1. 从 insight/profile/work-projection 加载候选记忆(上限 50 条)
|
|
58
|
-
* 2. 按名称归一化 Levenshtein 距离筛选相似对(上限 10 对)
|
|
59
|
-
* 3. 对每对调用 LLM 判断语义等价性(结构化 JSON 输出)
|
|
60
|
-
* 4. 等价则降级低分记忆(score → 0.1,不物理删除,保留可恢复性)
|
|
61
|
-
* 5. 返回去重报告
|
|
62
|
-
*
|
|
63
|
-
* 安全设计:
|
|
64
|
-
* - 不物理删除——仅降级 score,用户可通过宿主 UI 手动恢复
|
|
65
|
-
* - LLM 失败降级——返回已处理的报告,不阻塞调用方
|
|
66
|
-
* - 异步执行——不阻塞主对话热路径(由宿主定时任务或用户手动触发)
|
|
67
|
-
* - backgroundProvider 未注入时静默跳过(返回 skippedReason)
|
|
68
|
-
*
|
|
69
|
-
* @param signal 可选的 AbortSignal(取消正在进行的 LLM 判断)
|
|
70
|
-
* @returns 去重报告
|
|
39
|
+
* 语义去重:加载候选(上限 50)→ 名称相似度筛选对(上限 10)→ LLM 判断语义等价 → 等价则软删重复方。
|
|
40
|
+
* 安全设计:不物理删除仅软删(可恢复);LLM 失败降级不阻塞;provider 未注入静默返回 skippedReason。
|
|
71
41
|
*/
|
|
72
42
|
async deduplicateMemories(signal) {
|
|
73
|
-
//
|
|
43
|
+
// provider 未注入时静默降级
|
|
74
44
|
if (!this.backgroundProvider) {
|
|
75
45
|
return {
|
|
76
46
|
scannedCount: 0,
|
|
@@ -80,16 +50,14 @@ export class DedupManager {
|
|
|
80
50
|
skippedReason: 'backgroundProvider 未注入',
|
|
81
51
|
};
|
|
82
52
|
}
|
|
83
|
-
// ── 步骤 1:加载候选记忆(按 score 降序,取前 50 条) ──
|
|
84
53
|
const candidates = [];
|
|
85
|
-
for (const source of
|
|
54
|
+
for (const source of this.sources) {
|
|
86
55
|
const memories = this.index.getBySource(source);
|
|
87
56
|
candidates.push(...memories);
|
|
88
57
|
}
|
|
89
|
-
// 按 score
|
|
90
|
-
candidates.sort(
|
|
58
|
+
// 按 accessedAt 降序(最近使用优先,score 退役后无分可排序)
|
|
59
|
+
candidates.sort(byAccessedDesc);
|
|
91
60
|
const limited = candidates.slice(0, DEDUP_CANDIDATE_LIMIT);
|
|
92
|
-
// ── 步骤 2:筛选名称高度相似的记忆对 ──
|
|
93
61
|
const pairs = this.findNameOverlapPairs(limited);
|
|
94
62
|
if (pairs.length === 0) {
|
|
95
63
|
return {
|
|
@@ -100,7 +68,6 @@ export class DedupManager {
|
|
|
100
68
|
skippedReason: '未发现名称相似的记忆对',
|
|
101
69
|
};
|
|
102
70
|
}
|
|
103
|
-
// ── 步骤 3:逐对调用 LLM 判断语义等价性 ──
|
|
104
71
|
const demotedIds = [];
|
|
105
72
|
const verdicts = [];
|
|
106
73
|
let deduplicatedCount = 0;
|
|
@@ -108,11 +75,11 @@ export class DedupManager {
|
|
|
108
75
|
try {
|
|
109
76
|
const verdict = await this.judgeDuplicate(pair, signal);
|
|
110
77
|
if (verdict.isDuplicate) {
|
|
111
|
-
// 先写合并内容再降级 b
|
|
78
|
+
// 先写合并内容再降级 b:合并写入失败时不破坏 b 原始状态(原子性)
|
|
112
79
|
if (verdict.mergedContent) {
|
|
113
80
|
this.keepMerged(pair.a, verdict.mergedContent);
|
|
114
81
|
}
|
|
115
|
-
//
|
|
82
|
+
// 重复方软删(score 退役后无降级语义,soft-delete 保留可恢复)
|
|
116
83
|
this.demoteMemory(pair.b);
|
|
117
84
|
demotedIds.push(pair.b.id);
|
|
118
85
|
// 收集审计详情(供 UI 展示"为什么降级"和"合并后保留了什么")
|
|
@@ -126,11 +93,16 @@ export class DedupManager {
|
|
|
126
93
|
}
|
|
127
94
|
}
|
|
128
95
|
catch (err) {
|
|
129
|
-
//
|
|
96
|
+
// 单对失败不阻塞后续对
|
|
130
97
|
logger.warn({ err, pairId: `${pair.a.id}↔${pair.b.id}` }, '语义去重:LLM 判断失败,跳过此对');
|
|
131
98
|
}
|
|
132
99
|
}
|
|
133
|
-
this.onCompleted?.({
|
|
100
|
+
this.onCompleted?.({
|
|
101
|
+
scannedCount: limited.length,
|
|
102
|
+
pairCount: pairs.length,
|
|
103
|
+
deduplicatedCount,
|
|
104
|
+
demotedIds,
|
|
105
|
+
});
|
|
134
106
|
return {
|
|
135
107
|
scannedCount: limited.length,
|
|
136
108
|
pairCount: pairs.length,
|
|
@@ -140,35 +112,25 @@ export class DedupManager {
|
|
|
140
112
|
};
|
|
141
113
|
}
|
|
142
114
|
/**
|
|
143
|
-
*
|
|
144
|
-
*
|
|
145
|
-
* 判定规则(满足任一即视为名称相似):
|
|
146
|
-
* 1. 归一化 Levenshtein 距离 ≤ 0.3(如 "用户偏好" vs "用户偏爱")
|
|
147
|
-
* 2. 一个名称包含另一个(如 "用户偏好" vs "用户偏好设置")
|
|
148
|
-
*
|
|
149
|
-
* 去重设计:
|
|
150
|
-
* - 已配对的记忆不再参与后续配对(避免 A-B-C 三元组产生 A-B + A-C + B-C 三对)
|
|
151
|
-
* - 候选对按相似度升序排列(越相似越优先),取前 10 对
|
|
152
|
-
*
|
|
153
|
-
* @param candidates 候选记忆列表(已按 score 降序)
|
|
154
|
-
* @returns 名称相似的记忆对列表(a.score ≥ b.score)
|
|
115
|
+
* 筛选名称高度相似的候选记忆对。判定:归一化 Levenshtein ≤0.3 或一方包含另一方。
|
|
116
|
+
* 已配对的记忆不再参与后续配对(避免三元组产生多对);按相似度升序(越相似越优先)取前 10 对。
|
|
155
117
|
*/
|
|
156
118
|
findNameOverlapPairs(candidates) {
|
|
157
119
|
const pairs = [];
|
|
158
120
|
const usedIds = new Set();
|
|
159
|
-
//
|
|
121
|
+
// 双重循环生成所有可能对,按相似度排序后贪心选取
|
|
160
122
|
const allPairs = [];
|
|
161
123
|
for (let i = 0; i < candidates.length; i++) {
|
|
162
124
|
for (let j = i + 1; j < candidates.length; j++) {
|
|
163
|
-
const a = candidates[i]; // i
|
|
164
|
-
const b = candidates[j]; //
|
|
125
|
+
const a = candidates[i]; // i 前 j 后:candidates 已按 accessedAt 降序,a 为更近使用方(保留候选)
|
|
126
|
+
const b = candidates[j]; // b 为较远使用方(重复候选)
|
|
165
127
|
const similarity = DedupManager.computeNameSimilarity(a.name, b.name);
|
|
166
128
|
if (similarity <= DEDUP_NAME_SIMILARITY_THRESHOLD) {
|
|
167
129
|
allPairs.push({ a, b, nameSimilarity: similarity });
|
|
168
130
|
}
|
|
169
131
|
}
|
|
170
132
|
}
|
|
171
|
-
//
|
|
133
|
+
// 按相似度升序,越相似越优先处理
|
|
172
134
|
allPairs.sort((x, y) => x.nameSimilarity - y.nameSimilarity);
|
|
173
135
|
// 贪心选取:已配对的记忆不再参与后续配对
|
|
174
136
|
for (const { a, b, nameSimilarity } of allPairs) {
|
|
@@ -182,26 +144,13 @@ export class DedupManager {
|
|
|
182
144
|
}
|
|
183
145
|
return pairs;
|
|
184
146
|
}
|
|
185
|
-
/**
|
|
186
|
-
* 计算两个名称的归一化相似度(0-1,越小越相似)
|
|
187
|
-
*
|
|
188
|
-
* 综合两种规则取较小值:
|
|
189
|
-
* 1. 归一化 Levenshtein 距离 = distance / max(len_a, len_b)
|
|
190
|
-
* 2. 包含关系:若一个名称包含另一个,相似度 = 0(完全相似)
|
|
191
|
-
*
|
|
192
|
-
* @param nameA 名称 A
|
|
193
|
-
* @param nameB 名称 B
|
|
194
|
-
* @returns 相似度(0=完全相似,1=完全不同)
|
|
195
|
-
*/
|
|
147
|
+
/** 名称归一化相似度(0-1,越小越相似)。规则:包含关系=0;否则 Levenshtein 距离 / max(len)。 */
|
|
196
148
|
static computeNameSimilarity(nameA, nameB) {
|
|
197
|
-
//
|
|
198
|
-
// 空名称会导致 includes("") 恒为 true 返回 0(完全相似),
|
|
199
|
-
// 让空名称记忆与所有记忆被判高度相似,浪费 LLM 调用并可能误降级。
|
|
200
|
-
// 此处前置拒绝,空名称与任何名称都视为完全不同(1.0)。
|
|
149
|
+
// 空名称防御:includes("") 恒真会误判所有记忆高度相似,故空名与任何名称视为完全不同
|
|
201
150
|
if (!nameA || !nameB) {
|
|
202
151
|
return 1;
|
|
203
152
|
}
|
|
204
|
-
// 规则 2:包含关系(如
|
|
153
|
+
// 规则 2:包含关系(如"用户偏好" vs "用户偏好设置")
|
|
205
154
|
if (nameA.includes(nameB) || nameB.includes(nameA)) {
|
|
206
155
|
return 0;
|
|
207
156
|
}
|
|
@@ -213,16 +162,8 @@ export class DedupManager {
|
|
|
213
162
|
return distance / maxLen;
|
|
214
163
|
}
|
|
215
164
|
/**
|
|
216
|
-
* 调用 LLM
|
|
217
|
-
*
|
|
218
|
-
* 使用结构化 JSON 输出(isDuplicate + mergedContent + reason),
|
|
219
|
-
* 流式累积 + parseLlmJson + 异常封装委托给 llmJudgeHelper.judgeWithLlm。
|
|
220
|
-
*
|
|
221
|
-
* LLM 失败时抛出 MemoraError(由 deduplicateMemories 捕获并降级跳过此对)。
|
|
222
|
-
*
|
|
223
|
-
* @param pair 候选记忆对
|
|
224
|
-
* @param signal 可选的 AbortSignal
|
|
225
|
-
* @returns LLM 判断结果
|
|
165
|
+
* 调用 LLM 判断单对记忆语义等价:结构化 JSON 输出(isDuplicate+mergedContent+reason)。
|
|
166
|
+
* 流式累积/解析/异常封装委托 llmJudgeHelper.judgeWithLlm;失败抛 MemoraError 由调用方捕获跳过。
|
|
226
167
|
*/
|
|
227
168
|
async judgeDuplicate(pair, signal) {
|
|
228
169
|
const messages = buildDedupMessages(pair);
|
|
@@ -233,29 +174,11 @@ export class DedupManager {
|
|
|
233
174
|
reason: typeof parsed.reason === 'string' ? parsed.reason : '(LLM 未提供理由)',
|
|
234
175
|
};
|
|
235
176
|
}
|
|
236
|
-
/**
|
|
237
|
-
* 降级重复记忆(score → DEDUP_LOW_SCORE)
|
|
238
|
-
*
|
|
239
|
-
* 安全设计:
|
|
240
|
-
* - 不物理删除,仅降低 score,保留可恢复性
|
|
241
|
-
* - 合并内容由 keepMerged() 单独写回保留方 a(职责清晰:本方法只降级低分方)
|
|
242
|
-
*
|
|
243
|
-
* @param memory 待降级的记忆(低分方)
|
|
244
|
-
*/
|
|
177
|
+
/** 软删重复记忆(不物理删除保留可恢复;合并内容由 keepMerged 单独写回 a)。重复方以 delete 进入回收站。 */
|
|
245
178
|
demoteMemory(memory) {
|
|
246
|
-
|
|
247
|
-
// 原模式用 candidates 旧快照 spread 后整条 upsert,会覆盖期间被 boost/decay 改的 content 等字段
|
|
248
|
-
this.index.setScore(memory.id, DEDUP_LOW_SCORE, nowIso());
|
|
179
|
+
this.index.delete(memory.id);
|
|
249
180
|
}
|
|
250
|
-
/**
|
|
251
|
-
* 将合并内容写回保留方(高分记忆 a)
|
|
252
|
-
*
|
|
253
|
-
* 保持 a 的 id/source/name/score/createdAt 不变,仅更新 content 为合并后内容并刷新
|
|
254
|
-
* accessedAt,使"两条重复记忆合并为一条更完整记忆"的语义真正落库(M6 修复)。
|
|
255
|
-
*
|
|
256
|
-
* @param memory 保留方记忆(高分方)
|
|
257
|
-
* @param mergedContent LLM 生成的合并后完整内容
|
|
258
|
-
*/
|
|
181
|
+
/** 将合并内容写回保留方 a:保持 id/source/name/createdAt 不变,仅刷新 content + accessedAt */
|
|
259
182
|
keepMerged(memory, mergedContent) {
|
|
260
183
|
const updated = {
|
|
261
184
|
...memory,
|
|
@@ -266,19 +189,8 @@ export class DedupManager {
|
|
|
266
189
|
logger.info({ keptId: memory.id }, '语义去重:保留方已合并对方内容');
|
|
267
190
|
}
|
|
268
191
|
}
|
|
269
|
-
// ─── L1 语义去重 Prompt
|
|
270
|
-
/**
|
|
271
|
-
* 构建语义去重判断的 LLM 消息
|
|
272
|
-
*
|
|
273
|
-
* 设计要点:
|
|
274
|
-
* - system 消息定义判断规则(语义等价 = 表达同一事实/偏好/洞察)
|
|
275
|
-
* - user 消息携带候选对的内容预览(截断到 200 字符)
|
|
276
|
-
* - 要求输出结构化 JSON(isDuplicate + mergedContent + reason)
|
|
277
|
-
* - few-shot 示例降低 LLM 误判率
|
|
278
|
-
*
|
|
279
|
-
* @param pair 候选记忆对
|
|
280
|
-
* @returns system + user 消息数组
|
|
281
|
-
*/
|
|
192
|
+
// ─── L1 语义去重 Prompt 模板(模块级函数) ───
|
|
193
|
+
/** 构建语义去重判断的 LLM 消息:system 定义语义等价规则 + user 携带候选对内容预览,few-shot 降误判率 */
|
|
282
194
|
function buildDedupMessages(pair) {
|
|
283
195
|
const contentA = pair.a.content.length > DEDUP_CONTENT_PREVIEW_LEN
|
|
284
196
|
? truncate(pair.a.content, DEDUP_CONTENT_PREVIEW_LEN, '…[截断]')
|
|
@@ -317,12 +229,12 @@ function buildDedupMessages(pair) {
|
|
|
317
229
|
role: 'user',
|
|
318
230
|
content: `请判断以下两条记忆是否语义等价:
|
|
319
231
|
|
|
320
|
-
记忆 A
|
|
232
|
+
记忆 A(保留候选):
|
|
321
233
|
- 名称:${pair.a.name}
|
|
322
234
|
- 来源:${pair.a.source}
|
|
323
235
|
- 内容:${contentA}
|
|
324
236
|
|
|
325
|
-
记忆 B
|
|
237
|
+
记忆 B(重复候选):
|
|
326
238
|
- 名称:${pair.b.name}
|
|
327
239
|
- 来源:${pair.b.source}
|
|
328
240
|
- 内容:${contentB}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dedupManager.js","sourceRoot":"","sources":["../../../src/agent/managers/dedupManager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dedupManager.js","sourceRoot":"","sources":["../../../src/agent/managers/dedupManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 目标一致性校验器(目标版本一致性校验)。
|
|
3
|
+
* 两层校验:确定性层(关键约束提取 + 文本相似度)+ LLM 层(可选,仅对需确认场景生成解释)。
|
|
4
|
+
* 关键约束由确定性规则提取而非 LLM(防自我引用)。漂移等级:same(>0.7 无需确认)/confirm(0.4-0.7 建议确认)/drift(<0.4 需确认)。
|
|
5
|
+
*/
|
|
6
|
+
/** 漂移等级:same(>0.7 自动应用)/confirm(0.4-0.7 建议确认)/drift(<0.4 需确认) */
|
|
7
|
+
export type DriftLevel = 'same' | 'confirm' | 'drift';
|
|
8
|
+
/** 一致性校验结果 */
|
|
9
|
+
export interface GoalConsistencyResult {
|
|
10
|
+
/** 漂移等级 */
|
|
11
|
+
level: DriftLevel;
|
|
12
|
+
/** 文本相似度(0-1) */
|
|
13
|
+
similarity: number;
|
|
14
|
+
/** 从 mainGoal 中提取的关键约束列表 */
|
|
15
|
+
constraints: string[];
|
|
16
|
+
/** 约束一致性(true = 所有约束均满足,false = 有约束冲突) */
|
|
17
|
+
constraintsConsistent: boolean;
|
|
18
|
+
/** 冲突的约束说明(可选,仅 constraintsConsistent 为 false 时有值) */
|
|
19
|
+
conflictExplanation?: string;
|
|
20
|
+
}
|
|
21
|
+
/** 目标一致性校验器:纯函数式(无状态无副作用),SessionManager / Agent 层直接可用,不依赖外部服务 */
|
|
22
|
+
export declare class GoalConsistencyChecker {
|
|
23
|
+
/** 提取关键约束:从目标描述中按确定性规则提取"必须/不能/需要/确保"等关键词句段(不依赖 LLM 防自我引用),去重返回 */
|
|
24
|
+
extractConstraints(goal: string): string[];
|
|
25
|
+
/** 计算文本相似度:长文本(>20 字符)用 Jaccard,短文本用字符级 bigram(对短文本更敏感) */
|
|
26
|
+
computeSimilarity(a: string, b: string): number;
|
|
27
|
+
/** 执行一致性校验:提取约束 → 算相似度定漂移等级(>0.7 same / >=0.4 confirm / else drift)→ 检查约束是否仍满足 */
|
|
28
|
+
checkConsistency(mainGoal: string, newGoal: string): GoalConsistencyResult;
|
|
29
|
+
/** 检查约束在新目标是否仍满足:对每条约束提取核心词,任一命中即视为满足;全不满足则标记冲突 */
|
|
30
|
+
private checkConstraintsConsistent;
|
|
31
|
+
/** 提取约束核心词:去除标记词保留核心名词短语(如"必须使用TypeScript" → "使用TypeScript"),再按分隔符切分;剥离前缀由 CONSTRAINT_KEYWORDS 生成 */
|
|
32
|
+
private extractKeywords;
|
|
33
|
+
/** Jaccard 相似度:分词后交集/并集。分词策略:中文字符逐字 + 英文单词 + 数字 */
|
|
34
|
+
private jaccardSimilarity;
|
|
35
|
+
/** 字符级 bigram 相似度:拆相邻字符对求交集/并集,适用于短文本 */
|
|
36
|
+
private bigramSimilarity;
|
|
37
|
+
/** 分词:提取中文字符(逐字,对中文更敏感)+ 英文单词(小写)+ 数字;零外部依赖 */
|
|
38
|
+
private tokenize;
|
|
39
|
+
/** 获取字符级 bigram:拆相邻字符对(如 "TypeScript" → ["Ty","yp",...]) */
|
|
40
|
+
private getBigrams;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=goalConsistencyChecker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"goalConsistencyChecker.d.ts","sourceRoot":"","sources":["../../../src/agent/managers/goalConsistencyChecker.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,iEAAiE;AACjE,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;AAgBtD,cAAc;AACd,MAAM,WAAW,qBAAqB;IACpC,WAAW;IACX,KAAK,EAAE,UAAU,CAAC;IAClB,iBAAiB;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,4BAA4B;IAC5B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,0CAA0C;IAC1C,qBAAqB,EAAE,OAAO,CAAC;IAC/B,sDAAsD;IACtD,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,kEAAkE;AAClE,qBAAa,sBAAsB;IACjC,mEAAmE;IACnE,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IAqB1C,2DAA2D;IAC3D,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAkB/C,kFAAkF;IAClF,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,qBAAqB;IA6B1E,mDAAmD;IACnD,OAAO,CAAC,0BAA0B;IA6BlC,qGAAqG;IACrG,OAAO,CAAC,eAAe;IAQvB,mDAAmD;IACnD,OAAO,CAAC,iBAAiB;IAgBzB,yCAAyC;IACzC,OAAO,CAAC,gBAAgB;IAgBxB,+CAA+C;IAC/C,OAAO,CAAC,QAAQ;IAgChB,4DAA4D;IAC5D,OAAO,CAAC,UAAU;CAOnB"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 目标一致性校验器(目标版本一致性校验)。
|
|
3
|
+
* 两层校验:确定性层(关键约束提取 + 文本相似度)+ LLM 层(可选,仅对需确认场景生成解释)。
|
|
4
|
+
* 关键约束由确定性规则提取而非 LLM(防自我引用)。漂移等级:same(>0.7 无需确认)/confirm(0.4-0.7 建议确认)/drift(<0.4 需确认)。
|
|
5
|
+
*/
|
|
6
|
+
/** 约束关键词单一真源:提取 pattern(全文匹配)与剥离前缀(checkConstraintsConsistent 用)共用,防双列表漂移 */
|
|
7
|
+
const CONSTRAINT_KEYWORDS = [
|
|
8
|
+
'必须',
|
|
9
|
+
'不能',
|
|
10
|
+
'需要',
|
|
11
|
+
'确保',
|
|
12
|
+
'禁止',
|
|
13
|
+
'只能',
|
|
14
|
+
'至少',
|
|
15
|
+
'不允许',
|
|
16
|
+
'应当',
|
|
17
|
+
'不得',
|
|
18
|
+
];
|
|
19
|
+
/** 目标一致性校验器:纯函数式(无状态无副作用),SessionManager / Agent 层直接可用,不依赖外部服务 */
|
|
20
|
+
export class GoalConsistencyChecker {
|
|
21
|
+
/** 提取关键约束:从目标描述中按确定性规则提取"必须/不能/需要/确保"等关键词句段(不依赖 LLM 防自我引用),去重返回 */
|
|
22
|
+
extractConstraints(goal) {
|
|
23
|
+
if (!goal || goal.trim() === '')
|
|
24
|
+
return [];
|
|
25
|
+
const constraints = [];
|
|
26
|
+
// 约束关键词匹配模式——由 CONSTRAINT_KEYWORDS 单一真源生成(全文匹配)
|
|
27
|
+
const constraintPatterns = CONSTRAINT_KEYWORDS.map((kw) => new RegExp(`${kw}[^,。!?;\n,;.!?]*`, 'g'));
|
|
28
|
+
for (const pattern of constraintPatterns) {
|
|
29
|
+
const matches = goal.match(pattern);
|
|
30
|
+
if (matches) {
|
|
31
|
+
constraints.push(...matches.map((m) => m.trim()));
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
// 去重
|
|
35
|
+
return [...new Set(constraints)];
|
|
36
|
+
}
|
|
37
|
+
/** 计算文本相似度:长文本(>20 字符)用 Jaccard,短文本用字符级 bigram(对短文本更敏感) */
|
|
38
|
+
computeSimilarity(a, b) {
|
|
39
|
+
if (!a && !b)
|
|
40
|
+
return 1;
|
|
41
|
+
if (!a || !b)
|
|
42
|
+
return 0;
|
|
43
|
+
const aTrim = a.trim();
|
|
44
|
+
const bTrim = b.trim();
|
|
45
|
+
if (aTrim === bTrim)
|
|
46
|
+
return 1;
|
|
47
|
+
// 短文本:字符级 bigram(对短文本更敏感)
|
|
48
|
+
if (aTrim.length <= 20 || bTrim.length <= 20) {
|
|
49
|
+
return this.bigramSimilarity(aTrim, bTrim);
|
|
50
|
+
}
|
|
51
|
+
// 长文本:Jaccard
|
|
52
|
+
return this.jaccardSimilarity(aTrim, bTrim);
|
|
53
|
+
}
|
|
54
|
+
/** 执行一致性校验:提取约束 → 算相似度定漂移等级(>0.7 same / >=0.4 confirm / else drift)→ 检查约束是否仍满足 */
|
|
55
|
+
checkConsistency(mainGoal, newGoal) {
|
|
56
|
+
const constraints = this.extractConstraints(mainGoal);
|
|
57
|
+
const similarity = this.computeSimilarity(mainGoal, newGoal);
|
|
58
|
+
// 确定漂移等级
|
|
59
|
+
let level;
|
|
60
|
+
if (similarity > 0.7) {
|
|
61
|
+
level = 'same';
|
|
62
|
+
}
|
|
63
|
+
else if (similarity >= 0.4) {
|
|
64
|
+
level = 'confirm';
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
level = 'drift';
|
|
68
|
+
}
|
|
69
|
+
// 检查约束一致性
|
|
70
|
+
const { constraintsConsistent, conflictExplanation } = this.checkConstraintsConsistent(constraints, newGoal);
|
|
71
|
+
return {
|
|
72
|
+
level,
|
|
73
|
+
similarity,
|
|
74
|
+
constraints,
|
|
75
|
+
constraintsConsistent,
|
|
76
|
+
conflictExplanation,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
/** 检查约束在新目标是否仍满足:对每条约束提取核心词,任一命中即视为满足;全不满足则标记冲突 */
|
|
80
|
+
checkConstraintsConsistent(constraints, newGoal) {
|
|
81
|
+
if (constraints.length === 0) {
|
|
82
|
+
return { constraintsConsistent: true };
|
|
83
|
+
}
|
|
84
|
+
const conflictConstraints = [];
|
|
85
|
+
for (const constraint of constraints) {
|
|
86
|
+
// 提取约束核心词并检查新目标是否包含
|
|
87
|
+
const keywords = this.extractKeywords(constraint);
|
|
88
|
+
const satisfied = keywords.some((k) => newGoal.includes(k));
|
|
89
|
+
if (!satisfied) {
|
|
90
|
+
conflictConstraints.push(constraint);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
if (conflictConstraints.length > 0) {
|
|
94
|
+
return {
|
|
95
|
+
constraintsConsistent: false,
|
|
96
|
+
conflictExplanation: `以下约束在新目标中未体现:${conflictConstraints.join(';')}`,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
return { constraintsConsistent: true };
|
|
100
|
+
}
|
|
101
|
+
/** 提取约束核心词:去除标记词保留核心名词短语(如"必须使用TypeScript" → "使用TypeScript"),再按分隔符切分;剥离前缀由 CONSTRAINT_KEYWORDS 生成 */
|
|
102
|
+
extractKeywords(constraint) {
|
|
103
|
+
const cleaned = constraint
|
|
104
|
+
.replace(new RegExp(`^(${CONSTRAINT_KEYWORDS.join('|')})`), '')
|
|
105
|
+
.trim();
|
|
106
|
+
const parts = cleaned.split(/[,,、\s]+/).filter(Boolean);
|
|
107
|
+
return parts.length > 0 ? parts : [cleaned];
|
|
108
|
+
}
|
|
109
|
+
/** Jaccard 相似度:分词后交集/并集。分词策略:中文字符逐字 + 英文单词 + 数字 */
|
|
110
|
+
jaccardSimilarity(a, b) {
|
|
111
|
+
const tokensA = this.tokenize(a);
|
|
112
|
+
const tokensB = this.tokenize(b);
|
|
113
|
+
if (tokensA.size === 0 && tokensB.size === 0)
|
|
114
|
+
return 1;
|
|
115
|
+
if (tokensA.size === 0 || tokensB.size === 0)
|
|
116
|
+
return 0;
|
|
117
|
+
let intersection = 0;
|
|
118
|
+
for (const token of tokensA) {
|
|
119
|
+
if (tokensB.has(token))
|
|
120
|
+
intersection++;
|
|
121
|
+
}
|
|
122
|
+
const union = tokensA.size + tokensB.size - intersection;
|
|
123
|
+
return union > 0 ? intersection / union : 0;
|
|
124
|
+
}
|
|
125
|
+
/** 字符级 bigram 相似度:拆相邻字符对求交集/并集,适用于短文本 */
|
|
126
|
+
bigramSimilarity(a, b) {
|
|
127
|
+
const bigramsA = this.getBigrams(a);
|
|
128
|
+
const bigramsB = this.getBigrams(b);
|
|
129
|
+
if (bigramsA.size === 0 && bigramsB.size === 0)
|
|
130
|
+
return 1;
|
|
131
|
+
if (bigramsA.size === 0 || bigramsB.size === 0)
|
|
132
|
+
return 0;
|
|
133
|
+
let intersection = 0;
|
|
134
|
+
for (const bigram of bigramsA) {
|
|
135
|
+
if (bigramsB.has(bigram))
|
|
136
|
+
intersection++;
|
|
137
|
+
}
|
|
138
|
+
const union = bigramsA.size + bigramsB.size - intersection;
|
|
139
|
+
return union > 0 ? intersection / union : 0;
|
|
140
|
+
}
|
|
141
|
+
/** 分词:提取中文字符(逐字,对中文更敏感)+ 英文单词(小写)+ 数字;零外部依赖 */
|
|
142
|
+
tokenize(text) {
|
|
143
|
+
const tokens = new Set();
|
|
144
|
+
// 中文字符序列(逐字作为 token)
|
|
145
|
+
const chineseChars = text.match(/[\u4e00-\u9fff\u3400-\u4dbf]+/g);
|
|
146
|
+
if (chineseChars) {
|
|
147
|
+
for (const seq of chineseChars) {
|
|
148
|
+
for (const char of seq) {
|
|
149
|
+
tokens.add(char);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
// 英文单词(小写归一化,大小写不敏感)
|
|
154
|
+
const englishWords = text.match(/[a-zA-Z_][a-zA-Z0-9_]*/g);
|
|
155
|
+
if (englishWords) {
|
|
156
|
+
for (const word of englishWords) {
|
|
157
|
+
tokens.add(word.toLowerCase());
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
// 数字
|
|
161
|
+
const numbers = text.match(/\d+/g);
|
|
162
|
+
if (numbers) {
|
|
163
|
+
for (const num of numbers) {
|
|
164
|
+
tokens.add(num);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return tokens;
|
|
168
|
+
}
|
|
169
|
+
/** 获取字符级 bigram:拆相邻字符对(如 "TypeScript" → ["Ty","yp",...]) */
|
|
170
|
+
getBigrams(text) {
|
|
171
|
+
const bigrams = new Set();
|
|
172
|
+
for (let i = 0; i < text.length - 1; i++) {
|
|
173
|
+
bigrams.add(text.slice(i, i + 2));
|
|
174
|
+
}
|
|
175
|
+
return bigrams;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=goalConsistencyChecker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"goalConsistencyChecker.js","sourceRoot":"","sources":["../../../src/agent/managers/goalConsistencyChecker.ts"],"names":[],"mappings":"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"}
|