@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/utils/segmenter.js
CHANGED
|
@@ -1,76 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* - 英文按空格 + 标点
|
|
6
|
-
* - 中文按 ICU 词典(Node 18+ 内建)
|
|
7
|
-
* - 数字、emoji、英文单词保留为整体
|
|
8
|
-
*
|
|
9
|
-
* 避免引入 nodejieba(C++ 扩展,Windows + Node 24 prebuilt 不可靠)
|
|
10
|
-
*
|
|
11
|
-
* 性能:~10 万字/秒(Intl.Segmenter 是 ICU C++ 实现,比纯 JS 快 10 倍+)
|
|
2
|
+
* 文本分词器——用 Node 内建 Intl.Segmenter 做中英文混合分词
|
|
3
|
+
* (英文按空格+标点、中文按 ICU 词典、数字/emoji/英文词保留整体)。
|
|
4
|
+
* 避免引入 nodejieba(C++ 扩展,Windows + Node 24 prebuilt 不可靠)。
|
|
12
5
|
*/
|
|
13
6
|
const ZH_SEGMENTER = new Intl.Segmenter('zh-CN', { granularity: 'word' });
|
|
14
|
-
/**
|
|
15
|
-
* 轻量关键词分词(用于关键词匹配场景)
|
|
16
|
-
*
|
|
17
|
-
* 内部函数,不在 index.ts 公共 API 导出。
|
|
18
|
-
* 模块私有(0 外部消费者,仅 scoreByKeywords 内部调用)。
|
|
19
|
-
* tokenizeKeywords 的行为通过 scoreByKeywords 间接验证(segmenter.test.ts 已覆盖)。
|
|
20
|
-
*
|
|
21
|
-
* 与 segmentText() 的区别:
|
|
22
|
-
* - segmentText:精确分词(Intl.Segmenter ICU 词典切分),用于 LLM 输出切分 + recall 关键词提取
|
|
23
|
-
* - tokenizeKeywords:轻量分词,用于 persona/skill 关键词匹配
|
|
24
|
-
* 提取中文连续段(≥2 字)+ 英文词,不做 ICU 词典切分
|
|
25
|
-
*
|
|
26
|
-
* @param input - 用户输入文本
|
|
27
|
-
* @returns 分词后的 token 列表(去重)
|
|
28
|
-
*/
|
|
29
|
-
function tokenizeKeywords(input) {
|
|
30
|
-
const tokens = [];
|
|
31
|
-
// 提取中文连续段(2 字以上的中文 token)
|
|
32
|
-
const chineseSegments = input.match(/[\u4e00-\u9fff]{2,}/g) ?? [];
|
|
33
|
-
tokens.push(...chineseSegments);
|
|
34
|
-
// 提取英文词
|
|
35
|
-
const englishSegments = input.match(/[a-zA-Z0-9]+/g) ?? [];
|
|
36
|
-
tokens.push(...englishSegments);
|
|
37
|
-
// 去重(兑现 JSDoc "去重" 契约,避免重复 token 干扰关键词匹配评分)
|
|
38
|
-
return [...new Set(tokens)];
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* 关键词匹配评分(Persona/Skill 共享逻辑)
|
|
42
|
-
*
|
|
43
|
-
* 匹配策略:先分词,再对每个关键词做子串搜索(tokens + 原文双保险)。
|
|
44
|
-
* 大小写不敏感,中英文混合友好。
|
|
45
|
-
*
|
|
46
|
-
* @param userInput - 用户输入文本
|
|
47
|
-
* @param keywordList - 待匹配的关键词数组
|
|
48
|
-
* @returns 匹配得分 (0~1),0 表示无命中
|
|
49
|
-
*/
|
|
50
|
-
export function scoreByKeywords(userInput, keywordList) {
|
|
51
|
-
if (keywordList.length === 0)
|
|
52
|
-
return 0;
|
|
53
|
-
const normalizedInput = userInput.toLowerCase();
|
|
54
|
-
const tokens = tokenizeKeywords(normalizedInput);
|
|
55
|
-
let hitCount = 0;
|
|
56
|
-
for (const kw of keywordList) {
|
|
57
|
-
const kwLower = kw.toLowerCase();
|
|
58
|
-
if (tokens.some((t) => t.includes(kwLower)) || normalizedInput.includes(kwLower)) {
|
|
59
|
-
hitCount++;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
return hitCount / keywordList.length;
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* 单行分词(用于 LLM 输出的精确切分)
|
|
66
|
-
* @param text 原文
|
|
67
|
-
* @returns 分词数组(去标点、去空白、保留中英文 + 数字)
|
|
68
|
-
*/
|
|
7
|
+
/** 单行精确分词(用于 LLM 输出切分):去标点空白,保留中英文 + 数字 */
|
|
69
8
|
export function segmentText(text) {
|
|
70
9
|
if (!text)
|
|
71
10
|
return [];
|
|
72
|
-
// 中英混合:先用 zh-CN 切中文词,再过滤标点
|
|
73
|
-
// zh-CN 也支持英文按空格切(不会破坏英文单词)
|
|
74
11
|
const tokens = [];
|
|
75
12
|
for (const segment of ZH_SEGMENTER.segment(text)) {
|
|
76
13
|
if (segment.isWordLike) {
|
|
@@ -82,30 +19,235 @@ export function segmentText(text) {
|
|
|
82
19
|
}
|
|
83
20
|
return tokens;
|
|
84
21
|
}
|
|
85
|
-
/**
|
|
86
|
-
* 分词后小写化(文本预处理快捷方法)
|
|
87
|
-
*
|
|
88
|
-
* 组合 segmentText + toLowerCase,消除 6 处散落的 `.map((t) => t.toLowerCase())` 模式
|
|
89
|
-
* (ADR-017 枝叶层 2 次提取原则)。
|
|
90
|
-
* 用于关键词匹配/召回场景的文本预处理(大小写不敏感匹配)。
|
|
91
|
-
*
|
|
92
|
-
* @param text 原文
|
|
93
|
-
* @returns 分词后的小写 token 数组
|
|
94
|
-
*/
|
|
22
|
+
/** 分词后小写化(文本预处理快捷方法,用于关键词匹配/召回的大小写不敏感匹配) */
|
|
95
23
|
export function segmentLower(text) {
|
|
96
24
|
return segmentText(text).map((t) => t.toLowerCase());
|
|
97
25
|
}
|
|
98
|
-
/**
|
|
99
|
-
* 中文停用词集合
|
|
100
|
-
* 用于关键词提取时过滤无意义词汇(从 memory/types.ts 迁入,
|
|
101
|
-
* 因为停用词是分词/关键词提取的关注点,而非记忆类型定义)
|
|
102
|
-
*/
|
|
26
|
+
/** 中文停用词集合(用于关键词提取时过滤无意义词汇) */
|
|
103
27
|
export const STOPWORDS = new Set([
|
|
104
|
-
'的',
|
|
105
|
-
'
|
|
106
|
-
'
|
|
107
|
-
'
|
|
108
|
-
'
|
|
109
|
-
'
|
|
28
|
+
'的',
|
|
29
|
+
'了',
|
|
30
|
+
'是',
|
|
31
|
+
'在',
|
|
32
|
+
'我',
|
|
33
|
+
'有',
|
|
34
|
+
'和',
|
|
35
|
+
'就',
|
|
36
|
+
'不',
|
|
37
|
+
'人',
|
|
38
|
+
'都',
|
|
39
|
+
'一',
|
|
40
|
+
'一个',
|
|
41
|
+
'上',
|
|
42
|
+
'也',
|
|
43
|
+
'很',
|
|
44
|
+
'到',
|
|
45
|
+
'说',
|
|
46
|
+
'要',
|
|
47
|
+
'去',
|
|
48
|
+
'你',
|
|
49
|
+
'会',
|
|
50
|
+
'着',
|
|
51
|
+
'没有',
|
|
52
|
+
'看',
|
|
53
|
+
'好',
|
|
54
|
+
'自己',
|
|
55
|
+
'这',
|
|
56
|
+
'那',
|
|
57
|
+
'什么',
|
|
58
|
+
'怎么',
|
|
59
|
+
'可以',
|
|
60
|
+
'这个',
|
|
61
|
+
'那个',
|
|
62
|
+
'他们',
|
|
63
|
+
'我们',
|
|
64
|
+
'因为',
|
|
65
|
+
'所以',
|
|
66
|
+
'但是',
|
|
67
|
+
'如果',
|
|
68
|
+
'虽然',
|
|
69
|
+
'能',
|
|
70
|
+
'把',
|
|
71
|
+
'被',
|
|
72
|
+
'让',
|
|
73
|
+
'给',
|
|
74
|
+
'对',
|
|
75
|
+
'从',
|
|
76
|
+
'为',
|
|
77
|
+
'比',
|
|
78
|
+
'与',
|
|
79
|
+
'或',
|
|
80
|
+
'吗',
|
|
81
|
+
'呢',
|
|
82
|
+
'吧',
|
|
83
|
+
'啊',
|
|
84
|
+
'哦',
|
|
85
|
+
'嗯',
|
|
86
|
+
'呀',
|
|
87
|
+
'哈',
|
|
88
|
+
]);
|
|
89
|
+
/** 动作/意图词汇表(启发式词性识别,用于提升核心动作权重) */
|
|
90
|
+
const ACTION_WORDS = new Set([
|
|
91
|
+
'创建',
|
|
92
|
+
'删除',
|
|
93
|
+
'修改',
|
|
94
|
+
'更新',
|
|
95
|
+
'查询',
|
|
96
|
+
'搜索',
|
|
97
|
+
'生成',
|
|
98
|
+
'发送',
|
|
99
|
+
'接收',
|
|
100
|
+
'处理',
|
|
101
|
+
'计算',
|
|
102
|
+
'分析',
|
|
103
|
+
'评估',
|
|
104
|
+
'测试',
|
|
105
|
+
'运行',
|
|
106
|
+
'部署',
|
|
107
|
+
'配置',
|
|
108
|
+
'安装',
|
|
109
|
+
'读取',
|
|
110
|
+
'写入',
|
|
111
|
+
'保存',
|
|
112
|
+
'加载',
|
|
113
|
+
'下载',
|
|
114
|
+
'上传',
|
|
115
|
+
'移动',
|
|
116
|
+
'复制',
|
|
117
|
+
'粘贴',
|
|
118
|
+
'打开',
|
|
119
|
+
'关闭',
|
|
120
|
+
'启动',
|
|
121
|
+
'停止',
|
|
122
|
+
'执行',
|
|
123
|
+
'调用',
|
|
124
|
+
'使用',
|
|
125
|
+
'操作',
|
|
126
|
+
'添加',
|
|
127
|
+
'移除',
|
|
128
|
+
'检查',
|
|
129
|
+
'验证',
|
|
130
|
+
'确认',
|
|
131
|
+
'提交',
|
|
132
|
+
'撤销',
|
|
133
|
+
'回滚',
|
|
134
|
+
'设计',
|
|
135
|
+
'开发',
|
|
136
|
+
'实现',
|
|
137
|
+
'优化',
|
|
138
|
+
'重构',
|
|
139
|
+
'修复',
|
|
140
|
+
'调试',
|
|
141
|
+
'解释',
|
|
142
|
+
'翻译',
|
|
143
|
+
'获取',
|
|
144
|
+
'设置',
|
|
145
|
+
'切换',
|
|
146
|
+
'切换到',
|
|
147
|
+
'打印',
|
|
148
|
+
'输出',
|
|
149
|
+
'输入',
|
|
150
|
+
'导出',
|
|
151
|
+
'导入',
|
|
152
|
+
'转换',
|
|
153
|
+
'解析',
|
|
154
|
+
'格式化',
|
|
155
|
+
'加密',
|
|
156
|
+
'解密',
|
|
157
|
+
'连接',
|
|
158
|
+
'断开',
|
|
159
|
+
'绑定',
|
|
160
|
+
'解绑',
|
|
161
|
+
'订阅',
|
|
162
|
+
'发布',
|
|
163
|
+
'监听',
|
|
164
|
+
'触发',
|
|
165
|
+
'比较',
|
|
166
|
+
'排序',
|
|
167
|
+
'筛选',
|
|
168
|
+
'过滤',
|
|
169
|
+
'分组',
|
|
170
|
+
'聚合',
|
|
171
|
+
'统计',
|
|
172
|
+
'汇总',
|
|
173
|
+
'构建',
|
|
174
|
+
'编译',
|
|
175
|
+
'打包',
|
|
176
|
+
'集成',
|
|
177
|
+
'交付',
|
|
110
178
|
]);
|
|
179
|
+
/** 实体/对象后缀(启发式词性识别,用于识别名词实体) */
|
|
180
|
+
const ENTITY_SUFFIXES = [
|
|
181
|
+
'器',
|
|
182
|
+
'表',
|
|
183
|
+
'图',
|
|
184
|
+
'库',
|
|
185
|
+
'类',
|
|
186
|
+
'型',
|
|
187
|
+
'函数',
|
|
188
|
+
'方法',
|
|
189
|
+
'模块',
|
|
190
|
+
'系统',
|
|
191
|
+
'服务',
|
|
192
|
+
'应用',
|
|
193
|
+
'组件',
|
|
194
|
+
];
|
|
195
|
+
/**
|
|
196
|
+
* 增强关键词提取(带权重)——用于取代检测等场景:
|
|
197
|
+
* 动作/意图词权重 2.0、实体(后缀命中)1.5、其他 1.0。
|
|
198
|
+
*/
|
|
199
|
+
export function extractEnhancedKeywords(input) {
|
|
200
|
+
const basicTokens = segmentLower(input);
|
|
201
|
+
const enriched = [];
|
|
202
|
+
for (const token of basicTokens) {
|
|
203
|
+
// 过滤停用词和过短词
|
|
204
|
+
if (STOPWORDS.has(token) || token.length < 2)
|
|
205
|
+
continue;
|
|
206
|
+
let weight = 1.0;
|
|
207
|
+
const tokenLower = token.toLowerCase();
|
|
208
|
+
if (ACTION_WORDS.has(tokenLower) || ACTION_WORDS.has(token)) {
|
|
209
|
+
weight = 2.0;
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
for (const suffix of ENTITY_SUFFIXES) {
|
|
213
|
+
if (token.endsWith(suffix)) {
|
|
214
|
+
weight = 1.5;
|
|
215
|
+
break;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
enriched.push({ word: token, weight });
|
|
220
|
+
}
|
|
221
|
+
return enriched;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* 加权 Jaccard 相似度:加权后核心动作/实体重叠在"多轮逐步细化"下
|
|
225
|
+
* 更能识别主题延续。加权 Jaccard = Σ(交集大权重) / Σ(并集大权重)。
|
|
226
|
+
*/
|
|
227
|
+
export function calculateWeightedJaccard(keywordsA, keywordsB) {
|
|
228
|
+
if (keywordsA.length === 0 && keywordsB.length === 0)
|
|
229
|
+
return 0;
|
|
230
|
+
const mapB = new Map(keywordsB.map((k) => [k.word, k.weight]));
|
|
231
|
+
let intersectionWeight = 0;
|
|
232
|
+
let unionWeight = 0;
|
|
233
|
+
// 遍历 A:交集/并集均取较大权重
|
|
234
|
+
const processedWords = new Set();
|
|
235
|
+
for (const { word, weight: weightA } of keywordsA) {
|
|
236
|
+
processedWords.add(word);
|
|
237
|
+
const weightB = mapB.get(word);
|
|
238
|
+
if (weightB !== undefined) {
|
|
239
|
+
intersectionWeight += Math.max(weightA, weightB);
|
|
240
|
+
}
|
|
241
|
+
unionWeight += Math.max(weightA, weightB ?? 0);
|
|
242
|
+
}
|
|
243
|
+
// 遍历 B 中不在 A 的词,补并集权重
|
|
244
|
+
for (const { word, weight } of keywordsB) {
|
|
245
|
+
if (!processedWords.has(word)) {
|
|
246
|
+
unionWeight += weight;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
if (unionWeight === 0)
|
|
250
|
+
return 0;
|
|
251
|
+
return intersectionWeight / unionWeight;
|
|
252
|
+
}
|
|
111
253
|
//# sourceMappingURL=segmenter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"segmenter.js","sourceRoot":"","sources":["../../src/utils/segmenter.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"segmenter.js","sourceRoot":"","sources":["../../src/utils/segmenter.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/strings.d.ts
CHANGED
|
@@ -1,39 +1,22 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* 从各模块提取的公共字符串处理函数,消除跨模块重复代码。
|
|
2
|
+
* 字符串工具函数——从各模块提取的公共处理函数,消除跨模块重复代码。
|
|
5
3
|
*/
|
|
6
4
|
/**
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* 规则:
|
|
10
|
-
* - 冒号和空白替换为连字符
|
|
11
|
-
* - 只保留字母、数字、中文、连字符、下划号
|
|
12
|
-
* - 截断到 MAX_SLUG_LENGTH 字符
|
|
13
|
-
*
|
|
14
|
-
* @param value 输入字符串
|
|
15
|
-
* @returns slug 格式的字符串
|
|
5
|
+
* 截断文本到指定长度,超长时追加后缀(默认 '…')。
|
|
6
|
+
* 后缀不计入 maxLen;总长度 = maxLen + suffix.length;未超长原样返回。
|
|
16
7
|
*/
|
|
17
|
-
export declare function
|
|
8
|
+
export declare function truncate(text: string, maxLen: number, suffix?: string): string;
|
|
9
|
+
/** 配置名默认最大长度 */
|
|
10
|
+
export declare const MAX_CONFIG_NAME_LENGTH = 100;
|
|
18
11
|
/**
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
* 与 sprite 的 `shared/truncate.ts` 独立(ADR-002 内核零依赖约束,kernel/sprite 各自维护)。
|
|
24
|
-
*
|
|
25
|
-
* 后缀约定:
|
|
26
|
-
* - 默认 '…'(Unicode U+2026,1 字符):UI 预览场景,简洁
|
|
27
|
-
* - '…[截断]':LLM prompt 场景,明确告知模型"此处被截断,非原文结束"
|
|
28
|
-
* - 调用方可通过 suffix 参数自定义
|
|
29
|
-
*
|
|
30
|
-
* ellipsis 统一:将散落的 '...'(ASCII 3 字符)统一为 '…'(Unicode 1 字符),
|
|
31
|
-
* 与 sprite truncate.ts 保持一致。
|
|
32
|
-
*
|
|
33
|
-
* @param text 原始文本
|
|
34
|
-
* @param maxLen 最大保留长度(后缀不计入;截断后总长度 = maxLen + suffix.length)
|
|
35
|
-
* @param suffix 超长时追加的后缀,默认 '…'
|
|
36
|
-
* @returns 截断后的文本(含后缀),或原文本(未超长时原样返回)
|
|
12
|
+
* 配置名(规则/技能/角色文件名)白名单校验——字符集 `[\p{L}\p{N}_-]`
|
|
13
|
+
* (全 Unicode 字母数字,拒绝路径分隔符、点号、空格),长度默认 100。
|
|
14
|
+
* 供宿主复用:宿主如需同规则校验,直接 import 本入口,避免另写一份漂移。
|
|
37
15
|
*/
|
|
38
|
-
export declare function
|
|
16
|
+
export declare function isValidConfigName(name: string, maxLength?: number): boolean;
|
|
17
|
+
/** 解析配置 ID(`source:name` 格式)为 {source, name};无冒号返回 null(调用方按放行处理) */
|
|
18
|
+
export declare function parseConfigId(id: string): {
|
|
19
|
+
source: string;
|
|
20
|
+
name: string;
|
|
21
|
+
} | null;
|
|
39
22
|
//# sourceMappingURL=strings.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"strings.d.ts","sourceRoot":"","sources":["../../src/utils/strings.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"strings.d.ts","sourceRoot":"","sources":["../../src/utils/strings.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,MAAY,GAAG,MAAM,CAGnF;AAID,gBAAgB;AAChB,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,SAAS,GAAE,MAA+B,GACzC,OAAO,CAGT;AAED,qEAAqE;AACrE,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAKjF"}
|
package/dist/utils/strings.js
CHANGED
|
@@ -1,55 +1,36 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* 从各模块提取的公共字符串处理函数,消除跨模块重复代码。
|
|
2
|
+
* 字符串工具函数——从各模块提取的公共处理函数,消除跨模块重复代码。
|
|
5
3
|
*/
|
|
6
|
-
/** slug 最大长度 */
|
|
7
|
-
const MAX_SLUG_LENGTH = 40;
|
|
8
|
-
/**
|
|
9
|
-
* 将字符串转换为 URL 友好的 slug 格式
|
|
10
|
-
*
|
|
11
|
-
* 规则:
|
|
12
|
-
* - 冒号和空白替换为连字符
|
|
13
|
-
* - 只保留字母、数字、中文、连字符、下划号
|
|
14
|
-
* - 截断到 MAX_SLUG_LENGTH 字符
|
|
15
|
-
*
|
|
16
|
-
* @param value 输入字符串
|
|
17
|
-
* @returns slug 格式的字符串
|
|
18
|
-
*/
|
|
19
|
-
export function slugify(value) {
|
|
20
|
-
return value
|
|
21
|
-
.replace(/[:\s]+/g, '-')
|
|
22
|
-
.replace(/[^a-zA-Z0-9\u4e00-\u9fff\-_]/g, '')
|
|
23
|
-
.replace(/-{2,}/g, '-')
|
|
24
|
-
.replace(/^-|-$/g, '')
|
|
25
|
-
.slice(0, MAX_SLUG_LENGTH);
|
|
26
|
-
}
|
|
27
4
|
// ─── 文本截断 ─────────────────────────────────────────
|
|
28
5
|
/**
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
* 统一内核中 15 处散落的 `slice + suffix` 模式(ADR-017 枝叶层 2 次提取)。
|
|
32
|
-
*
|
|
33
|
-
* 与 sprite 的 `shared/truncate.ts` 独立(ADR-002 内核零依赖约束,kernel/sprite 各自维护)。
|
|
34
|
-
*
|
|
35
|
-
* 后缀约定:
|
|
36
|
-
* - 默认 '…'(Unicode U+2026,1 字符):UI 预览场景,简洁
|
|
37
|
-
* - '…[截断]':LLM prompt 场景,明确告知模型"此处被截断,非原文结束"
|
|
38
|
-
* - 调用方可通过 suffix 参数自定义
|
|
39
|
-
*
|
|
40
|
-
* ellipsis 统一:将散落的 '...'(ASCII 3 字符)统一为 '…'(Unicode 1 字符),
|
|
41
|
-
* 与 sprite truncate.ts 保持一致。
|
|
42
|
-
*
|
|
43
|
-
* @param text 原始文本
|
|
44
|
-
* @param maxLen 最大保留长度(后缀不计入;截断后总长度 = maxLen + suffix.length)
|
|
45
|
-
* @param suffix 超长时追加的后缀,默认 '…'
|
|
46
|
-
* @returns 截断后的文本(含后缀),或原文本(未超长时原样返回)
|
|
6
|
+
* 截断文本到指定长度,超长时追加后缀(默认 '…')。
|
|
7
|
+
* 后缀不计入 maxLen;总长度 = maxLen + suffix.length;未超长原样返回。
|
|
47
8
|
*/
|
|
48
9
|
export function truncate(text, maxLen, suffix = '…') {
|
|
49
|
-
// 未超长直接返回原文本(含 text.length === maxLen 的边界情况)
|
|
50
10
|
if (text.length <= maxLen)
|
|
51
11
|
return text;
|
|
52
|
-
// 超长时截断到 maxLen 并追加后缀
|
|
53
12
|
return text.slice(0, maxLen) + suffix;
|
|
54
13
|
}
|
|
14
|
+
// ─── 配置名白名单校验(公共契约工具,供宿主复用)─────────────────
|
|
15
|
+
/** 配置名默认最大长度 */
|
|
16
|
+
export const MAX_CONFIG_NAME_LENGTH = 100;
|
|
17
|
+
/**
|
|
18
|
+
* 配置名(规则/技能/角色文件名)白名单校验——字符集 `[\p{L}\p{N}_-]`
|
|
19
|
+
* (全 Unicode 字母数字,拒绝路径分隔符、点号、空格),长度默认 100。
|
|
20
|
+
* 供宿主复用:宿主如需同规则校验,直接 import 本入口,避免另写一份漂移。
|
|
21
|
+
*/
|
|
22
|
+
export function isValidConfigName(name, maxLength = MAX_CONFIG_NAME_LENGTH) {
|
|
23
|
+
if (typeof name !== 'string' || name.length === 0 || name.length > maxLength)
|
|
24
|
+
return false;
|
|
25
|
+
return /^[\p{L}\p{N}_-]+$/u.test(name);
|
|
26
|
+
}
|
|
27
|
+
/** 解析配置 ID(`source:name` 格式)为 {source, name};无冒号返回 null(调用方按放行处理) */
|
|
28
|
+
export function parseConfigId(id) {
|
|
29
|
+
if (typeof id !== 'string')
|
|
30
|
+
return null;
|
|
31
|
+
const colonIdx = id.indexOf(':');
|
|
32
|
+
if (colonIdx < 0)
|
|
33
|
+
return null;
|
|
34
|
+
return { source: id.slice(0, colonIdx), name: id.slice(colonIdx + 1) };
|
|
35
|
+
}
|
|
55
36
|
//# sourceMappingURL=strings.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"strings.js","sourceRoot":"","sources":["../../src/utils/strings.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"strings.js","sourceRoot":"","sources":["../../src/utils/strings.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,qDAAqD;AAErD;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAY,EAAE,MAAc,EAAE,SAAiB,GAAG;IACzE,IAAI,IAAI,CAAC,MAAM,IAAI,MAAM;QAAE,OAAO,IAAI,CAAC;IACvC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC;AACxC,CAAC;AAED,8CAA8C;AAE9C,gBAAgB;AAChB,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAE1C;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAAY,EACZ,YAAoB,sBAAsB;IAE1C,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,SAAS;QAAE,OAAO,KAAK,CAAC;IAC3F,OAAO,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzC,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,aAAa,CAAC,EAAU;IACtC,IAAI,OAAO,EAAE,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACxC,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,QAAQ,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9B,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC;AACzE,CAAC"}
|
package/dist/utils/time.d.ts
CHANGED
|
@@ -7,6 +7,8 @@
|
|
|
7
7
|
* API 对齐:formatDateKey(date) 与精灵 shared/dateUtils.ts 语义一致,
|
|
8
8
|
* 用于格式化任意 Date 为 YYYY-MM-DD(本地时区)。
|
|
9
9
|
*/
|
|
10
|
+
/** 一天对应的毫秒数(跨层共享,供天数差换算:诊断展示 daysSinceLastAccess / 推荐时效权重) */
|
|
11
|
+
export declare const ONE_DAY_MS: number;
|
|
10
12
|
/**
|
|
11
13
|
* 获取当前时间的 ISO 8601 时间戳
|
|
12
14
|
*
|
|
@@ -35,4 +37,39 @@ export declare function formatDateKey(date: Date): string;
|
|
|
35
37
|
* @returns 如 "2026-06-21"
|
|
36
38
|
*/
|
|
37
39
|
export declare function todayDate(): string;
|
|
40
|
+
/**
|
|
41
|
+
* 组装会话标识:`date + "-" + session`
|
|
42
|
+
*
|
|
43
|
+
* @param date 日期键(YYYY-MM-DD,经 formatDateKey/todayDate 产生)
|
|
44
|
+
* @param session 会话名(允许含连字符)
|
|
45
|
+
* @returns 完整会话标识;session 为空串时返回纯 date(不产生尾 '-')
|
|
46
|
+
*/
|
|
47
|
+
export declare function buildSessionId(date: string, session: string): string;
|
|
48
|
+
/**
|
|
49
|
+
* 拆解会话标识 → {date, session}
|
|
50
|
+
*
|
|
51
|
+
* 按「日期固定 10 位」切割(非 split,session 名可含连字符)。
|
|
52
|
+
* 不校验、不抛错、不返回 null——本函数只做格式拆解,假定输入由 buildSessionId 生成;
|
|
53
|
+
* 非法输入(不足 11 位)时 date 取整个串、session 为空串,由调用方按需处理。
|
|
54
|
+
*
|
|
55
|
+
* @param sessionId 完整会话标识(YYYY-MM-DD-sessionName)
|
|
56
|
+
* @returns 拆解后的 {date, session}
|
|
57
|
+
*/
|
|
58
|
+
export declare function splitSessionId(sessionId: string): {
|
|
59
|
+
date: string;
|
|
60
|
+
session: string;
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* 校验会话标识是否为严格的 `YYYY-MM-DD-<会话名>` 格式
|
|
64
|
+
*
|
|
65
|
+
* 供需要"严格合法性判定"的调用方使用(如存储写侧、切换会话时的格式守卫)。
|
|
66
|
+
* 与 splitSessionId 互补:本函数只做格式校验、不做拆解;二者组合 = 校验 + 拆解。
|
|
67
|
+
* 若仅需拆解而无需严格校验,请用 splitSessionId。
|
|
68
|
+
*
|
|
69
|
+
* 判定规则:日期段必须是 4-2-2 的数字(`\d{4}-\d{2}-\d{2}`),且分隔后的会话名非空。
|
|
70
|
+
*
|
|
71
|
+
* @param sessionId 会话标识
|
|
72
|
+
* @returns 是否匹配严格格式
|
|
73
|
+
*/
|
|
74
|
+
export declare function isValidSessionId(sessionId: string): boolean;
|
|
38
75
|
//# sourceMappingURL=time.d.ts.map
|
package/dist/utils/time.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"time.d.ts","sourceRoot":"","sources":["../../src/utils/time.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;GAIG;AACH,wBAAgB,MAAM,IAAI,MAAM,CAE/B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAKhD;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAElC"}
|
|
1
|
+
{"version":3,"file":"time.d.ts","sourceRoot":"","sources":["../../src/utils/time.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,8DAA8D;AAC9D,eAAO,MAAM,UAAU,QAAsB,CAAC;AAE9C;;;;GAIG;AACH,wBAAgB,MAAM,IAAI,MAAM,CAE/B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAKhD;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAeD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAGpE;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAInF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAE3D"}
|
package/dist/utils/time.js
CHANGED
|
@@ -7,6 +7,8 @@
|
|
|
7
7
|
* API 对齐:formatDateKey(date) 与精灵 shared/dateUtils.ts 语义一致,
|
|
8
8
|
* 用于格式化任意 Date 为 YYYY-MM-DD(本地时区)。
|
|
9
9
|
*/
|
|
10
|
+
/** 一天对应的毫秒数(跨层共享,供天数差换算:诊断展示 daysSinceLastAccess / 推荐时效权重) */
|
|
11
|
+
export const ONE_DAY_MS = 24 * 60 * 60 * 1000;
|
|
10
12
|
/**
|
|
11
13
|
* 获取当前时间的 ISO 8601 时间戳
|
|
12
14
|
*
|
|
@@ -44,4 +46,58 @@ export function formatDateKey(date) {
|
|
|
44
46
|
export function todayDate() {
|
|
45
47
|
return formatDateKey(new Date());
|
|
46
48
|
}
|
|
49
|
+
// ── 会话标识格式契约(SSOT 单一真理源)────────────────────
|
|
50
|
+
// sessionId 统一格式:`${date}-${session}`,date 固定 YYYY-MM-DD(10 位)。
|
|
51
|
+
// session 名允许含连字符(如分叉产生的 main-b1),故拆解必须按「前 10 位日期」切、
|
|
52
|
+
// 不能用 split('-')(会把含连字符的 session 名拆断,或把 'proj-alpha-beta' 误当日期)。
|
|
53
|
+
// 内核/vscode/其他宿主禁止各自手写 slice/split/正则解析(各写一套会有细微行为差异);
|
|
54
|
+
// 统一以下方两个纯函数为唯一拆解口径并从此导出,宿主经 src/index.ts 引入,禁止再手写解析。
|
|
55
|
+
//
|
|
56
|
+
// 契约边界(本函数为纯拆解,不校验合法性):
|
|
57
|
+
// - session 为空串:buildSessionId 返回纯 date(不产生尾 '-');
|
|
58
|
+
// - 输入不足 11 位:splitSessionId 的 date 取整个串、session 为空串(不抛错,供调用方自判)。
|
|
59
|
+
// 需要严格合法性校验的场景(如存储写侧)应在调用方基于本函数返回值追加校验,
|
|
60
|
+
// 不在本层内置(保持纯函数零状态、零哨兵语义)。
|
|
61
|
+
/**
|
|
62
|
+
* 组装会话标识:`date + "-" + session`
|
|
63
|
+
*
|
|
64
|
+
* @param date 日期键(YYYY-MM-DD,经 formatDateKey/todayDate 产生)
|
|
65
|
+
* @param session 会话名(允许含连字符)
|
|
66
|
+
* @returns 完整会话标识;session 为空串时返回纯 date(不产生尾 '-')
|
|
67
|
+
*/
|
|
68
|
+
export function buildSessionId(date, session) {
|
|
69
|
+
if (!session)
|
|
70
|
+
return date;
|
|
71
|
+
return `${date}-${session}`;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* 拆解会话标识 → {date, session}
|
|
75
|
+
*
|
|
76
|
+
* 按「日期固定 10 位」切割(非 split,session 名可含连字符)。
|
|
77
|
+
* 不校验、不抛错、不返回 null——本函数只做格式拆解,假定输入由 buildSessionId 生成;
|
|
78
|
+
* 非法输入(不足 11 位)时 date 取整个串、session 为空串,由调用方按需处理。
|
|
79
|
+
*
|
|
80
|
+
* @param sessionId 完整会话标识(YYYY-MM-DD-sessionName)
|
|
81
|
+
* @returns 拆解后的 {date, session}
|
|
82
|
+
*/
|
|
83
|
+
export function splitSessionId(sessionId) {
|
|
84
|
+
const date = sessionId.slice(0, 10);
|
|
85
|
+
const session = sessionId.length > 11 ? sessionId.slice(11) : '';
|
|
86
|
+
return { date, session };
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* 校验会话标识是否为严格的 `YYYY-MM-DD-<会话名>` 格式
|
|
90
|
+
*
|
|
91
|
+
* 供需要"严格合法性判定"的调用方使用(如存储写侧、切换会话时的格式守卫)。
|
|
92
|
+
* 与 splitSessionId 互补:本函数只做格式校验、不做拆解;二者组合 = 校验 + 拆解。
|
|
93
|
+
* 若仅需拆解而无需严格校验,请用 splitSessionId。
|
|
94
|
+
*
|
|
95
|
+
* 判定规则:日期段必须是 4-2-2 的数字(`\d{4}-\d{2}-\d{2}`),且分隔后的会话名非空。
|
|
96
|
+
*
|
|
97
|
+
* @param sessionId 会话标识
|
|
98
|
+
* @returns 是否匹配严格格式
|
|
99
|
+
*/
|
|
100
|
+
export function isValidSessionId(sessionId) {
|
|
101
|
+
return /^(\d{4}-\d{2}-\d{2})-(.+)$/.test(sessionId);
|
|
102
|
+
}
|
|
47
103
|
//# sourceMappingURL=time.js.map
|
package/dist/utils/time.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"time.js","sourceRoot":"","sources":["../../src/utils/time.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;GAIG;AACH,MAAM,UAAU,MAAM;IACpB,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAClC,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,aAAa,CAAC,IAAU;IACtC,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAC7B,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACvD,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAClD,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAC1B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,SAAS;IACvB,OAAO,aAAa,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;AACnC,CAAC"}
|
|
1
|
+
{"version":3,"file":"time.js","sourceRoot":"","sources":["../../src/utils/time.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,8DAA8D;AAC9D,MAAM,CAAC,MAAM,UAAU,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAE9C;;;;GAIG;AACH,MAAM,UAAU,MAAM;IACpB,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAClC,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,aAAa,CAAC,IAAU;IACtC,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAC7B,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACvD,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAClD,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAC1B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,SAAS;IACvB,OAAO,aAAa,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;AACnC,CAAC;AAED,8CAA8C;AAC9C,gEAAgE;AAChE,qDAAqD;AACrD,iEAAiE;AACjE,uDAAuD;AACvD,sDAAsD;AACtD,EAAE;AACF,wBAAwB;AACxB,qDAAqD;AACrD,oEAAoE;AACpE,0CAA0C;AAC1C,4BAA4B;AAE5B;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,OAAe;IAC1D,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,OAAO,GAAG,IAAI,IAAI,OAAO,EAAE,CAAC;AAC9B,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAAC,SAAiB;IAC9C,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACjE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC3B,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAAiB;IAChD,OAAO,4BAA4B,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACtD,CAAC"}
|