@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
package/dist/llm/provider.d.ts
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* LLM Provider 抽象接口
|
|
3
|
-
* 所有 LLM 实现(DeepSeek / 豆包 / OpenAI / Mock)必须实现此接口
|
|
4
|
-
* 详见 ADR-003
|
|
5
|
-
*/
|
|
1
|
+
/** LLM Provider 抽象接口:所有 LLM 实现(DeepSeek/豆包/OpenAI/Mock)必须实现 */
|
|
6
2
|
import type { LlmChunk } from '../llm/types.js';
|
|
7
3
|
export interface Message {
|
|
8
4
|
role: 'system' | 'user' | 'assistant' | 'tool';
|
|
9
5
|
content: string;
|
|
6
|
+
/**
|
|
7
|
+
* 轮次 ID(可选):标识该消息归属的「问答轮次」。
|
|
8
|
+
* 由 loop 在写入 user/assistant/tool 消息时附上当前 currentRoundId,
|
|
9
|
+
* 作为替换式压缩(第一级 LRU)取 round-summary 的单一真理源——
|
|
10
|
+
* roundId 随消息携带,不依赖任何外部序列的尾部对齐,杜绝错位替换。
|
|
11
|
+
*/
|
|
12
|
+
roundId?: string;
|
|
13
|
+
name?: string;
|
|
10
14
|
toolCalls?: Array<{
|
|
11
15
|
id: string;
|
|
12
16
|
type: 'function';
|
|
@@ -30,11 +34,10 @@ export interface ChatOptions {
|
|
|
30
34
|
};
|
|
31
35
|
}>;
|
|
32
36
|
/**
|
|
33
|
-
* 结构化输出约束(OpenAI
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
* 不支持的 Provider 静默跳过,fallback 到纯文本 tool_call 模式。
|
|
37
|
+
* 结构化输出约束(OpenAI Function Calling 响应格式约束)。
|
|
38
|
+
* 注意:response_format 不能与 tools 同时使用(OpenAI 协议限制),故 AgentLoop 默认不生成它
|
|
39
|
+
* (见 loop.ts buildChatOptions 注释)——此处仅为调用方显式传入时的可选能力孔,不宣称任何
|
|
40
|
+
* 「fallback 到纯文本 tool_call」的静默降级(文本出口不是可调用通道)。
|
|
38
41
|
*/
|
|
39
42
|
response_format?: {
|
|
40
43
|
type: 'json_schema';
|
|
@@ -44,48 +47,32 @@ export interface ChatOptions {
|
|
|
44
47
|
schema: Record<string, unknown>;
|
|
45
48
|
};
|
|
46
49
|
};
|
|
47
|
-
/**
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
* openaiCompatible 始终以 stream:true 发起请求(chat() 返回 AsyncIterable)。
|
|
51
|
-
* 本字段保留用于未来"非流式回退"场景(如低延迟短回复或 Provider 不支持 SSE 时)。
|
|
52
|
-
* 保留在公共 API 中以维持 ChatOptions 契约稳定。
|
|
53
|
-
*/
|
|
54
|
-
stream?: boolean;
|
|
55
|
-
/**
|
|
56
|
-
* 中止信号:用于取消正在进行的 LLM 请求
|
|
57
|
-
*
|
|
58
|
-
* AgentLoop 在用户取消对话时传入 AbortSignal,
|
|
59
|
-
* Provider 应将 signal 传给底层 fetch/stream 读取,确保请求可被中断。
|
|
60
|
-
*/
|
|
50
|
+
/** 推理深度控制:'low'|'medium'|'high',Provider 不支持时静默忽略 */
|
|
51
|
+
reasoning_effort?: 'low' | 'medium' | 'high';
|
|
52
|
+
/** 中止信号:用户取消时传入,Provider 应传给底层 fetch/stream 以支持中断 */
|
|
61
53
|
signal?: AbortSignal;
|
|
62
|
-
/**
|
|
63
|
-
* 请求超时(毫秒)。默认 120 秒。
|
|
64
|
-
* 超时后抛出 networkError,由 callLlmWithRetry 决定是否重试。
|
|
65
|
-
*/
|
|
54
|
+
/** 请求超时(毫秒,默认 120s):超时抛 networkError,由 callLlmWithRetry 决定是否重试 */
|
|
66
55
|
timeoutMs?: number;
|
|
67
56
|
}
|
|
68
|
-
/**
|
|
69
|
-
* LLM Provider 抽象类
|
|
70
|
-
* 实现类需实现 chat() 流式方法
|
|
71
|
-
*/
|
|
57
|
+
/** LLM Provider 抽象类:实现类需实现 chat() 流式方法 */
|
|
72
58
|
export declare abstract class LlmProvider {
|
|
73
59
|
abstract readonly name: string;
|
|
74
60
|
/**
|
|
75
|
-
*
|
|
61
|
+
* 是否支持原生工具调用(OpenAI Function Calling 的 tools 协议)。
|
|
76
62
|
*
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
*
|
|
63
|
+
* 与 supportsStructuredOutput 互斥(response_format 不能与 tools 同时使用,OpenAI 协议限制):
|
|
64
|
+
* - 支持 tools → loop 走原生工具通道(列工具 + 传 tools 参数)。
|
|
65
|
+
* - 支持 structured → loop 传 response_format(JSON mode 回落)。
|
|
66
|
+
* - 两者皆 false → 无工具能力,loop 收起工具清单并显式告知(可观测,不静默)。
|
|
80
67
|
*
|
|
81
|
-
*
|
|
82
|
-
*
|
|
68
|
+
* 默认 **true**(存量行为):云 LLM 绝大多数支持原生 FC(有工具集就传 tools,与历史一致)。
|
|
69
|
+
* 本地运行时(Ollama/LM Studio 等)是否支持原生 FC 无法从 baseUrl 推断,须在宿主配置时
|
|
70
|
+
* 显式置 false(互斥双能力位)。
|
|
83
71
|
*/
|
|
72
|
+
readonly supportsToolCalling: boolean;
|
|
73
|
+
/** 是否支持结构化输出(默认 false)。注意:response_format 不能与 tools 同时使用(OpenAI 协议限制) */
|
|
84
74
|
readonly supportsStructuredOutput: boolean;
|
|
85
|
-
/**
|
|
86
|
-
* 流式对话
|
|
87
|
-
* 返回 AsyncIterable,每项是一个增量块
|
|
88
|
-
*/
|
|
75
|
+
/** 流式对话:返回 AsyncIterable,每项是一个增量块 */
|
|
89
76
|
abstract chat(messages: Message[], opts?: ChatOptions): AsyncIterable<LlmChunk>;
|
|
90
77
|
}
|
|
91
78
|
//# sourceMappingURL=provider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/llm/provider.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/llm/provider.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,KAAK,CAAC;QAChB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,UAAU,CAAC;QACjB,QAAQ,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,CAAC;KAC/C,CAAC,CAAC;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,KAAK,CAAC,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,UAAU,CAAC;QACjB,QAAQ,EAAE;YACR,IAAI,EAAE,MAAM,CAAC;YACb,WAAW,EAAE,MAAM,CAAC;YACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;SACrC,CAAC;KACH,CAAC,CAAC;IACH;;;;;OAKG;IACH,eAAe,CAAC,EAAE;QAChB,IAAI,EAAE,aAAa,CAAC;QACpB,WAAW,EAAE;YACX,IAAI,EAAE,MAAM,CAAC;YACb,MAAM,EAAE,OAAO,CAAC;YAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;SACjC,CAAC;KACH,CAAC;IACF,qDAAqD;IACrD,gBAAgB,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC7C,qDAAqD;IACrD,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,0CAA0C;AAC1C,8BAAsB,WAAW;IAC/B,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAE/B;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAQ;IAE7C,yEAAyE;IACzE,QAAQ,CAAC,wBAAwB,EAAE,OAAO,CAAS;IAEnD,qCAAqC;IACrC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,aAAa,CAAC,QAAQ,CAAC;CAChF"}
|
package/dist/llm/provider.js
CHANGED
|
@@ -1,18 +1,19 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* LLM Provider 抽象类
|
|
3
|
-
* 实现类需实现 chat() 流式方法
|
|
4
|
-
*/
|
|
1
|
+
/** LLM Provider 抽象类:实现类需实现 chat() 流式方法 */
|
|
5
2
|
export class LlmProvider {
|
|
6
3
|
/**
|
|
7
|
-
*
|
|
4
|
+
* 是否支持原生工具调用(OpenAI Function Calling 的 tools 协议)。
|
|
8
5
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
6
|
+
* 与 supportsStructuredOutput 互斥(response_format 不能与 tools 同时使用,OpenAI 协议限制):
|
|
7
|
+
* - 支持 tools → loop 走原生工具通道(列工具 + 传 tools 参数)。
|
|
8
|
+
* - 支持 structured → loop 传 response_format(JSON mode 回落)。
|
|
9
|
+
* - 两者皆 false → 无工具能力,loop 收起工具清单并显式告知(可观测,不静默)。
|
|
12
10
|
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
11
|
+
* 默认 **true**(存量行为):云 LLM 绝大多数支持原生 FC(有工具集就传 tools,与历史一致)。
|
|
12
|
+
* 本地运行时(Ollama/LM Studio 等)是否支持原生 FC 无法从 baseUrl 推断,须在宿主配置时
|
|
13
|
+
* 显式置 false(互斥双能力位)。
|
|
15
14
|
*/
|
|
15
|
+
supportsToolCalling = true;
|
|
16
|
+
/** 是否支持结构化输出(默认 false)。注意:response_format 不能与 tools 同时使用(OpenAI 协议限制) */
|
|
16
17
|
supportsStructuredOutput = false;
|
|
17
18
|
}
|
|
18
19
|
//# sourceMappingURL=provider.js.map
|
package/dist/llm/provider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/llm/provider.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/llm/provider.ts"],"names":[],"mappings":"AA0DA,0CAA0C;AAC1C,MAAM,OAAgB,WAAW;IAG/B;;;;;;;;;;;OAWG;IACM,mBAAmB,GAAY,IAAI,CAAC;IAE7C,yEAAyE;IAChE,wBAAwB,GAAY,KAAK,CAAC;CAIpD"}
|
package/dist/llm/types.d.ts
CHANGED
|
@@ -1,11 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
|
|
3
|
-
*
|
|
4
|
-
* 详见 ADR-003 · LLM 适配层使用 OpenAI Chat Completions 兼容协议
|
|
5
|
-
*/
|
|
6
|
-
/**
|
|
7
|
-
* 工具调用描述
|
|
8
|
-
*/
|
|
1
|
+
/** LLM 适配层类型定义(OpenAI Chat Completions 兼容协议) */
|
|
2
|
+
import type { LlmProvider } from '../llm/provider.js';
|
|
9
3
|
export interface ToolCall {
|
|
10
4
|
id: string;
|
|
11
5
|
type: 'function';
|
|
@@ -14,12 +8,61 @@ export interface ToolCall {
|
|
|
14
8
|
arguments: string;
|
|
15
9
|
};
|
|
16
10
|
}
|
|
17
|
-
/**
|
|
18
|
-
* LLM 响应块
|
|
19
|
-
*/
|
|
20
11
|
export interface LlmChunk {
|
|
21
12
|
content?: string;
|
|
22
13
|
toolCalls?: ToolCall[];
|
|
23
14
|
finishReason?: 'stop' | 'tool_calls' | 'length' | 'error';
|
|
15
|
+
/**
|
|
16
|
+
* 模型思考内容增量片段(对应协议 `delta.reasoning_content`,deepseek 等思考模型)。
|
|
17
|
+
* 与 content 同为增量语义(消费侧自行累积);仅供 UI 折叠展示,**不进正文/记忆**(CoT 防护)。
|
|
18
|
+
* 非思考模型恒 undefined,自然降级。命名用 thought 而非 reasoning/thinking:与多模型路由任务
|
|
19
|
+
* 类型 `TaskType='reasoning'` 语义分离,也避开 ProcessEvent 既有 `type:'thinking'` 相位事件。
|
|
20
|
+
*/
|
|
21
|
+
thought?: string;
|
|
22
|
+
/**
|
|
23
|
+
* 流式工具意图预告:tool_call 的 name 在流式 delta 中**成形即上报**,
|
|
24
|
+
* 无需等到 finish_reason='tool_calls'。写文件等大参数工具的参数生成段可能长达数十秒,
|
|
25
|
+
* 此字段让 UI 提前渲染「准备中」工具行,消除事件真空期。瞬态展示轨,不落盘。
|
|
26
|
+
* 非 tool_calls 流 / 非 OpenAI 兼容 provider 恒 undefined,自然降级。
|
|
27
|
+
*/
|
|
28
|
+
partialToolCall?: {
|
|
29
|
+
id: string;
|
|
30
|
+
name: string;
|
|
31
|
+
};
|
|
32
|
+
/** 实际 API 用量统计(仅在流结束时的最终 chunk 携带,部分 Provider 不支持) */
|
|
33
|
+
usage?: {
|
|
34
|
+
/** 输入 token 数(prompt_tokens) */
|
|
35
|
+
inputTokens: number;
|
|
36
|
+
/** 输出 token 数(completion_tokens) */
|
|
37
|
+
outputTokens: number;
|
|
38
|
+
/** 总 token 数(total_tokens) */
|
|
39
|
+
totalTokens?: number;
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/** 单个 Provider 配置(providers 映射表的值);内核仅透传 provider 字段,不做路由决策 */
|
|
43
|
+
export interface ProviderEntryConfig {
|
|
44
|
+
/** 标识(仅用于日志,不影响路由) */
|
|
45
|
+
provider: string;
|
|
46
|
+
model: string;
|
|
47
|
+
/** API 基础 URL(可选——内核不做预设回退,缺失时工厂会报错) */
|
|
48
|
+
baseUrl?: string;
|
|
49
|
+
/** API 密钥(可选,从环境变量读取。本地 LLM 如 Ollama 可为空字符串) */
|
|
50
|
+
apiKey?: string;
|
|
51
|
+
/** temperature,未配置时回退到全局 llm.temperature */
|
|
52
|
+
temperature?: number;
|
|
53
|
+
/** 上下文窗口(token),未配置时回退到 memory.maxContextTokens */
|
|
54
|
+
contextWindow?: number;
|
|
55
|
+
/**
|
|
56
|
+
* 是否支持原生工具调用(OpenAI Function Calling tools 协议)。
|
|
57
|
+
* 本地运行时(Ollama/LM Studio 等)是否支持原生 FC 无法从 baseUrl 推断,搬到配置显式声明。
|
|
58
|
+
* 与 supportsStructuredOutput 互斥(response_format 不能与 tools 同用)。
|
|
59
|
+
*/
|
|
60
|
+
supportsToolCalling?: boolean;
|
|
61
|
+
/** 是否支持结构化输出(response_format / JSON mode) */
|
|
62
|
+
supportsStructuredOutput?: boolean;
|
|
24
63
|
}
|
|
64
|
+
/** LLM 任务类型:按任务复杂度路由到不同 Provider/模型(simple/reasoning/code/summary) */
|
|
65
|
+
export type TaskType = 'simple' | 'reasoning' | 'code' | 'summary';
|
|
66
|
+
/** Provider 路由选择器:按任务类型返回 Provider;不配置路由时所有任务类型复用同一 Provider */
|
|
67
|
+
export type ProviderRouter = (taskType: TaskType) => LlmProvider;
|
|
25
68
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/llm/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/llm/types.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/llm/types.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC1D;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,eAAe,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/C,sDAAsD;IACtD,KAAK,CAAC,EAAE;QACN,gCAAgC;QAChC,WAAW,EAAE,MAAM,CAAC;QACpB,oCAAoC;QACpC,YAAY,EAAE,MAAM,CAAC;QACrB,8BAA8B;QAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAID,+DAA+D;AAC/D,MAAM,WAAW,mBAAmB;IAClC,sBAAsB;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gDAAgD;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,6CAA6C;IAC7C,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC;AAED,sEAAsE;AACtE,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,MAAM,GAAG,SAAS,CAAC;AAEnE,gEAAgE;AAChE,MAAM,MAAM,cAAc,GAAG,CAAC,QAAQ,EAAE,QAAQ,KAAK,WAAW,CAAC"}
|
package/dist/llm/types.js
CHANGED
package/dist/llm/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/llm/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/llm/types.ts"],"names":[],"mappings":""}
|
package/dist/logging/logger.d.ts
CHANGED
|
@@ -1,40 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 结构化日志 — 全局单例 + 可替换 ILogger
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* 宿主可注入自定义 logger(setLogger),完全绕过 pino。
|
|
6
|
-
*
|
|
7
|
-
* 降级策略:
|
|
8
|
-
* 1. pino 可用 → 双流输出(stderr + 文件日志)
|
|
9
|
-
* 2. pino 不可用 → console 零依赖 fallback(仅 stderr)
|
|
10
|
-
* 3. 宿主注入 → 优先使用宿主实现
|
|
11
|
-
*
|
|
12
|
-
* 使用方式:
|
|
13
|
-
* import { logger } from '../logging/logger.js';
|
|
14
|
-
* logger.info({ key: val }, 'message');
|
|
15
|
-
*
|
|
16
|
-
* 注入自定义 logger:
|
|
17
|
-
* import { setLogger } from '../logging/logger.js';
|
|
18
|
-
* setLogger(myCustomLogger);
|
|
3
|
+
* 零第三方依赖、零 fs 副作用:默认 console fallback(写 stderr);宿主经 setLogger() 注入自定义实现。
|
|
4
|
+
* 内核只持有日志「接口」职责——不加载任何三方日志库,不决定日志落盘位置(通道/落盘归宿主)。
|
|
19
5
|
*/
|
|
20
6
|
import type { ILogger } from '../logging/loggerInterface.js';
|
|
21
7
|
/**
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
* 20+ 个内核模块统一通过此变量输出日志。
|
|
25
|
-
* 首次访问任一方法时懒触发 pino 升级(确保 import 零 fs 副作用)。
|
|
26
|
-
* 宿主注入自定义 logger 后,所有模块自动使用新实现。
|
|
8
|
+
* 全局日志访问器:20+ 内核模块统一经此输出;每个方法为对当前 `_logger` 的**普通委托闭包**,
|
|
9
|
+
* 宿主注入/复位后所有持有者自动切换到新实现(函数身份稳定,外部可将 `logger.info` 直接作回调传递)。
|
|
27
10
|
*/
|
|
28
11
|
export declare const logger: ILogger;
|
|
29
12
|
/**
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
* 注意:此函数修改全局状态。在单 Agent 模型下(ADR-011),
|
|
36
|
-
* 同一进程只有一个 Agent 实例,不会冲突。若同一进程创建多个
|
|
37
|
-
* Agent 实例并分别注入 logger,后者会覆盖前者——此时会输出警告。
|
|
13
|
+
* 替换全局日志实现:宿主在 Agent 初始化前调用注入自定义 logger;传入 undefined 恢复默认。
|
|
14
|
+
* 注入即成为内核**唯一**日志出口:同时桥接 utils 层(`loggerHolder`),
|
|
15
|
+
* 使 scanner / eventEmitter / rolePackManager 等 utils 侧模块也走注入实现(而非停留在 console fallback)。
|
|
16
|
+
* 修改全局状态:单 Agent 模型下不会冲突;若多处注入,后者覆盖前者并输出警告。
|
|
38
17
|
*/
|
|
39
18
|
export declare function setLogger(newLogger: ILogger | undefined): void;
|
|
40
19
|
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/logging/logger.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/logging/logger.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,OAAO,EAAS,MAAM,8BAA8B,CAAC;AAoFnE;;;GAGG;AACH,eAAO,MAAM,MAAM,EAAE,OAKpB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,SAAS,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,CAgB9D"}
|
package/dist/logging/logger.js
CHANGED
|
@@ -1,33 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
// 桥接 utils 层 loggerHolder:utils 运行时不依赖 logging/,
|
|
3
|
-
// 由本模块在加载和 setLogger 时反向注入 logger 实例。
|
|
1
|
+
// 反向注入 utils 层 loggerHolder:utils 运行时不依赖 logging/,由本模块桥接 logger 实例
|
|
4
2
|
import { setLogger as setUtilsLogger } from '../utils/loggerHolder.js';
|
|
5
|
-
/**
|
|
6
|
-
* 从 unknown 值提取错误消息(复用零依赖的 toError,避免类型断言)
|
|
7
|
-
*/
|
|
8
|
-
function errMsg(err) {
|
|
9
|
-
return toError(err).message;
|
|
10
|
-
}
|
|
11
|
-
/** 日志级别(从环境变量读取,默认 info) */
|
|
3
|
+
/** 日志级别(环境变量,默认 info) */
|
|
12
4
|
const level = process.env['MEMORA_LOG_LEVEL'] ?? 'info';
|
|
13
|
-
/**
|
|
5
|
+
/** 敏感键名匹配(命中时值被替换为 [REDACTED]) */
|
|
14
6
|
const SENSITIVE_KEY_PATTERN = /api[_-]?key|token|password|secret|authorization|credential/i;
|
|
15
7
|
/**
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* 支持嵌套对象脱敏:`*.apiKey` 匹配任意层级的 apiKey 字段
|
|
19
|
-
*/
|
|
20
|
-
const PINO_REDACT_PATHS = [
|
|
21
|
-
'apiKey', 'token', 'password', 'secret', 'authorization', 'credential',
|
|
22
|
-
'*.apiKey', '*.token', '*.password', '*.secret',
|
|
23
|
-
'*.authorization', '*.credential',
|
|
24
|
-
'*.*.apiKey', '*.*.token', '*.*.password', '*.*.secret',
|
|
25
|
-
];
|
|
26
|
-
/**
|
|
27
|
-
* 对象脱敏:深拷贝对象并将敏感键的值替换为 [REDACTED]
|
|
28
|
-
*
|
|
29
|
-
* 仅用于 console fallback logger 的 JSON.stringify 路径,
|
|
30
|
-
* 防止 API Key 等敏感数据泄漏到 stderr。
|
|
8
|
+
* 对象脱敏:深拷贝并将敏感键值替换为 [REDACTED]
|
|
9
|
+
* 单一脱敏实现:console fallback 输出对象前统一经此脱敏(任意嵌套层级 + 变体 + 大小写不敏感)。
|
|
31
10
|
*/
|
|
32
11
|
function redactSensitiveKeys(obj) {
|
|
33
12
|
const redacted = {};
|
|
@@ -44,11 +23,7 @@ function redactSensitiveKeys(obj) {
|
|
|
44
23
|
}
|
|
45
24
|
return redacted;
|
|
46
25
|
}
|
|
47
|
-
/**
|
|
48
|
-
const isProd = process.env['NODE_ENV'] === 'production';
|
|
49
|
-
/** 是否启用文件日志 */
|
|
50
|
-
const fileEnabled = process.env['MEMORA_LOG_FILE'] !== '0';
|
|
51
|
-
/** 日志级别优先级(用于 console fallback 的级别过滤) */
|
|
26
|
+
/** 日志级别优先级(console fallback 级别过滤用) */
|
|
52
27
|
const LEVEL_PRIORITY = {
|
|
53
28
|
trace: 0,
|
|
54
29
|
debug: 1,
|
|
@@ -62,238 +37,73 @@ const LEVEL_PRIORITY = {
|
|
|
62
37
|
function shouldLog(targetLevel) {
|
|
63
38
|
return (LEVEL_PRIORITY[targetLevel] ?? 2) >= (LEVEL_PRIORITY[level] ?? 2);
|
|
64
39
|
}
|
|
65
|
-
/**
|
|
66
|
-
* Console 零依赖 fallback logger
|
|
67
|
-
*
|
|
68
|
-
* pino 不可用时使用。仅输出到 stderr,不写文件。
|
|
69
|
-
* 满足 ILogger 接口,所有内核模块透明使用。
|
|
70
|
-
*/
|
|
40
|
+
/** Console 零依赖 fallback logger:仅 stderr,满足 ILogger 接口 */
|
|
71
41
|
function createConsoleLogger() {
|
|
72
42
|
return {
|
|
73
|
-
info: (
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
if (typeof objOrMsg === 'object') {
|
|
78
|
-
console.error(`[INFO] ${text}`, JSON.stringify(redactSensitiveKeys(objOrMsg)));
|
|
79
|
-
}
|
|
80
|
-
else {
|
|
81
|
-
console.error(`[INFO] ${text}`);
|
|
82
|
-
}
|
|
83
|
-
},
|
|
84
|
-
warn: (objOrMsg, msg) => {
|
|
85
|
-
if (!shouldLog('warn'))
|
|
86
|
-
return;
|
|
87
|
-
const text = typeof objOrMsg === 'string' ? objOrMsg : msg ?? '';
|
|
88
|
-
if (typeof objOrMsg === 'object') {
|
|
89
|
-
console.error(`[WARN] ${text}`, JSON.stringify(redactSensitiveKeys(objOrMsg)));
|
|
90
|
-
}
|
|
91
|
-
else {
|
|
92
|
-
console.error(`[WARN] ${text}`);
|
|
93
|
-
}
|
|
94
|
-
},
|
|
95
|
-
error: (objOrMsg, msg) => {
|
|
96
|
-
if (!shouldLog('error'))
|
|
97
|
-
return;
|
|
98
|
-
const text = typeof objOrMsg === 'string' ? objOrMsg : msg ?? '';
|
|
99
|
-
if (typeof objOrMsg === 'object') {
|
|
100
|
-
console.error(`[ERROR] ${text}`, JSON.stringify(redactSensitiveKeys(objOrMsg)));
|
|
101
|
-
}
|
|
102
|
-
else {
|
|
103
|
-
console.error(`[ERROR] ${text}`);
|
|
104
|
-
}
|
|
105
|
-
},
|
|
106
|
-
debug: (objOrMsg, msg) => {
|
|
107
|
-
if (!shouldLog('debug'))
|
|
108
|
-
return;
|
|
109
|
-
const text = typeof objOrMsg === 'string' ? objOrMsg : msg ?? '';
|
|
110
|
-
if (typeof objOrMsg === 'object') {
|
|
111
|
-
console.error(`[DEBUG] ${text}`, JSON.stringify(redactSensitiveKeys(objOrMsg)));
|
|
112
|
-
}
|
|
113
|
-
else {
|
|
114
|
-
console.error(`[DEBUG] ${text}`);
|
|
115
|
-
}
|
|
116
|
-
},
|
|
43
|
+
info: createConsoleLogFn('info'),
|
|
44
|
+
warn: createConsoleLogFn('warn'),
|
|
45
|
+
error: createConsoleLogFn('error'),
|
|
46
|
+
debug: createConsoleLogFn('debug'),
|
|
117
47
|
};
|
|
118
48
|
}
|
|
119
49
|
/**
|
|
120
|
-
*
|
|
121
|
-
*
|
|
122
|
-
* pino 通过动态 import 加载,实例类型未知。
|
|
123
|
-
* 包装器显式提取 4 个日志方法,避免 as unknown as ILogger 双重断言。
|
|
124
|
-
*
|
|
125
|
-
* @param pinoInst pino 实例(动态导入)
|
|
126
|
-
* @returns ILogger 兼容对象
|
|
50
|
+
* 创建 console fallback 单级别日志方法
|
|
51
|
+
* 消除 4 处 info/warn/error/debug 方法同构实现;共享:shouldLog 过滤、文本提取、对象路径脱敏。
|
|
127
52
|
*/
|
|
128
|
-
function
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
* 尝试创建 Pino logger
|
|
138
|
-
*
|
|
139
|
-
* pino 为可选 peerDependency,通过动态 import 加载。
|
|
140
|
-
* 加载失败(宿主未安装 pino)则回退到 console logger。
|
|
141
|
-
*
|
|
142
|
-
* @returns Pino logger 实例,或 null(pino 不可用)
|
|
143
|
-
*/
|
|
144
|
-
async function tryCreatePinoLogger() {
|
|
145
|
-
try {
|
|
146
|
-
const pino = (await import('pino')).default;
|
|
147
|
-
const { resolve } = await import('node:path');
|
|
148
|
-
const { mkdirSync, createWriteStream, statSync, truncateSync } = await import('node:fs');
|
|
149
|
-
const { expandHome } = await import('../utils/path.js');
|
|
150
|
-
const dataDir = process.env['MEMORA_DATA_DIR'] ?? '~/.memora';
|
|
151
|
-
const resolvedDataDir = resolve(expandHome(dataDir));
|
|
152
|
-
// pino.StreamEntry 类型在 pino 未安装时不可用,用内联类型
|
|
153
|
-
const streams = [];
|
|
154
|
-
// stderr 流(开发环境友好显示)
|
|
155
|
-
if (!isProd) {
|
|
156
|
-
streams.push({ level: 'info', stream: process.stderr });
|
|
157
|
-
}
|
|
158
|
-
// 文件流(结构化 JSON,方便后续分析)
|
|
159
|
-
// 日志轮转保护——超过 10MB 时截断重写,防止长期运行生成巨大文件
|
|
160
|
-
if (fileEnabled) {
|
|
161
|
-
try {
|
|
162
|
-
const logsDir = resolve(resolvedDataDir, 'logs');
|
|
163
|
-
mkdirSync(logsDir, { recursive: true });
|
|
164
|
-
const logFilePath = resolve(logsDir, 'memora.log');
|
|
165
|
-
// 检查文件大小,超过 10MB 时截断
|
|
166
|
-
const LOG_MAX_BYTES = 10 * 1024 * 1024; // 10MB
|
|
167
|
-
try {
|
|
168
|
-
const stat = statSync(logFilePath);
|
|
169
|
-
if (stat.size > LOG_MAX_BYTES) {
|
|
170
|
-
truncateSync(logFilePath, 0);
|
|
171
|
-
process.stderr.write(`[memora] 日志文件超过 10MB,已截断:${logFilePath}\n`);
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
catch (err) {
|
|
175
|
-
// 文件不存在或无法 stat,正常——首次写入
|
|
176
|
-
if (process.env['MEMORA_DEBUG'])
|
|
177
|
-
process.stderr.write(`[memora] stat 日志文件失败:${errMsg(err)}\n`);
|
|
178
|
-
}
|
|
179
|
-
streams.push({
|
|
180
|
-
level: 'info',
|
|
181
|
-
stream: createWriteStream(logFilePath, { flags: 'a' }),
|
|
182
|
-
});
|
|
183
|
-
}
|
|
184
|
-
catch (err) {
|
|
185
|
-
process.stderr.write(`[memora] 日志文件创建失败:${errMsg(err)}\n`);
|
|
186
|
-
}
|
|
53
|
+
function createConsoleLogFn(targetLevel) {
|
|
54
|
+
const prefix = `[${targetLevel.toUpperCase()}]`;
|
|
55
|
+
return (objOrMsg, msg) => {
|
|
56
|
+
if (!shouldLog(targetLevel))
|
|
57
|
+
return;
|
|
58
|
+
const text = typeof objOrMsg === 'string' ? objOrMsg : (msg ?? '');
|
|
59
|
+
if (typeof objOrMsg === 'object') {
|
|
60
|
+
// 对象路径:脱敏后 JSON 序列化,防敏感数据泄漏
|
|
61
|
+
console.error(`${prefix} ${text}`, JSON.stringify(redactSensitiveKeys(objOrMsg)));
|
|
187
62
|
}
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
// SEC-AUDIT: 配置 redact 防止敏感信息写入日志文件
|
|
191
|
-
return wrapPinoAsLogger(pino({ level, redact: PINO_REDACT_PATHS }));
|
|
63
|
+
else {
|
|
64
|
+
console.error(`${prefix} ${text}`);
|
|
192
65
|
}
|
|
193
|
-
|
|
194
|
-
// SEC-AUDIT: 配置 redact 防止敏感信息写入日志文件
|
|
195
|
-
return wrapPinoAsLogger(pino({ level, redact: PINO_REDACT_PATHS }, pino.multistream(streams)));
|
|
196
|
-
}
|
|
197
|
-
catch (err) {
|
|
198
|
-
// pino 未安装,回退到 console logger
|
|
199
|
-
if (process.env['MEMORA_DEBUG'])
|
|
200
|
-
process.stderr.write(`[memora] pino 加载失败:${errMsg(err)}\n`);
|
|
201
|
-
return null;
|
|
202
|
-
}
|
|
66
|
+
};
|
|
203
67
|
}
|
|
204
68
|
/**
|
|
205
|
-
*
|
|
206
|
-
*
|
|
207
|
-
* 初始化为 console fallback(同步可用,零 fs 副作用)。
|
|
208
|
-
* 首次日志调用时懒触发 pino 升级(确保模块 import 零 fs 副作用)。
|
|
209
|
-
* 宿主通过 setLogger() 注入后自动替换,并跳过 pino 升级。
|
|
69
|
+
* 全局日志单例:初始为 console fallback(同步可用,零 fs 副作用)。
|
|
70
|
+
* 宿主经 setLogger() 注入后替换;未注入时保持 console fallback。
|
|
210
71
|
*/
|
|
211
72
|
let _logger = createConsoleLogger();
|
|
212
|
-
/**
|
|
73
|
+
/** 是否已被宿主注入(setLogger 覆盖告警判定) */
|
|
213
74
|
let _loggerInjected = false;
|
|
214
|
-
|
|
215
|
-
let _pinoUpgradeStarted = false;
|
|
216
|
-
// 同步初始化 utils 层 logger 桥接(确保 utils 在 pino 异步加载前就有 console fallback)
|
|
75
|
+
// 同步初始化 utils 层 logger 桥接(确保 utils 始终持有日志实现,默认即 console fallback)
|
|
217
76
|
setUtilsLogger(_logger);
|
|
218
77
|
/**
|
|
219
|
-
*
|
|
220
|
-
*
|
|
221
|
-
* 在首次日志调用时触发,确保模块 import 零 fs 副作用。
|
|
222
|
-
* - 宿主已注入 logger 时跳过升级(_loggerInjected 守卫)
|
|
223
|
-
* - 升级启动后不再重复触发(_pinoUpgradeStarted 守卫)
|
|
224
|
-
* - 竞态守卫:then 回调内再次检查 _loggerInjected,避免覆盖宿主在升级期间注入的 logger
|
|
225
|
-
*/
|
|
226
|
-
function maybeUpgradeToPino() {
|
|
227
|
-
if (_pinoUpgradeStarted || _loggerInjected)
|
|
228
|
-
return;
|
|
229
|
-
_pinoUpgradeStarted = true;
|
|
230
|
-
void tryCreatePinoLogger().then((pinoLogger) => {
|
|
231
|
-
// 守卫:升级期间宿主可能已通过 setLogger 注入自定义 logger
|
|
232
|
-
if (_loggerInjected) {
|
|
233
|
-
setUtilsLogger(_logger);
|
|
234
|
-
return;
|
|
235
|
-
}
|
|
236
|
-
if (pinoLogger) {
|
|
237
|
-
_logger = pinoLogger;
|
|
238
|
-
_logger.info({ level, prod: isProd, fileEnabled }, 'logger 启动(pino)');
|
|
239
|
-
}
|
|
240
|
-
else {
|
|
241
|
-
_logger.info({ level, prod: isProd }, 'logger 启动(console fallback,pino 未安装)');
|
|
242
|
-
}
|
|
243
|
-
// 桥接注入到 utils 层(utils 运行时不依赖 logging/)
|
|
244
|
-
setUtilsLogger(_logger);
|
|
245
|
-
});
|
|
246
|
-
}
|
|
247
|
-
/**
|
|
248
|
-
* 全局日志访问器
|
|
249
|
-
*
|
|
250
|
-
* 20+ 个内核模块统一通过此变量输出日志。
|
|
251
|
-
* 首次访问任一方法时懒触发 pino 升级(确保 import 零 fs 副作用)。
|
|
252
|
-
* 宿主注入自定义 logger 后,所有模块自动使用新实现。
|
|
78
|
+
* 全局日志访问器:20+ 内核模块统一经此输出;每个方法为对当前 `_logger` 的**普通委托闭包**,
|
|
79
|
+
* 宿主注入/复位后所有持有者自动切换到新实现(函数身份稳定,外部可将 `logger.info` 直接作回调传递)。
|
|
253
80
|
*/
|
|
254
81
|
export const logger = {
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
get warn() {
|
|
260
|
-
maybeUpgradeToPino();
|
|
261
|
-
return _logger.warn.bind(_logger);
|
|
262
|
-
},
|
|
263
|
-
get error() {
|
|
264
|
-
maybeUpgradeToPino();
|
|
265
|
-
return _logger.error.bind(_logger);
|
|
266
|
-
},
|
|
267
|
-
get debug() {
|
|
268
|
-
maybeUpgradeToPino();
|
|
269
|
-
return _logger.debug.bind(_logger);
|
|
270
|
-
},
|
|
82
|
+
info: (...args) => _logger.info(...args),
|
|
83
|
+
warn: (...args) => _logger.warn(...args),
|
|
84
|
+
error: (...args) => _logger.error(...args),
|
|
85
|
+
debug: (...args) => _logger.debug(...args),
|
|
271
86
|
};
|
|
272
87
|
/**
|
|
273
|
-
*
|
|
274
|
-
*
|
|
275
|
-
*
|
|
276
|
-
*
|
|
277
|
-
*
|
|
278
|
-
* 注意:此函数修改全局状态。在单 Agent 模型下(ADR-011),
|
|
279
|
-
* 同一进程只有一个 Agent 实例,不会冲突。若同一进程创建多个
|
|
280
|
-
* Agent 实例并分别注入 logger,后者会覆盖前者——此时会输出警告。
|
|
88
|
+
* 替换全局日志实现:宿主在 Agent 初始化前调用注入自定义 logger;传入 undefined 恢复默认。
|
|
89
|
+
* 注入即成为内核**唯一**日志出口:同时桥接 utils 层(`loggerHolder`),
|
|
90
|
+
* 使 scanner / eventEmitter / rolePackManager 等 utils 侧模块也走注入实现(而非停留在 console fallback)。
|
|
91
|
+
* 修改全局状态:单 Agent 模型下不会冲突;若多处注入,后者覆盖前者并输出警告。
|
|
281
92
|
*/
|
|
282
93
|
export function setLogger(newLogger) {
|
|
283
94
|
if (newLogger) {
|
|
284
|
-
//
|
|
95
|
+
// 检测覆盖:当前已被宿主注入且新实例不同,说明有多处注入
|
|
285
96
|
if (_loggerInjected && _logger !== newLogger) {
|
|
286
97
|
_logger.warn('setLogger 覆盖了已有的自定义 logger(单 Agent 模型下不应出现此情况)');
|
|
287
98
|
}
|
|
288
99
|
_loggerInjected = true;
|
|
289
100
|
_logger = newLogger;
|
|
101
|
+
// 注入即唯一出口:同步桥接 utils 层,否则 utils 侧仍持有旧 console fallback
|
|
102
|
+
setUtilsLogger(_logger);
|
|
290
103
|
}
|
|
291
104
|
else {
|
|
292
|
-
//
|
|
293
|
-
// pino 升级不主动触发——等下次日志调用时由 maybeUpgradeToPino() 懒触发
|
|
294
|
-
// 这样 setLogger(undefined) 零 fs 副作用,与模块加载时一致
|
|
105
|
+
// 恢复默认:回到内置 console fallback,并重新桥接 utils 层
|
|
295
106
|
_loggerInjected = false;
|
|
296
|
-
_pinoUpgradeStarted = false; // 允许下次日志调用时重新触发升级
|
|
297
107
|
_logger = createConsoleLogger();
|
|
298
108
|
setUtilsLogger(_logger);
|
|
299
109
|
}
|