@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
|
@@ -1,53 +1,460 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* 内置工具定义
|
|
2
|
+
* 内置工具定义 + 工具幂等契约(补偿机制)
|
|
3
3
|
*
|
|
4
4
|
* 工具定义(schema/参数描述)与工具执行逻辑分离:
|
|
5
5
|
* - 本文件只包含工具的"声明"(名称、描述、参数 schema)
|
|
6
6
|
* - 工具的"执行"逻辑留在 toolExecutor.ts
|
|
7
|
+
* - 工具的幂等性映射在此定义,供补偿机制判断使用
|
|
7
8
|
*/
|
|
8
9
|
/**
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
|
|
14
|
-
|
|
10
|
+
* 内置工具幂等性映射
|
|
11
|
+
*
|
|
12
|
+
* key 为工具名,value 为幂等性级别。
|
|
13
|
+
* 供补偿机制和仅一次语义检查使用。
|
|
14
|
+
*/
|
|
15
|
+
export const BUILTIN_TOOL_IDEMPOTENCY = {
|
|
16
|
+
read_file: 'read-only',
|
|
17
|
+
write_file: 'idempotent-key',
|
|
18
|
+
// delete_file 归 non-idempotent 是「禁止跳过」而非「重跑有害」(重跑由 deleteFile 的 ENOENT 兜底,无害)。
|
|
19
|
+
// 禁止跳过的原因:删除的目标态可被 write_file 重建,而幂等键只有 name+args、不含文件状态 →
|
|
20
|
+
// 标幂等会让同会话内第二次「写 → 执行 → 删」闭环被静默跳过,脚本残留且 LLM 收到假的「已删除」。
|
|
21
|
+
delete_file: 'non-idempotent',
|
|
22
|
+
list_dir: 'read-only',
|
|
23
|
+
search_memories: 'read-only',
|
|
24
|
+
web_search: 'read-only',
|
|
25
|
+
trace_summary: 'read-only',
|
|
26
|
+
// list_sessions:读操作(列举会话路标),永不跳过(read-only)
|
|
27
|
+
list_sessions: 'read-only',
|
|
28
|
+
// 第二级压缩:由 loop 拦截执行(现场压临时摘要,loop 收尾即弃),永不跳过(read-only)
|
|
29
|
+
compress_context: 'read-only',
|
|
30
|
+
task_table_write: 'non-idempotent',
|
|
31
|
+
task_table_update: 'idempotent',
|
|
32
|
+
read_skill: 'read-only',
|
|
33
|
+
read_resource: 'read-only',
|
|
34
|
+
// list_resources / list_skills:读操作(列举技能 L3 清单 / 技能清单),永不跳过(read-only,同 read_skill)
|
|
35
|
+
list_resources: 'read-only',
|
|
36
|
+
list_skills: 'read-only',
|
|
37
|
+
run_skill_script: 'non-idempotent',
|
|
38
|
+
// run_project_script:运行项目内已有脚本,结果不可预期,禁止跳过(同 run_skill_script)
|
|
39
|
+
run_project_script: 'non-idempotent',
|
|
40
|
+
// register_work:写 JSON 索引(同 path+description → 同记录),以 source 为业务键实现幂等
|
|
41
|
+
register_work: 'idempotent-key',
|
|
42
|
+
// ask_user:read-only 语义——提问的目标态(用户答案)天然可变,永不跳过(跳过=丢问题)
|
|
43
|
+
ask_user: 'read-only',
|
|
44
|
+
// 条件工具(宿主注入对应 provider 才暴露):
|
|
45
|
+
// web_fetch:读操作,永不跳过(read-only)
|
|
46
|
+
// run_code:任意代码执行,有副作用(计算/IO),如实标记非幂等(重复执行结果不可预期)
|
|
47
|
+
web_fetch: 'read-only',
|
|
48
|
+
run_code: 'non-idempotent',
|
|
49
|
+
// search_project:读操作(只读搜索),永不跳过(read-only)
|
|
50
|
+
search_project: 'read-only',
|
|
51
|
+
// run_team_meeting:评估型会议(注入多角色 persona 一次调用),产出可变、代价高 → read-only(永不跳过)
|
|
52
|
+
run_team_meeting: 'read-only',
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* 判断幂等工具是否应跳过执行(仅一次语义)
|
|
56
|
+
*
|
|
57
|
+
* 规则:
|
|
58
|
+
* - non-idempotent 工具永不跳过——失败后允许 LLM 原样重试,恢复时由补偿机制兜底;
|
|
59
|
+
* - read-only 工具永不跳过——目标态可被写工具/时间改动,跳过回喂陈旧结果会误导 LLM,重跑无害;
|
|
60
|
+
* - 幂等工具(idempotent / idempotent-key)仅当上次执行**成功**(ok === true)时跳过;
|
|
61
|
+
* 上次失败(ok === false)不拦截重试,否则失败操作会被静默吞掉。
|
|
62
|
+
*
|
|
63
|
+
* 此判断是幂等契约的 SSOT:assembler.ts 的 preExecutionCheck 装配
|
|
64
|
+
* (工具分发器 dispatchTool,:570)委托本函数,避免闭包内重复实现导致契约漂移。
|
|
65
|
+
*
|
|
66
|
+
* @param records 检查点中的工具执行记录(completedToolCalls)
|
|
67
|
+
* @param name 工具名
|
|
68
|
+
* @param args 参数签名
|
|
69
|
+
* @param idempotent 工具的幂等性级别
|
|
70
|
+
* @returns 是否跳过及上次结果摘要
|
|
71
|
+
*/
|
|
72
|
+
export function shouldSkipForIdempotency(records, name, args, idempotent) {
|
|
73
|
+
if (idempotent === 'non-idempotent' || idempotent === 'read-only')
|
|
74
|
+
return { skip: false };
|
|
75
|
+
const record = records?.find((r) => r.name === name && r.argsSignature === args);
|
|
76
|
+
if (!record || record.ok !== true)
|
|
77
|
+
return { skip: false };
|
|
78
|
+
return {
|
|
79
|
+
skip: true,
|
|
80
|
+
previousResult: record.resultSummary
|
|
81
|
+
? `[SKIP:TOOL:IDEMPOTENT] 工具已执行(outbox 模式跳过),上次结果:${record.resultSummary}`
|
|
82
|
+
: undefined,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* web_search 工具定义(独立导出,条件性包含)
|
|
87
|
+
*
|
|
88
|
+
* 与 BUILTIN_TOOLS 分离的原因:
|
|
89
|
+
* web_search 不是"始终可用"的内置工具——它仅在宿主注入了 IWebSearchProvider 时才暴露给 LLM。
|
|
90
|
+
* 独立导出让 ToolExecutor.get list() 可以条件性地包含它。
|
|
91
|
+
*/
|
|
92
|
+
export const WEB_SEARCH_TOOL = {
|
|
93
|
+
name: 'web_search',
|
|
94
|
+
description: '搜索互联网获取实时信息。当需要最新数据、新闻、文档或无法从记忆中找到答案时使用。',
|
|
95
|
+
// 读操作:readonly 模式下保留(对齐 web_fetch / search_memories)
|
|
96
|
+
readonly: true,
|
|
97
|
+
parameters: {
|
|
98
|
+
type: 'object',
|
|
99
|
+
properties: {
|
|
100
|
+
query: { type: 'string', description: '搜索关键词,尽量具体精确' },
|
|
101
|
+
limit: { type: 'string', description: '返回结果数量上限,默认 "5",最大 "20"' },
|
|
102
|
+
},
|
|
103
|
+
required: ['query'],
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
/**
|
|
107
|
+
* traceSummary 工具定义(独立导出,可供宿主条件性控制可见性)
|
|
108
|
+
*
|
|
109
|
+
* 用于从记忆索引中追溯轮次摘要的原始对话内容。
|
|
110
|
+
* 需要 sessionId 和可选的 roundId 参数。
|
|
111
|
+
*/
|
|
112
|
+
export const TRACE_SUMMARY_TOOL = {
|
|
113
|
+
name: 'trace_summary',
|
|
114
|
+
description: '追溯轮次摘要的原始对话内容。当需要查看某条摘要对应的完整对话时使用。',
|
|
115
|
+
readonly: true,
|
|
116
|
+
parameters: {
|
|
117
|
+
type: 'object',
|
|
118
|
+
properties: {
|
|
119
|
+
sessionId: {
|
|
120
|
+
type: 'string',
|
|
121
|
+
description: '会话标识(格式:YYYY-MM-DD-sessionName,如 "2026-08-13-main")',
|
|
122
|
+
},
|
|
123
|
+
roundId: {
|
|
124
|
+
type: 'string',
|
|
125
|
+
description: '轮次 ID(可选,不传则返回该会话最近 N 条摘要对应的对话)',
|
|
126
|
+
},
|
|
127
|
+
limit: { type: 'string', description: '返回结果数量上限,默认 "5",最大 "20"' },
|
|
128
|
+
},
|
|
129
|
+
required: ['sessionId'],
|
|
130
|
+
},
|
|
131
|
+
};
|
|
132
|
+
/**
|
|
133
|
+
* compress_context 工具定义(独立导出,第二级压缩:LLM 主动触发兜底)
|
|
134
|
+
*
|
|
135
|
+
* 作用对象:尚无记忆摘要的东西——turn 内 loop 进行中的 step(未收尾迭代)、超大 tool_result。
|
|
136
|
+
* 现场压成**临时压缩摘要**替换,turn 收尾即弃、不进记忆库。
|
|
137
|
+
* 与第一级替换(内核自动 LRU,从库取现成摘要)互补:替换只对"已沉淀摘要的问答闭环"可用,
|
|
138
|
+
* 压缩只对"无记忆摘要的 step/工具结果"可用——同一空间管理链条的两级。
|
|
139
|
+
* 由 AgentLoop 拦截执行(非 ToolExecutor),执行逻辑在 loop.compressContext。
|
|
140
|
+
*/
|
|
141
|
+
export const COMPRESS_CONTEXT_TOOL = {
|
|
142
|
+
name: 'compress_context',
|
|
143
|
+
description: '当上下文接近容量上限或空间紧张时主动压缩空间(第二级压缩,LLM 触发兜底):把最早的 turn' +
|
|
144
|
+
'或超大工具结果现场压成临时摘要替换,loop 收尾即弃。当替换无法释放空间(无已存摘要)时、或存在' +
|
|
145
|
+
'超大工具结果 / 较多旧 turn 时使用;压缩内容仍可经 trace_summary 回溯。',
|
|
146
|
+
parameters: {
|
|
147
|
+
type: 'object',
|
|
148
|
+
properties: {
|
|
149
|
+
target: {
|
|
150
|
+
type: 'string',
|
|
151
|
+
description: '压缩目标:"earliest_round"(最早的 turn,默认)或 "largest_tool_result"(最大的工具结果)',
|
|
152
|
+
},
|
|
153
|
+
},
|
|
154
|
+
required: [],
|
|
155
|
+
},
|
|
156
|
+
};
|
|
157
|
+
/**
|
|
158
|
+
* ask_user 内置工具定义(主动提问唯一通道)
|
|
159
|
+
*
|
|
160
|
+
* 对齐 Claude Code AskUserQuestion 机制:提问 = 一次普通工具调用(Tool Calling)。
|
|
161
|
+
* loop 检出 ask_user → 整轮挂起(step 边界气口)→ 用户答案以 tool result 回填 →
|
|
162
|
+
* LLM 基于答案续跑。工具调用结构完整落地(不「撕掉」),OpenAI 兼容端结构恒合法。
|
|
163
|
+
*
|
|
164
|
+
* 独立导出常量(同 COMPRESS_CONTEXT_TOOL 的「loop 拦截执行」模式):供 loop/toolExecutor
|
|
165
|
+
* 引用常量名,避免散落字符串工具名导致契约漂移;BUILTIN_TOOLS 数组同样引用本常量。
|
|
166
|
+
*/
|
|
167
|
+
export const ASK_USER_TOOL = {
|
|
168
|
+
name: 'ask_user',
|
|
169
|
+
description: '向用户提问(结构化)——当需要用户做决策、补充关键信息、或确认时使用:系统会暂停当前执行,' +
|
|
170
|
+
'在 step 边界向用户展示提问,用户答案会作为本工具的结果返回给你,你据此继续。' +
|
|
171
|
+
'提供候选选项(options)可提升回答效率;不提供时用户自由输入(可设 allowCustom)。',
|
|
172
|
+
// 永不跳过(幂等映射 read-only):提问的目标态(用户答案)天然可变,跳过会丢问题
|
|
173
|
+
readonly: true,
|
|
174
|
+
parameters: {
|
|
175
|
+
type: 'object',
|
|
176
|
+
properties: {
|
|
177
|
+
question: { type: 'string', description: '要问用户的问题(一句话,清晰具体)' },
|
|
178
|
+
options: {
|
|
179
|
+
type: 'array',
|
|
180
|
+
description: '候选选项(可选,用户可直接点选):各项为选项文本;省略时用户自由输入',
|
|
181
|
+
items: { type: 'string', properties: {}, required: [] },
|
|
182
|
+
},
|
|
183
|
+
allowCustom: {
|
|
184
|
+
type: 'string',
|
|
185
|
+
description: '是否允许用户在选项外自由输入:"true" / "false",默认 "false"(options 为空时无效)',
|
|
186
|
+
},
|
|
187
|
+
},
|
|
188
|
+
required: ['question'],
|
|
189
|
+
},
|
|
190
|
+
};
|
|
191
|
+
/**
|
|
192
|
+
* remember_intel 内置工具定义(情报区写回,大文本统一通道)
|
|
193
|
+
*
|
|
194
|
+
* LLM **私有工作笔记**的写回通道(scratchpad 模式):当你从大文本/工具结果获取到值得记住的
|
|
195
|
+
* 关键信息时,调用本工具把它写进你的私有情报区。
|
|
196
|
+
*
|
|
197
|
+
* **语义边界**:
|
|
198
|
+
* - 情报区**仅你私有**,装配时作为隐藏的尾部 system 消息注入,**不对用户展示**、不入文档/记忆库;
|
|
199
|
+
* - 写入即记入,可多次调用累积;已记录的旧笔记会自动保留并参与上下文淘汰;
|
|
200
|
+
* - **不要**在 `note` 里写长篇原文——只写你要长期记住的精炼要点。
|
|
201
|
+
*
|
|
202
|
+
* 独立导出常量(同 COMPRESS_CONTEXT_TOOL 的「loop 拦截执行」模式,见 loop.appendIntel)。
|
|
203
|
+
*/
|
|
204
|
+
export const REMEMBER_INTEL_TOOL = {
|
|
205
|
+
name: 'remember_intel',
|
|
206
|
+
description: '把一条关键信息写入你的私有情报区(工作笔记)。当你从大文本或工具结果中得到需要长期记住的要点时使用;' +
|
|
207
|
+
'信息对你私有、不会展示给用户、不会写入项目文件。可多次调用,写成精炼要点而非原文。',
|
|
208
|
+
readonly: true,
|
|
209
|
+
parameters: {
|
|
210
|
+
type: 'object',
|
|
211
|
+
properties: {
|
|
212
|
+
note: { type: 'string', description: '要记住的精炼要点(一句话到几行)' },
|
|
213
|
+
},
|
|
214
|
+
required: ['note'],
|
|
215
|
+
},
|
|
216
|
+
};
|
|
217
|
+
/** web_fetch 正文单次返回最大长度(防长上下文注入;schema 文案与 toolExecutor 执行钳制同源) */
|
|
218
|
+
export const WEB_FETCH_CONTENT_MAX_LEN = 50_000;
|
|
219
|
+
/** web_fetch 正文默认返回长度(limit 省略时;schema 文案与 toolExecutor 默认值同源) */
|
|
220
|
+
export const WEB_FETCH_CONTENT_DEFAULT_LEN = 8_000;
|
|
221
|
+
/**
|
|
222
|
+
* web_fetch 工具定义(独立导出,条件性包含)
|
|
223
|
+
*
|
|
224
|
+
* 与 web_search 成对构成「搜索→抓取」闭环:web_search 返回候选链接,web_fetch 读取正文。
|
|
225
|
+
* 与 BUILTIN_TOOLS 分离的原因同 web_search——仅在宿主注入了 IFetchProvider 时才暴露给 LLM。
|
|
226
|
+
*/
|
|
227
|
+
export const WEB_FETCH_TOOL = {
|
|
228
|
+
name: 'web_fetch',
|
|
229
|
+
description: '抓取指定网页的正文内容(搜索→抓取闭环的第二段)。当 web_search 找到候选链接、需要读取正文全文时使用。返回清洗后的纯文本。',
|
|
230
|
+
readonly: true,
|
|
231
|
+
parameters: {
|
|
232
|
+
type: 'object',
|
|
233
|
+
properties: {
|
|
234
|
+
url: { type: 'string', description: '要抓取的网页完整 URL(http/https)' },
|
|
235
|
+
limit: {
|
|
236
|
+
type: 'string',
|
|
237
|
+
description: `返回正文最大字符数,默认 "${WEB_FETCH_CONTENT_DEFAULT_LEN}",最大 "${WEB_FETCH_CONTENT_MAX_LEN}"`,
|
|
238
|
+
},
|
|
239
|
+
},
|
|
240
|
+
required: ['url'],
|
|
241
|
+
},
|
|
242
|
+
};
|
|
243
|
+
/**
|
|
244
|
+
* run_code 工具定义(独立导出,条件性包含)
|
|
245
|
+
*
|
|
246
|
+
* 通用代码执行(计算/数据处理/验证底座)。源码不进入 LLM 上下文,仅执行结果返回。
|
|
247
|
+
* 仅在宿主注入了 ICodeExecutionProvider 时才暴露给 LLM。
|
|
248
|
+
*
|
|
249
|
+
* 两种模式(二选一):
|
|
250
|
+
* - code:直接执行代码字符串(传统模式);
|
|
251
|
+
* - script_path:执行项目根下的脚本文件(cwd=项目根,脚本可 require 项目本地依赖/读取项目数据)。
|
|
252
|
+
*
|
|
253
|
+
* 「临时脚本」闭环(对齐主流 AI IDE 行为约定):write_file 写脚本 → run_code(script_path)
|
|
254
|
+
* 执行拿数据 → delete_file 清理脚本——一次性数据处理不留痕。
|
|
255
|
+
*/
|
|
256
|
+
export const RUN_CODE_TOOL = {
|
|
257
|
+
name: 'run_code',
|
|
258
|
+
description: '执行代码并返回运行结果(通用计算/数据处理/验证能力)。源码不进入上下文,仅执行结果返回。执行能力与隔离等级由宿主注入的执行器决定。' +
|
|
259
|
+
'两种模式(二选一):① 传 code 直接执行代码字符串;② 传 script_path 执行项目根下的脚本文件(相对项目根路径,cwd=项目根,脚本可 require 项目本地依赖、读取项目数据)。' +
|
|
260
|
+
'一次性数据处理推荐「临时脚本」闭环:先 write_file 写入脚本 → run_code(script_path) 执行拿数据 → delete_file 清理脚本,不留痕。',
|
|
261
|
+
diskWrite: 'opaque',
|
|
262
|
+
parameters: {
|
|
263
|
+
type: 'object',
|
|
264
|
+
properties: {
|
|
265
|
+
language: {
|
|
266
|
+
type: 'string',
|
|
267
|
+
description: '代码语言(可选;script_path 模式省略时按文件扩展名推断)。**具体支持哪些语言由宿主执行器决定,内核不预设**——' +
|
|
268
|
+
'不确定时优先用 script_path 模式(先 write_file 写文件再执行,按扩展名推断运行时),或先观察项目里已有脚本的扩展名;' +
|
|
269
|
+
'若直接传 code 而语言不被支持,执行器会明确回知可用语言,据此改用即可。',
|
|
270
|
+
},
|
|
271
|
+
code: { type: 'string', description: '要执行的代码内容(与 script_path 二选一)' },
|
|
272
|
+
script_path: {
|
|
273
|
+
type: 'string',
|
|
274
|
+
description: '要执行的项目脚本文件路径(相对项目根,如 "tmp_analyze.mjs";与 code 二选一,cwd=项目根,脚本可用项目依赖)',
|
|
275
|
+
},
|
|
276
|
+
},
|
|
277
|
+
required: [],
|
|
278
|
+
},
|
|
279
|
+
};
|
|
280
|
+
/**
|
|
281
|
+
* search_project 工具定义(独立导出,条件性包含)
|
|
282
|
+
*
|
|
283
|
+
* 与 BUILTIN_TOOLS 分离的原因同 web_search:仅在宿主注入了 IProjectSearchProvider 时才暴露给 LLM。
|
|
284
|
+
* 项目内搜索(等价 IDE 全局搜索):按文件名 glob 或按内容全文关键词定位项目文件,
|
|
285
|
+
* 命中路径后再用 read_file 精读。这是「LLM 感知当前项目」的入口——回答「项目里有什么/某文件在哪/哪里用到某词」。
|
|
286
|
+
*/
|
|
287
|
+
export const SEARCH_PROJECT_TOOL = {
|
|
288
|
+
name: 'search_project',
|
|
289
|
+
description: '在当前项目(当前工作区文件夹)中搜索文件。mode="name" 按文件名 glob(如 "**/*.ts"),' +
|
|
290
|
+
// name 裸词语义:无通配符时自动按名称子串/分词放宽,避免"精确路径匹配"假阴性
|
|
291
|
+
'也可写裸文件名(如 "product")——无通配符的 word 会自动放宽为名称子串/分词匹配;' +
|
|
292
|
+
'mode="content" 按内容关键词(如 "TODO")搜索,返回 路径:行号:预览。' +
|
|
293
|
+
// 多词语义显式化:LLM 不知道该写"整串"还是"拆词"时,会把一次能问清的事问成多次(甚至放弃)
|
|
294
|
+
'content 模式的多词语义:**先按整串精确匹配,整串零命中才自动放宽为分词匹配' +
|
|
295
|
+
'(任一分词命中即算,不是"全部包含")**,结果中会标注是否为放宽命中——' +
|
|
296
|
+
'因此多词直接写成一串即可(如 "核心 愿景"、"核心/愿景"),无需拆成多次调用。' +
|
|
297
|
+
'返回文案会如实说明结果是否被截断、是否有文件只被部分检索(过大)或读取失败:' +
|
|
298
|
+
'若文案说"未找到"但同时提示截断、部分检索或读取失败,**不代表项目中不存在该内容**,应换更具体的关键词或缩小 exclude 后重试。' +
|
|
299
|
+
'回答与项目代码/文件结构相关的问题前,若不确定答案,' +
|
|
300
|
+
'应优先调用本工具定位相关文件,再用 read_file 精读内容——不要凭空猜测项目路径或内容。' +
|
|
301
|
+
'典型场景:用户问「项目里有什么/有多少文件/某文件在哪/哪里用到了某个词」;' +
|
|
302
|
+
'省略 query 时列出项目全部文件(受 maxResults 限制)。命中路径为相对项目根的路径,可直接传给 read_file 精读(勿拼绝对路径)。',
|
|
303
|
+
// 读操作:readonly 模式下保留(对齐 read_file / list_dir)
|
|
304
|
+
readonly: true,
|
|
305
|
+
parameters: {
|
|
306
|
+
type: 'object',
|
|
307
|
+
properties: {
|
|
308
|
+
query: {
|
|
309
|
+
type: 'string',
|
|
310
|
+
description: '文件名 glob(mode=name,如 "**/*.ts")或裸文件名/内容关键词(mode=content,如 "TODO");name 模式无通配符时自动按名称子串/分词放宽;省略时列出项目文件清单',
|
|
311
|
+
},
|
|
312
|
+
mode: {
|
|
313
|
+
type: 'string',
|
|
314
|
+
description: '"name"(按文件名搜索,默认)或 "content"(按内容全文搜索)',
|
|
315
|
+
},
|
|
316
|
+
exclude: {
|
|
317
|
+
type: 'string',
|
|
318
|
+
description: '排除 glob/路径(可选,如 "**/node_modules/**" 或 "docs")',
|
|
319
|
+
},
|
|
320
|
+
maxResults: { type: 'string', description: '返回结果数量上限,默认 "20",最大 "100"' },
|
|
321
|
+
},
|
|
322
|
+
required: [],
|
|
323
|
+
},
|
|
324
|
+
};
|
|
325
|
+
/**
|
|
326
|
+
* run_team_meeting 内置工具定义(评估/评审型小组会议,单次 LLM 调用注入多角色 persona)
|
|
327
|
+
*
|
|
328
|
+
* 语义:一次调用内读取组内 组长+组员 各角色的完整设定(buildSystemPrompt 取的 persona 全文),
|
|
329
|
+
* 拼成多角色 system prompt,让模型以各角色视角独立评估同一议题,最后以组长视角汇总。
|
|
330
|
+
* 这是「工具内嵌 LLM 调用」的新形态(vs 纯函数工具),只做串联、一次 chat() 完成。
|
|
331
|
+
*
|
|
332
|
+
* **定位边界**:评估/评审型会议(各视角独立观点 + 组长汇总);**不覆盖**你来我往的讨论型会议。
|
|
333
|
+
* **角色数上限**:按组解析时经 `MAX_TEAM_MEMBERS` 截断,队长 1 + 组员 ≤ 4 = 5 人组(persona 全文
|
|
334
|
+
* token 成本高,约束同 `MAX_TEAM_MEMBERS`)——组员超限部分不参与本次会议。
|
|
335
|
+
*
|
|
336
|
+
* 独立导出常量(同 COMPRESS_CONTEXT_TOOL/ASK_USER_TOOL 的「独立导出」模式),
|
|
337
|
+
* BUILTIN_TOOLS 数组引用同一常量,避免散落字符串工具名。
|
|
338
|
+
*/
|
|
339
|
+
export const RUN_TEAM_MEETING_TOOL = {
|
|
340
|
+
name: 'run_team_meeting',
|
|
341
|
+
description: '召开评估/评审型小组会议:一次调用注入组内各角色(组长+组员,队长 1 + 组员 ≤ 4)的完整设定,' +
|
|
342
|
+
'以各角色视角独立评估同一议题(每视角一段),最后以组长视角汇总。适用于「直接产出多角度评审意见」,' +
|
|
343
|
+
'不适用于需要你来我往逐轮对齐的讨论型会议。',
|
|
344
|
+
// 读操作语义(readonly 模式保留):不修改项目状态,产出可变 → 永不跳过(read-only 幂等)
|
|
345
|
+
readonly: true,
|
|
346
|
+
parameters: {
|
|
347
|
+
type: 'object',
|
|
348
|
+
properties: {
|
|
349
|
+
group: { type: 'string', description: '组名(= 组长的角色包名,须已在组名单中)' },
|
|
350
|
+
topic: { type: 'string', description: '要评估的议题(一句话,越具体越好)' },
|
|
351
|
+
},
|
|
352
|
+
required: ['group', 'topic'],
|
|
353
|
+
},
|
|
354
|
+
};
|
|
355
|
+
/**
|
|
356
|
+
* write_file 写入模式唯一定义(枚举 + 简介 · 单一真理源)
|
|
357
|
+
*
|
|
358
|
+
* mode 参数描述(下方 schema)与 handler 合法性校验(builtinToolHandlers.writeFile)都从此派生——
|
|
359
|
+
* 模式清单若两处各自硬编码,新增模式漏改一处即出现「描述允许而校验拒绝」的静默漂移。
|
|
360
|
+
* 新增模式只改本表:描述文案与校验清单自动对齐,工具描述里的模式数量也由 length 派生。
|
|
361
|
+
*/
|
|
362
|
+
export const WRITE_FILE_MODES = [
|
|
363
|
+
{ name: 'overwrite', summary: '默认,全量覆盖' },
|
|
364
|
+
{ name: 'append', summary: '追加到末尾' },
|
|
365
|
+
{ name: 'insert', summary: '在 insert_line 行号前插入' },
|
|
366
|
+
{ name: 'replace', summary: '把文件中唯一出现的 old_string 替换为 content' },
|
|
367
|
+
];
|
|
368
|
+
/** mode 参数类型守卫(唯一判定点,判定与 WRITE_FILE_MODES 同源;窄化后可供 computeWriteContent 消费) */
|
|
369
|
+
export function isWriteFileMode(mode) {
|
|
370
|
+
return WRITE_FILE_MODES.some((m) => m.name === mode);
|
|
371
|
+
}
|
|
372
|
+
/** write_file 模式清单文案(schema 描述统一由此拼接,勿手写模式清单) */
|
|
373
|
+
const WRITE_FILE_MODES_BRIEF = WRITE_FILE_MODES.map((m) => `${m.name}(${m.summary})`).join('、');
|
|
374
|
+
/**
|
|
375
|
+
* 始终可用的内置工具注册表(单一真理源 = 下方 `BUILTIN_TOOLS` 数组)。
|
|
376
|
+
*
|
|
377
|
+
* - 增删内置工具只改数组,勿在此复述清单:手工维护的工具列表会随数组演化而腐坏
|
|
378
|
+
* (本注释曾长期写为"8 个",实际已增至 14 个,正是这一腐坏的体现)。
|
|
379
|
+
* - 每个工具的 `description` 即其对外契约,以数组内定义为准。
|
|
380
|
+
*
|
|
381
|
+
* 条件性工具(不在此数组,由 toolExecutor 按宿主注入的 Provider 拼接):
|
|
382
|
+
* - web_search / web_fetch:注入 IWebSearchProvider / IFetchProvider 时暴露,构成搜索→抓取闭环
|
|
383
|
+
* - run_code:注入 ICodeExecutionProvider 时暴露
|
|
384
|
+
* - TRACE_SUMMARY_TOOL:trace_summary 定义的真源(数组引用同一常量,无内联复述)
|
|
15
385
|
*/
|
|
16
386
|
export const BUILTIN_TOOLS = [
|
|
17
387
|
{
|
|
18
388
|
name: 'read_file',
|
|
19
|
-
description: '
|
|
389
|
+
description: '读取项目内文件内容(按行分段返回)。路径必须相对项目根目录。' +
|
|
390
|
+
'若不确定目标文件是否存在或路径是否正确,先用 search_project 搜索文件名定位,或 list_dir 查看目录结构,' +
|
|
391
|
+
'确认存在再读——不要凭空猜测路径(读不存在的文件会返回 FILE_NOT_FOUND,是可避免的试探浪费)。' +
|
|
392
|
+
'大文件不会一次全给:返回末尾的「[read_file 分段]」脚注会告知已显示的行号区间与总行数,' +
|
|
393
|
+
'继续读用 offset 指定起始行。' +
|
|
394
|
+
'读到的内容若含需长期引用的要点(结论、设定、数据),随即用 remember_intel 记入工作笔记,' +
|
|
395
|
+
'之后查证用 search_memories 检索记忆——不要靠重复读文件。',
|
|
396
|
+
readonly: true,
|
|
20
397
|
parameters: {
|
|
21
398
|
type: 'object',
|
|
22
399
|
properties: {
|
|
23
400
|
path: { type: 'string', description: '相对项目根目录的文件路径' },
|
|
401
|
+
offset: {
|
|
402
|
+
type: 'string',
|
|
403
|
+
description: '起始行号(从 1 开始)。省略则从第 1 行读;续读时用上一段脚注给出的 offset',
|
|
404
|
+
},
|
|
405
|
+
limit: { type: 'string', description: '最多返回的行数。省略则按单次读取预算尽可能多读' },
|
|
24
406
|
},
|
|
25
407
|
required: ['path'],
|
|
26
408
|
},
|
|
27
409
|
},
|
|
28
410
|
{
|
|
29
411
|
name: 'write_file',
|
|
30
|
-
description: '写入或创建文件。owner 模式默认自动批准;guest
|
|
412
|
+
description: '写入或创建文件。owner 模式默认自动批准;guest 模式会要求用户确认。受路径白名单保护。' +
|
|
413
|
+
`支持 ${WRITE_FILE_MODES.length} 种写入模式:${WRITE_FILE_MODES_BRIEF}。` +
|
|
414
|
+
'改局部优先用 replace(只替换唯一匹配的 old_string,无需持有整份文件);' +
|
|
415
|
+
'大文件手上没有完整内容,无法 overwrite 全量重写;文末追加用 append,单点插入用 insert。' +
|
|
416
|
+
'只有新建文件或结构性多处重写才用 overwrite。',
|
|
417
|
+
diskWrite: 'path',
|
|
31
418
|
parameters: {
|
|
32
419
|
type: 'object',
|
|
33
420
|
properties: {
|
|
34
421
|
path: { type: 'string', description: '相对项目根目录的文件路径' },
|
|
35
|
-
content: {
|
|
422
|
+
content: {
|
|
423
|
+
type: 'string',
|
|
424
|
+
description: '要写入的内容(replace 模式下为新文本;置空表示删除匹配到的片段)',
|
|
425
|
+
},
|
|
36
426
|
mode: {
|
|
37
427
|
type: 'string',
|
|
38
|
-
description:
|
|
428
|
+
description: `写入模式:${WRITE_FILE_MODES_BRIEF}`,
|
|
39
429
|
},
|
|
40
430
|
insert_line: {
|
|
41
431
|
type: 'string',
|
|
42
432
|
description: 'insert 模式下插入位置的行号(从 1 开始),省略则插入到文件末尾',
|
|
43
433
|
},
|
|
434
|
+
old_string: {
|
|
435
|
+
type: 'string',
|
|
436
|
+
description: 'replace 模式下待替换的原文片段(须在文件中唯一出现,含缩进/换行须与原文完全一致)',
|
|
437
|
+
},
|
|
44
438
|
},
|
|
45
439
|
required: ['path', 'content'],
|
|
46
440
|
},
|
|
47
441
|
},
|
|
442
|
+
{
|
|
443
|
+
name: 'delete_file',
|
|
444
|
+
description: '删除项目内文件。用于清理 LLM 创建的临时脚本等一次性文件(配合 run_code 的 script_path 模式:写脚本 → 执行 → 删除,不留痕)。受路径白名单保护;owner 模式默认自动批准,guest 模式会要求用户确认。仅支持删除文件,不支持删除目录。',
|
|
445
|
+
diskWrite: 'path',
|
|
446
|
+
parameters: {
|
|
447
|
+
type: 'object',
|
|
448
|
+
properties: {
|
|
449
|
+
path: { type: 'string', description: '相对项目根目录的文件路径' },
|
|
450
|
+
},
|
|
451
|
+
required: ['path'],
|
|
452
|
+
},
|
|
453
|
+
},
|
|
48
454
|
{
|
|
49
455
|
name: 'list_dir',
|
|
50
456
|
description: '列出目录内容。默认相对项目根目录。受路径白名单保护。递归深度 ≤ 3,自动忽略 .git / node_modules / .memora / dist / coverage / .next。',
|
|
457
|
+
readonly: true,
|
|
51
458
|
parameters: {
|
|
52
459
|
type: 'object',
|
|
53
460
|
properties: {
|
|
@@ -60,16 +467,241 @@ export const BUILTIN_TOOLS = [
|
|
|
60
467
|
},
|
|
61
468
|
{
|
|
62
469
|
name: 'search_memories',
|
|
63
|
-
description: '
|
|
470
|
+
description: '关键词检索记忆库(纯关键词通道,无语义向量通道)。涉及过往决定、历史事实、' +
|
|
471
|
+
'用户偏好、项目背景,或回答不确定时,优先调用本工具按需召回(理解意图 → 搜记忆,结构性前置)。' +
|
|
472
|
+
'命中返回该记忆的最近使用时间 accessedAt(被想起/命中即刷新,反映近期使用的工作连续性)。' +
|
|
473
|
+
'关键词=字面匹配:语义近义/换说法(如「性能优化」vs「QPS 提升」)不会命中——首次未命中时主动' +
|
|
474
|
+
'换等价关键词、换表述重试 2~3 次(LLM 承担词汇桥梁,勿因一次空结果就断言记忆不存在)。' +
|
|
475
|
+
'优先级判据:命中贴合度为主;多个候选贴合度相近时,accessedAt 较新者优先(勿让时间压倒贴合度)。' +
|
|
476
|
+
'先粗筛返回的预览候选,对真正相关的条目再调 trace_summary 精取原文,避免一次拉取过多内容。',
|
|
477
|
+
readonly: true,
|
|
64
478
|
parameters: {
|
|
65
479
|
type: 'object',
|
|
66
480
|
properties: {
|
|
67
|
-
query: { type: 'string', description: '
|
|
68
|
-
limit: { type: 'string', description: '返回结果数量上限,默认 "
|
|
481
|
+
query: { type: 'string', description: '搜索关键词(字面匹配;未命中建议换词重试)' },
|
|
482
|
+
limit: { type: 'string', description: '返回结果数量上限,默认 "5"' },
|
|
69
483
|
mode: { type: 'string', description: '"match"(默认,任一)或 "near"(必须全部)' },
|
|
70
484
|
},
|
|
71
485
|
required: ['query'],
|
|
72
486
|
},
|
|
73
487
|
},
|
|
488
|
+
// ── 记忆即摘要·追溯工具(引用 TRACE_SUMMARY_TOOL 单真源)──
|
|
489
|
+
TRACE_SUMMARY_TOOL,
|
|
490
|
+
{
|
|
491
|
+
name: 'list_sessions',
|
|
492
|
+
description: '列出历史会话的路标(每个会话的主题与摘要),用于定位"之前聊过某件事"具体在哪个会话。' +
|
|
493
|
+
'先用它找到目标 sessionId,再用 trace_summary 深入查看该会话的问答摘要。' +
|
|
494
|
+
'注意:当前会话的摘要可能滞后,历史会话的路标准确。',
|
|
495
|
+
readonly: true,
|
|
496
|
+
parameters: {
|
|
497
|
+
type: 'object',
|
|
498
|
+
properties: {
|
|
499
|
+
limit: { type: 'string', description: '返回条数上限,默认 "10",最大 "30"' },
|
|
500
|
+
},
|
|
501
|
+
required: [],
|
|
502
|
+
},
|
|
503
|
+
},
|
|
504
|
+
// ── 两级空间管理·第二级压缩(LLM 主动触发兜底)──────
|
|
505
|
+
COMPRESS_CONTEXT_TOOL,
|
|
506
|
+
// ── 主动提问(ask_user 工具,loop 检出挂起;唯一提问通道)──
|
|
507
|
+
ASK_USER_TOOL,
|
|
508
|
+
// ── 情报区写回(remember_intel,LLM 私有笔记;loop 拦截执行)──
|
|
509
|
+
REMEMBER_INTEL_TOOL,
|
|
510
|
+
// ── 任务表管理工具 ──────────────────────────────
|
|
511
|
+
{
|
|
512
|
+
name: 'task_table_write',
|
|
513
|
+
description: '写入或更新任务表(命令式:多步任务必须先用本工具把任务拆解为子任务项写入任务表,随后按任务表逐步执行,禁止跳过拆解一次性盲目执行)。' +
|
|
514
|
+
'overwrite 清空现有任务表后写入新任务项(重写/重开计划);' +
|
|
515
|
+
'append 在现有任务表后追加新任务项;' +
|
|
516
|
+
'replace 模式按位置全量替换现有任务项(保留任务项 ID 与状态);须传入完整任务项列表,未列出的任务项将被丢弃。' +
|
|
517
|
+
'写入后按任务表逐步推进:每完成一个任务项的实际产出(正文回答/写入文件/工具结果),再用 task_table_update 标记 done(先产出、后标记)。' +
|
|
518
|
+
'每个任务项可声明可选 rolePack 字段(小组会议用:该任务项的表层装配角色,须 ∈ 系统提示中声明的 {组长} ∪ {组员},越界会被忽略)。' +
|
|
519
|
+
'输出格式为 Markdown 表格,包含进度行和状态标记。',
|
|
520
|
+
parameters: {
|
|
521
|
+
type: 'object',
|
|
522
|
+
properties: {
|
|
523
|
+
mode: {
|
|
524
|
+
type: 'string',
|
|
525
|
+
description: '写入模式:"overwrite"(清空后重写全部任务项)、"append"(追加新任务项)、' +
|
|
526
|
+
'"replace"(按位置全量替换,保留任务项 ID 与状态;须传入完整任务项列表,未列出的将被丢弃)',
|
|
527
|
+
},
|
|
528
|
+
items: {
|
|
529
|
+
type: 'array',
|
|
530
|
+
description: '任务项列表,每个任务项包含 description 字段,可选项 rolePack(会议表层装配角色,须 ∈ {组长} ∪ {组员})',
|
|
531
|
+
items: {
|
|
532
|
+
type: 'object',
|
|
533
|
+
properties: {
|
|
534
|
+
description: { type: 'string', description: '任务项描述' },
|
|
535
|
+
rolePack: {
|
|
536
|
+
type: 'string',
|
|
537
|
+
description: '可选:该任务项的表层装配角色(小组会议用,组长或组员;越界会被忽略,省略按当前生效角色)',
|
|
538
|
+
},
|
|
539
|
+
},
|
|
540
|
+
required: ['description'],
|
|
541
|
+
},
|
|
542
|
+
},
|
|
543
|
+
},
|
|
544
|
+
required: ['mode', 'items'],
|
|
545
|
+
},
|
|
546
|
+
},
|
|
547
|
+
{
|
|
548
|
+
name: 'task_table_update',
|
|
549
|
+
description: '更新任务表中指定任务项的状态(命令式:一次只更新一个任务项)。将 plan_item_id 对应的任务项标记为 done(已完成)或 blocked(已阻塞)。' +
|
|
550
|
+
'每完成一个任务项调用一次本工具标记,只有最后一个任务项完成后才宣告任务完成,禁止一次性批量标记所有任务项。' +
|
|
551
|
+
'顺序纪律:调用本工具标记 done 前,必须已完成该任务项的实际产出(正文回答/写入文件/工具结果)——先产出、后标记;' +
|
|
552
|
+
'禁止先标记 done 再补产出(标记后该任务项即视为完成,之后的内容会错归下一个任务项)。' +
|
|
553
|
+
'plan_item_id 传任务表行首序号(1 开始,如 "1" = 第一个任务项)即可定位;或传 task_table_write 返回的任务项短 id(如 "[a1b2c3d4]" 中的 a1b2c3d4)。',
|
|
554
|
+
parameters: {
|
|
555
|
+
type: 'object',
|
|
556
|
+
properties: {
|
|
557
|
+
plan_item_id: {
|
|
558
|
+
type: 'string',
|
|
559
|
+
description: '任务项定位:任务表行首序号(1 开始,如 "1"/"2")或 task_table_write 返回的短 id',
|
|
560
|
+
},
|
|
561
|
+
status: { type: 'string', description: '新状态:"done"(已完成)或 "blocked"(已阻塞)' },
|
|
562
|
+
},
|
|
563
|
+
required: ['plan_item_id', 'status'],
|
|
564
|
+
},
|
|
565
|
+
},
|
|
566
|
+
// ── 渐进披露:角色包内嵌技能按需装载 ──────────────
|
|
567
|
+
{
|
|
568
|
+
name: 'read_skill',
|
|
569
|
+
description: '读取技能完整正文(渐进披露 L2,按需装载):先查激活角色包内嵌技能,再查全局通用技能池。当需要执行某项技能时,先读取其正文获取详细步骤。技能名来自技能清单(角色包声明或全局通用技能)。',
|
|
570
|
+
parameters: {
|
|
571
|
+
type: 'object',
|
|
572
|
+
properties: {
|
|
573
|
+
name: { type: 'string', description: '技能名(用上方技能清单中列出的名称)' },
|
|
574
|
+
},
|
|
575
|
+
required: ['name'],
|
|
576
|
+
},
|
|
577
|
+
},
|
|
578
|
+
// ── 渐进披露 L3:资源/脚本分离 ──────────────────
|
|
579
|
+
{
|
|
580
|
+
name: 'read_resource',
|
|
581
|
+
description: '读取技能的参考资源文件(渐进披露 L3,按需调用)。技能含 resources/ 或 references/ 目录时,可通过此工具读取参考资料。资源路径相对技能的 resources/ 或 references/ 目录。',
|
|
582
|
+
parameters: {
|
|
583
|
+
type: 'object',
|
|
584
|
+
properties: {
|
|
585
|
+
skill_name: { type: 'string', description: '技能名' },
|
|
586
|
+
resource_path: {
|
|
587
|
+
type: 'string',
|
|
588
|
+
description: '相对 resources/ 或 references/ 的路径(如 "api-spec.md")',
|
|
589
|
+
},
|
|
590
|
+
},
|
|
591
|
+
required: ['skill_name', 'resource_path'],
|
|
592
|
+
},
|
|
593
|
+
},
|
|
594
|
+
{
|
|
595
|
+
name: 'run_skill_script',
|
|
596
|
+
description: '执行技能的可执行脚本(渐进披露 L3)。脚本源码不进入上下文,仅执行结果返回。当技能含 scripts/ 目录时可调用。' +
|
|
597
|
+
'扩展名推断运行时:.py→python、.js/.mjs/.cjs/.ts→node、.sh/.bash/.zsh/.bat/.cmd→shell。' +
|
|
598
|
+
'⚠️ 跨平台提示(与 run_project_script 同源,勿省):.sh 需要系统有 sh/bash 解释器——Windows 无 Git Bash 时' +
|
|
599
|
+
'会**静默空跑**(退出码 0 但 stdout/stderr 全空,不是执行成功);给技能写脚本时请优先选**跨平台**的 .mjs/.js/.py,' +
|
|
600
|
+
'Windows 专属需求用 .bat/.cmd(cmd 原生可执行);不要写 .sh(Windows 静默空跑)、不要写 .ps1(shell 档不起 PowerShell,同样静默空跑)。',
|
|
601
|
+
diskWrite: 'opaque',
|
|
602
|
+
parameters: {
|
|
603
|
+
type: 'object',
|
|
604
|
+
properties: {
|
|
605
|
+
skill_name: { type: 'string', description: '技能名' },
|
|
606
|
+
script_path: { type: 'string', description: '相对 scripts/ 的路径(如 "lint.ts")' },
|
|
607
|
+
args: {
|
|
608
|
+
type: 'array',
|
|
609
|
+
description: '传递给脚本的参数数组(可选)',
|
|
610
|
+
items: { type: 'string', properties: {}, required: [] },
|
|
611
|
+
},
|
|
612
|
+
},
|
|
613
|
+
required: ['skill_name', 'script_path'],
|
|
614
|
+
},
|
|
615
|
+
},
|
|
616
|
+
{
|
|
617
|
+
name: 'run_project_script',
|
|
618
|
+
description: '运行项目内已有的脚本文件(默认开放,与角色包能力声明无关)。脚本路径相对项目根,越界(项目外路径)拒绝执行。' +
|
|
619
|
+
'脚本源码不进入上下文,仅执行结果(stdout/stderr/退出码)返回。由内核子进程执行:超时默认 60s(上限 600s,' +
|
|
620
|
+
'可按需传 timeout_ms 秒,如脚本内调用 API 耗时较长)、工作目录=项目根、继承宿主用户环境变量' +
|
|
621
|
+
'(用户本地 shell 语义,脚本可读 API key/工作区变量等)。扩展名推断运行时:.py→python、.js/.mjs/.cjs/.ts→node、.sh/.bash/.zsh/.bat/.cmd→shell。' +
|
|
622
|
+
'⚠️ 跨平台提示:.sh 需要系统有 sh/bash 解释器——Windows 无 Git Bash 时会**静默空跑**(退出码 0 但 stdout/stderr 全空,不是执行成功),' +
|
|
623
|
+
'Windows 上请优先写 .bat/.cmd(cmd 原生可执行)或 .js/.py;不要写 .ps1(shell 档不起 PowerShell,同样静默空跑)。' +
|
|
624
|
+
'与 run_code(script_path) 的区别:本工具运行**仓库既有**脚本(默认开放、内核执行);' +
|
|
625
|
+
'run_code 面向 LLM 现写的一次性临时脚本(特权 code:execute + 宿主沙箱,写→执行→删闭环)。' +
|
|
626
|
+
'文件组织类操作(批量移动/重命名/归档/复制)优先用脚本一次完成(fs 重命名或一行 mv),避免逐文件 read→write→delete 的多轮低效操作。',
|
|
627
|
+
diskWrite: 'opaque',
|
|
628
|
+
parameters: {
|
|
629
|
+
type: 'object',
|
|
630
|
+
properties: {
|
|
631
|
+
script_path: {
|
|
632
|
+
type: 'string',
|
|
633
|
+
description: '相对项目根目录的脚本路径(如 "scripts/test.py")',
|
|
634
|
+
},
|
|
635
|
+
args: {
|
|
636
|
+
type: 'array',
|
|
637
|
+
description: '传递给脚本的参数数组(可选)',
|
|
638
|
+
items: { type: 'string', properties: {}, required: [] },
|
|
639
|
+
},
|
|
640
|
+
timeout_ms: {
|
|
641
|
+
type: 'number',
|
|
642
|
+
description: '执行超时秒数(可选,默认 60,上限 600;脚本内 API 调用等长耗时任务可调大)',
|
|
643
|
+
},
|
|
644
|
+
},
|
|
645
|
+
required: ['script_path'],
|
|
646
|
+
},
|
|
647
|
+
},
|
|
648
|
+
{
|
|
649
|
+
name: 'list_resources',
|
|
650
|
+
description: '列出技能的 L3 资源清单(渐进披露 L3)。返回 resources/ 与 references/ 目录下所有资源文件列表。',
|
|
651
|
+
parameters: {
|
|
652
|
+
type: 'object',
|
|
653
|
+
properties: {
|
|
654
|
+
skill_name: { type: 'string', description: '技能名' },
|
|
655
|
+
},
|
|
656
|
+
required: ['skill_name'],
|
|
657
|
+
},
|
|
658
|
+
},
|
|
659
|
+
{
|
|
660
|
+
name: 'list_skills',
|
|
661
|
+
description: '列出当前可用的所有技能清单(渐进披露 L1 补充)。当技能数量较多(>50)时使用此工具查询。',
|
|
662
|
+
parameters: {
|
|
663
|
+
type: 'object',
|
|
664
|
+
properties: {},
|
|
665
|
+
required: [],
|
|
666
|
+
},
|
|
667
|
+
},
|
|
668
|
+
// ── 作品投影:用户主动登记作品索引卡片 ──────────────────
|
|
669
|
+
{
|
|
670
|
+
name: 'register_work',
|
|
671
|
+
description: '登记作品索引:把用户的一件作品(文档/代码/笔记)登记为项目级文件索引,追加到 <memoraDir>/work-projections.json 清单中。当用户说「记住这个文件」「把这份文档登记为作品」时使用。path 为相对项目根的源文件路径,description 为作品的一句话说明。登记后 AI 在后续对话中会看到此索引,根据描述自主决定是否读取原文。',
|
|
672
|
+
// 目标 = <memoraDir>/work-projections.json(非 args.path),且登记是「读盘 refresh → 追加 → 写盘」⇒ opaque 屏障
|
|
673
|
+
diskWrite: 'opaque',
|
|
674
|
+
parameters: {
|
|
675
|
+
type: 'object',
|
|
676
|
+
properties: {
|
|
677
|
+
path: {
|
|
678
|
+
type: 'string',
|
|
679
|
+
description: '相对项目根目录的源文件路径(如 docs/architecture.md)',
|
|
680
|
+
},
|
|
681
|
+
description: {
|
|
682
|
+
type: 'string',
|
|
683
|
+
description: '作品的一句话说明(LLM 总结,用户可后续手改)',
|
|
684
|
+
},
|
|
685
|
+
},
|
|
686
|
+
required: ['path', 'description'],
|
|
687
|
+
},
|
|
688
|
+
},
|
|
689
|
+
// ── 评估/评审型小组会议(单次 LLM 调用注入多角色 persona)──
|
|
690
|
+
RUN_TEAM_MEETING_TOOL,
|
|
691
|
+
];
|
|
692
|
+
// ─── 写盘语义派生索引(构造级单源) ──────────────────────
|
|
693
|
+
// 真源 = 各定义行的 `diskWrite` 声明;以下三份全部**派生**,禁再独立枚举工具名
|
|
694
|
+
// (两处手工清单必漂移 = 串行不防 / 追踪不报 / 契约钉不红的三重静默)。
|
|
695
|
+
/** 全部内置工具定义合集(只读闸 / 写盘派生索引共用;条件工具含定义、不论 provider 是否注入) */
|
|
696
|
+
export const ALL_BUILTIN_TOOL_DEFS = [
|
|
697
|
+
...BUILTIN_TOOLS,
|
|
698
|
+
WEB_SEARCH_TOOL,
|
|
699
|
+
WEB_FETCH_TOOL,
|
|
700
|
+
RUN_CODE_TOOL,
|
|
701
|
+
SEARCH_PROJECT_TOOL,
|
|
74
702
|
];
|
|
703
|
+
/** 按 `args.path` 定位目标的写工具名集(派生;同路径串行闸与宿主改动追踪的判据真源) */
|
|
704
|
+
export const PATH_WRITE_TOOL_NAMES = ALL_BUILTIN_TOOL_DEFS.filter((t) => t.diskWrite === 'path').map((t) => t.name);
|
|
705
|
+
/** 目标不可静态定位的写工具名集(派生;执行 = 屏障,与一切写互斥) */
|
|
706
|
+
export const OPAQUE_WRITE_TOOL_NAMES = ALL_BUILTIN_TOOL_DEFS.filter((t) => t.diskWrite === 'opaque').map((t) => t.name);
|
|
75
707
|
//# sourceMappingURL=builtinTools.js.map
|