@zooique/memora 2.0.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1028 -0
- package/README.en.md +305 -0
- package/README.md +303 -148
- package/config.example.json +43 -0
- package/dist/agent/agent.d.ts +438 -295
- package/dist/agent/agent.d.ts.map +1 -1
- package/dist/agent/agent.js +1368 -836
- package/dist/agent/agent.js.map +1 -1
- package/dist/agent/assembler.d.ts +117 -39
- package/dist/agent/assembler.d.ts.map +1 -1
- package/dist/agent/assembler.js +574 -71
- 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 +229 -17
- package/dist/agent/builtinToolHandlers.d.ts.map +1 -1
- package/dist/agent/builtinToolHandlers.js +758 -70
- 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 +139 -18
- package/dist/agent/constants.d.ts.map +1 -1
- package/dist/agent/constants.js +154 -18
- package/dist/agent/constants.js.map +1 -1
- package/dist/agent/contextManager.d.ts +126 -76
- package/dist/agent/contextManager.d.ts.map +1 -1
- package/dist/agent/contextManager.js +197 -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 +718 -253
- package/dist/agent/loop.d.ts.map +1 -1
- package/dist/agent/loop.js +2215 -648
- package/dist/agent/loop.js.map +1 -1
- package/dist/agent/managers/archiveCoordinator.d.ts +21 -74
- package/dist/agent/managers/archiveCoordinator.d.ts.map +1 -1
- package/dist/agent/managers/archiveCoordinator.js +32 -105
- 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 +85 -0
- package/dist/agent/managers/dedupManager.d.ts.map +1 -0
- package/dist/agent/managers/dedupManager.js +248 -0
- package/dist/agent/managers/dedupManager.js.map +1 -0
- 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 +21 -0
- package/dist/agent/managers/llmJudgeHelper.d.ts.map +1 -0
- package/dist/agent/managers/llmJudgeHelper.js +32 -0
- package/dist/agent/managers/llmJudgeHelper.js.map +1 -0
- 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 +56 -192
- package/dist/agent/managers/memoryAdvisor.js.map +1 -1
- package/dist/agent/managers/memoryGovernance.d.ts +24 -0
- package/dist/agent/managers/memoryGovernance.d.ts.map +1 -0
- package/dist/agent/managers/memoryGovernance.js +46 -0
- package/dist/agent/managers/memoryGovernance.js.map +1 -0
- package/dist/agent/managers/memoryInspector.d.ts +59 -393
- package/dist/agent/managers/memoryInspector.d.ts.map +1 -1
- package/dist/agent/managers/memoryInspector.js +92 -736
- 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 -63
- package/dist/agent/managers/sessionArchiver.d.ts.map +1 -1
- package/dist/agent/managers/sessionArchiver.js +83 -157
- 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 +20 -0
- package/dist/agent/managers/streamAccumulator.d.ts.map +1 -0
- package/dist/agent/managers/streamAccumulator.js +15 -0
- package/dist/agent/managers/streamAccumulator.js.map +1 -0
- 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 +12 -47
- 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 +57 -87
- package/dist/agent/managers/workProjection.d.ts.map +1 -1
- package/dist/agent/managers/workProjection.js +166 -246
- 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 +255 -9
- package/dist/agent/toolExecutor.d.ts.map +1 -1
- package/dist/agent/toolExecutor.js +956 -20
- 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 +512 -162
- 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 +59 -242
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +237 -194
- package/dist/config/loader.js.map +1 -1
- package/dist/index.d.ts +69 -74
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +93 -63
- 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 +29 -25
- package/dist/llm/factory.d.ts.map +1 -1
- package/dist/llm/factory.js +34 -69
- 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 +181 -129
- 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 -29
- package/dist/logging/logger.d.ts.map +1 -1
- package/dist/logging/logger.js +43 -233
- 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 +17 -0
- package/dist/memory/governance.d.ts.map +1 -0
- package/dist/memory/governance.js +17 -0
- package/dist/memory/governance.js.map +1 -0
- 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 +26 -141
- package/dist/memory/inMemoryStorage.d.ts.map +1 -1
- package/dist/memory/inMemoryStorage.js +48 -187
- 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 +7 -2
- package/dist/memory/lockManager.d.ts.map +1 -1
- package/dist/memory/lockManager.js +35 -11
- package/dist/memory/lockManager.js.map +1 -1
- package/dist/memory/projectManager.d.ts +30 -128
- package/dist/memory/projectManager.d.ts.map +1 -1
- package/dist/memory/projectManager.js +39 -171
- package/dist/memory/projectManager.js.map +1 -1
- package/dist/memory/projectRegistry.d.ts +22 -37
- package/dist/memory/projectRegistry.d.ts.map +1 -1
- package/dist/memory/projectRegistry.js +78 -85
- 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 +18 -9
- package/dist/memory/sourceValidation.d.ts.map +1 -1
- package/dist/memory/sourceValidation.js +35 -29
- package/dist/memory/sourceValidation.js.map +1 -1
- package/dist/memory/storageInterface.d.ts +45 -126
- package/dist/memory/storageInterface.d.ts.map +1 -1
- package/dist/memory/types.d.ts +82 -168
- package/dist/memory/types.d.ts.map +1 -1
- package/dist/memory/types.js +116 -79
- 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 +127 -56
- package/dist/skill/skillManager.d.ts.map +1 -1
- package/dist/skill/skillManager.js +318 -163
- 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 -17
- 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 +79 -0
- package/dist/utils/configResourceManager.d.ts.map +1 -0
- package/dist/utils/configResourceManager.js +150 -0
- package/dist/utils/configResourceManager.js.map +1 -0
- package/dist/utils/errors.d.ts +48 -56
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +60 -58
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/eventEmitter.d.ts +141 -63
- package/dist/utils/eventEmitter.d.ts.map +1 -1
- package/dist/utils/eventEmitter.js +50 -35
- 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 +6 -5
- 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 +34 -1
- package/dist/utils/math.d.ts.map +1 -1
- package/dist/utils/math.js +47 -14
- 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 -29
- package/dist/utils/segmenter.d.ts.map +1 -1
- package/dist/utils/segmenter.js +230 -88
- 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 +1175 -0
- package/docs/memora-/346/216/245/345/205/245/346/214/207/345/215/227.md +843 -0
- 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 -83
- 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 -47
- package/dist/agent/guardrail.d.ts.map +0 -1
- package/dist/agent/guardrail.js +0 -51
- 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 -150
- package/dist/agent/managers/autoConfigRefiner.js.map +0 -1
- package/dist/agent/managers/configManager.d.ts +0 -125
- package/dist/agent/managers/configManager.d.ts.map +0 -1
- package/dist/agent/managers/configManager.js +0 -194
- 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 -198
- package/dist/agent/managers/memoryDecayScheduler.d.ts.map +0 -1
- package/dist/agent/managers/memoryDecayScheduler.js +0 -349
- 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 -81
- 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 -67
- 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 -54
- package/dist/memory/hybridMerge.d.ts.map +0 -1
- package/dist/memory/hybridMerge.js +0 -36
- package/dist/memory/hybridMerge.js.map +0 -1
- package/dist/memory/inMemoryRelationStore.d.ts +0 -51
- package/dist/memory/inMemoryRelationStore.d.ts.map +0 -1
- package/dist/memory/inMemoryRelationStore.js +0 -65
- package/dist/memory/inMemoryRelationStore.js.map +0 -1
- package/dist/memory/loader.d.ts +0 -49
- package/dist/memory/loader.d.ts.map +0 -1
- package/dist/memory/loader.js +0 -93
- package/dist/memory/loader.js.map +0 -1
- package/dist/memory/recall.d.ts +0 -66
- package/dist/memory/recall.d.ts.map +0 -1
- package/dist/memory/recall.js +0 -142
- package/dist/memory/recall.js.map +0 -1
- package/dist/memory/relationStore.d.ts +0 -78
- 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 -50
- package/dist/memory/store.d.ts.map +0 -1
- package/dist/memory/store.js +0 -161
- package/dist/memory/store.js.map +0 -1
- package/dist/memory/userProfile.d.ts +0 -156
- package/dist/memory/userProfile.d.ts.map +0 -1
- package/dist/memory/userProfile.js +0 -320
- package/dist/memory/userProfile.js.map +0 -1
- package/dist/memory/vectorStore.d.ts +0 -185
- package/dist/memory/vectorStore.d.ts.map +0 -1
- package/dist/memory/vectorStore.js +0 -257
- package/dist/memory/vectorStore.js.map +0 -1
- package/dist/persona/personaManager.d.ts +0 -160
- package/dist/persona/personaManager.d.ts.map +0 -1
- package/dist/persona/personaManager.js +0 -414
- 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,38 @@
|
|
|
1
|
+
/** 后台任务累计统计快照(宿主读后台健康度,纯只读) */
|
|
2
|
+
export interface BackgroundTaskStats {
|
|
3
|
+
/** 在途任务数(含排队中的) */
|
|
4
|
+
pending: number;
|
|
5
|
+
/** 成功完成数(累计) */
|
|
6
|
+
completed: number;
|
|
7
|
+
/** 失败数(累计,未被业务侧消化的) */
|
|
8
|
+
failed: number;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* 启动一个后台任务(不阻塞调用方)。统一计数 + 兜底失败日志 + 并发槽位控制。
|
|
12
|
+
* 保留「调用即纳入在途计数」的契约——无论立即执行还是排队等待。
|
|
13
|
+
*
|
|
14
|
+
* @param label 任务标签(日志/观测区分用途)
|
|
15
|
+
* @param factory 返回业务 Promise 的工厂;内部不要自行 `catch`,交给本门面统一兜底计数
|
|
16
|
+
* @param onFailure 失败时的业务侧补救(如宿主事件 emit);缺省仅记日志
|
|
17
|
+
*/
|
|
18
|
+
export declare function backgroundTask(label: string, factory: () => Promise<unknown>, onFailure?: (err: unknown) => void): void;
|
|
19
|
+
/** 读取后台任务累计统计快照(只读副本,宿主可观测后台健康度) */
|
|
20
|
+
export declare function getBackgroundTaskStats(): BackgroundTaskStats;
|
|
21
|
+
/**
|
|
22
|
+
* 等待所有在途后台任务完成(带超时保护,防止任务永不返回阻塞 close)。
|
|
23
|
+
* Agent.close() 必须调用此函数——否则后台命中刷新/摘要生成等任务可能在 storage 关闭后 upsert 失效。
|
|
24
|
+
*
|
|
25
|
+
* @param timeoutMs 超时时间(毫秒),默认 5000ms
|
|
26
|
+
* @returns **等待开始时**的在途任务数(0 = 进入本函数时无在途任务)。
|
|
27
|
+
* ⚠️ 该值是「曾经在途」而非「已等到完成」:超时放弃剩余任务时返回值仍为初始在途数,
|
|
28
|
+
* 不代表实际完成数。调用方据此判断「是否有在途任务」是正确的(如 `Agent.close()` 的
|
|
29
|
+
* `awaited > 0`),但**不可当作已完成计数**使用。
|
|
30
|
+
*/
|
|
31
|
+
export declare function awaitBackgroundTasks(timeoutMs?: number): Promise<number>;
|
|
32
|
+
/**
|
|
33
|
+
* 重置模块级状态(仅测试使用,生产代码禁止调用)。
|
|
34
|
+
* 清理 activeCount、pendingQueue、stats,确保测试用例间状态隔离。
|
|
35
|
+
* @internal
|
|
36
|
+
*/
|
|
37
|
+
export declare function _resetBackgroundTaskState(): void;
|
|
38
|
+
//# sourceMappingURL=backgroundTask.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backgroundTask.d.ts","sourceRoot":"","sources":["../../src/utils/backgroundTask.ts"],"names":[],"mappings":"AAaA,+BAA+B;AAC/B,MAAM,WAAW,mBAAmB;IAClC,mBAAmB;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,uBAAuB;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB;AAmBD;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,EAC/B,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,GACjC,IAAI,CAWN;AA4CD,oCAAoC;AACpC,wBAAgB,sBAAsB,IAAI,mBAAmB,CAE5D;AAED;;;;;;;;;GASG;AACH,wBAAsB,oBAAoB,CAAC,SAAS,SAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAiB5E;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,IAAI,IAAI,CAMhD"}
|
|
@@ -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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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type { ScannedMarkdownEntry } from '../utils/scanner.js';
|
|
2
|
+
/** 配置资源最小约束 */
|
|
3
|
+
export interface ConfigResource {
|
|
4
|
+
name: string;
|
|
5
|
+
content: string;
|
|
6
|
+
filePath: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* 配置资源管理器 — 抽象基类
|
|
10
|
+
* @typeParam T 子类资源类型
|
|
11
|
+
* @typeParam TOptions load() 的可选参数类型
|
|
12
|
+
*/
|
|
13
|
+
export declare abstract class ConfigResourceManager<T extends ConfigResource, TOptions = undefined> {
|
|
14
|
+
protected readonly configDir: string | undefined;
|
|
15
|
+
protected readonly subdir: string;
|
|
16
|
+
/** 资源列表缓存 */
|
|
17
|
+
protected items: T[];
|
|
18
|
+
/**
|
|
19
|
+
* 运行时注入项的名字集合——「是否有磁盘真理源」必须显式记账,不能从 filePath 反推
|
|
20
|
+
* (注入方 filePath 是约定,可填 '<runtime>')。registerRuntimeItem() 登记,deleteItem/loadItems 注销。
|
|
21
|
+
*/
|
|
22
|
+
private readonly runtimeNames;
|
|
23
|
+
/**
|
|
24
|
+
* @param configDir 配置目录(资源在 <configDir>/<subdir>/ 下)
|
|
25
|
+
* @param subdir 资源子目录名(如 'skills'、'personas')
|
|
26
|
+
*/
|
|
27
|
+
constructor(configDir: string | undefined, subdir: string);
|
|
28
|
+
/**
|
|
29
|
+
* 资源列表快照——返回浅拷贝而非内部数组引用,
|
|
30
|
+
* 防止外部 push/splice 绕过 register() 的重名校验与 deleteItem() 记账。
|
|
31
|
+
*/
|
|
32
|
+
get list(): T[];
|
|
33
|
+
/** 加载资源到缓存,items 整体替换、运行时记账作废(子类 load() 中调用) */
|
|
34
|
+
protected loadItems(options?: TOptions): Promise<number>;
|
|
35
|
+
/**
|
|
36
|
+
* 重载资源——不能整体覆盖 items:那会抹除无磁盘真理源的运行时注入项
|
|
37
|
+
* (如 SkillManager.register 注入的运行时技能,纯内存态、不进记忆库),两侧就此分叉。
|
|
38
|
+
* 判据取 runtimeNames 显式记账;同名冲突以磁盘(更强真理源)为准并注销登记。
|
|
39
|
+
*/
|
|
40
|
+
reload(): Promise<number>;
|
|
41
|
+
/**
|
|
42
|
+
* 子类声明「用户版本覆盖磁盘同名」的条目(默认无)
|
|
43
|
+
*
|
|
44
|
+
* 默认语义 = 磁盘(更强真理源)赢:运行时注入项撞磁盘扫描同名时,磁盘版胜出、
|
|
45
|
+
* 运行时记账注销。SkillManager 的用户技能目录(loadExtraDir)则声明为覆盖——
|
|
46
|
+
* reload 时用户版胜出、记账保留、扫描到的内置版被剔除(见 retainRuntimeItems)。
|
|
47
|
+
* RolePackManager 不覆写,保持默认「磁盘赢」。
|
|
48
|
+
*/
|
|
49
|
+
protected isUserOverride(_name: string): boolean;
|
|
50
|
+
/**
|
|
51
|
+
* 将磁盘扫描结果与运行时注入项合并(子类自定义扫描的 reload 也应复用本方法):
|
|
52
|
+
* 重新扫描磁盘后,保留无磁盘真理源的运行时注入项(如 loadExtraDir 注入的用户资源),
|
|
53
|
+
* 同名冲突以磁盘(更强真理源)为准并注销运行时记账——除非子类将同名声明为
|
|
54
|
+
* isUserOverride(用户覆盖内置):此时用户版保留、记账保留、磁盘版被剔除。
|
|
55
|
+
*
|
|
56
|
+
* @param scanned 本次磁盘扫描得到的资源列表
|
|
57
|
+
* @returns 合并后的完整资源列表(磁盘在前、运行时注入在后)
|
|
58
|
+
*/
|
|
59
|
+
protected retainRuntimeItems(scanned: T[]): T[];
|
|
60
|
+
/** 从内存缓存删除资源(含注销运行时记账) */
|
|
61
|
+
deleteItem(name: string): boolean;
|
|
62
|
+
/**
|
|
63
|
+
* 登记运行时注入的资源(子类 register() 唯一落点)——必须记账,
|
|
64
|
+
* 否则 reload() 会把无磁盘真理源的注入项当成"磁盘上已删除"而抹掉。
|
|
65
|
+
* 重名校验由子类调用前完成(各自语义不同)。
|
|
66
|
+
*/
|
|
67
|
+
protected registerRuntimeItem(item: T): void;
|
|
68
|
+
/** 构建 system prompt 片段(name 不传则用当前激活资源) */
|
|
69
|
+
abstract buildSystemPrompt(name?: string): string;
|
|
70
|
+
/** 从扫描条目构建资源对象(子类实现差异化字段解析;返回 null 跳过该条目) */
|
|
71
|
+
protected createEntry(_entry: ScannedMarkdownEntry): Promise<T | null>;
|
|
72
|
+
/** load() 完成后的回调(子类可做激活选择) */
|
|
73
|
+
protected onAfterLoad(_items: T[], _options?: TOptions): void;
|
|
74
|
+
/** reload() 完成后的回调(子类可保持当前激活状态) */
|
|
75
|
+
protected onAfterReload(_items: T[]): void;
|
|
76
|
+
/** 扫描目录 + 构建条目列表(按 name 去重) */
|
|
77
|
+
private scanAndBuild;
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=configResourceManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 配置资源管理器抽象基类 — 消除 SkillManager / RolePackManager 的重复结构:
|
|
3
|
+
* 扫描 <configDir>/<subdir>/ 的 .md、load/reload/deleteItem 生命周期。
|
|
4
|
+
* 差异化保留在子类(createEntry 条目构造、buildSystemPrompt、各自额外状态/能力)。
|
|
5
|
+
*/
|
|
6
|
+
import { logger } from '../logging/logger.js';
|
|
7
|
+
import { resolveSubdir, scanMarkdownDir } from '../utils/scanner.js';
|
|
8
|
+
/**
|
|
9
|
+
* 配置资源管理器 — 抽象基类
|
|
10
|
+
* @typeParam T 子类资源类型
|
|
11
|
+
* @typeParam TOptions load() 的可选参数类型
|
|
12
|
+
*/
|
|
13
|
+
export class ConfigResourceManager {
|
|
14
|
+
configDir;
|
|
15
|
+
subdir;
|
|
16
|
+
/** 资源列表缓存 */
|
|
17
|
+
items = [];
|
|
18
|
+
/**
|
|
19
|
+
* 运行时注入项的名字集合——「是否有磁盘真理源」必须显式记账,不能从 filePath 反推
|
|
20
|
+
* (注入方 filePath 是约定,可填 '<runtime>')。registerRuntimeItem() 登记,deleteItem/loadItems 注销。
|
|
21
|
+
*/
|
|
22
|
+
runtimeNames = new Set();
|
|
23
|
+
/**
|
|
24
|
+
* @param configDir 配置目录(资源在 <configDir>/<subdir>/ 下)
|
|
25
|
+
* @param subdir 资源子目录名(如 'skills'、'personas')
|
|
26
|
+
*/
|
|
27
|
+
constructor(configDir, subdir) {
|
|
28
|
+
this.configDir = configDir;
|
|
29
|
+
this.subdir = subdir;
|
|
30
|
+
}
|
|
31
|
+
// ── 公共 API ──────────────────────────────────────────
|
|
32
|
+
/**
|
|
33
|
+
* 资源列表快照——返回浅拷贝而非内部数组引用,
|
|
34
|
+
* 防止外部 push/splice 绕过 register() 的重名校验与 deleteItem() 记账。
|
|
35
|
+
*/
|
|
36
|
+
get list() {
|
|
37
|
+
return [...this.items];
|
|
38
|
+
}
|
|
39
|
+
// ── 受保护的基础设施 ──────────────────────────────────
|
|
40
|
+
/** 加载资源到缓存,items 整体替换、运行时记账作废(子类 load() 中调用) */
|
|
41
|
+
async loadItems(options) {
|
|
42
|
+
this.items = await this.scanAndBuild();
|
|
43
|
+
this.runtimeNames.clear();
|
|
44
|
+
this.onAfterLoad(this.items, options);
|
|
45
|
+
logger.info({ count: this.items.length, names: this.items.map((i) => i.name), subdir: this.subdir }, `${this.subdir} 资源加载完成`);
|
|
46
|
+
return this.items.length;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* 重载资源——不能整体覆盖 items:那会抹除无磁盘真理源的运行时注入项
|
|
50
|
+
* (如 SkillManager.register 注入的运行时技能,纯内存态、不进记忆库),两侧就此分叉。
|
|
51
|
+
* 判据取 runtimeNames 显式记账;同名冲突以磁盘(更强真理源)为准并注销登记。
|
|
52
|
+
*/
|
|
53
|
+
async reload() {
|
|
54
|
+
const oldCount = this.items.length;
|
|
55
|
+
const scanned = await this.scanAndBuild();
|
|
56
|
+
this.items = this.retainRuntimeItems(scanned);
|
|
57
|
+
this.onAfterReload(this.items);
|
|
58
|
+
logger.info({
|
|
59
|
+
oldCount,
|
|
60
|
+
newCount: this.items.length,
|
|
61
|
+
retainedRuntime: this.items.length - scanned.length,
|
|
62
|
+
subdir: this.subdir,
|
|
63
|
+
}, `${this.subdir} 资源已重载`);
|
|
64
|
+
return this.items.length;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* 子类声明「用户版本覆盖磁盘同名」的条目(默认无)
|
|
68
|
+
*
|
|
69
|
+
* 默认语义 = 磁盘(更强真理源)赢:运行时注入项撞磁盘扫描同名时,磁盘版胜出、
|
|
70
|
+
* 运行时记账注销。SkillManager 的用户技能目录(loadExtraDir)则声明为覆盖——
|
|
71
|
+
* reload 时用户版胜出、记账保留、扫描到的内置版被剔除(见 retainRuntimeItems)。
|
|
72
|
+
* RolePackManager 不覆写,保持默认「磁盘赢」。
|
|
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
|
+
/** 从内存缓存删除资源(含注销运行时记账) */
|
|
99
|
+
deleteItem(name) {
|
|
100
|
+
const idx = this.items.findIndex((i) => i.name === name);
|
|
101
|
+
if (idx < 0) {
|
|
102
|
+
logger.warn({ name, subdir: this.subdir }, '内存缓存中未找到资源,跳过删除');
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
this.items.splice(idx, 1);
|
|
106
|
+
this.runtimeNames.delete(name);
|
|
107
|
+
logger.info({ name, remaining: this.items.length, subdir: this.subdir }, '资源已从内存缓存删除');
|
|
108
|
+
return true;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* 登记运行时注入的资源(子类 register() 唯一落点)——必须记账,
|
|
112
|
+
* 否则 reload() 会把无磁盘真理源的注入项当成"磁盘上已删除"而抹掉。
|
|
113
|
+
* 重名校验由子类调用前完成(各自语义不同)。
|
|
114
|
+
*/
|
|
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;
|
|
123
|
+
}
|
|
124
|
+
// ── 生命周期钩子(子类可选覆写) ──────────────────────────
|
|
125
|
+
/** load() 完成后的回调(子类可做激活选择) */
|
|
126
|
+
onAfterLoad(_items, _options) {
|
|
127
|
+
// 默认空实现
|
|
128
|
+
}
|
|
129
|
+
/** reload() 完成后的回调(子类可保持当前激活状态) */
|
|
130
|
+
onAfterReload(_items) {
|
|
131
|
+
// 默认空实现
|
|
132
|
+
}
|
|
133
|
+
// ── 私有方法 ──────────────────────────────────────────
|
|
134
|
+
/** 扫描目录 + 构建条目列表(按 name 去重) */
|
|
135
|
+
async scanAndBuild() {
|
|
136
|
+
const map = new Map();
|
|
137
|
+
const dir = resolveSubdir(this.configDir, this.subdir);
|
|
138
|
+
if (!dir)
|
|
139
|
+
return [];
|
|
140
|
+
const entries = await scanMarkdownDir(dir);
|
|
141
|
+
for (const entry of entries) {
|
|
142
|
+
const item = await this.createEntry(entry);
|
|
143
|
+
if (item !== null) {
|
|
144
|
+
map.set(entry.name, item);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return Array.from(map.values());
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=configResourceManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configResourceManager.js","sourceRoot":"","sources":["../../src/utils/configResourceManager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAUpE;;;;GAIG;AACH,MAAM,OAAgB,qBAAqB;IAepB;IACA;IAfrB,aAAa;IACH,KAAK,GAAQ,EAAE,CAAC;IAE1B;;;OAGG;IACc,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IAElD;;;OAGG;IACH,YACqB,SAA6B,EAC7B,MAAc;QADd,cAAS,GAAT,SAAS,CAAoB;QAC7B,WAAM,GAAN,MAAM,CAAQ;IAChC,CAAC;IAEJ,uDAAuD;IAEvD;;;OAGG;IACH,IAAI,IAAI;QACN,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,iDAAiD;IAEjD,gDAAgD;IACtC,KAAK,CAAC,SAAS,CAAC,OAAkB;QAC1C,IAAI,CAAC,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QACvC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACtC,MAAM,CAAC,IAAI,CACT,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EACvF,GAAG,IAAI,CAAC,MAAM,SAAS,CACxB,CAAC;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,MAAM;QACV,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC1C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/B,MAAM,CAAC,IAAI,CACT;YACE,QAAQ;YACR,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;YAC3B,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM;YACnD,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,EACD,GAAG,IAAI,CAAC,MAAM,QAAQ,CACvB,CAAC;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED;;;;;;;OAOG;IACO,cAAc,CAAC,KAAa;QACpC,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;;;OAQG;IACO,kBAAkB,CAAC,OAAY;QACvC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACzD,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CACvC,CAAC,CAAC,EAAE,EAAE,CACJ,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAC9F,CAAC;QACF,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACrC,mDAAmD;YACnD,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;gBAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3F,CAAC;QACD,oCAAoC;QACpC,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7E,OAAO,CAAC,GAAG,gBAAgB,EAAE,GAAG,eAAe,CAAC,CAAC;IACnD,CAAC;IAED,0BAA0B;IAC1B,UAAU,CAAC,IAAY;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QACzD,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;YACZ,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,iBAAiB,CAAC,CAAC;YAC9D,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC1B,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,CAAC,IAAI,CACT,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAC3D,YAAY,CACb,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACO,mBAAmB,CAAC,IAAO;QACnC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAOD,6CAA6C;IACnC,KAAK,CAAC,WAAW,CAAC,MAA4B;QACtD,sBAAsB;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,+CAA+C;IAE/C,8BAA8B;IACpB,WAAW,CAAC,MAAW,EAAE,QAAmB;QACpD,QAAQ;IACV,CAAC;IAED,mCAAmC;IACzB,aAAa,CAAC,MAAW;QACjC,QAAQ;IACV,CAAC;IAED,qDAAqD;IAErD,+BAA+B;IACvB,KAAK,CAAC,YAAY;QACxB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAa,CAAC;QACjC,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACvD,IAAI,CAAC,GAAG;YAAE,OAAO,EAAE,CAAC;QAEpB,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,GAAG,CAAC,CAAC;QAC3C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAC3C,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBAClB,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IAClC,CAAC;CACF"}
|
package/dist/utils/errors.d.ts
CHANGED
|
@@ -1,43 +1,38 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* 统一错误类型——把"系统 Error + 英文 stack"包装成"分类清晰 + 中文友好 + 有下一步建议"。
|
|
3
|
+
* 展示:标题(一眼看出问题)+ 详情(排查用)+ 建议(怎么修复)。
|
|
3
4
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
5
|
+
* **形态**:错误类只有 `MemoraError` 一个(承载 title/detail/suggestions/category);
|
|
6
|
+
* 分类不靠子类,靠 `category` 字段 —— 工厂函数按分类建实例:
|
|
7
|
+
* `configError` / `networkError` / `llmError` / `toolError` / `securityError`,
|
|
8
|
+
* 另有统一文案模板 `chatBusyError`(对话繁忙,内部走 configError)。
|
|
9
|
+
* ⚠️ 旧注释曾写「4 大类 ConfigError/NetworkError/…」——**本文件不存在这些 PascalCase 类名**
|
|
10
|
+
* (既非类也非工厂名),且实为 **6 个 category 值**:`security` 由 securityError 产出、
|
|
11
|
+
* 被 security/pathGuard 生产消费 4 处;`unknown` 为兜底值(当前无工厂产出,供直接构造保留)。
|
|
12
|
+
* 勿按旧注释去改分类集合。
|
|
6
13
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* - NetworkError 网络错误(连接超时、DNS 失败、限流等)
|
|
10
|
-
* - LlmError LLM 错误(4xx/5xx、返回异常 JSON)
|
|
11
|
-
* - ToolError 工具错误(路径越界、参数无效等)
|
|
12
|
-
*
|
|
13
|
-
* 错误展示原则:
|
|
14
|
-
* 1. 标题(中文)—— 一眼看出什么问题
|
|
15
|
-
* 2. 详情(原文)—— 排查用
|
|
16
|
-
* 3. 建议(下一步)—— 怎么修复
|
|
14
|
+
* ⚠️ 与宿主 `LlmErrorCategory`('connection'|'timeout'|'unknown')**不是同一个联合**:
|
|
15
|
+
* 后者是**流式 error chunk** 的分类(见 hosts shared/protocol.ts),本文件只管 MemoraError。
|
|
17
16
|
*/
|
|
18
|
-
export { toError } from '../utils/toError.js';
|
|
19
17
|
type ErrorCategory = 'config' | 'network' | 'llm' | 'tool' | 'security' | 'unknown';
|
|
20
18
|
/**
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
* 每个错误码关联一个 retryable 标记:
|
|
24
|
-
* - retryable:LLM 可以调整参数后重试(如文件路径错误、参数类型错误)
|
|
25
|
-
* - non-retryable:重试无意义(如权限拒绝、用户拒绝写入)
|
|
19
|
+
* 工具错误码——供 AgentLoop 的 Reflection(自修正)判断是否可重试:
|
|
20
|
+
* retryable 表示 LLM 调整参数后可重试;non-retryable 重试无意义。
|
|
26
21
|
*/
|
|
27
22
|
export declare const ToolErrorCode: {
|
|
28
23
|
/** 路径不在白名单内(不可重试) */
|
|
29
24
|
readonly PATH_NOT_ALLOWED: "PATH_NOT_ALLOWED";
|
|
30
|
-
/**
|
|
25
|
+
/** 文件不存在(可重试) */
|
|
31
26
|
readonly FILE_NOT_FOUND: "FILE_NOT_FOUND";
|
|
32
27
|
/** 权限不足(不可重试) */
|
|
33
28
|
readonly PERMISSION_DENIED: "PERMISSION_DENIED";
|
|
34
|
-
/**
|
|
29
|
+
/** 参数错误(可重试) */
|
|
35
30
|
readonly ARGUMENT_ERROR: "ARGUMENT_ERROR";
|
|
36
31
|
/** 用户拒绝写入(不可重试) */
|
|
37
32
|
readonly WRITE_REJECTED: "WRITE_REJECTED";
|
|
38
|
-
/**
|
|
33
|
+
/** 目录不存在(可重试) */
|
|
39
34
|
readonly DIR_NOT_FOUND: "DIR_NOT_FOUND";
|
|
40
|
-
/**
|
|
35
|
+
/** 未知工具(不可重试) */
|
|
41
36
|
readonly UNKNOWN_TOOL: "UNKNOWN_TOOL";
|
|
42
37
|
/** 自定义工具执行失败(可重试) */
|
|
43
38
|
readonly CUSTOM_TOOL_FAILED: "CUSTOM_TOOL_FAILED";
|
|
@@ -47,17 +42,11 @@ export declare const ToolErrorCode: {
|
|
|
47
42
|
export type ToolErrorCodeValue = (typeof ToolErrorCode)[keyof typeof ToolErrorCode];
|
|
48
43
|
export declare function isRetryableErrorCode(code: ToolErrorCodeValue): boolean;
|
|
49
44
|
interface FriendlyErrorOptions {
|
|
50
|
-
/** 用户能看懂的简短标题(中文) */
|
|
51
45
|
title: string;
|
|
52
|
-
/** 详细原因(可含原文) */
|
|
53
46
|
detail?: string;
|
|
54
|
-
/** 下一步建议(数组,按优先级) */
|
|
55
47
|
suggestions: string[];
|
|
56
|
-
/** 错误分类 */
|
|
57
48
|
category: ErrorCategory;
|
|
58
|
-
/** 工具错误码(用于 AgentLoop Reflection 判断是否可重试) */
|
|
59
49
|
errorCode?: ToolErrorCodeValue;
|
|
60
|
-
/** 原始错误(保留 stack) */
|
|
61
50
|
cause?: Error;
|
|
62
51
|
}
|
|
63
52
|
export declare class MemoraError extends Error {
|
|
@@ -65,43 +54,46 @@ export declare class MemoraError extends Error {
|
|
|
65
54
|
readonly detail: string | undefined;
|
|
66
55
|
readonly suggestions: readonly string[];
|
|
67
56
|
readonly category: ErrorCategory;
|
|
68
|
-
/** 工具错误码(用于 AgentLoop 反思判断是否可重试) */
|
|
69
57
|
readonly errorCode: ToolErrorCodeValue | undefined;
|
|
70
58
|
readonly cause: Error | undefined;
|
|
71
59
|
constructor(opts: FriendlyErrorOptions);
|
|
72
|
-
/**
|
|
73
|
-
* 格式化为用户可读的展示字符串
|
|
74
|
-
*/
|
|
60
|
+
/** 格式化为用户可读的展示字符串 */
|
|
75
61
|
format(): string;
|
|
76
62
|
}
|
|
77
|
-
/**
|
|
78
|
-
* 工厂:配置错误
|
|
79
|
-
*/
|
|
63
|
+
/** 工厂:配置错误 */
|
|
80
64
|
export declare function configError(title: string, detail: string | undefined, suggestions: string[], cause?: Error): MemoraError;
|
|
81
|
-
/**
|
|
82
|
-
* 工厂:对话繁忙错误
|
|
83
|
-
*
|
|
84
|
-
* 用于 chat() 进行中时拒绝其他需要独占 Agent 的操作(切换项目/Provider/会话/重载配置等)。
|
|
85
|
-
* 12 处调用点统一使用此工厂,消除 `configError('对话繁忙', ...)` 的重复模板(ADR-017 枝叶层 2 次提取)。
|
|
86
|
-
*
|
|
87
|
-
* @param action 被拒绝的操作描述(如"切换项目"),拼接到"请等待其结束后再"之后
|
|
88
|
-
* @returns MemoraError(config 类别)
|
|
89
|
-
*/
|
|
65
|
+
/** 工厂:对话繁忙错误——chat() 进行中拒绝其他需独占 Agent 的操作,统一模板用此工厂 */
|
|
90
66
|
export declare function chatBusyError(action: string): MemoraError;
|
|
91
|
-
/**
|
|
92
|
-
* 工厂:网络错误
|
|
93
|
-
*/
|
|
67
|
+
/** 工厂:网络错误 */
|
|
94
68
|
export declare function networkError(title: string, detail: string | undefined, suggestions: string[], cause?: Error): MemoraError;
|
|
95
|
-
/**
|
|
96
|
-
* 工厂:LLM 错误
|
|
97
|
-
*/
|
|
69
|
+
/** 工厂:LLM 错误 */
|
|
98
70
|
export declare function llmError(title: string, detail: string | undefined, suggestions: string[], cause?: Error): MemoraError;
|
|
99
|
-
/**
|
|
100
|
-
* 工厂:工具错误
|
|
101
|
-
*/
|
|
71
|
+
/** 工厂:工具错误 */
|
|
102
72
|
export declare function toolError(title: string, detail: string | undefined, suggestions: string[], cause?: Error, errorCode?: ToolErrorCodeValue): MemoraError;
|
|
73
|
+
/** 工厂:安全错误(路径越界、黑名单命中、权限不足等) */
|
|
74
|
+
export declare function securityError(title: string, detail: string | undefined, suggestions: string[], cause?: Error): MemoraError;
|
|
75
|
+
/** 判断是否为 AbortError(用户主动取消或超时中断)——统一基于 err.name === 'AbortError',
|
|
76
|
+
* 兼容原生 DOMException / 普通 Error 子类 / toError() 规范化后对象。 */
|
|
77
|
+
export declare function isAbortError(err: unknown): boolean;
|
|
78
|
+
/** 判断 AbortSignal 是否为「超时中断」(chat 锁超时 / LLM 无响应超时统一以 TimeoutError reason 标识)。
|
|
79
|
+
* 与用户取消(abort() 无 reason / AbortError reason)区分——锁超时中断不能谎报成用户取消。 */
|
|
80
|
+
export declare function isTimeoutAbortSignal(signal: AbortSignal | undefined): boolean;
|
|
103
81
|
/**
|
|
104
|
-
*
|
|
82
|
+
* 判断**抛出的错误**是否为「超时」(非 abort 路径的载体)。
|
|
83
|
+
*
|
|
84
|
+
* 与 `isTimeoutAbortSignal` 是**同一语义的两种载体**(同判 `name === 'TimeoutError'`):
|
|
85
|
+
* 前者看 `signal.reason`(signal 被 abort 的路径),本函数看**被抛出的错误对象**——
|
|
86
|
+
* 典型场景 = `openaiCompatible.parseSseStream` 的 SSE 停摆看门狗(`Promise.race` 竞速闸
|
|
87
|
+
* reject `DOMException('…','TimeoutError')`),它不经过 abort signal,故被归类为「失败」
|
|
88
|
+
* 而非「中断」,最终由 `consumeExecutionStream` 的通用 catch 收口。
|
|
89
|
+
*
|
|
90
|
+
* **用途(否则宿主文案不可达)**:把超时归入 `error.category = 'timeout'`,让宿主
|
|
91
|
+
* `chatPanel` 的 `friendlyByCategory.timeout`(「对话处理超时,请稍后重试」)真正生效;
|
|
92
|
+
* 缺该分类时宿主只能回退**原始技术文案**(DOMException message),用户读到的是侦探材料。
|
|
93
|
+
*
|
|
94
|
+
* 注:`toError()` 对 Error 实例原样返回(实测 `DOMException instanceof Error === true`),
|
|
95
|
+
* 故经 `llmCaller` 的 `toError(err)` 再 rethrow 后 `name` 不丢,本判据在链路末端依然成立。
|
|
105
96
|
*/
|
|
106
|
-
export declare function
|
|
97
|
+
export declare function isTimeoutError(err: unknown): boolean;
|
|
98
|
+
export {};
|
|
107
99
|
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"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"}
|