@zooique/memora 2.0.3 → 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1037 -0
- package/README.en.md +305 -272
- package/README.md +303 -260
- package/config.example.json +43 -0
- package/dist/agent/agent.d.ts +376 -408
- package/dist/agent/agent.d.ts.map +1 -1
- package/dist/agent/agent.js +1166 -926
- package/dist/agent/agent.js.map +1 -1
- package/dist/agent/assembler.d.ts +105 -43
- package/dist/agent/assembler.d.ts.map +1 -1
- package/dist/agent/assembler.js +543 -75
- package/dist/agent/assembler.js.map +1 -1
- package/dist/agent/budget.d.ts +131 -0
- package/dist/agent/budget.d.ts.map +1 -0
- package/dist/agent/budget.js +128 -0
- package/dist/agent/budget.js.map +1 -0
- package/dist/agent/builtinToolHandlers.d.ts +225 -38
- package/dist/agent/builtinToolHandlers.d.ts.map +1 -1
- package/dist/agent/builtinToolHandlers.js +748 -132
- package/dist/agent/builtinToolHandlers.js.map +1 -1
- package/dist/agent/builtinTools.d.ts +198 -7
- package/dist/agent/builtinTools.d.ts.map +1 -1
- package/dist/agent/builtinTools.js +646 -14
- package/dist/agent/builtinTools.js.map +1 -1
- package/dist/agent/compaction.d.ts +93 -0
- package/dist/agent/compaction.d.ts.map +1 -0
- package/dist/agent/compaction.js +192 -0
- package/dist/agent/compaction.js.map +1 -0
- package/dist/agent/constants.d.ts +137 -20
- package/dist/agent/constants.d.ts.map +1 -1
- package/dist/agent/constants.js +152 -20
- package/dist/agent/constants.js.map +1 -1
- package/dist/agent/contextManager.d.ts +119 -77
- package/dist/agent/contextManager.d.ts.map +1 -1
- package/dist/agent/contextManager.js +192 -135
- package/dist/agent/contextManager.js.map +1 -1
- package/dist/agent/contextPreparer.d.ts +78 -0
- package/dist/agent/contextPreparer.d.ts.map +1 -0
- package/dist/agent/contextPreparer.js +128 -0
- package/dist/agent/contextPreparer.js.map +1 -0
- package/dist/agent/duplicateInterceptor.d.ts +67 -0
- package/dist/agent/duplicateInterceptor.d.ts.map +1 -0
- package/dist/agent/duplicateInterceptor.js +82 -0
- package/dist/agent/duplicateInterceptor.js.map +1 -0
- package/dist/agent/guardRail.d.ts +166 -0
- package/dist/agent/guardRail.d.ts.map +1 -0
- package/dist/agent/guardRail.js +333 -0
- package/dist/agent/guardRail.js.map +1 -0
- package/dist/agent/loop.d.ts +716 -295
- package/dist/agent/loop.d.ts.map +1 -1
- package/dist/agent/loop.js +2178 -664
- package/dist/agent/loop.js.map +1 -1
- package/dist/agent/managers/archiveCoordinator.d.ts +14 -171
- package/dist/agent/managers/archiveCoordinator.d.ts.map +1 -1
- package/dist/agent/managers/archiveCoordinator.js +19 -287
- package/dist/agent/managers/archiveCoordinator.js.map +1 -1
- package/dist/agent/managers/chatLockManager.d.ts +20 -88
- package/dist/agent/managers/chatLockManager.d.ts.map +1 -1
- package/dist/agent/managers/chatLockManager.js +31 -103
- package/dist/agent/managers/chatLockManager.js.map +1 -1
- package/dist/agent/managers/dedupManager.d.ts +31 -115
- package/dist/agent/managers/dedupManager.d.ts.map +1 -1
- package/dist/agent/managers/dedupManager.js +48 -136
- package/dist/agent/managers/dedupManager.js.map +1 -1
- package/dist/agent/managers/goalConsistencyChecker.d.ts +42 -0
- package/dist/agent/managers/goalConsistencyChecker.d.ts.map +1 -0
- package/dist/agent/managers/goalConsistencyChecker.js +178 -0
- package/dist/agent/managers/goalConsistencyChecker.js.map +1 -0
- package/dist/agent/managers/llmCaller.d.ts +124 -0
- package/dist/agent/managers/llmCaller.d.ts.map +1 -0
- package/dist/agent/managers/llmCaller.js +417 -0
- package/dist/agent/managers/llmCaller.js.map +1 -0
- package/dist/agent/managers/llmJudgeHelper.d.ts +8 -25
- package/dist/agent/managers/llmJudgeHelper.d.ts.map +1 -1
- package/dist/agent/managers/llmJudgeHelper.js +7 -24
- package/dist/agent/managers/llmJudgeHelper.js.map +1 -1
- package/dist/agent/managers/loopMetrics.d.ts +58 -0
- package/dist/agent/managers/loopMetrics.d.ts.map +1 -0
- package/dist/agent/managers/loopMetrics.js +68 -0
- package/dist/agent/managers/loopMetrics.js.map +1 -0
- package/dist/agent/managers/memoryAdvisor.d.ts +27 -120
- package/dist/agent/managers/memoryAdvisor.d.ts.map +1 -1
- package/dist/agent/managers/memoryAdvisor.js +85 -207
- package/dist/agent/managers/memoryAdvisor.js.map +1 -1
- package/dist/agent/managers/memoryGovernance.d.ts +10 -42
- package/dist/agent/managers/memoryGovernance.d.ts.map +1 -1
- package/dist/agent/managers/memoryGovernance.js +19 -36
- package/dist/agent/managers/memoryGovernance.js.map +1 -1
- package/dist/agent/managers/memoryInspector.d.ts +59 -268
- package/dist/agent/managers/memoryInspector.d.ts.map +1 -1
- package/dist/agent/managers/memoryInspector.js +91 -442
- package/dist/agent/managers/memoryInspector.js.map +1 -1
- package/dist/agent/managers/roundSummaryGenerator.d.ts +56 -0
- package/dist/agent/managers/roundSummaryGenerator.d.ts.map +1 -0
- package/dist/agent/managers/roundSummaryGenerator.js +201 -0
- package/dist/agent/managers/roundSummaryGenerator.js.map +1 -0
- package/dist/agent/managers/sessionArchiver.d.ts +19 -68
- package/dist/agent/managers/sessionArchiver.d.ts.map +1 -1
- package/dist/agent/managers/sessionArchiver.js +76 -147
- package/dist/agent/managers/sessionArchiver.js.map +1 -1
- package/dist/agent/managers/sessionManager.d.ts +286 -57
- package/dist/agent/managers/sessionManager.d.ts.map +1 -1
- package/dist/agent/managers/sessionManager.js +846 -85
- package/dist/agent/managers/sessionManager.js.map +1 -1
- package/dist/agent/managers/sessionNamer.d.ts +35 -0
- package/dist/agent/managers/sessionNamer.d.ts.map +1 -0
- package/dist/agent/managers/sessionNamer.js +104 -0
- package/dist/agent/managers/sessionNamer.js.map +1 -0
- package/dist/agent/managers/streamAccumulator.d.ts +8 -33
- package/dist/agent/managers/streamAccumulator.d.ts.map +1 -1
- package/dist/agent/managers/streamAccumulator.js +4 -29
- package/dist/agent/managers/streamAccumulator.js.map +1 -1
- package/dist/agent/managers/textPolishManager.d.ts +8 -44
- package/dist/agent/managers/textPolishManager.d.ts.map +1 -1
- package/dist/agent/managers/textPolishManager.js +9 -41
- package/dist/agent/managers/textPolishManager.js.map +1 -1
- package/dist/agent/managers/toolCallHelpers.d.ts +105 -0
- package/dist/agent/managers/toolCallHelpers.d.ts.map +1 -0
- package/dist/agent/managers/toolCallHelpers.js +161 -0
- package/dist/agent/managers/toolCallHelpers.js.map +1 -0
- package/dist/agent/managers/workProjection.d.ts +55 -100
- package/dist/agent/managers/workProjection.d.ts.map +1 -1
- package/dist/agent/managers/workProjection.js +164 -268
- package/dist/agent/managers/workProjection.js.map +1 -1
- package/dist/agent/messageHistory.d.ts +134 -84
- package/dist/agent/messageHistory.d.ts.map +1 -1
- package/dist/agent/messageHistory.js +419 -133
- package/dist/agent/messageHistory.js.map +1 -1
- package/dist/agent/needsPlanning.d.ts +28 -0
- package/dist/agent/needsPlanning.d.ts.map +1 -0
- package/dist/agent/needsPlanning.js +68 -0
- package/dist/agent/needsPlanning.js.map +1 -0
- package/dist/agent/seed/index.d.ts +11 -0
- package/dist/agent/seed/index.d.ts.map +1 -0
- package/dist/agent/seed/index.js +10 -0
- package/dist/agent/seed/index.js.map +1 -0
- package/dist/agent/seed/orchestrator.d.ts +83 -0
- package/dist/agent/seed/orchestrator.d.ts.map +1 -0
- package/dist/agent/seed/orchestrator.js +260 -0
- package/dist/agent/seed/orchestrator.js.map +1 -0
- package/dist/agent/seed/prepare.d.ts +49 -0
- package/dist/agent/seed/prepare.d.ts.map +1 -0
- package/dist/agent/seed/prepare.js +107 -0
- package/dist/agent/seed/prepare.js.map +1 -0
- package/dist/agent/seed/types.d.ts +115 -0
- package/dist/agent/seed/types.d.ts.map +1 -0
- package/dist/agent/seed/types.js +15 -0
- package/dist/agent/seed/types.js.map +1 -0
- package/dist/agent/sessionStateMachine.d.ts +78 -0
- package/dist/agent/sessionStateMachine.d.ts.map +1 -0
- package/dist/agent/sessionStateMachine.js +182 -0
- package/dist/agent/sessionStateMachine.js.map +1 -0
- package/dist/agent/taskTableRenderer.d.ts +51 -0
- package/dist/agent/taskTableRenderer.d.ts.map +1 -0
- package/dist/agent/taskTableRenderer.js +115 -0
- package/dist/agent/taskTableRenderer.js.map +1 -0
- package/dist/agent/toolExecutor.d.ts +236 -10
- package/dist/agent/toolExecutor.d.ts.map +1 -1
- package/dist/agent/toolExecutor.js +932 -21
- package/dist/agent/toolExecutor.js.map +1 -1
- package/dist/agent/toolLedger.d.ts +120 -0
- package/dist/agent/toolLedger.d.ts.map +1 -0
- package/dist/agent/toolLedger.js +149 -0
- package/dist/agent/toolLedger.js.map +1 -0
- package/dist/agent/toolResultCache.d.ts +134 -0
- package/dist/agent/toolResultCache.d.ts.map +1 -0
- package/dist/agent/toolResultCache.js +243 -0
- package/dist/agent/toolResultCache.js.map +1 -0
- package/dist/agent/toolResultOffload.d.ts +59 -0
- package/dist/agent/toolResultOffload.d.ts.map +1 -0
- package/dist/agent/toolResultOffload.js +70 -0
- package/dist/agent/toolResultOffload.js.map +1 -0
- package/dist/agent/toolRunner.d.ts +59 -0
- package/dist/agent/toolRunner.d.ts.map +1 -0
- package/dist/agent/toolRunner.js +147 -0
- package/dist/agent/toolRunner.js.map +1 -0
- package/dist/agent/tracer.d.ts +99 -107
- package/dist/agent/tracer.d.ts.map +1 -1
- package/dist/agent/tracer.js +24 -69
- package/dist/agent/tracer.js.map +1 -1
- package/dist/agent/types.d.ts +510 -169
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js +2 -51
- package/dist/agent/types.js.map +1 -1
- package/dist/code-exec/codeExecutionProvider.d.ts +16 -0
- package/dist/code-exec/codeExecutionProvider.d.ts.map +1 -0
- package/dist/code-exec/codeExecutionProvider.js +57 -0
- package/dist/code-exec/codeExecutionProvider.js.map +1 -0
- package/dist/code-exec/types.d.ts +37 -0
- package/dist/code-exec/types.d.ts.map +1 -0
- package/dist/code-exec/types.js +12 -0
- package/dist/code-exec/types.js.map +1 -0
- package/dist/config/expandEnvVars.d.ts +22 -0
- package/dist/config/expandEnvVars.d.ts.map +1 -0
- package/dist/config/expandEnvVars.js +38 -0
- package/dist/config/expandEnvVars.js.map +1 -0
- package/dist/config/loader.d.ts +27 -98
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +110 -223
- package/dist/config/loader.js.map +1 -1
- package/dist/index.d.ts +67 -77
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +90 -69
- package/dist/index.js.map +1 -1
- package/dist/llm/abortSignal.d.ts +2 -3
- package/dist/llm/abortSignal.d.ts.map +1 -1
- package/dist/llm/abortSignal.js +2 -3
- package/dist/llm/abortSignal.js.map +1 -1
- package/dist/llm/factory.d.ts +22 -32
- package/dist/llm/factory.d.ts.map +1 -1
- package/dist/llm/factory.js +29 -46
- package/dist/llm/factory.js.map +1 -1
- package/dist/llm/openaiCompatible.d.ts +25 -40
- package/dist/llm/openaiCompatible.d.ts.map +1 -1
- package/dist/llm/openaiCompatible.js +179 -120
- package/dist/llm/openaiCompatible.js.map +1 -1
- package/dist/llm/provider.d.ts +29 -42
- package/dist/llm/provider.d.ts.map +1 -1
- package/dist/llm/provider.js +11 -10
- package/dist/llm/provider.js.map +1 -1
- package/dist/llm/types.d.ts +54 -11
- package/dist/llm/types.d.ts.map +1 -1
- package/dist/llm/types.js +0 -5
- package/dist/llm/types.js.map +1 -1
- package/dist/logging/logger.d.ts +8 -31
- package/dist/logging/logger.d.ts.map +1 -1
- package/dist/logging/logger.js +28 -215
- package/dist/logging/logger.js.map +1 -1
- package/dist/logging/loggerInterface.d.ts +9 -8
- package/dist/logging/loggerInterface.d.ts.map +1 -1
- package/dist/memory/gcService.d.ts +164 -0
- package/dist/memory/gcService.d.ts.map +1 -0
- package/dist/memory/gcService.js +215 -0
- package/dist/memory/gcService.js.map +1 -0
- package/dist/memory/governance.d.ts +11 -44
- package/dist/memory/governance.d.ts.map +1 -1
- package/dist/memory/governance.js +11 -64
- package/dist/memory/governance.js.map +1 -1
- package/dist/memory/inMemoryRoundStore.d.ts +124 -0
- package/dist/memory/inMemoryRoundStore.d.ts.map +1 -0
- package/dist/memory/inMemoryRoundStore.js +216 -0
- package/dist/memory/inMemoryRoundStore.js.map +1 -0
- package/dist/memory/inMemorySessionStore.d.ts +92 -0
- package/dist/memory/inMemorySessionStore.d.ts.map +1 -0
- package/dist/memory/inMemorySessionStore.js +219 -0
- package/dist/memory/inMemorySessionStore.js.map +1 -0
- package/dist/memory/inMemorySessionViewLoader.d.ts +89 -0
- package/dist/memory/inMemorySessionViewLoader.d.ts.map +1 -0
- package/dist/memory/inMemorySessionViewLoader.js +183 -0
- package/dist/memory/inMemorySessionViewLoader.js.map +1 -0
- package/dist/memory/inMemoryStorage.d.ts +25 -175
- package/dist/memory/inMemoryStorage.d.ts.map +1 -1
- package/dist/memory/inMemoryStorage.js +32 -221
- package/dist/memory/inMemoryStorage.js.map +1 -1
- package/dist/memory/keywordsTouch.d.ts +20 -0
- package/dist/memory/keywordsTouch.d.ts.map +1 -0
- package/dist/memory/keywordsTouch.js +25 -0
- package/dist/memory/keywordsTouch.js.map +1 -0
- package/dist/memory/lockManager.d.ts +2 -2
- package/dist/memory/lockManager.d.ts.map +1 -1
- package/dist/memory/lockManager.js +6 -8
- package/dist/memory/lockManager.js.map +1 -1
- package/dist/memory/projectManager.d.ts +30 -129
- package/dist/memory/projectManager.d.ts.map +1 -1
- package/dist/memory/projectManager.js +39 -189
- package/dist/memory/projectManager.js.map +1 -1
- package/dist/memory/projectRegistry.d.ts +14 -62
- package/dist/memory/projectRegistry.d.ts.map +1 -1
- package/dist/memory/projectRegistry.js +27 -111
- package/dist/memory/projectRegistry.js.map +1 -1
- package/dist/memory/roundStore.d.ts +629 -0
- package/dist/memory/roundStore.d.ts.map +1 -0
- package/dist/memory/roundStore.js +116 -0
- package/dist/memory/roundStore.js.map +1 -0
- package/dist/memory/sessionStore.d.ts +70 -61
- package/dist/memory/sessionStore.d.ts.map +1 -1
- package/dist/memory/sessionStore.js +23 -1
- package/dist/memory/sessionStore.js.map +1 -1
- package/dist/memory/sessionViewLoader.d.ts +141 -0
- package/dist/memory/sessionViewLoader.d.ts.map +1 -0
- package/dist/memory/sessionViewLoader.js +65 -0
- package/dist/memory/sessionViewLoader.js.map +1 -0
- package/dist/memory/sourceValidation.d.ts +10 -12
- package/dist/memory/sourceValidation.d.ts.map +1 -1
- package/dist/memory/sourceValidation.js +16 -32
- package/dist/memory/sourceValidation.js.map +1 -1
- package/dist/memory/storageInterface.d.ts +44 -150
- package/dist/memory/storageInterface.d.ts.map +1 -1
- package/dist/memory/types.d.ts +65 -164
- package/dist/memory/types.d.ts.map +1 -1
- package/dist/memory/types.js +81 -83
- package/dist/memory/types.js.map +1 -1
- package/dist/project-search/projectSearchProvider.d.ts +29 -0
- package/dist/project-search/projectSearchProvider.d.ts.map +1 -0
- package/dist/project-search/projectSearchProvider.js +57 -0
- package/dist/project-search/projectSearchProvider.js.map +1 -0
- package/dist/project-search/terms.d.ts +14 -0
- package/dist/project-search/terms.d.ts.map +1 -0
- package/dist/project-search/terms.js +68 -0
- package/dist/project-search/terms.js.map +1 -0
- package/dist/project-search/types.d.ts +139 -0
- package/dist/project-search/types.d.ts.map +1 -0
- package/dist/project-search/types.js +8 -0
- package/dist/project-search/types.js.map +1 -0
- package/dist/role-pack/capabilityMap.d.ts +28 -0
- package/dist/role-pack/capabilityMap.d.ts.map +1 -0
- package/dist/role-pack/capabilityMap.js +56 -0
- package/dist/role-pack/capabilityMap.js.map +1 -0
- package/dist/role-pack/constants.d.ts +21 -0
- package/dist/role-pack/constants.d.ts.map +1 -0
- package/dist/role-pack/constants.js +21 -0
- package/dist/role-pack/constants.js.map +1 -0
- package/dist/role-pack/rolePackManager.d.ts +269 -0
- package/dist/role-pack/rolePackManager.d.ts.map +1 -0
- package/dist/role-pack/rolePackManager.js +1082 -0
- package/dist/role-pack/rolePackManager.js.map +1 -0
- package/dist/role-pack/strategyKeys.d.ts +100 -0
- package/dist/role-pack/strategyKeys.d.ts.map +1 -0
- package/dist/role-pack/strategyKeys.js +184 -0
- package/dist/role-pack/strategyKeys.js.map +1 -0
- package/dist/role-pack/strategyResolver.d.ts +109 -0
- package/dist/role-pack/strategyResolver.d.ts.map +1 -0
- package/dist/role-pack/strategyResolver.js +304 -0
- package/dist/role-pack/strategyResolver.js.map +1 -0
- package/dist/role-pack/types.d.ts +237 -0
- package/dist/role-pack/types.d.ts.map +1 -0
- package/dist/role-pack/types.js +8 -0
- package/dist/role-pack/types.js.map +1 -0
- package/dist/role-pack/validator.d.ts +38 -0
- package/dist/role-pack/validator.d.ts.map +1 -0
- package/dist/role-pack/validator.js +436 -0
- package/dist/role-pack/validator.js.map +1 -0
- package/dist/security/pathGuard.d.ts +69 -72
- package/dist/security/pathGuard.d.ts.map +1 -1
- package/dist/security/pathGuard.js +151 -131
- package/dist/security/pathGuard.js.map +1 -1
- package/dist/skill/skillLayer3.d.ts +91 -0
- package/dist/skill/skillLayer3.d.ts.map +1 -0
- package/dist/skill/skillLayer3.js +104 -0
- package/dist/skill/skillLayer3.js.map +1 -0
- package/dist/skill/skillManager.d.ts +136 -19
- package/dist/skill/skillManager.d.ts.map +1 -1
- package/dist/skill/skillManager.js +312 -61
- package/dist/skill/skillManager.js.map +1 -1
- package/dist/skill/skillScriptRunner.d.ts +97 -0
- package/dist/skill/skillScriptRunner.d.ts.map +1 -0
- package/dist/skill/skillScriptRunner.js +271 -0
- package/dist/skill/skillScriptRunner.js.map +1 -0
- package/dist/skill/types.d.ts +73 -16
- package/dist/skill/types.d.ts.map +1 -1
- package/dist/skill/types.js +5 -1
- package/dist/skill/types.js.map +1 -1
- package/dist/utils/array.d.ts +5 -6
- package/dist/utils/array.d.ts.map +1 -1
- package/dist/utils/array.js +6 -6
- package/dist/utils/array.js.map +1 -1
- package/dist/utils/atomicWrite.d.ts +8 -0
- package/dist/utils/atomicWrite.d.ts.map +1 -0
- package/dist/utils/atomicWrite.js +31 -0
- package/dist/utils/atomicWrite.js.map +1 -0
- package/dist/utils/backgroundTask.d.ts +38 -0
- package/dist/utils/backgroundTask.d.ts.map +1 -0
- package/dist/utils/backgroundTask.js +117 -0
- package/dist/utils/backgroundTask.js.map +1 -0
- package/dist/utils/configResourceManager.d.ts +40 -72
- package/dist/utils/configResourceManager.d.ts.map +1 -1
- package/dist/utils/configResourceManager.js +78 -76
- package/dist/utils/configResourceManager.js.map +1 -1
- package/dist/utils/errors.d.ts +44 -69
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +54 -71
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/eventEmitter.d.ts +104 -103
- package/dist/utils/eventEmitter.d.ts.map +1 -1
- package/dist/utils/eventEmitter.js +37 -45
- package/dist/utils/eventEmitter.js.map +1 -1
- package/dist/utils/fileSafe.d.ts +20 -0
- package/dist/utils/fileSafe.d.ts.map +1 -0
- package/dist/utils/fileSafe.js +56 -0
- package/dist/utils/fileSafe.js.map +1 -0
- package/dist/utils/frontmatter.d.ts +2 -3
- package/dist/utils/frontmatter.d.ts.map +1 -1
- package/dist/utils/frontmatter.js +2 -3
- package/dist/utils/frontmatter.js.map +1 -1
- package/dist/utils/hash.d.ts +12 -0
- package/dist/utils/hash.d.ts.map +1 -0
- package/dist/utils/hash.js +27 -0
- package/dist/utils/hash.js.map +1 -0
- package/dist/utils/http.d.ts +17 -0
- package/dist/utils/http.d.ts.map +1 -0
- package/dist/utils/http.js +29 -0
- package/dist/utils/http.js.map +1 -0
- package/dist/utils/json.d.ts +1 -1
- package/dist/utils/json.js +1 -1
- package/dist/utils/math.d.ts +25 -3
- package/dist/utils/math.d.ts.map +1 -1
- package/dist/utils/math.js +32 -16
- package/dist/utils/math.js.map +1 -1
- package/dist/utils/objects.d.ts +2 -3
- package/dist/utils/objects.d.ts.map +1 -1
- package/dist/utils/objects.js +2 -3
- package/dist/utils/objects.js.map +1 -1
- package/dist/utils/recallDefaults.d.ts +16 -0
- package/dist/utils/recallDefaults.d.ts.map +1 -0
- package/dist/utils/recallDefaults.js +16 -0
- package/dist/utils/recallDefaults.js.map +1 -0
- package/dist/utils/safeTimer.d.ts +8 -36
- package/dist/utils/safeTimer.d.ts.map +1 -1
- package/dist/utils/safeTimer.js +9 -37
- package/dist/utils/safeTimer.js.map +1 -1
- package/dist/utils/scanner.d.ts +97 -17
- package/dist/utils/scanner.d.ts.map +1 -1
- package/dist/utils/scanner.js +269 -47
- package/dist/utils/scanner.js.map +1 -1
- package/dist/utils/segmenter.d.ts +20 -19
- package/dist/utils/segmenter.d.ts.map +1 -1
- package/dist/utils/segmenter.js +230 -97
- package/dist/utils/segmenter.js.map +1 -1
- package/dist/utils/strings.d.ts +15 -32
- package/dist/utils/strings.d.ts.map +1 -1
- package/dist/utils/strings.js +25 -44
- package/dist/utils/strings.js.map +1 -1
- package/dist/utils/time.d.ts +37 -0
- package/dist/utils/time.d.ts.map +1 -1
- package/dist/utils/time.js +56 -0
- package/dist/utils/time.js.map +1 -1
- package/dist/utils/toError.d.ts +13 -1
- package/dist/utils/toError.d.ts.map +1 -1
- package/dist/utils/toError.js +18 -1
- package/dist/utils/toError.js.map +1 -1
- package/dist/web-fetch/fetchWebFetchProvider.d.ts +14 -0
- package/dist/web-fetch/fetchWebFetchProvider.d.ts.map +1 -0
- package/dist/web-fetch/fetchWebFetchProvider.js +69 -0
- package/dist/web-fetch/fetchWebFetchProvider.js.map +1 -0
- package/dist/web-fetch/types.d.ts +30 -0
- package/dist/web-fetch/types.d.ts.map +1 -0
- package/dist/web-fetch/types.js +7 -0
- package/dist/web-fetch/types.js.map +1 -0
- package/dist/web-fetch/webFetchProvider.d.ts +10 -0
- package/dist/web-fetch/webFetchProvider.d.ts.map +1 -0
- package/dist/web-fetch/webFetchProvider.js +28 -0
- package/dist/web-fetch/webFetchProvider.js.map +1 -0
- package/dist/web-search/fetchWebSearchProvider.d.ts +27 -0
- package/dist/web-search/fetchWebSearchProvider.d.ts.map +1 -0
- package/dist/web-search/fetchWebSearchProvider.js +199 -0
- package/dist/web-search/fetchWebSearchProvider.js.map +1 -0
- package/dist/web-search/types.d.ts +46 -0
- package/dist/web-search/types.d.ts.map +1 -0
- package/dist/web-search/types.js +2 -0
- package/dist/{persona → web-search}/types.js.map +1 -1
- package/dist/web-search/webSearchProvider.d.ts +10 -0
- package/dist/web-search/webSearchProvider.d.ts.map +1 -0
- package/dist/web-search/webSearchProvider.js +30 -0
- package/dist/web-search/webSearchProvider.js.map +1 -0
- package/docs/architecture/role-pack-authoring-guide.md +243 -0
- package/docs/architecture/role-pack-spec.md +767 -0
- package/docs/memora-api-reference.md +416 -476
- package/docs/memora-/346/216/245/345/205/245/346/214/207/345/215/227.md +841 -806
- package/docs/role-pack-/345/274/200/346/224/276/351/224/256/346/214/207/345/215/227.md +148 -0
- package/package.json +105 -100
- package/role-packs/README.md +41 -0
- package/role-packs/memora/345/212/251/346/211/213/manifest.json +12 -0
- package/role-packs/memora/345/212/251/346/211/213/persona.md +12 -0
- package/role-packs/memora/345/212/251/346/211/213/rules.md +4 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/manifest.json +44 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/persona.md +46 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/rules.md +15 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/character-sheet.md +34 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/core-extractor.md +37 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/craft-review.md +69 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/dialogue-craft.md +45 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/emotion-wave.md +46 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/empathy-craft.md +79 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/foreshadow.md +29 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/hotspot-mapping.md +121 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/idea-lever.md +42 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/logline-craft.md +47 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/longform-guard.md +64 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/need-finder.md +40 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/outline-expand.md +46 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/pacing-hook.md +34 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/polish-method.md +113 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/pov-discipline.md +79 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/project-init/SKILL.md +112 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/project-init/scripts/init-novel-project.mjs +441 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/relationship-web.md +47 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/scene-craft.md +46 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/story-bible.md +60 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/story-structure.md +36 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/style-weaver.md +109 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/three-layer-check.md +27 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/world-builder.md +41 -0
- package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/manifest.json +48 -0
- package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/persona.md +73 -0
- package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/rules.md +19 -0
- package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/skills/api-doc-writer.md +40 -0
- package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/skills/doc-planner.md +42 -0
- package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/skills/nutrient-search.md +28 -0
- package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/skills/seed-finder.md +28 -0
- package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/skills/ssot-audit.md +34 -0
- package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/skills/style-guide.md +40 -0
- package/dist/agent/guardrail.d.ts +0 -49
- package/dist/agent/guardrail.d.ts.map +0 -1
- package/dist/agent/guardrail.js +0 -59
- package/dist/agent/guardrail.js.map +0 -1
- package/dist/agent/managers/autoConfigRefiner.d.ts +0 -39
- package/dist/agent/managers/autoConfigRefiner.d.ts.map +0 -1
- package/dist/agent/managers/autoConfigRefiner.js +0 -146
- package/dist/agent/managers/autoConfigRefiner.js.map +0 -1
- package/dist/agent/managers/configManager.d.ts +0 -209
- package/dist/agent/managers/configManager.d.ts.map +0 -1
- package/dist/agent/managers/configManager.js +0 -331
- package/dist/agent/managers/configManager.js.map +0 -1
- package/dist/agent/managers/insightExtractor.d.ts +0 -139
- package/dist/agent/managers/insightExtractor.d.ts.map +0 -1
- package/dist/agent/managers/insightExtractor.js +0 -401
- package/dist/agent/managers/insightExtractor.js.map +0 -1
- package/dist/agent/managers/memoryDecayScheduler.d.ts +0 -239
- package/dist/agent/managers/memoryDecayScheduler.d.ts.map +0 -1
- package/dist/agent/managers/memoryDecayScheduler.js +0 -413
- package/dist/agent/managers/memoryDecayScheduler.js.map +0 -1
- package/dist/agent/managers/relationBuilder.d.ts +0 -131
- package/dist/agent/managers/relationBuilder.d.ts.map +0 -1
- package/dist/agent/managers/relationBuilder.js +0 -192
- package/dist/agent/managers/relationBuilder.js.map +0 -1
- package/dist/agent/personaMatcher.d.ts +0 -29
- package/dist/agent/personaMatcher.d.ts.map +0 -1
- package/dist/agent/personaMatcher.js +0 -60
- package/dist/agent/personaMatcher.js.map +0 -1
- package/dist/agent/userFactExtractor.d.ts +0 -25
- package/dist/agent/userFactExtractor.d.ts.map +0 -1
- package/dist/agent/userFactExtractor.js +0 -88
- package/dist/agent/userFactExtractor.js.map +0 -1
- package/dist/eval/evalRunner.d.ts +0 -94
- package/dist/eval/evalRunner.d.ts.map +0 -1
- package/dist/eval/evalRunner.js +0 -141
- package/dist/eval/evalRunner.js.map +0 -1
- package/dist/eval/evalTypes.d.ts +0 -148
- package/dist/eval/evalTypes.d.ts.map +0 -1
- package/dist/eval/evalTypes.js +0 -118
- package/dist/eval/evalTypes.js.map +0 -1
- package/dist/eval/scenarios.d.ts +0 -33
- package/dist/eval/scenarios.d.ts.map +0 -1
- package/dist/eval/scenarios.js +0 -109
- package/dist/eval/scenarios.js.map +0 -1
- package/dist/llm/embedding.d.ts +0 -79
- package/dist/llm/embedding.d.ts.map +0 -1
- package/dist/llm/embedding.js +0 -184
- package/dist/llm/embedding.js.map +0 -1
- package/dist/memory/hybridMerge.d.ts +0 -50
- package/dist/memory/hybridMerge.d.ts.map +0 -1
- package/dist/memory/hybridMerge.js +0 -51
- package/dist/memory/hybridMerge.js.map +0 -1
- package/dist/memory/inMemoryRelationStore.d.ts +0 -58
- package/dist/memory/inMemoryRelationStore.d.ts.map +0 -1
- package/dist/memory/inMemoryRelationStore.js +0 -80
- package/dist/memory/inMemoryRelationStore.js.map +0 -1
- package/dist/memory/loader.d.ts +0 -51
- package/dist/memory/loader.d.ts.map +0 -1
- package/dist/memory/loader.js +0 -100
- package/dist/memory/loader.js.map +0 -1
- package/dist/memory/recall.d.ts +0 -82
- package/dist/memory/recall.d.ts.map +0 -1
- package/dist/memory/recall.js +0 -157
- package/dist/memory/recall.js.map +0 -1
- package/dist/memory/relationStore.d.ts +0 -95
- package/dist/memory/relationStore.d.ts.map +0 -1
- package/dist/memory/relationStore.js +0 -2
- package/dist/memory/relationStore.js.map +0 -1
- package/dist/memory/store.d.ts +0 -71
- package/dist/memory/store.d.ts.map +0 -1
- package/dist/memory/store.js +0 -199
- package/dist/memory/store.js.map +0 -1
- package/dist/memory/userProfile.d.ts +0 -180
- package/dist/memory/userProfile.d.ts.map +0 -1
- package/dist/memory/userProfile.js +0 -381
- package/dist/memory/userProfile.js.map +0 -1
- package/dist/memory/vectorStore.d.ts +0 -179
- package/dist/memory/vectorStore.d.ts.map +0 -1
- package/dist/memory/vectorStore.js +0 -284
- package/dist/memory/vectorStore.js.map +0 -1
- package/dist/persona/personaManager.d.ts +0 -109
- package/dist/persona/personaManager.d.ts.map +0 -1
- package/dist/persona/personaManager.js +0 -315
- package/dist/persona/personaManager.js.map +0 -1
- package/dist/persona/types.d.ts +0 -32
- package/dist/persona/types.d.ts.map +0 -1
- package/dist/persona/types.js +0 -5
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import { MemoraError } from '../utils/errors.js';
|
|
2
|
-
/**
|
|
3
|
-
* 项目注册表条目
|
|
4
|
-
*/
|
|
2
|
+
/** 项目注册表条目 */
|
|
5
3
|
export interface ProjectEntry {
|
|
6
4
|
/** 项目根目录的绝对路径 */
|
|
7
5
|
path: string;
|
|
@@ -11,19 +9,9 @@ export interface ProjectEntry {
|
|
|
11
9
|
lastOpened: string;
|
|
12
10
|
}
|
|
13
11
|
/**
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* 不符合 ProjectEntry[] 契约)时抛出。与"文件不存在"语义区分——后者是首次启动
|
|
18
|
-
* 的正常情况,前者意味着数据可能丢失,需要调用方决策(备份/重建/中止)。
|
|
19
|
-
*
|
|
20
|
-
* 设计意图:
|
|
21
|
-
* - register/unregister 路径必须让此错误向上传播,避免用空数据覆盖损坏文件
|
|
22
|
-
* - list getter 可捕获此错误降级返回空数组(只读操作,不破坏数据)
|
|
23
|
-
*
|
|
24
|
-
* 规则对齐(RULE-ALIGN-0729):继承 MemoraError 而非 Error,统一错误体系
|
|
25
|
-
* (project-rules.md §7.1 + coding-convention-rules.md §2)。保留 registryPath
|
|
26
|
-
* 扩展字段以支持调用方备份/排查流程。
|
|
12
|
+
* 注册表损坏错误:projects.json 存在但无法解析(JSON 语法/结构不符)时抛出。
|
|
13
|
+
* 与"文件不存在"(首次正常)区分;register/unregister 必须向上传播防空覆盖,
|
|
14
|
+
* list getter 可捕获降级返回空数组(只读不破坏数据)。保留 registryPath 供备份/排查。
|
|
27
15
|
*/
|
|
28
16
|
export declare class ProjectRegistryCorruptError extends MemoraError {
|
|
29
17
|
/** 损坏文件的绝对路径,便于备份/排查 */
|
|
@@ -31,65 +19,29 @@ export declare class ProjectRegistryCorruptError extends MemoraError {
|
|
|
31
19
|
constructor(registryPath: string, cause?: unknown);
|
|
32
20
|
}
|
|
33
21
|
/**
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
* 管理 projects.json 文件的读写和条目维护。
|
|
37
|
-
* Windows 文件系统不区分大小写,路径大小写不同视为同一项目。
|
|
22
|
+
* 项目注册表:管理 projects.json 读写与条目维护;Windows 不区分大小写,路径不同大小写视为同一项目。
|
|
38
23
|
*/
|
|
39
24
|
export declare class ProjectRegistry {
|
|
40
25
|
private readonly registryPath;
|
|
41
|
-
/**
|
|
42
|
-
* @param registryPath - 注册表文件绝对路径(projects.json)
|
|
43
|
-
*/
|
|
26
|
+
/** @param registryPath 注册表文件绝对路径(projects.json) */
|
|
44
27
|
constructor(registryPath: string);
|
|
45
28
|
/**
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
* FIX-P0-3:list 是只读操作,损坏时降级返回空数组(UI 显示空列表)。
|
|
49
|
-
* 与 register/unregister 不同——只读不会用空数据覆盖原文件,降级是安全的。
|
|
50
|
-
* 损坏错误记录 warn 日志便于排查,但不向上抛出避免 UI 崩溃。
|
|
29
|
+
* 列出已注册项目(同步 getter 契约)。只读:损坏时降级返回空数组(不破坏数据),
|
|
30
|
+
* 与 register/unregister 写入路径须抛错不同。
|
|
51
31
|
*/
|
|
52
32
|
get list(): ProjectEntry[];
|
|
53
|
-
/**
|
|
54
|
-
* 注册项目到注册表
|
|
55
|
-
*
|
|
56
|
-
* Windows 文件系统不区分大小写,路径大小写不同视为同一项目(更新而非新增)。
|
|
57
|
-
*
|
|
58
|
-
* @param projectPath - 项目根目录绝对路径
|
|
59
|
-
* @param name - 项目名称
|
|
60
|
-
*/
|
|
33
|
+
/** 注册项目:路径大小写不敏感,视为同一项目(更新而非新增) */
|
|
61
34
|
register(projectPath: string, name: string): void;
|
|
62
|
-
/**
|
|
63
|
-
* 从注册表移除项目
|
|
64
|
-
*
|
|
65
|
-
* @param projectPath - 项目根目录绝对路径
|
|
66
|
-
*/
|
|
35
|
+
/** 移除项目(路径大小写不敏感匹配) */
|
|
67
36
|
unregister(projectPath: string): void;
|
|
68
|
-
/**
|
|
69
|
-
* 从项目路径推断项目名称(取路径最后一段目录名)
|
|
70
|
-
*
|
|
71
|
-
* @param projectPath - 项目根目录绝对路径
|
|
72
|
-
* @returns 项目名称(目录名,无法推断时返回 'unnamed')
|
|
73
|
-
*/
|
|
37
|
+
/** 从路径推断项目名称(取最后一段目录名,无法推断返回 'unnamed') */
|
|
74
38
|
static inferProjectName(projectPath: string): string;
|
|
75
39
|
/**
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
* 同步读取:list getter 契约要求同步返回,注册表操作低频,同步 I/O 影响可控。
|
|
79
|
-
*
|
|
80
|
-
* FIX-P0-3:语义区分——
|
|
81
|
-
* - 文件不存在:返回空数组(首次启动的正常情况)
|
|
82
|
-
* - 文件损坏(JSON 解析失败或顶层非数组):抛出 ProjectRegistryCorruptError
|
|
83
|
-
* 让调用方决策。register/unregister 不捕获此错误,避免用空数据覆盖原文件。
|
|
84
|
-
* - 数组内个别条目不合法:仅过滤保留合法条目(容错,不抛错)
|
|
85
|
-
*
|
|
86
|
-
* @returns 项目注册表条目数组
|
|
87
|
-
* @throws {ProjectRegistryCorruptError} 文件存在但内容损坏时抛出
|
|
40
|
+
* 同步读取注册表(list getter 契约)。语义:文件不存在=空数组(首次启动);
|
|
41
|
+
* 解析失败或顶层非数组=抛 ProjectRegistryCorruptError;单条不合法仅过滤。
|
|
88
42
|
*/
|
|
89
43
|
private read;
|
|
90
|
-
/**
|
|
91
|
-
* 写入项目注册表
|
|
92
|
-
*/
|
|
44
|
+
/** 写入注册表 */
|
|
93
45
|
private write;
|
|
94
46
|
}
|
|
95
47
|
//# sourceMappingURL=projectRegistry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projectRegistry.d.ts","sourceRoot":"","sources":["../../src/memory/projectRegistry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"projectRegistry.d.ts","sourceRoot":"","sources":["../../src/memory/projectRegistry.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAMhD,cAAc;AACd,MAAM,WAAW,YAAY;IAC3B,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,sBAAsB;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa;IACb,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,qBAAa,2BAA4B,SAAQ,WAAW;IAC1D,wBAAwB;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;gBAElB,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAkBlD;AA2BD;;GAEG;AACH,qBAAa,eAAe;IAEd,OAAO,CAAC,QAAQ,CAAC,YAAY;IADzC,mDAAmD;gBACtB,YAAY,EAAE,MAAM;IAEjD;;;OAGG;IACH,IAAI,IAAI,IAAI,YAAY,EAAE,CAczB;IAED,mCAAmC;IACnC,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAoBjD,uBAAuB;IACvB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAMrC,2CAA2C;IAC3C,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAKpD;;;OAGG;IACH,OAAO,CAAC,IAAI;IAkCZ,YAAY;IACZ,OAAO,CAAC,KAAK;CAMd"}
|
|
@@ -1,24 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* 项目注册表 —
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* - 注册/注销项目条目(Windows 大小写不敏感去重)
|
|
7
|
-
* - 从路径推断项目名称
|
|
8
|
-
* - 不可信磁盘 JSON 的运行时类型校验(QC-24,替代 `as` 类型断言)
|
|
9
|
-
*
|
|
10
|
-
* 设计原则:
|
|
11
|
-
* - 纯文件系统操作,无锁机制(锁由 LockManager 负责)
|
|
12
|
-
* - 同步 I/O(list getter 契约要求同步返回;注册表操作低频,影响可控)
|
|
13
|
-
* - 损坏语义区分(FIX-P0-3):文件不存在 = 首次启动返回空列表;文件损坏 = 抛出
|
|
14
|
-
* ProjectRegistryCorruptError 让调用方决策。list getter 只读降级返回空,
|
|
15
|
-
* register/unregister 写入路径必须抛错传播,防止用空数据覆盖原文件导致数据丢失
|
|
16
|
-
*
|
|
17
|
-
* 与 ProjectManager 的分工(1.0 接口稳定化):
|
|
18
|
-
* - ProjectRegistry:注册表读写 + 条目管理 + 名称推断
|
|
19
|
-
* - ProjectManager:项目生命周期编排(加锁 + 资源加载 + 上下文构建)
|
|
20
|
-
*
|
|
21
|
-
* 详见 ADR-008 · 目录结构按"职责分层"
|
|
2
|
+
* 项目注册表 — 多项目注册信息持久化(从 ProjectManager 拆出)。
|
|
3
|
+
* 专职读写 projects.json:注册/注销条目(Windows 大小写不敏感去重)、从路径推断名称、
|
|
4
|
+
* 不可信磁盘 JSON 运行时类型校验(替代 as 断言)。无锁(锁归 LockManager);同步 I/O(list getter 契约)。
|
|
5
|
+
* 损坏语义:文件不存在=首次启动返回空;文件损坏抛 ProjectRegistryCorruptError 让调用方决策(防空数据覆盖)。
|
|
22
6
|
*/
|
|
23
7
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
24
8
|
import { logger } from '../logging/logger.js';
|
|
@@ -26,19 +10,9 @@ import { MemoraError } from '../utils/errors.js';
|
|
|
26
10
|
import { nowIso } from '../utils/time.js';
|
|
27
11
|
import { isPlainObject } from '../utils/objects.js';
|
|
28
12
|
/**
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
* 不符合 ProjectEntry[] 契约)时抛出。与"文件不存在"语义区分——后者是首次启动
|
|
33
|
-
* 的正常情况,前者意味着数据可能丢失,需要调用方决策(备份/重建/中止)。
|
|
34
|
-
*
|
|
35
|
-
* 设计意图:
|
|
36
|
-
* - register/unregister 路径必须让此错误向上传播,避免用空数据覆盖损坏文件
|
|
37
|
-
* - list getter 可捕获此错误降级返回空数组(只读操作,不破坏数据)
|
|
38
|
-
*
|
|
39
|
-
* 规则对齐(RULE-ALIGN-0729):继承 MemoraError 而非 Error,统一错误体系
|
|
40
|
-
* (project-rules.md §7.1 + coding-convention-rules.md §2)。保留 registryPath
|
|
41
|
-
* 扩展字段以支持调用方备份/排查流程。
|
|
13
|
+
* 注册表损坏错误:projects.json 存在但无法解析(JSON 语法/结构不符)时抛出。
|
|
14
|
+
* 与"文件不存在"(首次正常)区分;register/unregister 必须向上传播防空覆盖,
|
|
15
|
+
* list getter 可捕获降级返回空数组(只读不破坏数据)。保留 registryPath 供备份/排查。
|
|
42
16
|
*/
|
|
43
17
|
export class ProjectRegistryCorruptError extends MemoraError {
|
|
44
18
|
/** 损坏文件的绝对路径,便于备份/排查 */
|
|
@@ -61,13 +35,8 @@ export class ProjectRegistryCorruptError extends MemoraError {
|
|
|
61
35
|
this.registryPath = registryPath;
|
|
62
36
|
}
|
|
63
37
|
}
|
|
64
|
-
// ───
|
|
65
|
-
/**
|
|
66
|
-
* 判断值是否为 ProjectEntry(项目注册表条目)
|
|
67
|
-
*
|
|
68
|
-
* @param value 待校验的值
|
|
69
|
-
* @returns true 表示符合 ProjectEntry 结构
|
|
70
|
-
*/
|
|
38
|
+
// ─── 类型守卫(对不可信磁盘 JSON 运行时校验) ───────────
|
|
39
|
+
/** 判断值是否为 ProjectEntry */
|
|
71
40
|
function isProjectEntry(value) {
|
|
72
41
|
if (!isPlainObject(value))
|
|
73
42
|
return false;
|
|
@@ -75,20 +44,7 @@ function isProjectEntry(value) {
|
|
|
75
44
|
typeof value['name'] === 'string' &&
|
|
76
45
|
typeof value['lastOpened'] === 'string');
|
|
77
46
|
}
|
|
78
|
-
/**
|
|
79
|
-
* 判断值是否为 ProjectEntry 数组
|
|
80
|
-
*
|
|
81
|
-
* 顶层必须为数组,否则视为注册表结构损坏(抛错让调用方决策)。
|
|
82
|
-
* 数组内个别条目不合法时仅过滤保留合法条目(容错:单条损坏不毁全部)。
|
|
83
|
-
*
|
|
84
|
-
* FIX-P0-3:顶层非数组不再静默返回空,而是抛 ProjectRegistryCorruptError,
|
|
85
|
-
* 避免 register 用空数据覆盖原文件导致全部项目记录永久丢失。
|
|
86
|
-
*
|
|
87
|
-
* @param value 待校验的值
|
|
88
|
-
* @param registryPath 注册表路径(用于错误信息)
|
|
89
|
-
* @returns 解析后的合法条目数组
|
|
90
|
-
* @throws {ProjectRegistryCorruptError} 顶层非数组时抛出
|
|
91
|
-
*/
|
|
47
|
+
/** 顶层必须为数组否则视为损坏(抛错防空数据覆盖);数组内单条不合法仅过滤保留(容错) */
|
|
92
48
|
function asProjectEntryArray(value, registryPath) {
|
|
93
49
|
if (!Array.isArray(value)) {
|
|
94
50
|
throw new ProjectRegistryCorruptError(registryPath, new Error(`注册表顶层应为数组,实际类型:${typeof value}`));
|
|
@@ -97,51 +53,35 @@ function asProjectEntryArray(value, registryPath) {
|
|
|
97
53
|
}
|
|
98
54
|
// ─── 类 ──────────────────────────────────────────────────
|
|
99
55
|
/**
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
-
* 管理 projects.json 文件的读写和条目维护。
|
|
103
|
-
* Windows 文件系统不区分大小写,路径大小写不同视为同一项目。
|
|
56
|
+
* 项目注册表:管理 projects.json 读写与条目维护;Windows 不区分大小写,路径不同大小写视为同一项目。
|
|
104
57
|
*/
|
|
105
58
|
export class ProjectRegistry {
|
|
106
59
|
registryPath;
|
|
107
|
-
/**
|
|
108
|
-
* @param registryPath - 注册表文件绝对路径(projects.json)
|
|
109
|
-
*/
|
|
60
|
+
/** @param registryPath 注册表文件绝对路径(projects.json) */
|
|
110
61
|
constructor(registryPath) {
|
|
111
62
|
this.registryPath = registryPath;
|
|
112
63
|
}
|
|
113
64
|
/**
|
|
114
|
-
*
|
|
115
|
-
*
|
|
116
|
-
* FIX-P0-3:list 是只读操作,损坏时降级返回空数组(UI 显示空列表)。
|
|
117
|
-
* 与 register/unregister 不同——只读不会用空数据覆盖原文件,降级是安全的。
|
|
118
|
-
* 损坏错误记录 warn 日志便于排查,但不向上抛出避免 UI 崩溃。
|
|
65
|
+
* 列出已注册项目(同步 getter 契约)。只读:损坏时降级返回空数组(不破坏数据),
|
|
66
|
+
* 与 register/unregister 写入路径须抛错不同。
|
|
119
67
|
*/
|
|
120
68
|
get list() {
|
|
121
69
|
try {
|
|
122
70
|
return this.read();
|
|
123
71
|
}
|
|
124
72
|
catch (err) {
|
|
125
|
-
// 只读降级:损坏时返回空列表,UI 显示"无项目",但不会破坏磁盘数据
|
|
126
73
|
if (err instanceof ProjectRegistryCorruptError) {
|
|
127
74
|
logger.warn({ path: err.registryPath, cause: err.cause }, '项目注册表损坏,list getter 降级返回空列表(只读,不破坏数据)');
|
|
128
75
|
return [];
|
|
129
76
|
}
|
|
130
|
-
//
|
|
77
|
+
// 非注册表损坏的意外错误仍向上抛出
|
|
131
78
|
throw err;
|
|
132
79
|
}
|
|
133
80
|
}
|
|
134
|
-
/**
|
|
135
|
-
* 注册项目到注册表
|
|
136
|
-
*
|
|
137
|
-
* Windows 文件系统不区分大小写,路径大小写不同视为同一项目(更新而非新增)。
|
|
138
|
-
*
|
|
139
|
-
* @param projectPath - 项目根目录绝对路径
|
|
140
|
-
* @param name - 项目名称
|
|
141
|
-
*/
|
|
81
|
+
/** 注册项目:路径大小写不敏感,视为同一项目(更新而非新增) */
|
|
142
82
|
register(projectPath, name) {
|
|
143
83
|
const registry = this.read();
|
|
144
|
-
// Windows
|
|
84
|
+
// Windows 不区分大小写,大小写不同视为同一项目
|
|
145
85
|
const existing = registry.findIndex((e) => e.path.toLowerCase() === projectPath.toLowerCase());
|
|
146
86
|
const entry = {
|
|
147
87
|
path: projectPath,
|
|
@@ -156,43 +96,23 @@ export class ProjectRegistry {
|
|
|
156
96
|
}
|
|
157
97
|
this.write(registry);
|
|
158
98
|
}
|
|
159
|
-
/**
|
|
160
|
-
* 从注册表移除项目
|
|
161
|
-
*
|
|
162
|
-
* @param projectPath - 项目根目录绝对路径
|
|
163
|
-
*/
|
|
99
|
+
/** 移除项目(路径大小写不敏感匹配) */
|
|
164
100
|
unregister(projectPath) {
|
|
165
101
|
const registry = this.read();
|
|
166
|
-
// Windows 文件系统不区分大小写,大小写不同视为同一项目
|
|
167
102
|
const filtered = registry.filter((e) => e.path.toLowerCase() !== projectPath.toLowerCase());
|
|
168
103
|
this.write(filtered);
|
|
169
104
|
}
|
|
170
|
-
/**
|
|
171
|
-
* 从项目路径推断项目名称(取路径最后一段目录名)
|
|
172
|
-
*
|
|
173
|
-
* @param projectPath - 项目根目录绝对路径
|
|
174
|
-
* @returns 项目名称(目录名,无法推断时返回 'unnamed')
|
|
175
|
-
*/
|
|
105
|
+
/** 从路径推断项目名称(取最后一段目录名,无法推断返回 'unnamed') */
|
|
176
106
|
static inferProjectName(projectPath) {
|
|
177
107
|
const parts = projectPath.replace(/[/\\]+$/, '').split(/[/\\]/);
|
|
178
108
|
return parts[parts.length - 1] || 'unnamed';
|
|
179
109
|
}
|
|
180
110
|
/**
|
|
181
|
-
*
|
|
182
|
-
*
|
|
183
|
-
* 同步读取:list getter 契约要求同步返回,注册表操作低频,同步 I/O 影响可控。
|
|
184
|
-
*
|
|
185
|
-
* FIX-P0-3:语义区分——
|
|
186
|
-
* - 文件不存在:返回空数组(首次启动的正常情况)
|
|
187
|
-
* - 文件损坏(JSON 解析失败或顶层非数组):抛出 ProjectRegistryCorruptError
|
|
188
|
-
* 让调用方决策。register/unregister 不捕获此错误,避免用空数据覆盖原文件。
|
|
189
|
-
* - 数组内个别条目不合法:仅过滤保留合法条目(容错,不抛错)
|
|
190
|
-
*
|
|
191
|
-
* @returns 项目注册表条目数组
|
|
192
|
-
* @throws {ProjectRegistryCorruptError} 文件存在但内容损坏时抛出
|
|
111
|
+
* 同步读取注册表(list getter 契约)。语义:文件不存在=空数组(首次启动);
|
|
112
|
+
* 解析失败或顶层非数组=抛 ProjectRegistryCorruptError;单条不合法仅过滤。
|
|
193
113
|
*/
|
|
194
114
|
read() {
|
|
195
|
-
//
|
|
115
|
+
// 文件不存在=首次启动,返回空数组
|
|
196
116
|
if (!existsSync(this.registryPath)) {
|
|
197
117
|
return [];
|
|
198
118
|
}
|
|
@@ -201,30 +121,26 @@ export class ProjectRegistry {
|
|
|
201
121
|
raw = readFileSync(this.registryPath, 'utf-8');
|
|
202
122
|
}
|
|
203
123
|
catch (err) {
|
|
204
|
-
//
|
|
124
|
+
// 读取失败(权限/磁盘故障)视为损坏
|
|
205
125
|
throw new ProjectRegistryCorruptError(this.registryPath, err);
|
|
206
126
|
}
|
|
207
127
|
let parsed;
|
|
208
128
|
try {
|
|
209
|
-
//
|
|
129
|
+
// 类型守卫校验 JSON.parse 结果,替代 as 断言
|
|
210
130
|
parsed = JSON.parse(raw);
|
|
211
131
|
}
|
|
212
132
|
catch (err) {
|
|
213
|
-
// JSON
|
|
133
|
+
// JSON 语法错误=整体损坏,抛错让调用方决策
|
|
214
134
|
throw new ProjectRegistryCorruptError(this.registryPath, err);
|
|
215
135
|
}
|
|
216
|
-
//
|
|
217
|
-
// 数组内个别条目不合法时仅过滤保留合法条目(容错:单条损坏不毁全部)
|
|
136
|
+
// 顶层非数组视为损坏;单条不合法仅过滤保留合法条目
|
|
218
137
|
const entries = asProjectEntryArray(parsed, this.registryPath);
|
|
219
138
|
if (entries.length === 0 && Array.isArray(parsed) && parsed.length > 0) {
|
|
220
|
-
// 数组存在但所有条目都不合法,记录警告(仍返回空,因为是单条容错的极端情况)
|
|
221
139
|
logger.warn({ path: this.registryPath, totalEntries: parsed.length }, '项目注册表所有条目结构不合法,返回空列表');
|
|
222
140
|
}
|
|
223
141
|
return entries;
|
|
224
142
|
}
|
|
225
|
-
/**
|
|
226
|
-
* 写入项目注册表
|
|
227
|
-
*/
|
|
143
|
+
/** 写入注册表 */
|
|
228
144
|
write(entries) {
|
|
229
145
|
// 确保目录存在
|
|
230
146
|
const dir = this.registryPath.replace(/[/\\][^/\\]+$/, '');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projectRegistry.js","sourceRoot":"","sources":["../../src/memory/projectRegistry.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"projectRegistry.js","sourceRoot":"","sources":["../../src/memory/projectRegistry.ts"],"names":[],"mappings":"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"}
|