@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,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 后台任务统一收口门面 —— 一个「后台副作用」的单一启动/观测入口。
|
|
3
|
+
*
|
|
4
|
+
* 收敛散落的 `fire-and-forget`(摘要生成 round-summary / 命中刷新 search_memories.touch / 会话命名 session-title):
|
|
5
|
+
* - 统一启动:不阻塞调用方,业务 Promise 交给门面兜底;
|
|
6
|
+
* - 统一观测:按 label 累计 pending/completed/failed,宿主可读后台健康度;
|
|
7
|
+
* - 统一兜底:失败统一记日志,业务侧补救经 onFailure 挂载(如宿主事件 emit);
|
|
8
|
+
* 统一限流:最大并发槽位防止上述三类任务无界并发耗尽资源。
|
|
9
|
+
*
|
|
10
|
+
* 与模块级 logger 同模式(全局单例,组件直接 import,零注入成本)。
|
|
11
|
+
*/
|
|
12
|
+
import { logger } from '../logging/logger.js';
|
|
13
|
+
/** 后台任务累计统计(模块级单例状态) */
|
|
14
|
+
const stats = { pending: 0, completed: 0, failed: 0 };
|
|
15
|
+
/** 后台任务最大并发数(生产安全性:防止无界并发耗尽资源) */
|
|
16
|
+
const MAX_CONCURRENT_BACKGROUND_TASKS = 5;
|
|
17
|
+
/** 当前正在执行的任务数(不含排队中的) */
|
|
18
|
+
let activeCount = 0;
|
|
19
|
+
const pendingQueue = [];
|
|
20
|
+
/**
|
|
21
|
+
* 启动一个后台任务(不阻塞调用方)。统一计数 + 兜底失败日志 + 并发槽位控制。
|
|
22
|
+
* 保留「调用即纳入在途计数」的契约——无论立即执行还是排队等待。
|
|
23
|
+
*
|
|
24
|
+
* @param label 任务标签(日志/观测区分用途)
|
|
25
|
+
* @param factory 返回业务 Promise 的工厂;内部不要自行 `catch`,交给本门面统一兜底计数
|
|
26
|
+
* @param onFailure 失败时的业务侧补救(如宿主事件 emit);缺省仅记日志
|
|
27
|
+
*/
|
|
28
|
+
export function backgroundTask(label, factory, onFailure) {
|
|
29
|
+
stats.pending++;
|
|
30
|
+
if (activeCount < MAX_CONCURRENT_BACKGROUND_TASKS) {
|
|
31
|
+
// 有空闲槽位 → 立即执行
|
|
32
|
+
executeTask(label, factory, onFailure);
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
// 槽位已满 → 排队等待
|
|
36
|
+
logger.debug({ label }, '后台任务排队等待执行');
|
|
37
|
+
pendingQueue.push({ label, factory, onFailure });
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* 执行一个任务(内部方法)。在有空闲槽位时调用。
|
|
42
|
+
* 任务完成后自动释放槽位并消费排队中的下一个任务。
|
|
43
|
+
*/
|
|
44
|
+
function executeTask(label, factory, onFailure) {
|
|
45
|
+
activeCount++;
|
|
46
|
+
const task = factory();
|
|
47
|
+
task.then(() => {
|
|
48
|
+
stats.pending--;
|
|
49
|
+
stats.completed++;
|
|
50
|
+
activeCount--;
|
|
51
|
+
logger.debug({ label }, '后台任务完成');
|
|
52
|
+
drainQueue();
|
|
53
|
+
}, (err) => {
|
|
54
|
+
stats.pending--;
|
|
55
|
+
stats.failed++;
|
|
56
|
+
activeCount--;
|
|
57
|
+
logger.warn({ err, label }, '后台任务失败');
|
|
58
|
+
onFailure?.(err);
|
|
59
|
+
drainQueue();
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* 从排队队列中消费一个任务执行(并发槽位释放时调用)。
|
|
64
|
+
* 保证不超过 MAX_CONCURRENT_BACKGROUND_TASKS 上限。
|
|
65
|
+
*/
|
|
66
|
+
function drainQueue() {
|
|
67
|
+
if (activeCount >= MAX_CONCURRENT_BACKGROUND_TASKS)
|
|
68
|
+
return;
|
|
69
|
+
const next = pendingQueue.shift();
|
|
70
|
+
if (!next)
|
|
71
|
+
return;
|
|
72
|
+
// 排队任务启动时仍计入 pending(已在入队时计数),这里仅消费槽位
|
|
73
|
+
executeTask(next.label, next.factory, next.onFailure);
|
|
74
|
+
}
|
|
75
|
+
/** 读取后台任务累计统计快照(只读副本,宿主可观测后台健康度) */
|
|
76
|
+
export function getBackgroundTaskStats() {
|
|
77
|
+
return { ...stats };
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* 等待所有在途后台任务完成(带超时保护,防止任务永不返回阻塞 close)。
|
|
81
|
+
* Agent.close() 必须调用此函数——否则后台命中刷新/摘要生成等任务可能在 storage 关闭后 upsert 失效。
|
|
82
|
+
*
|
|
83
|
+
* @param timeoutMs 超时时间(毫秒),默认 5000ms
|
|
84
|
+
* @returns **等待开始时**的在途任务数(0 = 进入本函数时无在途任务)。
|
|
85
|
+
* ⚠️ 该值是「曾经在途」而非「已等到完成」:超时放弃剩余任务时返回值仍为初始在途数,
|
|
86
|
+
* 不代表实际完成数。调用方据此判断「是否有在途任务」是正确的(如 `Agent.close()` 的
|
|
87
|
+
* `awaited > 0`),但**不可当作已完成计数**使用。
|
|
88
|
+
*/
|
|
89
|
+
export async function awaitBackgroundTasks(timeoutMs = 5000) {
|
|
90
|
+
const initialPending = stats.pending;
|
|
91
|
+
if (initialPending === 0)
|
|
92
|
+
return 0;
|
|
93
|
+
logger.debug({ pending: initialPending }, '等待后台任务完成...');
|
|
94
|
+
const startTime = Date.now();
|
|
95
|
+
while (stats.pending > 0) {
|
|
96
|
+
if (Date.now() - startTime > timeoutMs) {
|
|
97
|
+
logger.warn({ pending: stats.pending, timeoutMs }, '等待后台任务超时,放弃剩余任务');
|
|
98
|
+
break;
|
|
99
|
+
}
|
|
100
|
+
// 等待下一个微任务周期,让 pending 计数有机会被更新
|
|
101
|
+
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
102
|
+
}
|
|
103
|
+
return initialPending;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* 重置模块级状态(仅测试使用,生产代码禁止调用)。
|
|
107
|
+
* 清理 activeCount、pendingQueue、stats,确保测试用例间状态隔离。
|
|
108
|
+
* @internal
|
|
109
|
+
*/
|
|
110
|
+
export function _resetBackgroundTaskState() {
|
|
111
|
+
stats.pending = 0;
|
|
112
|
+
stats.completed = 0;
|
|
113
|
+
stats.failed = 0;
|
|
114
|
+
activeCount = 0;
|
|
115
|
+
pendingQueue.length = 0;
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=backgroundTask.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backgroundTask.js","sourceRoot":"","sources":["../../src/utils/backgroundTask.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,40 +1,13 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 配置资源管理器抽象基类 — 消除 SkillManager 与 PersonaManager 的重复结构
|
|
3
|
-
*
|
|
4
|
-
* 共同模式(DRY):
|
|
5
|
-
* - 扫描 configDir/<subdir>/ 中的 .md 文件
|
|
6
|
-
* - 解析 frontmatter keywords
|
|
7
|
-
* - scoreByKeywords 关键词匹配
|
|
8
|
-
* - load → reload → deleteItem 生命周期
|
|
9
|
-
*
|
|
10
|
-
* 分叉点(子类差异化):
|
|
11
|
-
* - createEntry() → 条目构造(Persona 需要 traits 解析,Skill 需要 layer/trigger)
|
|
12
|
-
* - buildSystemPrompt() → 系统提示格式
|
|
13
|
-
* - PersonaManager 额外状态:activePersona / mode / 切换缓冲 → 保留在子类
|
|
14
|
-
* - SkillManager 额外能力:trigger 正则匹配 / register() → 保留在子类
|
|
15
|
-
*
|
|
16
|
-
* 抽象收益验证(§2.2 技术债务的阈值判断):
|
|
17
|
-
* - 2 个使用场景,领域规则大概率会变 → 抽象收益 > 复制成本
|
|
18
|
-
* - 扫描 + 匹配 + 生命周期共 ~60 行重复 → 消除后的维护成本显著降低
|
|
19
|
-
*
|
|
20
|
-
* 复杂度控制(§1.3):
|
|
21
|
-
* - 泛型参数 T 由子类具体化,基类不假设 T 的具体形状
|
|
22
|
-
* - 基类只提供公共基础设施,不引入新概念
|
|
23
|
-
*/
|
|
24
1
|
import type { ScannedMarkdownEntry } from '../utils/scanner.js';
|
|
25
|
-
/**
|
|
26
|
-
* 配置资源的最小约束:必须有 name、keywords、content、filePath
|
|
27
|
-
*/
|
|
2
|
+
/** 配置资源最小约束 */
|
|
28
3
|
export interface ConfigResource {
|
|
29
4
|
name: string;
|
|
30
|
-
keywords: string[];
|
|
31
5
|
content: string;
|
|
32
6
|
filePath: string;
|
|
33
7
|
}
|
|
34
8
|
/**
|
|
35
9
|
* 配置资源管理器 — 抽象基类
|
|
36
|
-
*
|
|
37
|
-
* @typeParam T 子类资源类型(如 Persona / SkillEntry)
|
|
10
|
+
* @typeParam T 子类资源类型
|
|
38
11
|
* @typeParam TOptions load() 的可选参数类型
|
|
39
12
|
*/
|
|
40
13
|
export declare abstract class ConfigResourceManager<T extends ConfigResource, TOptions = undefined> {
|
|
@@ -43,69 +16,64 @@ export declare abstract class ConfigResourceManager<T extends ConfigResource, TO
|
|
|
43
16
|
/** 资源列表缓存 */
|
|
44
17
|
protected items: T[];
|
|
45
18
|
/**
|
|
46
|
-
*
|
|
19
|
+
* 运行时注入项的名字集合——「是否有磁盘真理源」必须显式记账,不能从 filePath 反推
|
|
20
|
+
* (注入方 filePath 是约定,可填 '<runtime>')。registerRuntimeItem() 登记,deleteItem/loadItems 注销。
|
|
21
|
+
*/
|
|
22
|
+
private readonly runtimeNames;
|
|
23
|
+
/**
|
|
24
|
+
* @param configDir 配置目录(资源在 <configDir>/<subdir>/ 下)
|
|
47
25
|
* @param subdir 资源子目录名(如 'skills'、'personas')
|
|
48
26
|
*/
|
|
49
27
|
constructor(configDir: string | undefined, subdir: string);
|
|
50
|
-
/** 获取资源列表 */
|
|
51
|
-
get list(): T[];
|
|
52
28
|
/**
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
* @param options 子类透传参数
|
|
56
|
-
* @returns 加载的资源数量
|
|
29
|
+
* 资源列表快照——返回浅拷贝而非内部数组引用,
|
|
30
|
+
* 防止外部 push/splice 绕过 register() 的重名校验与 deleteItem() 记账。
|
|
57
31
|
*/
|
|
32
|
+
get list(): T[];
|
|
33
|
+
/** 加载资源到缓存,items 整体替换、运行时记账作废(子类 load() 中调用) */
|
|
58
34
|
protected loadItems(options?: TOptions): Promise<number>;
|
|
59
35
|
/**
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
36
|
+
* 重载资源——不能整体覆盖 items:那会抹除无磁盘真理源的运行时注入项
|
|
37
|
+
* (如 SkillManager.register 注入的运行时技能,纯内存态、不进记忆库),两侧就此分叉。
|
|
38
|
+
* 判据取 runtimeNames 显式记账;同名冲突以磁盘(更强真理源)为准并注销登记。
|
|
63
39
|
*/
|
|
64
40
|
reload(): Promise<number>;
|
|
65
41
|
/**
|
|
66
|
-
*
|
|
42
|
+
* 子类声明「用户版本覆盖磁盘同名」的条目(默认无)
|
|
67
43
|
*
|
|
68
|
-
*
|
|
69
|
-
*
|
|
44
|
+
* 默认语义 = 磁盘(更强真理源)赢:运行时注入项撞磁盘扫描同名时,磁盘版胜出、
|
|
45
|
+
* 运行时记账注销。SkillManager 的用户技能目录(loadExtraDir)则声明为覆盖——
|
|
46
|
+
* reload 时用户版胜出、记账保留、扫描到的内置版被剔除(见 retainRuntimeItems)。
|
|
47
|
+
* RolePackManager 不覆写,保持默认「磁盘赢」。
|
|
70
48
|
*/
|
|
71
|
-
|
|
49
|
+
protected isUserOverride(_name: string): boolean;
|
|
72
50
|
/**
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
51
|
+
* 将磁盘扫描结果与运行时注入项合并(子类自定义扫描的 reload 也应复用本方法):
|
|
52
|
+
* 重新扫描磁盘后,保留无磁盘真理源的运行时注入项(如 loadExtraDir 注入的用户资源),
|
|
53
|
+
* 同名冲突以磁盘(更强真理源)为准并注销运行时记账——除非子类将同名声明为
|
|
54
|
+
* isUserOverride(用户覆盖内置):此时用户版保留、记账保留、磁盘版被剔除。
|
|
76
55
|
*
|
|
77
|
-
* @param
|
|
78
|
-
* @
|
|
79
|
-
* @returns 匹配结果(资源 + 得分),无匹配返回 null
|
|
56
|
+
* @param scanned 本次磁盘扫描得到的资源列表
|
|
57
|
+
* @returns 合并后的完整资源列表(磁盘在前、运行时注入在后)
|
|
80
58
|
*/
|
|
81
|
-
protected
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
} | null;
|
|
59
|
+
protected retainRuntimeItems(scanned: T[]): T[];
|
|
60
|
+
/** 从内存缓存删除资源(含注销运行时记账) */
|
|
61
|
+
deleteItem(name: string): boolean;
|
|
85
62
|
/**
|
|
86
|
-
*
|
|
87
|
-
*
|
|
88
|
-
*
|
|
63
|
+
* 登记运行时注入的资源(子类 register() 唯一落点)——必须记账,
|
|
64
|
+
* 否则 reload() 会把无磁盘真理源的注入项当成"磁盘上已删除"而抹掉。
|
|
65
|
+
* 重名校验由子类调用前完成(各自语义不同)。
|
|
89
66
|
*/
|
|
67
|
+
protected registerRuntimeItem(item: T): void;
|
|
68
|
+
/** 构建 system prompt 片段(name 不传则用当前激活资源) */
|
|
90
69
|
abstract buildSystemPrompt(name?: string): string;
|
|
91
|
-
/**
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
* @param entry 扫描器返回的原始条目
|
|
95
|
-
* @returns 子类资源类型
|
|
96
|
-
*/
|
|
97
|
-
protected abstract createEntry(entry: ScannedMarkdownEntry): T;
|
|
98
|
-
/**
|
|
99
|
-
* load() 完成后的回调 — 子类可在此做激活选择等逻辑
|
|
100
|
-
*/
|
|
70
|
+
/** 从扫描条目构建资源对象(子类实现差异化字段解析;返回 null 跳过该条目) */
|
|
71
|
+
protected createEntry(_entry: ScannedMarkdownEntry): Promise<T | null>;
|
|
72
|
+
/** load() 完成后的回调(子类可做激活选择) */
|
|
101
73
|
protected onAfterLoad(_items: T[], _options?: TOptions): void;
|
|
102
|
-
/**
|
|
103
|
-
* reload() 完成后的回调 — 子类可在此保持当前激活状态
|
|
104
|
-
*/
|
|
74
|
+
/** reload() 完成后的回调(子类可保持当前激活状态) */
|
|
105
75
|
protected onAfterReload(_items: T[]): void;
|
|
106
|
-
/**
|
|
107
|
-
* 扫描目录 + 构建条目列表
|
|
108
|
-
*/
|
|
76
|
+
/** 扫描目录 + 构建条目列表(按 name 去重) */
|
|
109
77
|
private scanAndBuild;
|
|
110
78
|
}
|
|
111
79
|
//# sourceMappingURL=configResourceManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configResourceManager.d.ts","sourceRoot":"","sources":["../../src/utils/configResourceManager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"configResourceManager.d.ts","sourceRoot":"","sources":["../../src/utils/configResourceManager.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE/D,eAAe;AACf,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,8BAAsB,qBAAqB,CAAC,CAAC,SAAS,cAAc,EAAE,QAAQ,GAAG,SAAS;IAetF,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS;IAChD,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM;IAfnC,aAAa;IACb,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,CAAM;IAE1B;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqB;IAElD;;;OAGG;gBAEkB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,MAAM,EAAE,MAAM;IAKnC;;;OAGG;IACH,IAAI,IAAI,IAAI,CAAC,EAAE,CAEd;IAID,gDAAgD;cAChC,SAAS,CAAC,OAAO,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAW9D;;;;OAIG;IACG,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAiB/B;;;;;;;OAOG;IACH,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAIhD;;;;;;;;OAQG;IACH,SAAS,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE;IAe/C,0BAA0B;IAC1B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAejC;;;;OAIG;IACH,SAAS,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAO5C,2CAA2C;IAC3C,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM;IAEjD,6CAA6C;cAC7B,WAAW,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAO5E,8BAA8B;IAC9B,SAAS,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI;IAI7D,mCAAmC;IACnC,SAAS,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,IAAI;IAM1C,+BAA+B;YACjB,YAAY;CAc3B"}
|
|
@@ -1,33 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* 配置资源管理器抽象基类 — 消除 SkillManager
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* - 扫描 configDir/<subdir>/ 中的 .md 文件
|
|
6
|
-
* - 解析 frontmatter keywords
|
|
7
|
-
* - scoreByKeywords 关键词匹配
|
|
8
|
-
* - load → reload → deleteItem 生命周期
|
|
9
|
-
*
|
|
10
|
-
* 分叉点(子类差异化):
|
|
11
|
-
* - createEntry() → 条目构造(Persona 需要 traits 解析,Skill 需要 layer/trigger)
|
|
12
|
-
* - buildSystemPrompt() → 系统提示格式
|
|
13
|
-
* - PersonaManager 额外状态:activePersona / mode / 切换缓冲 → 保留在子类
|
|
14
|
-
* - SkillManager 额外能力:trigger 正则匹配 / register() → 保留在子类
|
|
15
|
-
*
|
|
16
|
-
* 抽象收益验证(§2.2 技术债务的阈值判断):
|
|
17
|
-
* - 2 个使用场景,领域规则大概率会变 → 抽象收益 > 复制成本
|
|
18
|
-
* - 扫描 + 匹配 + 生命周期共 ~60 行重复 → 消除后的维护成本显著降低
|
|
19
|
-
*
|
|
20
|
-
* 复杂度控制(§1.3):
|
|
21
|
-
* - 泛型参数 T 由子类具体化,基类不假设 T 的具体形状
|
|
22
|
-
* - 基类只提供公共基础设施,不引入新概念
|
|
2
|
+
* 配置资源管理器抽象基类 — 消除 SkillManager / RolePackManager 的重复结构:
|
|
3
|
+
* 扫描 <configDir>/<subdir>/ 的 .md、load/reload/deleteItem 生命周期。
|
|
4
|
+
* 差异化保留在子类(createEntry 条目构造、buildSystemPrompt、各自额外状态/能力)。
|
|
23
5
|
*/
|
|
24
|
-
import { scoreByKeywords } from '../utils/segmenter.js';
|
|
25
6
|
import { logger } from '../logging/logger.js';
|
|
26
7
|
import { resolveSubdir, scanMarkdownDir } from '../utils/scanner.js';
|
|
27
8
|
/**
|
|
28
9
|
* 配置资源管理器 — 抽象基类
|
|
29
|
-
*
|
|
30
|
-
* @typeParam T 子类资源类型(如 Persona / SkillEntry)
|
|
10
|
+
* @typeParam T 子类资源类型
|
|
31
11
|
* @typeParam TOptions load() 的可选参数类型
|
|
32
12
|
*/
|
|
33
13
|
export class ConfigResourceManager {
|
|
@@ -36,7 +16,12 @@ export class ConfigResourceManager {
|
|
|
36
16
|
/** 资源列表缓存 */
|
|
37
17
|
items = [];
|
|
38
18
|
/**
|
|
39
|
-
*
|
|
19
|
+
* 运行时注入项的名字集合——「是否有磁盘真理源」必须显式记账,不能从 filePath 反推
|
|
20
|
+
* (注入方 filePath 是约定,可填 '<runtime>')。registerRuntimeItem() 登记,deleteItem/loadItems 注销。
|
|
21
|
+
*/
|
|
22
|
+
runtimeNames = new Set();
|
|
23
|
+
/**
|
|
24
|
+
* @param configDir 配置目录(资源在 <configDir>/<subdir>/ 下)
|
|
40
25
|
* @param subdir 资源子目录名(如 'skills'、'personas')
|
|
41
26
|
*/
|
|
42
27
|
constructor(configDir, subdir) {
|
|
@@ -44,41 +29,73 @@ export class ConfigResourceManager {
|
|
|
44
29
|
this.subdir = subdir;
|
|
45
30
|
}
|
|
46
31
|
// ── 公共 API ──────────────────────────────────────────
|
|
47
|
-
/** 获取资源列表 */
|
|
48
|
-
get list() {
|
|
49
|
-
return this.items;
|
|
50
|
-
}
|
|
51
|
-
// ── 受保护的基础设施(子类调用) ─────────────────────────
|
|
52
32
|
/**
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
* @param options 子类透传参数
|
|
56
|
-
* @returns 加载的资源数量
|
|
33
|
+
* 资源列表快照——返回浅拷贝而非内部数组引用,
|
|
34
|
+
* 防止外部 push/splice 绕过 register() 的重名校验与 deleteItem() 记账。
|
|
57
35
|
*/
|
|
36
|
+
get list() {
|
|
37
|
+
return [...this.items];
|
|
38
|
+
}
|
|
39
|
+
// ── 受保护的基础设施 ──────────────────────────────────
|
|
40
|
+
/** 加载资源到缓存,items 整体替换、运行时记账作废(子类 load() 中调用) */
|
|
58
41
|
async loadItems(options) {
|
|
59
42
|
this.items = await this.scanAndBuild();
|
|
43
|
+
this.runtimeNames.clear();
|
|
60
44
|
this.onAfterLoad(this.items, options);
|
|
61
45
|
logger.info({ count: this.items.length, names: this.items.map((i) => i.name), subdir: this.subdir }, `${this.subdir} 资源加载完成`);
|
|
62
46
|
return this.items.length;
|
|
63
47
|
}
|
|
64
48
|
/**
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
*
|
|
49
|
+
* 重载资源——不能整体覆盖 items:那会抹除无磁盘真理源的运行时注入项
|
|
50
|
+
* (如 SkillManager.register 注入的运行时技能,纯内存态、不进记忆库),两侧就此分叉。
|
|
51
|
+
* 判据取 runtimeNames 显式记账;同名冲突以磁盘(更强真理源)为准并注销登记。
|
|
68
52
|
*/
|
|
69
53
|
async reload() {
|
|
70
54
|
const oldCount = this.items.length;
|
|
71
|
-
|
|
55
|
+
const scanned = await this.scanAndBuild();
|
|
56
|
+
this.items = this.retainRuntimeItems(scanned);
|
|
72
57
|
this.onAfterReload(this.items);
|
|
73
|
-
logger.info({
|
|
58
|
+
logger.info({
|
|
59
|
+
oldCount,
|
|
60
|
+
newCount: this.items.length,
|
|
61
|
+
retainedRuntime: this.items.length - scanned.length,
|
|
62
|
+
subdir: this.subdir,
|
|
63
|
+
}, `${this.subdir} 资源已重载`);
|
|
74
64
|
return this.items.length;
|
|
75
65
|
}
|
|
76
66
|
/**
|
|
77
|
-
*
|
|
67
|
+
* 子类声明「用户版本覆盖磁盘同名」的条目(默认无)
|
|
78
68
|
*
|
|
79
|
-
*
|
|
80
|
-
*
|
|
69
|
+
* 默认语义 = 磁盘(更强真理源)赢:运行时注入项撞磁盘扫描同名时,磁盘版胜出、
|
|
70
|
+
* 运行时记账注销。SkillManager 的用户技能目录(loadExtraDir)则声明为覆盖——
|
|
71
|
+
* reload 时用户版胜出、记账保留、扫描到的内置版被剔除(见 retainRuntimeItems)。
|
|
72
|
+
* RolePackManager 不覆写,保持默认「磁盘赢」。
|
|
81
73
|
*/
|
|
74
|
+
isUserOverride(_name) {
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* 将磁盘扫描结果与运行时注入项合并(子类自定义扫描的 reload 也应复用本方法):
|
|
79
|
+
* 重新扫描磁盘后,保留无磁盘真理源的运行时注入项(如 loadExtraDir 注入的用户资源),
|
|
80
|
+
* 同名冲突以磁盘(更强真理源)为准并注销运行时记账——除非子类将同名声明为
|
|
81
|
+
* isUserOverride(用户覆盖内置):此时用户版保留、记账保留、磁盘版被剔除。
|
|
82
|
+
*
|
|
83
|
+
* @param scanned 本次磁盘扫描得到的资源列表
|
|
84
|
+
* @returns 合并后的完整资源列表(磁盘在前、运行时注入在后)
|
|
85
|
+
*/
|
|
86
|
+
retainRuntimeItems(scanned) {
|
|
87
|
+
const scannedNames = new Set(scanned.map((i) => i.name));
|
|
88
|
+
const runtimeInjected = this.items.filter((i) => this.runtimeNames.has(i.name) && (!scannedNames.has(i.name) || this.isUserOverride(i.name)));
|
|
89
|
+
for (const name of this.runtimeNames) {
|
|
90
|
+
// 磁盘同名赢(覆盖项已被保留,见上过滤)→ 注销记账;覆盖项保留记账(下次 reload 仍保留)
|
|
91
|
+
if (scannedNames.has(name) && !this.isUserOverride(name))
|
|
92
|
+
this.runtimeNames.delete(name);
|
|
93
|
+
}
|
|
94
|
+
// 覆盖项:剔除本次扫描到的磁盘同名版(用户版保留在后),避免同名双存
|
|
95
|
+
const effectiveScanned = scanned.filter((i) => !this.isUserOverride(i.name));
|
|
96
|
+
return [...effectiveScanned, ...runtimeInjected];
|
|
97
|
+
}
|
|
98
|
+
/** 从内存缓存删除资源(含注销运行时记账) */
|
|
82
99
|
deleteItem(name) {
|
|
83
100
|
const idx = this.items.findIndex((i) => i.name === name);
|
|
84
101
|
if (idx < 0) {
|
|
@@ -86,52 +103,35 @@ export class ConfigResourceManager {
|
|
|
86
103
|
return false;
|
|
87
104
|
}
|
|
88
105
|
this.items.splice(idx, 1);
|
|
106
|
+
this.runtimeNames.delete(name);
|
|
89
107
|
logger.info({ name, remaining: this.items.length, subdir: this.subdir }, '资源已从内存缓存删除');
|
|
90
108
|
return true;
|
|
91
109
|
}
|
|
92
|
-
// ── 关键词匹配(共享实现) ──────────────────────────────
|
|
93
110
|
/**
|
|
94
|
-
*
|
|
95
|
-
*
|
|
96
|
-
*
|
|
97
|
-
*
|
|
98
|
-
* @param userInput 用户输入文本
|
|
99
|
-
* @param threshold 最低激活阈值(低于此值的匹配忽略)
|
|
100
|
-
* @returns 匹配结果(资源 + 得分),无匹配返回 null
|
|
111
|
+
* 登记运行时注入的资源(子类 register() 唯一落点)——必须记账,
|
|
112
|
+
* 否则 reload() 会把无磁盘真理源的注入项当成"磁盘上已删除"而抹掉。
|
|
113
|
+
* 重名校验由子类调用前完成(各自语义不同)。
|
|
101
114
|
*/
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
if (matches.length === 0)
|
|
113
|
-
return null;
|
|
114
|
-
// 主排序:得分降序;次排序:name 字母序(保证同分时确定性)
|
|
115
|
-
matches.sort((a, b) => b.score - a.score || a.item.name.localeCompare(b.item.name));
|
|
116
|
-
return matches[0] ?? null;
|
|
115
|
+
registerRuntimeItem(item) {
|
|
116
|
+
this.items.push(item);
|
|
117
|
+
this.runtimeNames.add(item.name);
|
|
118
|
+
}
|
|
119
|
+
/** 从扫描条目构建资源对象(子类实现差异化字段解析;返回 null 跳过该条目) */
|
|
120
|
+
async createEntry(_entry) {
|
|
121
|
+
// 默认空实现:不解析任何条目,子类可覆写
|
|
122
|
+
return null;
|
|
117
123
|
}
|
|
118
124
|
// ── 生命周期钩子(子类可选覆写) ──────────────────────────
|
|
119
|
-
/**
|
|
120
|
-
* load() 完成后的回调 — 子类可在此做激活选择等逻辑
|
|
121
|
-
*/
|
|
125
|
+
/** load() 完成后的回调(子类可做激活选择) */
|
|
122
126
|
onAfterLoad(_items, _options) {
|
|
123
127
|
// 默认空实现
|
|
124
128
|
}
|
|
125
|
-
/**
|
|
126
|
-
* reload() 完成后的回调 — 子类可在此保持当前激活状态
|
|
127
|
-
*/
|
|
129
|
+
/** reload() 完成后的回调(子类可保持当前激活状态) */
|
|
128
130
|
onAfterReload(_items) {
|
|
129
131
|
// 默认空实现
|
|
130
132
|
}
|
|
131
133
|
// ── 私有方法 ──────────────────────────────────────────
|
|
132
|
-
/**
|
|
133
|
-
* 扫描目录 + 构建条目列表
|
|
134
|
-
*/
|
|
134
|
+
/** 扫描目录 + 构建条目列表(按 name 去重) */
|
|
135
135
|
async scanAndBuild() {
|
|
136
136
|
const map = new Map();
|
|
137
137
|
const dir = resolveSubdir(this.configDir, this.subdir);
|
|
@@ -139,8 +139,10 @@ export class ConfigResourceManager {
|
|
|
139
139
|
return [];
|
|
140
140
|
const entries = await scanMarkdownDir(dir);
|
|
141
141
|
for (const entry of entries) {
|
|
142
|
-
const item = this.createEntry(entry);
|
|
143
|
-
|
|
142
|
+
const item = await this.createEntry(entry);
|
|
143
|
+
if (item !== null) {
|
|
144
|
+
map.set(entry.name, item);
|
|
145
|
+
}
|
|
144
146
|
}
|
|
145
147
|
return Array.from(map.values());
|
|
146
148
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configResourceManager.js","sourceRoot":"","sources":["../../src/utils/configResourceManager.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"configResourceManager.js","sourceRoot":"","sources":["../../src/utils/configResourceManager.ts"],"names":[],"mappings":"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"}
|