@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
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 问答闭环(Round)存储接口 —— Memora 会话管理的 SSOT
|
|
3
|
+
*
|
|
4
|
+
* 设计理念:
|
|
5
|
+
* - 问答闭环(Round)是独立的、全局唯一的实体
|
|
6
|
+
* - 会话(Session)只是问答闭环 ID 的有序列表
|
|
7
|
+
* - 分叉只是复制 ID 列表(指针复制),不复制数据
|
|
8
|
+
*
|
|
9
|
+
* 核心优势:
|
|
10
|
+
* 1. 保持记忆系统的真理源设定(每个 roundId 对应唯一摘要)
|
|
11
|
+
* 2. 保持会话的独立性(所有会话在存储层平等)
|
|
12
|
+
* 3. 简洁的分叉实现(只需操作 ID 列表)
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* 轮是否「已收场」(终态)——**判据单一收口点(SSOT)**。
|
|
16
|
+
*
|
|
17
|
+
* - `complete`:正常问答闭环完成(appendAssistant 收场)。
|
|
18
|
+
* - `interrupted`:中断/失败收场(appendInterrupted 收场)。语义定案——中断轮 = 等同用户点「停止」的
|
|
19
|
+
* 正常 turn:**可删、入会话 roundIds、作后续上下文**,不是半成品草稿/孤儿。
|
|
20
|
+
*
|
|
21
|
+
* **为什么必须收口**:v3.0.0 把中断轮从「伪 complete」改为 `interrupted` 后,凡以
|
|
22
|
+
* `status === 'complete'` 判「该轮是否已闭合」的读取方都会被静默改行为——中断轮的
|
|
23
|
+
* assistantMessage 会被排除出会话视图与 LLM 历史(`ISessionStore.loadMessages` 是
|
|
24
|
+
* `restoreHistory` 的唯一上游),违背上述定案。故凡「是否计入会话视图 / LLM 历史」
|
|
25
|
+
* 「是否已登记会话引用」的判据**一律调用本函数**,禁止各处自写 `status === 'complete'`。
|
|
26
|
+
*
|
|
27
|
+
* ⚠️ **勿与渲染分流混用**:`status === 'interrupted'` 只用于「中断轮独立平铺渲染 + 中断标记」,
|
|
28
|
+
* 回答的是「怎么画」,不是「是否已收场」。两者常在同一函数相邻出现,勿互替。
|
|
29
|
+
*
|
|
30
|
+
* @param status - 轮状态
|
|
31
|
+
* @returns 该轮是否已进入终态(可作后续上下文)
|
|
32
|
+
*/
|
|
33
|
+
export function isRoundSettled(status) {
|
|
34
|
+
return status === 'complete' || status === 'interrupted';
|
|
35
|
+
}
|
|
36
|
+
// ─── 辅助函数 ───────────────────────────────────────────
|
|
37
|
+
/**
|
|
38
|
+
* 生成 Round ID(格式:round-{uuid})
|
|
39
|
+
*
|
|
40
|
+
* 使用 crypto.randomUUID() 保证全局唯一性
|
|
41
|
+
*/
|
|
42
|
+
export function generateRoundId() {
|
|
43
|
+
// 使用 crypto.randomUUID()(Node.js 19+ / 现代浏览器支持)
|
|
44
|
+
if (typeof crypto !== 'undefined' && crypto.randomUUID) {
|
|
45
|
+
return `round-${crypto.randomUUID()}`;
|
|
46
|
+
}
|
|
47
|
+
// 降级方案:时间戳 + 随机数
|
|
48
|
+
const timestamp = Date.now().toString(36);
|
|
49
|
+
const random = Math.random().toString(36).slice(2, 10);
|
|
50
|
+
return `round-${timestamp}${random}`;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* 生成消息 ID(格式:msg-{uuid})
|
|
54
|
+
*/
|
|
55
|
+
export function generateMessageId() {
|
|
56
|
+
if (typeof crypto !== 'undefined' && crypto.randomUUID) {
|
|
57
|
+
return `msg-${crypto.randomUUID()}`;
|
|
58
|
+
}
|
|
59
|
+
const timestamp = Date.now().toString(36);
|
|
60
|
+
const random = Math.random().toString(36).slice(2, 10);
|
|
61
|
+
return `msg-${timestamp}${random}`;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* 创建 pending 状态的 Round
|
|
65
|
+
*
|
|
66
|
+
* 辅助函数:快速创建新问答闭环的骨架
|
|
67
|
+
*
|
|
68
|
+
* @param userMessage - 用户消息内容
|
|
69
|
+
* @returns 新创建的 pending Round
|
|
70
|
+
*/
|
|
71
|
+
export function createPendingRound(userMessage) {
|
|
72
|
+
const id = generateRoundId();
|
|
73
|
+
const now = new Date().toISOString();
|
|
74
|
+
return {
|
|
75
|
+
id,
|
|
76
|
+
userMessage: {
|
|
77
|
+
id: generateMessageId(),
|
|
78
|
+
role: 'user',
|
|
79
|
+
content: userMessage,
|
|
80
|
+
timestamp: now,
|
|
81
|
+
},
|
|
82
|
+
status: 'pending',
|
|
83
|
+
createdAt: now,
|
|
84
|
+
refCount: 1,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* 完成 Round(设置 AI 消息)
|
|
89
|
+
*
|
|
90
|
+
* 辅助函数:将 pending Round 转换为 complete 状态
|
|
91
|
+
*
|
|
92
|
+
* ⚠️ 注意:本函数**不设置任何摘要关联字段**——摘要记忆的 ID 由 roundSummaryGenerator
|
|
93
|
+
* 按 `round-summary:{sessionName}:{roundId}` 独立构造并按 roundId 溯源,
|
|
94
|
+
* Round 侧不持有反向指针(GC 清理走 roundId 派生寻址,见 gcService)。
|
|
95
|
+
*
|
|
96
|
+
* @param round - 要完成的 Round(必须是 pending 状态)
|
|
97
|
+
* @param assistantContent - AI 回复内容
|
|
98
|
+
* @param tokenUsage - Token 用量统计
|
|
99
|
+
* @returns 更新后的 complete Round
|
|
100
|
+
*/
|
|
101
|
+
export function completeRound(round, assistantContent, tokenUsage) {
|
|
102
|
+
const now = new Date().toISOString();
|
|
103
|
+
return {
|
|
104
|
+
...round,
|
|
105
|
+
assistantMessage: {
|
|
106
|
+
id: generateMessageId(),
|
|
107
|
+
role: 'assistant',
|
|
108
|
+
content: assistantContent,
|
|
109
|
+
timestamp: now,
|
|
110
|
+
tokenUsage,
|
|
111
|
+
},
|
|
112
|
+
status: 'complete',
|
|
113
|
+
completedAt: now,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=roundStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"roundStore.js","sourceRoot":"","sources":["../../src/memory/roundStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AA6GH;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,cAAc,CAAC,MAAmB;IAChD,OAAO,MAAM,KAAK,UAAU,IAAI,MAAM,KAAK,aAAa,CAAC;AAC3D,CAAC;AAicD,uDAAuD;AAEvD;;;;GAIG;AACH,MAAM,UAAU,eAAe;IAC7B,gDAAgD;IAChD,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACvD,OAAO,SAAS,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC;IACxC,CAAC;IACD,iBAAiB;IACjB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACvD,OAAO,SAAS,SAAS,GAAG,MAAM,EAAE,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACvD,OAAO,OAAO,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC;IACtC,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACvD,OAAO,OAAO,SAAS,GAAG,MAAM,EAAE,CAAC;AACrC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,WAAmB;IACpD,MAAM,EAAE,GAAG,eAAe,EAAE,CAAC;IAC7B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAErC,OAAO;QACL,EAAE;QACF,WAAW,EAAE;YACX,EAAE,EAAE,iBAAiB,EAAE;YACvB,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,WAAW;YACpB,SAAS,EAAE,GAAG;SACf;QACD,MAAM,EAAE,SAAS;QACjB,SAAS,EAAE,GAAG;QACd,QAAQ,EAAE,CAAC;KACZ,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,aAAa,CAC3B,KAAY,EACZ,gBAAwB,EACxB,UAA8C;IAE9C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAErC,OAAO;QACL,GAAG,KAAK;QACR,gBAAgB,EAAE;YAChB,EAAE,EAAE,iBAAiB,EAAE;YACvB,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,gBAAgB;YACzB,SAAS,EAAE,GAAG;YACd,UAAU;SACX;QACD,MAAM,EAAE,UAAU;QAClB,WAAW,EAAE,GAAG;KACjB,CAAC;AACJ,CAAC"}
|
|
@@ -1,84 +1,93 @@
|
|
|
1
|
+
import type { MessageRole } from '../memory/types.js';
|
|
1
2
|
/**
|
|
2
|
-
*
|
|
3
|
+
* 会话存储接口:宿主注入的会话消息持久化能力,内核不直接依赖文件 I/O。
|
|
4
|
+
* IMemoryStorage 存记忆索引(round-summary),这里存原始对话消息。零依赖内核、接口最小化、不实现则走内存模式。
|
|
3
5
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* 与 IMemoryStorage 的关系:
|
|
8
|
-
* - IMemoryStorage:记忆索引(SQLite),存储提取后的 insight
|
|
9
|
-
* - ISessionStore:会话记录,存储原始对话消息
|
|
10
|
-
*
|
|
11
|
-
* 设计原则:
|
|
12
|
-
* - 零依赖内核:memora 不实现文件 I/O,由宿主注入
|
|
13
|
-
* - 接口最小化:只暴露必要的读写操作
|
|
14
|
-
* - 向后兼容:不强制要求实现,不传则使用内存模式
|
|
15
|
-
*
|
|
16
|
-
* @example
|
|
17
|
-
* // 宿主实现(文件存储)
|
|
18
|
-
* class FileSessionStore implements ISessionStore {
|
|
19
|
-
* appendMessage(date, session, message) { ... }
|
|
20
|
-
* loadMessages(date, session) { ... }
|
|
21
|
-
* listSessions() { ... }
|
|
22
|
-
* }
|
|
23
|
-
*
|
|
24
|
-
* // 注入到 Agent
|
|
25
|
-
* const agent = new Agent({
|
|
26
|
-
* sessionStore: new FileSessionStore('./sessions'),
|
|
27
|
-
* ...
|
|
28
|
-
* });
|
|
6
|
+
* 存储模型(round-based 单一模式,SSOT):
|
|
7
|
+
* - 会话仅以 Round ID 列表(roundIds)为内容来源
|
|
8
|
+
* - 消息内容只存于 RoundStore(物理存储唯一真相源)
|
|
29
9
|
*/
|
|
30
10
|
export interface ISessionStore {
|
|
31
11
|
/**
|
|
32
|
-
*
|
|
12
|
+
* 加载指定会话的完整消息列表(从 roundIds → RoundStore 展开),不存在返回空数组。
|
|
33
13
|
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
|
|
38
|
-
appendMessage(date: string, session: string, message: SessionMessage): void;
|
|
39
|
-
/**
|
|
40
|
-
* 加载指定会话的消息列表
|
|
14
|
+
* **只返回 `user` / `assistant` 两种角色**:tool 结果属执行中间态,不落会话消息。这不是实现自由,
|
|
15
|
+
* 而是接口契约 —— 上下文中 tool 消息的**唯一来源**是 `AgentLoop.appendToolMessage`(入口关
|
|
16
|
+
* 落盘 + 单条上限),历史回注(`restoreHistory` ← 本方法)不含 tool。两个实现(宿主
|
|
17
|
+
* `hosts/memora-vscode/.../host/sessionStore.ts`、内核 `inMemorySessionStore.ts`)逐字同构。
|
|
41
18
|
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
19
|
+
* ⚠️ 改此契约(如让 tool 消息也入历史)须同步评估大文本统一通道 §6.2:
|
|
20
|
+
* 压缩链的「超大 tool 结果卸载级」正是因本契约而删除(读者先亡 → 写者后死);若历史重新携带
|
|
21
|
+
* tool 消息,该级的存在前提会复活。
|
|
45
22
|
*/
|
|
46
23
|
loadMessages(date: string, session: string): SessionMessage[];
|
|
47
|
-
/**
|
|
48
|
-
* 列出所有会话标识
|
|
49
|
-
*
|
|
50
|
-
* @returns 会话标识列表(格式:YYYY-MM-DD-session)
|
|
51
|
-
*/
|
|
24
|
+
/** 列出所有会话标识(YYYY-MM-DD-session) */
|
|
52
25
|
listSessions(): string[];
|
|
26
|
+
/** 读取会话标题元数据,不存在返回 undefined */
|
|
27
|
+
getSessionMeta(sessionId: string): SessionMeta | undefined;
|
|
28
|
+
/** 设置用户可修改的显示名(displayName);首轮自动命名走 updateSessionMeta 写 autoName */
|
|
29
|
+
setSessionTitle?(sessionId: string, title: string): void;
|
|
30
|
+
/** 更新元数据(autoName/keyTopics/summary/createdAt 等) */
|
|
31
|
+
updateSessionMeta(sessionId: string, meta: Partial<SessionMeta>): void;
|
|
53
32
|
/**
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
* 实现要求:
|
|
57
|
-
* - 原子操作:要么全部复制成功,要么不产生副作用
|
|
58
|
-
* - 保留时间戳:消息的 timestamp 不修改
|
|
59
|
-
* - 幂等:若目标会话已存在,覆盖(而非追加)
|
|
60
|
-
* - 若源会话不存在,静默返回(不抛出)
|
|
33
|
+
* 列出全部会话标题元数据,**必须按 updatedAt 降序**(最近活跃在前)。
|
|
61
34
|
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
* @param targetDate - 目标会话日期
|
|
65
|
-
* @param targetSession - 目标会话标识
|
|
35
|
+
* 排序方向是本接口契约的一部分,不是各实现自由:`SessionManager.restoreMostRecentSession`
|
|
36
|
+
* 视 `[0]` 为「最近活跃会话」的唯一真理源;升序实现会让「恢复最近会话」恢复成最旧会话。
|
|
66
37
|
*/
|
|
67
|
-
|
|
38
|
+
listSessionMetas(): SessionMeta[];
|
|
39
|
+
/** 追加 Round ID 到会话 */
|
|
40
|
+
appendRoundId(sessionId: string, roundId: string): void;
|
|
41
|
+
/** 批量追加 Round ID 到会话(分叉操作用) */
|
|
42
|
+
appendRoundIds(sessionId: string, roundIds: string[]): void;
|
|
43
|
+
/** 获取会话的 Round ID 列表 */
|
|
44
|
+
getRoundIds(sessionId: string): string[];
|
|
45
|
+
/** 设置会话的 Round ID 列表(创建/完整替换,如分叉) */
|
|
46
|
+
setRoundIds(sessionId: string, roundIds: string[]): void;
|
|
47
|
+
/** 创建新会话元数据 */
|
|
48
|
+
createSession(meta: SessionMeta): void;
|
|
49
|
+
/** 删除会话(同时清理 Round ID 引用) */
|
|
50
|
+
deleteSession(sessionId: string): void;
|
|
68
51
|
}
|
|
69
52
|
/**
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
53
|
+
* 会话元数据:会话身份(date-session)与展示标题解耦。
|
|
54
|
+
* 双层命名——autoName(LLM 生成只读)+ displayName(用户可改,覆盖显示)。sessionId 即 `${date}-${session}`。
|
|
55
|
+
*/
|
|
56
|
+
export interface SessionMeta {
|
|
57
|
+
/** 会话标识(YYYY-MM-DD-sessionName,与 listSessions 一致) */
|
|
58
|
+
sessionId: string;
|
|
59
|
+
/** LLM 自动生成名称(只读;归档时 SessionArchiver 可更新为更完整名称) */
|
|
60
|
+
autoName?: string;
|
|
61
|
+
/** 用户可修改的显示名称(初始=autoName;清空回退 autoName) */
|
|
62
|
+
displayName?: string;
|
|
63
|
+
/** 关键主题标签(SessionArchiver 归档时生成,用于搜索/索引) */
|
|
64
|
+
keyTopics?: string[];
|
|
65
|
+
/** 会话摘要(SessionArchiver 归档时生成,用于搜索/预览) */
|
|
66
|
+
summary?: string;
|
|
67
|
+
/** 最近活跃时间(ISO 8601,历史列表排序依据) */
|
|
68
|
+
updatedAt: string;
|
|
69
|
+
/** 会话消息条数(命名信号与列表展示) */
|
|
70
|
+
messageCount: number;
|
|
71
|
+
/** 创建时间(ISO 8601) */
|
|
72
|
+
createdAt?: string;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* 会话显示名称回退(SSOT 单一语义):displayName → autoName → 空串。
|
|
76
|
+
*/
|
|
77
|
+
export declare function getSessionDisplayName(meta: SessionMeta | undefined): string;
|
|
78
|
+
/** 仅取 autoName(用于搜索/索引),无则空串 */
|
|
79
|
+
export declare function getSessionAutoName(meta: SessionMeta | undefined): string;
|
|
80
|
+
/**
|
|
81
|
+
* 会话消息类型:比 LLM Message 多 timestamp(持久化用);roundId 供 traceSummary 精确回溯到轮次。
|
|
75
82
|
*/
|
|
76
83
|
export interface SessionMessage {
|
|
77
|
-
/**
|
|
78
|
-
role:
|
|
84
|
+
/** 消息角色(从 memory/types.ts 导入,SSOT 单一真理源) */
|
|
85
|
+
role: MessageRole;
|
|
79
86
|
/** 消息内容 */
|
|
80
87
|
content: string;
|
|
81
88
|
/** 时间戳(ISO 8601) */
|
|
82
89
|
timestamp: string;
|
|
90
|
+
/** 所属轮次 ID(可选):traceSummary 精确回溯用,空则退化为整会话摘要 */
|
|
91
|
+
roundId?: string;
|
|
83
92
|
}
|
|
84
93
|
//# sourceMappingURL=sessionStore.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessionStore.d.ts","sourceRoot":"","sources":["../../src/memory/sessionStore.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"sessionStore.d.ts","sourceRoot":"","sources":["../../src/memory/sessionStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa;IAE5B;;;;;;;;;;;OAWG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,EAAE,CAAC;IAG9D,mCAAmC;IACnC,YAAY,IAAI,MAAM,EAAE,CAAC;IACzB,gCAAgC;IAChC,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAAC;IAC3D,oEAAoE;IACpE,eAAe,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACzD,oDAAoD;IACpD,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;IACvE;;;;;OAKG;IACH,gBAAgB,IAAI,WAAW,EAAE,CAAC;IAGlC,sBAAsB;IACtB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACxD,+BAA+B;IAC/B,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC5D,wBAAwB;IACxB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzC,qCAAqC;IACrC,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACzD,eAAe;IACf,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC;IACvC,6BAA6B;IAC7B,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CACxC;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,qDAAqD;IACrD,SAAS,EAAE,MAAM,CAAC;IAGlB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,0CAA0C;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,wBAAwB;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,qBAAqB;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,WAAW,GAAG,SAAS,GAAG,MAAM,CAS3E;AAED,gCAAgC;AAChC,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,SAAS,GAAG,MAAM,CAIxE;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,4CAA4C;IAC5C,IAAI,EAAE,WAAW,CAAC;IAClB,WAAW;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,oBAAoB;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"}
|
|
@@ -1,2 +1,24 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* 会话显示名称回退(SSOT 单一语义):displayName → autoName → 空串。
|
|
3
|
+
*/
|
|
4
|
+
export function getSessionDisplayName(meta) {
|
|
5
|
+
if (!meta)
|
|
6
|
+
return '';
|
|
7
|
+
// displayName 优先(用户可修改)
|
|
8
|
+
const displayName = meta.displayName?.trim();
|
|
9
|
+
if (displayName)
|
|
10
|
+
return displayName;
|
|
11
|
+
// autoName 次之(LLM 自动生成)
|
|
12
|
+
const autoName = meta.autoName?.trim();
|
|
13
|
+
if (autoName)
|
|
14
|
+
return autoName;
|
|
15
|
+
return '';
|
|
16
|
+
}
|
|
17
|
+
/** 仅取 autoName(用于搜索/索引),无则空串 */
|
|
18
|
+
export function getSessionAutoName(meta) {
|
|
19
|
+
if (!meta)
|
|
20
|
+
return '';
|
|
21
|
+
const autoName = meta.autoName?.trim();
|
|
22
|
+
return autoName ?? '';
|
|
23
|
+
}
|
|
2
24
|
//# sourceMappingURL=sessionStore.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessionStore.js","sourceRoot":"","sources":["../../src/memory/sessionStore.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"sessionStore.js","sourceRoot":"","sources":["../../src/memory/sessionStore.ts"],"names":[],"mappings":"AAuFA;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAA6B;IACjE,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,wBAAwB;IACxB,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;IAC7C,IAAI,WAAW;QAAE,OAAO,WAAW,CAAC;IACpC,wBAAwB;IACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;IACvC,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,gCAAgC;AAChC,MAAM,UAAU,kBAAkB,CAAC,IAA6B;IAC9D,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;IACvC,OAAO,QAAQ,IAAI,EAAE,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 会话视图加载器 —— 将 Round ID 列表展开为完整对话
|
|
3
|
+
*
|
|
4
|
+
* 设计理念:
|
|
5
|
+
* - 会话(Session)只存储 Round ID 列表
|
|
6
|
+
* - RoundStore 存储问答闭环的物理数据
|
|
7
|
+
* - SessionViewLoader 负责将两者组合成用户可见的逻辑视图
|
|
8
|
+
*
|
|
9
|
+
* 核心优势:
|
|
10
|
+
* 1. 物理存储层与逻辑视图层解耦
|
|
11
|
+
* 2. 支持分叉:多个会话可以引用同一组 Round
|
|
12
|
+
* 3. 支持独立存储:Round 数据只存一份
|
|
13
|
+
*/
|
|
14
|
+
import type { Round, RoundMessage } from '../memory/roundStore.js';
|
|
15
|
+
import type { SessionMeta } from '../memory/sessionStore.js';
|
|
16
|
+
/**
|
|
17
|
+
* 会话视图:展开后的完整对话
|
|
18
|
+
*
|
|
19
|
+
* 这是用户可见的对话数据结构,包含:
|
|
20
|
+
* - 会话元数据
|
|
21
|
+
* - 问答闭环列表(按顺序)
|
|
22
|
+
* - 展开后的消息列表(扁平结构)
|
|
23
|
+
*/
|
|
24
|
+
export interface SessionView {
|
|
25
|
+
/** 会话 ID */
|
|
26
|
+
sessionId: string;
|
|
27
|
+
/** 会话元数据 */
|
|
28
|
+
meta: SessionMeta;
|
|
29
|
+
/** 问答闭环列表(按 roundIds 顺序) */
|
|
30
|
+
rounds: Round[];
|
|
31
|
+
/**
|
|
32
|
+
* 展开后的消息列表(扁平结构)
|
|
33
|
+
*
|
|
34
|
+
* 顺序:round1.userMessage → round1.assistantMessage → round2.userMessage → ...
|
|
35
|
+
* 仅包含**已收场**状态的 assistantMessage(complete 正常完成 / interrupted 中断收场,
|
|
36
|
+
* 判据收口在 isRoundSettled,勿自写 'complete')
|
|
37
|
+
*/
|
|
38
|
+
messages: RoundMessage[];
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* 简化的会话视图(仅用于历史列表等轻量场景)
|
|
42
|
+
*/
|
|
43
|
+
export interface SessionSummary {
|
|
44
|
+
/** 会话 ID */
|
|
45
|
+
sessionId: string;
|
|
46
|
+
/** 会话标题 */
|
|
47
|
+
title: string;
|
|
48
|
+
/** 问答闭环数量 */
|
|
49
|
+
roundCount: number;
|
|
50
|
+
/** 最后活跃时间 */
|
|
51
|
+
updatedAt: string;
|
|
52
|
+
/** 最后一条消息摘要(用于预览) */
|
|
53
|
+
lastMessagePreview?: string;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* 会话视图加载器接口
|
|
57
|
+
*
|
|
58
|
+
* 职责:将 Session(Round ID 列表)+ RoundStore(物理存储)组合成完整视图
|
|
59
|
+
*
|
|
60
|
+
* 设计原则:
|
|
61
|
+
* 1. 透明转换:调用方不需要关心底层存储结构
|
|
62
|
+
* 2. 批量加载:避免 N+1 查询,一次性加载所有 Round
|
|
63
|
+
* 3. 容错处理:部分 Round 加载失败时仍可返回可用视图
|
|
64
|
+
*/
|
|
65
|
+
export interface ISessionViewLoader {
|
|
66
|
+
/**
|
|
67
|
+
* 加载会话的完整对话视图
|
|
68
|
+
*
|
|
69
|
+
* 流程:
|
|
70
|
+
* 1. 获取 SessionMeta(含 roundIds 列表)
|
|
71
|
+
* 2. 从 RoundStore 批量加载所有 Round
|
|
72
|
+
* 3. 展开为扁平消息列表
|
|
73
|
+
*
|
|
74
|
+
* @param sessionId - 会话 ID
|
|
75
|
+
* @returns 完整会话视图
|
|
76
|
+
* @throws Error 会话不存在时抛出
|
|
77
|
+
*/
|
|
78
|
+
loadView(sessionId: string): SessionView;
|
|
79
|
+
/**
|
|
80
|
+
* 加载会话的简化摘要(用于历史列表等轻量场景)
|
|
81
|
+
*
|
|
82
|
+
* 与 loadView 的区别:
|
|
83
|
+
* - 不加载全量 Round:仅读最后 1 个 Round 生成 lastMessagePreview
|
|
84
|
+
* - 只返回元数据、统计信息与末条 AI 预览
|
|
85
|
+
*
|
|
86
|
+
* @param sessionId - 会话 ID
|
|
87
|
+
* @returns 会话摘要
|
|
88
|
+
*/
|
|
89
|
+
loadSummary(sessionId: string): SessionSummary | null;
|
|
90
|
+
/**
|
|
91
|
+
* 批量加载多个会话的摘要
|
|
92
|
+
*
|
|
93
|
+
* 用于历史列表、批量操作等场景
|
|
94
|
+
*
|
|
95
|
+
* @param sessionIds - 会话 ID 数组
|
|
96
|
+
* @returns 会话摘要数组
|
|
97
|
+
*/
|
|
98
|
+
loadBatchSummaries(sessionIds: string[]): SessionSummary[];
|
|
99
|
+
/**
|
|
100
|
+
* 获取会话的消息数量(性能优化)
|
|
101
|
+
*
|
|
102
|
+
* 不加载完整 Round 数据,仅统计消息数
|
|
103
|
+
*
|
|
104
|
+
* @param sessionId - 会话 ID
|
|
105
|
+
* @returns 消息数量(User + AI)
|
|
106
|
+
*/
|
|
107
|
+
getMessageCount(sessionId: string): number;
|
|
108
|
+
/**
|
|
109
|
+
* 从指定 Round 位置截断会话视图
|
|
110
|
+
*
|
|
111
|
+
* 用途:分叉操作时获取分叉点之前的对话
|
|
112
|
+
*
|
|
113
|
+
* @param sessionId - 会话 ID
|
|
114
|
+
* @param upToRoundId - 截断到哪个 Round(包含)
|
|
115
|
+
* @returns 截断后的会话视图
|
|
116
|
+
*/
|
|
117
|
+
loadViewUpTo(sessionId: string, upToRoundId: string): SessionView;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* 从 Round 列表展开为扁平消息列表
|
|
121
|
+
*
|
|
122
|
+
* @param rounds - Round 数组(按顺序)
|
|
123
|
+
* @returns 展开后的消息数组
|
|
124
|
+
*/
|
|
125
|
+
export declare function flattenRoundsToMessages(rounds: Round[]): RoundMessage[];
|
|
126
|
+
/**
|
|
127
|
+
* 截断 Round 列表到指定位置
|
|
128
|
+
*
|
|
129
|
+
* @param rounds - Round 数组
|
|
130
|
+
* @param upToRoundId - 截断到此 Round(包含)
|
|
131
|
+
* @returns 截断后的 Round 数组
|
|
132
|
+
*/
|
|
133
|
+
export declare function truncateRoundsUpTo(rounds: Round[], upToRoundId: string): Round[];
|
|
134
|
+
/**
|
|
135
|
+
* 计算 Round 列表的消息总数
|
|
136
|
+
*
|
|
137
|
+
* @param rounds - Round 数组
|
|
138
|
+
* @returns 消息数量
|
|
139
|
+
*/
|
|
140
|
+
export declare function countMessagesInRounds(rounds: Round[]): number;
|
|
141
|
+
//# sourceMappingURL=sessionViewLoader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionViewLoader.d.ts","sourceRoot":"","sources":["../../src/memory/sessionViewLoader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAI5D;;;;;;;GAOG;AACH,MAAM,WAAW,WAAW;IAC1B,YAAY;IACZ,SAAS,EAAE,MAAM,CAAC;IAElB,YAAY;IACZ,IAAI,EAAE,WAAW,CAAC;IAElB,4BAA4B;IAC5B,MAAM,EAAE,KAAK,EAAE,CAAC;IAEhB;;;;;;OAMG;IACH,QAAQ,EAAE,YAAY,EAAE,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,YAAY;IACZ,SAAS,EAAE,MAAM,CAAC;IAElB,WAAW;IACX,KAAK,EAAE,MAAM,CAAC;IAEd,aAAa;IACb,UAAU,EAAE,MAAM,CAAC;IAEnB,aAAa;IACb,SAAS,EAAE,MAAM,CAAC;IAElB,qBAAqB;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAID;;;;;;;;;GASG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,CAAC;IAEzC;;;;;;;;;OASG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAAC;IAEtD;;;;;;;OAOG;IACH,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,cAAc,EAAE,CAAC;IAE3D;;;;;;;OAOG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;IAE3C;;;;;;;;OAQG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,WAAW,CAAC;CACnE;AAID;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,YAAY,EAAE,CAevE;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,KAAK,EAAE,CAMhF;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAS7D"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 会话视图加载器 —— 将 Round ID 列表展开为完整对话
|
|
3
|
+
*
|
|
4
|
+
* 设计理念:
|
|
5
|
+
* - 会话(Session)只存储 Round ID 列表
|
|
6
|
+
* - RoundStore 存储问答闭环的物理数据
|
|
7
|
+
* - SessionViewLoader 负责将两者组合成用户可见的逻辑视图
|
|
8
|
+
*
|
|
9
|
+
* 核心优势:
|
|
10
|
+
* 1. 物理存储层与逻辑视图层解耦
|
|
11
|
+
* 2. 支持分叉:多个会话可以引用同一组 Round
|
|
12
|
+
* 3. 支持独立存储:Round 数据只存一份
|
|
13
|
+
*/
|
|
14
|
+
import { isRoundSettled } from '../memory/roundStore.js';
|
|
15
|
+
// ─── 辅助函数 ───────────────────────────────────────────
|
|
16
|
+
/**
|
|
17
|
+
* 从 Round 列表展开为扁平消息列表
|
|
18
|
+
*
|
|
19
|
+
* @param rounds - Round 数组(按顺序)
|
|
20
|
+
* @returns 展开后的消息数组
|
|
21
|
+
*/
|
|
22
|
+
export function flattenRoundsToMessages(rounds) {
|
|
23
|
+
const messages = [];
|
|
24
|
+
for (const round of rounds) {
|
|
25
|
+
// 始终添加用户消息
|
|
26
|
+
messages.push(round.userMessage);
|
|
27
|
+
// 仅添加已收场的 AI 消息(complete 正常完成 / interrupted 中断收场——后者按定案
|
|
28
|
+
// §一·五「可作后续上下文」同样计入,判据收口在 isRoundSettled,勿自写 'complete')
|
|
29
|
+
if (round.assistantMessage && isRoundSettled(round.status)) {
|
|
30
|
+
messages.push(round.assistantMessage);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return messages;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* 截断 Round 列表到指定位置
|
|
37
|
+
*
|
|
38
|
+
* @param rounds - Round 数组
|
|
39
|
+
* @param upToRoundId - 截断到此 Round(包含)
|
|
40
|
+
* @returns 截断后的 Round 数组
|
|
41
|
+
*/
|
|
42
|
+
export function truncateRoundsUpTo(rounds, upToRoundId) {
|
|
43
|
+
const idx = rounds.findIndex((r) => r.id === upToRoundId);
|
|
44
|
+
if (idx === -1) {
|
|
45
|
+
return [...rounds]; // 未找到则返回全部
|
|
46
|
+
}
|
|
47
|
+
return rounds.slice(0, idx + 1);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* 计算 Round 列表的消息总数
|
|
51
|
+
*
|
|
52
|
+
* @param rounds - Round 数组
|
|
53
|
+
* @returns 消息数量
|
|
54
|
+
*/
|
|
55
|
+
export function countMessagesInRounds(rounds) {
|
|
56
|
+
let count = 0;
|
|
57
|
+
for (const round of rounds) {
|
|
58
|
+
count += 1; // 用户消息
|
|
59
|
+
if (isRoundSettled(round.status)) {
|
|
60
|
+
count += 1; // AI 消息(仅已收场:complete / interrupted)
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return count;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=sessionViewLoader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionViewLoader.js","sourceRoot":"","sources":["../../src/memory/sessionViewLoader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AA6HxD,uDAAuD;AAEvD;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAe;IACrD,MAAM,QAAQ,GAAmB,EAAE,CAAC;IAEpC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,WAAW;QACX,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAEjC,wDAAwD;QACxD,yDAAyD;QACzD,IAAI,KAAK,CAAC,gBAAgB,IAAI,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3D,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAe,EAAE,WAAmB;IACrE,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,CAAC;IAC1D,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,WAAW;IACjC,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;AAClC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAe;IACnD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO;QACnB,IAAI,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,KAAK,IAAI,CAAC,CAAC,CAAC,qCAAqC;QACnD,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -7,15 +7,12 @@
|
|
|
7
7
|
*/
|
|
8
8
|
export type SourceValidationSeverity = 'block' | 'warn';
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
10
|
+
* 转义 LIKE 通配符(`%` → `\%`、`_` → `\_`)
|
|
11
11
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
|
|
16
|
-
export declare function inferSource(filePath: string, frontmatterSource?: string): string;
|
|
17
|
-
/**
|
|
18
|
-
* 转义 LIKE 通配符,防止注入
|
|
12
|
+
* ⚠️ 必须与 SQL 的 `ESCAPE '\'` 配套使用,即 `LIKE ? ESCAPE '\'`:
|
|
13
|
+
* 未写 ESCAPE 子句时反斜杠被当作普通字符,转义后的模式匹配不到任何含 `%`/`_` 的字面值,
|
|
14
|
+
* 查询静默返回空——比不转义更隐蔽(不转义是过度召回,漏转义是零召回)。
|
|
15
|
+
* 参数本身仍须用 `?` 占位绑定,转义只解决语义、不解决注入。
|
|
19
16
|
*
|
|
20
17
|
* @param str - 原始字符串
|
|
21
18
|
* @returns 转义后的字符串
|
|
@@ -24,10 +21,11 @@ export declare function escapeLike(str: string): string;
|
|
|
24
21
|
/**
|
|
25
22
|
* 截取字符串前 maxLen 字符后转义 LIKE 通配符
|
|
26
23
|
*
|
|
27
|
-
* 用于将用户输入 /
|
|
28
|
-
* 截断避免超长输入导致 LIKE
|
|
24
|
+
* 用于将用户输入 / round-summary 记忆文本作为关键词搜索 SQL LIKE 查询的输入。
|
|
25
|
+
* 截断避免超长输入导致 LIKE 解析性能问题,转义防止通配符被当作模式符。
|
|
26
|
+
* 同 `escapeLike`:SQL 侧必须写 `LIKE ? ESCAPE '\'`,否则转义后的模式查不到字面值。
|
|
29
27
|
*
|
|
30
|
-
* @param text - 原始文本(用户输入 /
|
|
28
|
+
* @param text - 原始文本(用户输入 / round-summary 内容)
|
|
31
29
|
* @param maxLen - 最大截取长度,默认 50
|
|
32
30
|
* @returns 截断 + 转义后的字符串
|
|
33
31
|
*/
|
|
@@ -54,7 +52,7 @@ export declare function validateSource(source: string): {
|
|
|
54
52
|
/**
|
|
55
53
|
* 简单 Levenshtein 距离计算(仅用于短字符串,不做优化)
|
|
56
54
|
*
|
|
57
|
-
*
|
|
55
|
+
* 同文件 :121 用于标签 typo 检测;另导出供 DedupManager(语义去重场景的名称相似度)复用。
|
|
58
56
|
*/
|
|
59
57
|
export declare function levenshtein(a: string, b: string): number;
|
|
60
58
|
//# sourceMappingURL=sourceValidation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sourceValidation.d.ts","sourceRoot":"","sources":["../../src/memory/sourceValidation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sourceValidation.d.ts","sourceRoot":"","sources":["../../src/memory/sourceValidation.ts"],"names":[],"mappings":"AAeA;;;;;;GAMG;AACH,MAAM,MAAM,wBAAwB,GAAG,OAAO,GAAG,MAAM,CAAC;AAUxD;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,SAAK,GAAG,MAAM,CAEnE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG;IAC9C,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,wBAAwB,CAAC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CA0DA;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CA2BxD"}
|