onbuzz 4.9.13 → 4.10.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/node_modules/glob/README.md +31 -5
- package/node_modules/glob/dist/commonjs/glob.d.ts +8 -0
- package/node_modules/glob/dist/commonjs/glob.d.ts.map +1 -1
- package/node_modules/glob/dist/commonjs/glob.js +2 -1
- package/node_modules/glob/dist/commonjs/glob.js.map +1 -1
- package/node_modules/glob/dist/commonjs/index.min.js +3 -3
- package/node_modules/glob/dist/commonjs/index.min.js.map +4 -4
- package/node_modules/glob/dist/commonjs/pattern.d.ts +3 -0
- package/node_modules/glob/dist/commonjs/pattern.d.ts.map +1 -1
- package/node_modules/glob/dist/commonjs/pattern.js +4 -0
- package/node_modules/glob/dist/commonjs/pattern.js.map +1 -1
- package/node_modules/glob/dist/esm/glob.d.ts +8 -0
- package/node_modules/glob/dist/esm/glob.d.ts.map +1 -1
- package/node_modules/glob/dist/esm/glob.js +2 -1
- package/node_modules/glob/dist/esm/glob.js.map +1 -1
- package/node_modules/glob/dist/esm/index.min.js +3 -3
- package/node_modules/glob/dist/esm/index.min.js.map +4 -4
- package/node_modules/glob/dist/esm/pattern.d.ts +3 -0
- package/node_modules/glob/dist/esm/pattern.d.ts.map +1 -1
- package/node_modules/glob/dist/esm/pattern.js +4 -0
- package/node_modules/glob/dist/esm/pattern.js.map +1 -1
- package/node_modules/{@isaacs → glob/node_modules}/balanced-match/README.md +7 -10
- package/node_modules/{@isaacs → glob/node_modules}/balanced-match/package.json +7 -18
- package/node_modules/{@isaacs → glob/node_modules}/brace-expansion/README.md +3 -6
- package/node_modules/{@isaacs → glob/node_modules}/brace-expansion/dist/commonjs/index.js +6 -4
- package/node_modules/glob/node_modules/brace-expansion/dist/commonjs/index.js.map +1 -0
- package/node_modules/{@isaacs → glob/node_modules}/brace-expansion/dist/esm/index.js +6 -4
- package/node_modules/glob/node_modules/brace-expansion/dist/esm/index.js.map +1 -0
- package/node_modules/{@isaacs → glob/node_modules}/brace-expansion/package.json +11 -7
- package/node_modules/glob/node_modules/minimatch/README.md +76 -1
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/assert-valid-pattern.d.ts +1 -1
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/assert-valid-pattern.d.ts.map +1 -1
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/assert-valid-pattern.js.map +1 -1
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/ast.d.ts +4 -2
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/ast.d.ts.map +1 -1
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/ast.js +309 -55
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/ast.js.map +1 -1
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/brace-expressions.d.ts.map +1 -1
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/brace-expressions.js +2 -4
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/brace-expressions.js.map +1 -1
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/escape.d.ts +1 -1
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/escape.d.ts.map +1 -1
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/escape.js +4 -4
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/escape.js.map +1 -1
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/index.d.ts +81 -1
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/index.d.ts.map +1 -1
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/index.js +232 -134
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/index.js.map +1 -1
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/unescape.d.ts +1 -1
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/unescape.d.ts.map +1 -1
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/unescape.js +8 -8
- package/node_modules/glob/node_modules/minimatch/dist/commonjs/unescape.js.map +1 -1
- package/node_modules/glob/node_modules/minimatch/dist/esm/assert-valid-pattern.d.ts +1 -1
- package/node_modules/glob/node_modules/minimatch/dist/esm/assert-valid-pattern.d.ts.map +1 -1
- package/node_modules/glob/node_modules/minimatch/dist/esm/assert-valid-pattern.js.map +1 -1
- package/node_modules/glob/node_modules/minimatch/dist/esm/ast.d.ts +4 -2
- package/node_modules/glob/node_modules/minimatch/dist/esm/ast.d.ts.map +1 -1
- package/node_modules/glob/node_modules/minimatch/dist/esm/ast.js +309 -55
- package/node_modules/glob/node_modules/minimatch/dist/esm/ast.js.map +1 -1
- package/node_modules/glob/node_modules/minimatch/dist/esm/brace-expressions.d.ts.map +1 -1
- package/node_modules/glob/node_modules/minimatch/dist/esm/brace-expressions.js +2 -4
- package/node_modules/glob/node_modules/minimatch/dist/esm/brace-expressions.js.map +1 -1
- package/node_modules/glob/node_modules/minimatch/dist/esm/escape.d.ts +1 -1
- package/node_modules/glob/node_modules/minimatch/dist/esm/escape.d.ts.map +1 -1
- package/node_modules/glob/node_modules/minimatch/dist/esm/escape.js +4 -4
- package/node_modules/glob/node_modules/minimatch/dist/esm/escape.js.map +1 -1
- package/node_modules/glob/node_modules/minimatch/dist/esm/index.d.ts +81 -1
- package/node_modules/glob/node_modules/minimatch/dist/esm/index.d.ts.map +1 -1
- package/node_modules/glob/node_modules/minimatch/dist/esm/index.js +232 -134
- package/node_modules/glob/node_modules/minimatch/dist/esm/index.js.map +1 -1
- package/node_modules/glob/node_modules/minimatch/dist/esm/unescape.d.ts +1 -1
- package/node_modules/glob/node_modules/minimatch/dist/esm/unescape.d.ts.map +1 -1
- package/node_modules/glob/node_modules/minimatch/dist/esm/unescape.js +8 -8
- package/node_modules/glob/node_modules/minimatch/dist/esm/unescape.js.map +1 -1
- package/node_modules/glob/node_modules/minimatch/package.json +17 -11
- package/node_modules/glob/package.json +10 -13
- package/node_modules/minipass/LICENSE.md +55 -0
- package/node_modules/minipass/dist/commonjs/index.d.ts +12 -16
- package/node_modules/minipass/dist/commonjs/index.d.ts.map +1 -1
- package/node_modules/minipass/dist/commonjs/index.js +13 -3
- package/node_modules/minipass/dist/commonjs/index.js.map +1 -1
- package/node_modules/minipass/dist/esm/index.d.ts +12 -16
- package/node_modules/minipass/dist/esm/index.d.ts.map +1 -1
- package/node_modules/minipass/dist/esm/index.js +3 -1
- package/node_modules/minipass/dist/esm/index.js.map +1 -1
- package/node_modules/minipass/package.json +9 -14
- package/node_modules/path-scurry/node_modules/lru-cache/README.md +96 -10
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/browser/diagnostics-channel-browser.d.ts.map +1 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/browser/diagnostics-channel-browser.js.map +1 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/browser/diagnostics-channel.d.ts +5 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/browser/diagnostics-channel.js +7 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/browser/index.d.ts +1400 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/browser/index.d.ts.map +1 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/browser/index.js +1726 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/browser/index.js.map +1 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/browser/index.min.js +2 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/browser/index.min.js.map +7 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/browser/perf.d.ts +12 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/browser/perf.d.ts.map +1 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/browser/perf.js +10 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/browser/perf.js.map +1 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/diagnostics-channel-cjs.cjs.map +1 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/diagnostics-channel-cjs.d.cts.map +1 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/diagnostics-channel.d.ts +5 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/diagnostics-channel.js +7 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.d.ts +109 -32
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.d.ts.map +1 -1
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.js +334 -197
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.js.map +1 -1
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.min.js +1 -1
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.min.js.map +4 -4
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/node/diagnostics-channel-node.d.ts.map +1 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/node/diagnostics-channel-node.js.map +1 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/node/diagnostics-channel.d.ts +5 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/node/diagnostics-channel.js +9 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/node/index.d.ts +1400 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/node/index.d.ts.map +1 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/node/index.js +1726 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/node/index.js.map +1 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/node/index.min.js +2 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/node/index.min.js.map +7 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/node/perf.d.ts +12 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/node/perf.d.ts.map +1 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/node/perf.js +10 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/node/perf.js.map +1 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/perf.d.ts +12 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/perf.d.ts.map +1 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/perf.js +10 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/perf.js.map +1 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/browser/diagnostics-channel-browser.d.ts.map +1 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/browser/diagnostics-channel-browser.js.map +1 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/browser/diagnostics-channel.d.ts +5 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/browser/diagnostics-channel.js +4 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/browser/index.d.ts +1400 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/browser/index.d.ts.map +1 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/browser/index.js +1722 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/browser/index.js.map +1 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/browser/index.min.js +2 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/browser/index.min.js.map +7 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/browser/perf.d.ts +12 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/browser/perf.d.ts.map +1 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/browser/perf.js +7 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/browser/perf.js.map +1 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/diagnostics-channel-esm.d.mts.map +1 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/diagnostics-channel-esm.mjs.map +1 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/diagnostics-channel.d.ts +5 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/diagnostics-channel.js +19 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.d.ts +109 -32
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.d.ts.map +1 -1
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.js +333 -196
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.js.map +1 -1
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.min.js +1 -1
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.min.js.map +4 -4
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/node/diagnostics-channel-node.d.ts.map +1 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/node/diagnostics-channel-node.js.map +1 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/node/diagnostics-channel.d.ts +5 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/node/diagnostics-channel.js +6 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/node/index.d.ts +1400 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/node/index.d.ts.map +1 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/node/index.js +1722 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/node/index.js.map +1 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/node/index.min.js +2 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/node/index.min.js.map +7 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/node/perf.d.ts +12 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/node/perf.d.ts.map +1 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/node/perf.js +7 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/node/perf.js.map +1 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/perf.d.ts +12 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/perf.d.ts.map +1 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/perf.js +7 -0
- package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/perf.js.map +1 -0
- package/node_modules/path-scurry/node_modules/lru-cache/package.json +71 -18
- package/node_modules/path-scurry/package.json +8 -24
- package/package.json +1 -1
- package/scripts/debug-balance-probe.mjs +35 -35
- package/scripts/push-image.sh +43 -43
- package/scripts/setup-acr.sh +65 -65
- package/scripts/verify-optional-deps.js +96 -1
- package/src/__tests__/composioCliFlags.test.js +239 -239
- package/src/analyzers/CSSAnalyzer.js +298 -297
- package/src/analyzers/ConfigValidator.js +691 -690
- package/src/analyzers/ESLintAnalyzer.js +320 -320
- package/src/analyzers/JavaScriptAnalyzer.js +260 -261
- package/src/analyzers/PrettierFormatter.js +246 -247
- package/src/analyzers/PythonAnalyzer.js +283 -283
- package/src/analyzers/SecurityAnalyzer.js +729 -729
- package/src/analyzers/SparrowAnalyzer.js +341 -341
- package/src/analyzers/TypeScriptAnalyzer.js +247 -247
- package/src/analyzers/__tests__/CSSAnalyzer.test.js +41 -41
- package/src/analyzers/__tests__/ConfigValidator.test.js +362 -362
- package/src/analyzers/__tests__/JavaScriptAnalyzer.test.js +40 -40
- package/src/analyzers/__tests__/PythonAnalyzer.test.js +205 -208
- package/src/analyzers/__tests__/SecurityAnalyzer.test.js +303 -303
- package/src/analyzers/__tests__/TypeScriptAnalyzer.test.js +187 -187
- package/src/analyzers/codeCloneDetector/analyzer.js +344 -344
- package/src/analyzers/codeCloneDetector/detector.js +250 -250
- package/src/analyzers/codeCloneDetector/index.js +194 -192
- package/src/analyzers/codeCloneDetector/parser.js +199 -199
- package/src/core/__tests__/agentPool.test.js +866 -866
- package/src/core/__tests__/agentPoolAutoResume.test.js +209 -209
- package/src/core/__tests__/agentPoolWakeOnMessage.test.js +315 -315
- package/src/core/__tests__/agentScheduler.emptyResponseChatStall.test.js +213 -213
- package/src/core/__tests__/agentScheduler.errorCategorisation.test.js +246 -246
- package/src/core/__tests__/agentScheduler.firstChunkTimeout.test.js +138 -138
- package/src/core/__tests__/agentScheduler.modeTransitions.test.js +233 -233
- package/src/core/__tests__/agentScheduler.nativePromptPick.test.js +319 -319
- package/src/core/__tests__/agentScheduler.taskLifecycleInstruction.test.js +78 -78
- package/src/core/__tests__/agentScheduler.visualizer.test.js +258 -258
- package/src/core/__tests__/flowCheckpointStore.test.js +140 -140
- package/src/core/__tests__/flowEndToEnd.test.js +565 -565
- package/src/core/__tests__/flowFieldMapping.test.js +188 -189
- package/src/core/__tests__/flowLintClientMirror.test.js +96 -98
- package/src/core/__tests__/flowSavePayload.test.js +170 -169
- package/src/core/__tests__/flowTemplates.test.js +311 -311
- package/src/core/__tests__/flowVersionStore.test.js +123 -123
- package/src/core/__tests__/messageProcessor.test.js +669 -669
- package/src/core/__tests__/stateManager.test.js +0 -1
- package/src/core/agentPool.js +2474 -2475
- package/src/core/agentScheduler.js +1 -4
- package/src/core/contextManager.js +708 -708
- package/src/core/flowExecutor.js +1510 -1510
- package/src/core/flowFieldMapping.js +136 -138
- package/src/core/messageProcessor.js +953 -954
- package/src/core/orchestrator.js +593 -595
- package/src/core/stateManager.js +1765 -1752
- package/src/index.js +1221 -1221
- package/src/interfaces/__tests__/archivedAgentDelete.test.js +207 -207
- package/src/interfaces/__tests__/bulkAgentRoute.test.js +361 -361
- package/src/interfaces/__tests__/imageServing.test.js +228 -228
- package/src/interfaces/__tests__/remoteSessionAuth.test.js +308 -308
- package/src/interfaces/__tests__/videoJobsRoutes.test.js +178 -179
- package/src/interfaces/__tests__/webServer.marketplace.test.js +629 -629
- package/src/interfaces/schedulerRoutes.js +50 -50
- package/src/interfaces/terminal/__tests__/smoke/connection.test.js +341 -350
- package/src/interfaces/terminal/__tests__/smoke/enhancements.test.js +156 -156
- package/src/interfaces/terminal/__tests__/smoke/imports.test.js +325 -330
- package/src/interfaces/terminal/__tests__/smoke/tools.test.js +385 -388
- package/src/interfaces/terminal/api/session.js +265 -266
- package/src/interfaces/terminal/api/websocket.js +496 -497
- package/src/interfaces/terminal/components/AgentCreator.js +691 -705
- package/src/interfaces/terminal/components/AgentEditor.js +676 -678
- package/src/interfaces/terminal/components/AgentSwitcher.js +331 -330
- package/src/interfaces/terminal/components/ErrorPanel.js +263 -264
- package/src/interfaces/terminal/components/Header.js +28 -28
- package/src/interfaces/terminal/components/Layout.js +598 -603
- package/src/interfaces/terminal/components/MessageList.js +280 -281
- package/src/interfaces/terminal/components/SettingsPanel.js +410 -415
- package/src/interfaces/terminal/components/StatusBar.js +2 -0
- package/src/interfaces/terminal/index.js +168 -168
- package/src/interfaces/terminal/state/useAgentControl.js +496 -496
- package/src/interfaces/terminal/state/useAgents.js +537 -537
- package/src/interfaces/terminal/state/useMessages.js +629 -630
- package/src/interfaces/terminal/state/useTools.js +554 -554
- package/src/interfaces/terminal/utils/debugLogger.js +44 -44
- package/src/interfaces/terminal/utils/settingsStorage.js +232 -232
- package/src/interfaces/webServer.js +7578 -7579
- package/src/interfaces/webServer.js.bak +7046 -7046
- package/src/modules/fileExplorer/__tests__/zipDownload.test.js +237 -237
- package/src/modules/fileExplorer/controller.js +470 -469
- package/src/modules/fileExplorer/routes.js +285 -286
- package/src/modules/widget/__tests__/isDisabled.test.js +41 -41
- package/src/modules/widget/__tests__/routes.test.js +677 -678
- package/src/modules/widget/__tests__/runtime.test.js +401 -401
- package/src/modules/widget/__tests__/versioning.test.js +309 -309
- package/src/modules/widget/__tests__/webComponentRuntime.test.js +565 -565
- package/src/modules/widget/__tests__/widgetTool.test.js +316 -316
- package/src/modules/widget/routes.js +435 -435
- package/src/modules/widget/runtime/bundle.js +640 -640
- package/src/modules/widget/runtime/webComponentBundle.js +470 -470
- package/src/modules/widget/schema.js +182 -181
- package/src/modules/widget/widgetTool.js +1389 -1389
- package/src/services/__tests__/agentActivityService.test.js +401 -402
- package/src/services/__tests__/benchmarkService.test.js +184 -184
- package/src/services/__tests__/contextInjectionService.test.js +246 -246
- package/src/services/__tests__/conversationQuery.test.js +721 -723
- package/src/services/__tests__/credentialVault.test.js +469 -469
- package/src/services/__tests__/discordService.integration.test.js +638 -639
- package/src/services/__tests__/flowContextService.test.js +590 -590
- package/src/services/__tests__/memoryService.test.js +1 -1
- package/src/services/__tests__/messageSource.test.js +380 -380
- package/src/services/__tests__/modelRouterNaming.test.js +111 -111
- package/src/services/__tests__/projectDetector.test.js +34 -34
- package/src/services/__tests__/promptService.test.js +242 -242
- package/src/services/__tests__/telegramService.test.js +941 -941
- package/src/services/__tests__/tokenCountingService.test.js +48 -48
- package/src/services/agentActivityService.js +419 -420
- package/src/services/aiService.js +2997 -3001
- package/src/services/apiKeyManager.js +359 -359
- package/src/services/benchmarkService.js +196 -196
- package/src/services/codebaseKnowledgeService.js +2 -2
- package/src/services/composioService.js +738 -738
- package/src/services/conversationCompactionService.js +1258 -1257
- package/src/services/credentialVault.js +685 -685
- package/src/services/discordService.js +792 -793
- package/src/services/embeddings/__tests__/azureCustomProvider.test.js +232 -232
- package/src/services/embeddings/__tests__/embeddingService.test.js +417 -417
- package/src/services/embeddings/__tests__/localProvider.test.js +263 -263
- package/src/services/embeddings/autoRecall.js +218 -219
- package/src/services/embeddings/indexers/__tests__/agentIndexer.test.js +232 -232
- package/src/services/embeddings/indexers/__tests__/memoryIndexer.test.js +418 -418
- package/src/services/embeddings/indexers/__tests__/reminisceIndexer.test.js +356 -357
- package/src/services/embeddings/indexers/__tests__/skillsIndexer.test.js +145 -145
- package/src/services/embeddings/indexers/__tests__/taskIndexer.test.js +146 -146
- package/src/services/embeddings/indexers/composioIndexer.js +279 -279
- package/src/services/embeddings/providerInterface.js +206 -206
- package/src/services/embeddings/providers/localProvider.js +11 -7
- package/src/services/embeddings/providers/openaiProvider.js +101 -101
- package/src/services/embeddings/vectorStore/inMemoryJsonStore.js +356 -356
- package/src/services/errorHandler.js +809 -809
- package/src/services/flowContextService.js +586 -586
- package/src/services/grounding/MockAdapter.js +125 -125
- package/src/services/modelRouterService.js +26 -31
- package/src/services/modelsService.js +322 -322
- package/src/services/ollamaService.js +452 -452
- package/src/services/projectDetector.js +403 -404
- package/src/services/promptService.js +418 -418
- package/src/services/qualityInspector.js +795 -795
- package/src/services/scheduleService.js +726 -726
- package/src/services/serviceRegistry.js +386 -386
- package/src/services/telegrafBot.js +174 -174
- package/src/services/telegramService.js +1972 -1972
- package/src/services/visualEditorBridge.js +1033 -1033
- package/src/services/visualEditorServer.js +1769 -1774
- package/src/services/whatsappService.js +667 -668
- package/src/tools/__tests__/agentCommunicationTool.findAgent.test.js +226 -226
- package/src/tools/__tests__/agentCommunicationTool.test.js +3 -3
- package/src/tools/__tests__/agentDelayTool.test.js +342 -342
- package/src/tools/__tests__/baseTool.test.js +3 -3
- package/src/tools/__tests__/codeMapTool.test.js +915 -915
- package/src/tools/__tests__/fileContentReplaceTool.test.js +309 -309
- package/src/tools/__tests__/fileTreeTool.test.js +274 -274
- package/src/tools/__tests__/filesystemTool.test.js +815 -815
- package/src/tools/__tests__/foundryWebSearchTool.test.js +252 -252
- package/src/tools/__tests__/imageTool.validator.test.js +194 -194
- package/src/tools/__tests__/jobDoneTool.test.js +580 -581
- package/src/tools/__tests__/memoryTool.forgetStale.test.js +272 -272
- package/src/tools/__tests__/memoryTool.reminisce.test.js +2 -2
- package/src/tools/__tests__/memoryTool.reminisceSemanticSearch.test.js +301 -301
- package/src/tools/__tests__/memoryTool.semanticSearch.test.js +405 -405
- package/src/tools/__tests__/memoryTool.teamPool.test.js +293 -293
- package/src/tools/__tests__/memoryTool.test.js +1 -1
- package/src/tools/__tests__/seekTool.test.js +282 -282
- package/src/tools/__tests__/skillsTool.search.test.js +164 -164
- package/src/tools/__tests__/skillsTool.test.js +226 -226
- package/src/tools/__tests__/staticAnalysisTool.test.js +509 -509
- package/src/tools/__tests__/taskManagerTool.discipline.test.js +137 -137
- package/src/tools/__tests__/taskManagerTool.search.test.js +143 -143
- package/src/tools/__tests__/taskManagerTool.test.js +866 -866
- package/src/tools/__tests__/terminalTool.test.js +448 -448
- package/src/tools/__tests__/toolShapeForgiveness.test.js +259 -260
- package/src/tools/__tests__/userPromptTool.test.js +297 -297
- package/src/tools/__tests__/videoTool.jobs.test.js +147 -147
- package/src/tools/__tests__/webTool.e2e.test.js +609 -603
- package/src/tools/__tests__/webTool.unit.test.js +195 -195
- package/src/tools/__tests__/webTool.visionModel.test.js +75 -75
- package/src/tools/agentCommunicationTool.js +8 -10
- package/src/tools/agentDelayTool.js +496 -497
- package/src/tools/asyncToolManager.js +602 -603
- package/src/tools/baseTool.js +12 -11
- package/src/tools/cloneDetectionTool.js +576 -581
- package/src/tools/codeMapTool.js +0 -6
- package/src/tools/composioTool.js +617 -617
- package/src/tools/dependencyResolverTool.js +1211 -1212
- package/src/tools/desktop/DesktopTool.js +629 -638
- package/src/tools/desktop/__tests__/DesktopTool.e2e.test.js +306 -306
- package/src/tools/desktop/__tests__/DesktopTool.test.js +507 -507
- package/src/tools/desktop/__tests__/osController.test.js +364 -364
- package/src/tools/desktop/osController.js +491 -491
- package/src/tools/docxTool.js +623 -623
- package/src/tools/excelTool.js +636 -636
- package/src/tools/fileContentReplaceTool.js +5 -7
- package/src/tools/fileSystemTool.js +12 -19
- package/src/tools/fileTreeTool.js +840 -840
- package/src/tools/foundryWebSearchTool.js +273 -273
- package/src/tools/helpTool.js +198 -198
- package/src/tools/imageTool.js +1397 -1397
- package/src/tools/importAnalyzerTool.js +1056 -1056
- package/src/tools/jobDoneTool.js +495 -495
- package/src/tools/memoryTool.js +1 -1
- package/src/tools/office/pres/__tests__/presSystem.test.js +365 -365
- package/src/tools/office/pres/archetypes/agenda.js +61 -61
- package/src/tools/office/pres/archetypes/bentoGrid.js +218 -219
- package/src/tools/office/pres/archetypes/bigStat.js +140 -142
- package/src/tools/office/pres/archetypes/closing.js +70 -70
- package/src/tools/office/pres/archetypes/hero.js +70 -70
- package/src/tools/office/pres/archetypes/productHero.js +93 -94
- package/src/tools/office/pres/archetypes/table.js +73 -74
- package/src/tools/office/pres/backgrounds/orb.js +66 -66
- package/src/tools/office/pres/components.js +422 -423
- package/src/tools/officeTool.js +441 -441
- package/src/tools/pdfTool.js +625 -627
- package/src/tools/platformControlTool.js +1081 -1081
- package/src/tools/seekTool.js +917 -918
- package/src/tools/skillsTool.js +1 -1
- package/src/tools/staticAnalysisTool.js +2143 -2146
- package/src/tools/taskManagerTool.js +3324 -3324
- package/src/tools/terminalTool.js +2615 -2618
- package/src/tools/videoTool.js +1303 -1303
- package/src/tools/visionTool.js +508 -508
- package/src/tools/visualEditorTool.js +1289 -1290
- package/src/tools/webTool.js +3368 -3368
- package/src/tools/whatsappTool.js +464 -464
- package/src/types/__tests__/agent.test.js +499 -499
- package/src/types/__tests__/contextReference.test.js +606 -606
- package/src/types/__tests__/conversation.test.js +555 -555
- package/src/types/__tests__/toolCommand.test.js +584 -584
- package/src/types/contextReference.js +974 -971
- package/src/types/conversation.js +729 -729
- package/src/types/toolCommand.js +746 -746
- package/src/utilities/__tests__/attachmentValidator.test.js +80 -80
- package/src/utilities/__tests__/auditReport.test.js +328 -328
- package/src/utilities/__tests__/directoryAccessManager.test.js +388 -388
- package/src/utilities/__tests__/jsonRepair.test.js +103 -104
- package/src/utilities/__tests__/modeTransitionReasons.test.js +105 -105
- package/src/utilities/__tests__/platformUtils.test.js +80 -87
- package/src/utilities/__tests__/structuredFileValidator.test.js +261 -263
- package/src/utilities/__tests__/toolConstants.test.js +92 -94
- package/src/utilities/__tests__/useIsTouchDevice.detect.test.js +114 -114
- package/src/utilities/__tests__/webUiUtilSync.test.js +117 -117
- package/src/utilities/attachmentValidator.js +284 -288
- package/src/utilities/authCache.js.backup-1779570472481 +121 -121
- package/src/utilities/browserStealth.js +631 -630
- package/src/utilities/configManager.js +616 -617
- package/src/utilities/directoryAccessManager.js +564 -565
- package/src/utilities/fileProcessor.js +308 -307
- package/src/utilities/humanBehavior.js +454 -453
- package/src/utilities/logger.js +479 -479
- package/src/utilities/structuredFileValidator.js +696 -699
- package/src/utilities/tagParser.js +5 -10
- package/src/utilities/userDataDir.js +308 -308
- package/node_modules/@isaacs/brace-expansion/dist/commonjs/index.js.map +0 -1
- package/node_modules/@isaacs/brace-expansion/dist/esm/index.js.map +0 -1
- package/node_modules/minipass/LICENSE +0 -15
- /package/node_modules/{@isaacs → glob/node_modules}/balanced-match/LICENSE.md +0 -0
- /package/node_modules/{@isaacs → glob/node_modules}/balanced-match/dist/commonjs/index.d.ts +0 -0
- /package/node_modules/{@isaacs → glob/node_modules}/balanced-match/dist/commonjs/index.d.ts.map +0 -0
- /package/node_modules/{@isaacs → glob/node_modules}/balanced-match/dist/commonjs/index.js +0 -0
- /package/node_modules/{@isaacs → glob/node_modules}/balanced-match/dist/commonjs/index.js.map +0 -0
- /package/node_modules/{@isaacs → glob/node_modules}/balanced-match/dist/commonjs/package.json +0 -0
- /package/node_modules/{@isaacs → glob/node_modules}/balanced-match/dist/esm/index.d.ts +0 -0
- /package/node_modules/{@isaacs → glob/node_modules}/balanced-match/dist/esm/index.d.ts.map +0 -0
- /package/node_modules/{@isaacs → glob/node_modules}/balanced-match/dist/esm/index.js +0 -0
- /package/node_modules/{@isaacs → glob/node_modules}/balanced-match/dist/esm/index.js.map +0 -0
- /package/node_modules/{@isaacs → glob/node_modules}/balanced-match/dist/esm/package.json +0 -0
- /package/node_modules/{@isaacs → glob/node_modules}/brace-expansion/LICENSE +0 -0
- /package/node_modules/{@isaacs → glob/node_modules}/brace-expansion/dist/commonjs/index.d.ts +0 -0
- /package/node_modules/{@isaacs → glob/node_modules}/brace-expansion/dist/commonjs/index.d.ts.map +0 -0
- /package/node_modules/{@isaacs → glob/node_modules}/brace-expansion/dist/commonjs/package.json +0 -0
- /package/node_modules/{@isaacs → glob/node_modules}/brace-expansion/dist/esm/index.d.ts +0 -0
- /package/node_modules/{@isaacs → glob/node_modules}/brace-expansion/dist/esm/index.d.ts.map +0 -0
- /package/node_modules/{@isaacs → glob/node_modules}/brace-expansion/dist/esm/package.json +0 -0
|
@@ -1,388 +1,385 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tools Management - Smoke Tests
|
|
3
|
-
* Verifies that tools management modules can be imported and basic functionality works
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { describe, test, expect } from '@jest/globals';
|
|
7
|
-
|
|
8
|
-
describe('Tools Management - Imports', () => {
|
|
9
|
-
test('useTools hook can be imported', async () => {
|
|
10
|
-
const { useTools } = await import('../../state/useTools.js');
|
|
11
|
-
|
|
12
|
-
expect(useTools).toBeDefined();
|
|
13
|
-
expect(typeof useTools).toBe('function');
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
test('useTools is default export', async () => {
|
|
17
|
-
const module = await import('../../state/useTools.js');
|
|
18
|
-
|
|
19
|
-
expect(module.default).toBeDefined();
|
|
20
|
-
expect(typeof module.default).toBe('function');
|
|
21
|
-
expect(module.default).toBe(module.useTools);
|
|
22
|
-
});
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
describe('Tools Management - Constants', () => {
|
|
26
|
-
test('TOOL_CATEGORY constants are defined', async () => {
|
|
27
|
-
const { TOOL_CATEGORY } = await import('../../config/constants.js');
|
|
28
|
-
|
|
29
|
-
expect(TOOL_CATEGORY).toBeDefined();
|
|
30
|
-
expect(TOOL_CATEGORY.SYSTEM).toBeDefined();
|
|
31
|
-
expect(TOOL_CATEGORY.AUTOMATION).toBeDefined();
|
|
32
|
-
expect(TOOL_CATEGORY.ANALYSIS).toBeDefined();
|
|
33
|
-
expect(TOOL_CATEGORY.UTILITY).toBeDefined();
|
|
34
|
-
expect(TOOL_CATEGORY.COLLABORATION).toBeDefined();
|
|
35
|
-
expect(TOOL_CATEGORY.AI).toBeDefined();
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
test('TOOL_CATEGORY values are lowercase', async () => {
|
|
39
|
-
const { TOOL_CATEGORY } = await import('../../config/constants.js');
|
|
40
|
-
|
|
41
|
-
expect(TOOL_CATEGORY.SYSTEM).toBe(TOOL_CATEGORY.SYSTEM.toLowerCase());
|
|
42
|
-
expect(TOOL_CATEGORY.AUTOMATION).toBe(TOOL_CATEGORY.AUTOMATION.toLowerCase());
|
|
43
|
-
expect(TOOL_CATEGORY.ANALYSIS).toBe(TOOL_CATEGORY.ANALYSIS.toLowerCase());
|
|
44
|
-
expect(TOOL_CATEGORY.UTILITY).toBe(TOOL_CATEGORY.UTILITY.toLowerCase());
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
test('Tools API endpoint is defined', async () => {
|
|
48
|
-
const { API_ENDPOINTS } = await import('../../config/constants.js');
|
|
49
|
-
|
|
50
|
-
expect(API_ENDPOINTS.TOOLS).toBeDefined();
|
|
51
|
-
expect(API_ENDPOINTS.TOOLS).toBe('/api/tools');
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
test('Orchestrator endpoint is used for tool operations', async () => {
|
|
55
|
-
const { API_ENDPOINTS } = await import('../../config/constants.js');
|
|
56
|
-
|
|
57
|
-
expect(API_ENDPOINTS.ORCHESTRATOR).toBeDefined();
|
|
58
|
-
expect(API_ENDPOINTS.ORCHESTRATOR).toBe('/api/orchestrator');
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
describe('Tools Management - Integration', () => {
|
|
63
|
-
test('useTools hook integrates with Session and MessageRouter', async () => {
|
|
64
|
-
const { useTools } = await import('../../state/useTools.js');
|
|
65
|
-
const { SessionManager } = await import('../../api/session.js');
|
|
66
|
-
const { MessageRouter } = await import('../../api/messageRouter.js');
|
|
67
|
-
const { WebSocketManager } = await import('../../api/websocket.js');
|
|
68
|
-
|
|
69
|
-
// Create dependencies
|
|
70
|
-
const sessionManager = new SessionManager('localhost', 8080);
|
|
71
|
-
const wsManager = new WebSocketManager('localhost', 8080);
|
|
72
|
-
const messageRouter = new MessageRouter(wsManager);
|
|
73
|
-
|
|
74
|
-
// Verify all components exist
|
|
75
|
-
expect(sessionManager).toBeDefined();
|
|
76
|
-
expect(messageRouter).toBeDefined();
|
|
77
|
-
|
|
78
|
-
// useTools expects these as parameters (including currentAgentId)
|
|
79
|
-
// (we can't actually call the hook outside React, but we verify the interface)
|
|
80
|
-
expect(typeof useTools).toBe('function');
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
test('Full tools management stack can be imported together', async () => {
|
|
84
|
-
const [
|
|
85
|
-
constantsModule,
|
|
86
|
-
sessionModule,
|
|
87
|
-
websocketModule,
|
|
88
|
-
routerModule,
|
|
89
|
-
toolsModule,
|
|
90
|
-
] = await Promise.all([
|
|
91
|
-
import('../../config/constants.js'),
|
|
92
|
-
import('../../api/session.js'),
|
|
93
|
-
import('../../api/websocket.js'),
|
|
94
|
-
import('../../api/messageRouter.js'),
|
|
95
|
-
import('../../state/useTools.js'),
|
|
96
|
-
]);
|
|
97
|
-
|
|
98
|
-
// Verify all modules loaded
|
|
99
|
-
expect(constantsModule.TOOL_CATEGORY).toBeDefined();
|
|
100
|
-
expect(constantsModule.API_ENDPOINTS).toBeDefined();
|
|
101
|
-
expect(sessionModule.SessionManager).toBeDefined();
|
|
102
|
-
expect(websocketModule.WebSocketManager).toBeDefined();
|
|
103
|
-
expect(routerModule.MessageRouter).toBeDefined();
|
|
104
|
-
expect(toolsModule.useTools).toBeDefined();
|
|
105
|
-
});
|
|
106
|
-
});
|
|
107
|
-
|
|
108
|
-
describe('Tools Management - API Endpoints Validation', () => {
|
|
109
|
-
test('Tools endpoint follows RESTful pattern', async () => {
|
|
110
|
-
const { API_ENDPOINTS } = await import('../../config/constants.js');
|
|
111
|
-
|
|
112
|
-
// Verify endpoint path
|
|
113
|
-
expect(API_ENDPOINTS.TOOLS).toMatch(/^\/api\//);
|
|
114
|
-
expect(API_ENDPOINTS.TOOLS).toBe('/api/tools');
|
|
115
|
-
});
|
|
116
|
-
|
|
117
|
-
test('Tool operations use orchestrator endpoint', async () => {
|
|
118
|
-
const { API_ENDPOINTS } = await import('../../config/constants.js');
|
|
119
|
-
|
|
120
|
-
// Tool execution, enable/disable use orchestrator
|
|
121
|
-
expect(API_ENDPOINTS.ORCHESTRATOR).toBeDefined();
|
|
122
|
-
expect(API_ENDPOINTS.ORCHESTRATOR).toBe('/api/orchestrator');
|
|
123
|
-
});
|
|
124
|
-
});
|
|
125
|
-
|
|
126
|
-
describe('Tools Management - Hook Interface Verification', () => {
|
|
127
|
-
test('useTools returns expected interface shape', async () => {
|
|
128
|
-
const { useTools } = await import('../../state/useTools.js');
|
|
129
|
-
|
|
130
|
-
// We can verify the function signature
|
|
131
|
-
expect(useTools.length).toBe(3); // sessionManager, messageRouter, currentAgentId
|
|
132
|
-
});
|
|
133
|
-
});
|
|
134
|
-
|
|
135
|
-
describe('Tools Management - Constants Validation', () => {
|
|
136
|
-
test('TOOL_CATEGORY includes all major categories', async () => {
|
|
137
|
-
const { TOOL_CATEGORY } = await import('../../config/constants.js');
|
|
138
|
-
|
|
139
|
-
const categories = Object.keys(TOOL_CATEGORY);
|
|
140
|
-
expect(categories).toContain('SYSTEM');
|
|
141
|
-
expect(categories).toContain('AUTOMATION');
|
|
142
|
-
expect(categories).toContain('ANALYSIS');
|
|
143
|
-
expect(categories).toContain('UTILITY');
|
|
144
|
-
expect(categories).toContain('COLLABORATION');
|
|
145
|
-
expect(categories).toContain('AI');
|
|
146
|
-
});
|
|
147
|
-
|
|
148
|
-
test('TOOL_CATEGORY values match expected format', async () => {
|
|
149
|
-
const { TOOL_CATEGORY } = await import('../../config/constants.js');
|
|
150
|
-
|
|
151
|
-
// Values should be lowercase
|
|
152
|
-
expect(TOOL_CATEGORY.SYSTEM).toMatch(/^[a-z_]+$/);
|
|
153
|
-
expect(TOOL_CATEGORY.AUTOMATION).toMatch(/^[a-z_]+$/);
|
|
154
|
-
expect(TOOL_CATEGORY.ANALYSIS).toMatch(/^[a-z_]+$/);
|
|
155
|
-
expect(TOOL_CATEGORY.UTILITY).toMatch(/^[a-z_]+$/);
|
|
156
|
-
});
|
|
157
|
-
});
|
|
158
|
-
|
|
159
|
-
describe('Tools Management - WebSocket Event Handlers', () => {
|
|
160
|
-
test('MessageRouter has tool event handlers registered', async () => {
|
|
161
|
-
const { MessageRouter } = await import('../../api/messageRouter.js');
|
|
162
|
-
const { WebSocketManager } = await import('../../api/websocket.js');
|
|
163
|
-
|
|
164
|
-
const wsManager = new WebSocketManager('localhost', 8080);
|
|
165
|
-
const router = new MessageRouter(wsManager);
|
|
166
|
-
|
|
167
|
-
// Verify tool event handlers are registered
|
|
168
|
-
// These would be registered by the useTools hook when mounted
|
|
169
|
-
expect(router.hasHandler).toBeDefined();
|
|
170
|
-
expect(typeof router.hasHandler).toBe('function');
|
|
171
|
-
});
|
|
172
|
-
});
|
|
173
|
-
|
|
174
|
-
describe('Tools Management - Tool Categorization', () => {
|
|
175
|
-
test('TOOL_CATEGORY can be used to filter tools by category', async () => {
|
|
176
|
-
const { TOOL_CATEGORY } = await import('../../config/constants.js');
|
|
177
|
-
|
|
178
|
-
// Mock tool list
|
|
179
|
-
const mockTools = [
|
|
180
|
-
{ name: 'execute_command', category: TOOL_CATEGORY.SYSTEM },
|
|
181
|
-
{ name: 'terminal', category: TOOL_CATEGORY.SYSTEM },
|
|
182
|
-
{ name: 'analyze_code', category: TOOL_CATEGORY.ANALYSIS },
|
|
183
|
-
{ name: 'web_search', category: TOOL_CATEGORY.UTILITY },
|
|
184
|
-
{ name: 'ai_assistant', category: TOOL_CATEGORY.AI },
|
|
185
|
-
];
|
|
186
|
-
|
|
187
|
-
// Filter by category
|
|
188
|
-
const systemTools = mockTools.filter(t => t.category === TOOL_CATEGORY.SYSTEM);
|
|
189
|
-
const analysisTools = mockTools.filter(t => t.category === TOOL_CATEGORY.ANALYSIS);
|
|
190
|
-
const utilityTools = mockTools.filter(t => t.category === TOOL_CATEGORY.UTILITY);
|
|
191
|
-
const aiTools = mockTools.filter(t => t.category === TOOL_CATEGORY.AI);
|
|
192
|
-
|
|
193
|
-
expect(systemTools.length).toBe(2);
|
|
194
|
-
expect(analysisTools.length).toBe(1);
|
|
195
|
-
expect(utilityTools.length).toBe(1);
|
|
196
|
-
expect(aiTools.length).toBe(1);
|
|
197
|
-
|
|
198
|
-
expect(systemTools[0].name).toBe('execute_command');
|
|
199
|
-
expect(analysisTools[0].name).toBe('analyze_code');
|
|
200
|
-
});
|
|
201
|
-
});
|
|
202
|
-
|
|
203
|
-
describe('Tools Management - Tool Search', () => {
|
|
204
|
-
test('Tool search should work with name and description', async () => {
|
|
205
|
-
// Mock tool list
|
|
206
|
-
const mockTools = [
|
|
207
|
-
{ name: 'read_file', description: 'Read contents of a file' },
|
|
208
|
-
{ name: 'write_file', description: 'Write data to a file' },
|
|
209
|
-
{ name: 'analyze_code', description: 'Perform static code analysis' },
|
|
210
|
-
];
|
|
211
|
-
|
|
212
|
-
// Search by name
|
|
213
|
-
const searchByName = (query) => {
|
|
214
|
-
const lowerQuery = query.toLowerCase();
|
|
215
|
-
return mockTools.filter(t =>
|
|
216
|
-
t.name?.toLowerCase().includes(lowerQuery) ||
|
|
217
|
-
t.description?.toLowerCase().includes(lowerQuery)
|
|
218
|
-
);
|
|
219
|
-
};
|
|
220
|
-
|
|
221
|
-
const fileTools = searchByName('file');
|
|
222
|
-
expect(fileTools.length).toBe(2);
|
|
223
|
-
expect(fileTools.map(t => t.name)).toContain('read_file');
|
|
224
|
-
expect(fileTools.map(t => t.name)).toContain('write_file');
|
|
225
|
-
|
|
226
|
-
const analyzeTools = searchByName('analyze');
|
|
227
|
-
expect(analyzeTools.length).toBe(1);
|
|
228
|
-
expect(analyzeTools[0].name).toBe('analyze_code');
|
|
229
|
-
});
|
|
230
|
-
});
|
|
231
|
-
|
|
232
|
-
describe('Tools Management - Execution State Tracking', () => {
|
|
233
|
-
test('Execution state can track multiple tools', async () => {
|
|
234
|
-
// Mock execution tracking
|
|
235
|
-
const executingTools = new Set();
|
|
236
|
-
|
|
237
|
-
// Start execution
|
|
238
|
-
executingTools.add('read_file');
|
|
239
|
-
executingTools.add('analyze_code');
|
|
240
|
-
|
|
241
|
-
expect(executingTools.has('read_file')).toBe(true);
|
|
242
|
-
expect(executingTools.has('analyze_code')).toBe(true);
|
|
243
|
-
expect(executingTools.size).toBe(2);
|
|
244
|
-
|
|
245
|
-
// Complete execution
|
|
246
|
-
executingTools.delete('read_file');
|
|
247
|
-
|
|
248
|
-
expect(executingTools.has('read_file')).toBe(false);
|
|
249
|
-
expect(executingTools.has('analyze_code')).toBe(true);
|
|
250
|
-
expect(executingTools.size).toBe(1);
|
|
251
|
-
});
|
|
252
|
-
|
|
253
|
-
test('Tool results can be stored by execution ID', async () => {
|
|
254
|
-
// Mock tool results storage
|
|
255
|
-
const toolResults = new Map();
|
|
256
|
-
|
|
257
|
-
// Store results
|
|
258
|
-
toolResults.set('exec-1', { success: true, data: 'file contents' });
|
|
259
|
-
toolResults.set('exec-2', { success: true, data: { issues: [] } });
|
|
260
|
-
|
|
261
|
-
expect(toolResults.get('exec-1')).toBeDefined();
|
|
262
|
-
expect(toolResults.get('exec-1').success).toBe(true);
|
|
263
|
-
expect(toolResults.get('exec-1').data).toBe('file contents');
|
|
264
|
-
|
|
265
|
-
expect(toolResults.get('exec-2')).toBeDefined();
|
|
266
|
-
expect(toolResults.get('exec-2').data.issues).toEqual([]);
|
|
267
|
-
|
|
268
|
-
expect(toolResults.size).toBe(2);
|
|
269
|
-
});
|
|
270
|
-
});
|
|
271
|
-
|
|
272
|
-
describe('Tools Management - Tool Caching', () => {
|
|
273
|
-
test('Tool cache supports TTL-based caching', async () => {
|
|
274
|
-
const CACHE_TTL = 600000; // 10 minutes
|
|
275
|
-
|
|
276
|
-
// Mock cache
|
|
277
|
-
let toolsCache
|
|
278
|
-
let toolsCacheTimestamp
|
|
279
|
-
|
|
280
|
-
// Initial fetch
|
|
281
|
-
const mockTools = [{ name: 'read_file' }];
|
|
282
|
-
toolsCache = mockTools;
|
|
283
|
-
toolsCacheTimestamp = Date.now();
|
|
284
|
-
|
|
285
|
-
// Check cache validity
|
|
286
|
-
const now = Date.now();
|
|
287
|
-
const isCacheValid = (now - toolsCacheTimestamp) < CACHE_TTL;
|
|
288
|
-
|
|
289
|
-
expect(isCacheValid).toBe(true);
|
|
290
|
-
expect(toolsCache).toBe(mockTools);
|
|
291
|
-
});
|
|
292
|
-
|
|
293
|
-
test('Tool cache expires after TTL', async () => {
|
|
294
|
-
const CACHE_TTL = 100; // 100ms for testing
|
|
295
|
-
|
|
296
|
-
// Mock cache
|
|
297
|
-
let
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
//
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
const
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
};
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
const
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
{ name: '
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
expect(counts[TOOL_CATEGORY.
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
expect(counts[TOOL_CATEGORY.AUTOMATION]).toBe(0);
|
|
387
|
-
});
|
|
388
|
-
});
|
|
1
|
+
/**
|
|
2
|
+
* Tools Management - Smoke Tests
|
|
3
|
+
* Verifies that tools management modules can be imported and basic functionality works
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { describe, test, expect } from '@jest/globals';
|
|
7
|
+
|
|
8
|
+
describe('Tools Management - Imports', () => {
|
|
9
|
+
test('useTools hook can be imported', async () => {
|
|
10
|
+
const { useTools } = await import('../../state/useTools.js');
|
|
11
|
+
|
|
12
|
+
expect(useTools).toBeDefined();
|
|
13
|
+
expect(typeof useTools).toBe('function');
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
test('useTools is default export', async () => {
|
|
17
|
+
const module = await import('../../state/useTools.js');
|
|
18
|
+
|
|
19
|
+
expect(module.default).toBeDefined();
|
|
20
|
+
expect(typeof module.default).toBe('function');
|
|
21
|
+
expect(module.default).toBe(module.useTools);
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
describe('Tools Management - Constants', () => {
|
|
26
|
+
test('TOOL_CATEGORY constants are defined', async () => {
|
|
27
|
+
const { TOOL_CATEGORY } = await import('../../config/constants.js');
|
|
28
|
+
|
|
29
|
+
expect(TOOL_CATEGORY).toBeDefined();
|
|
30
|
+
expect(TOOL_CATEGORY.SYSTEM).toBeDefined();
|
|
31
|
+
expect(TOOL_CATEGORY.AUTOMATION).toBeDefined();
|
|
32
|
+
expect(TOOL_CATEGORY.ANALYSIS).toBeDefined();
|
|
33
|
+
expect(TOOL_CATEGORY.UTILITY).toBeDefined();
|
|
34
|
+
expect(TOOL_CATEGORY.COLLABORATION).toBeDefined();
|
|
35
|
+
expect(TOOL_CATEGORY.AI).toBeDefined();
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
test('TOOL_CATEGORY values are lowercase', async () => {
|
|
39
|
+
const { TOOL_CATEGORY } = await import('../../config/constants.js');
|
|
40
|
+
|
|
41
|
+
expect(TOOL_CATEGORY.SYSTEM).toBe(TOOL_CATEGORY.SYSTEM.toLowerCase());
|
|
42
|
+
expect(TOOL_CATEGORY.AUTOMATION).toBe(TOOL_CATEGORY.AUTOMATION.toLowerCase());
|
|
43
|
+
expect(TOOL_CATEGORY.ANALYSIS).toBe(TOOL_CATEGORY.ANALYSIS.toLowerCase());
|
|
44
|
+
expect(TOOL_CATEGORY.UTILITY).toBe(TOOL_CATEGORY.UTILITY.toLowerCase());
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
test('Tools API endpoint is defined', async () => {
|
|
48
|
+
const { API_ENDPOINTS } = await import('../../config/constants.js');
|
|
49
|
+
|
|
50
|
+
expect(API_ENDPOINTS.TOOLS).toBeDefined();
|
|
51
|
+
expect(API_ENDPOINTS.TOOLS).toBe('/api/tools');
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
test('Orchestrator endpoint is used for tool operations', async () => {
|
|
55
|
+
const { API_ENDPOINTS } = await import('../../config/constants.js');
|
|
56
|
+
|
|
57
|
+
expect(API_ENDPOINTS.ORCHESTRATOR).toBeDefined();
|
|
58
|
+
expect(API_ENDPOINTS.ORCHESTRATOR).toBe('/api/orchestrator');
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
describe('Tools Management - Integration', () => {
|
|
63
|
+
test('useTools hook integrates with Session and MessageRouter', async () => {
|
|
64
|
+
const { useTools } = await import('../../state/useTools.js');
|
|
65
|
+
const { SessionManager } = await import('../../api/session.js');
|
|
66
|
+
const { MessageRouter } = await import('../../api/messageRouter.js');
|
|
67
|
+
const { WebSocketManager } = await import('../../api/websocket.js');
|
|
68
|
+
|
|
69
|
+
// Create dependencies
|
|
70
|
+
const sessionManager = new SessionManager('localhost', 8080);
|
|
71
|
+
const wsManager = new WebSocketManager('localhost', 8080);
|
|
72
|
+
const messageRouter = new MessageRouter(wsManager);
|
|
73
|
+
|
|
74
|
+
// Verify all components exist
|
|
75
|
+
expect(sessionManager).toBeDefined();
|
|
76
|
+
expect(messageRouter).toBeDefined();
|
|
77
|
+
|
|
78
|
+
// useTools expects these as parameters (including currentAgentId)
|
|
79
|
+
// (we can't actually call the hook outside React, but we verify the interface)
|
|
80
|
+
expect(typeof useTools).toBe('function');
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
test('Full tools management stack can be imported together', async () => {
|
|
84
|
+
const [
|
|
85
|
+
constantsModule,
|
|
86
|
+
sessionModule,
|
|
87
|
+
websocketModule,
|
|
88
|
+
routerModule,
|
|
89
|
+
toolsModule,
|
|
90
|
+
] = await Promise.all([
|
|
91
|
+
import('../../config/constants.js'),
|
|
92
|
+
import('../../api/session.js'),
|
|
93
|
+
import('../../api/websocket.js'),
|
|
94
|
+
import('../../api/messageRouter.js'),
|
|
95
|
+
import('../../state/useTools.js'),
|
|
96
|
+
]);
|
|
97
|
+
|
|
98
|
+
// Verify all modules loaded
|
|
99
|
+
expect(constantsModule.TOOL_CATEGORY).toBeDefined();
|
|
100
|
+
expect(constantsModule.API_ENDPOINTS).toBeDefined();
|
|
101
|
+
expect(sessionModule.SessionManager).toBeDefined();
|
|
102
|
+
expect(websocketModule.WebSocketManager).toBeDefined();
|
|
103
|
+
expect(routerModule.MessageRouter).toBeDefined();
|
|
104
|
+
expect(toolsModule.useTools).toBeDefined();
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
describe('Tools Management - API Endpoints Validation', () => {
|
|
109
|
+
test('Tools endpoint follows RESTful pattern', async () => {
|
|
110
|
+
const { API_ENDPOINTS } = await import('../../config/constants.js');
|
|
111
|
+
|
|
112
|
+
// Verify endpoint path
|
|
113
|
+
expect(API_ENDPOINTS.TOOLS).toMatch(/^\/api\//);
|
|
114
|
+
expect(API_ENDPOINTS.TOOLS).toBe('/api/tools');
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
test('Tool operations use orchestrator endpoint', async () => {
|
|
118
|
+
const { API_ENDPOINTS } = await import('../../config/constants.js');
|
|
119
|
+
|
|
120
|
+
// Tool execution, enable/disable use orchestrator
|
|
121
|
+
expect(API_ENDPOINTS.ORCHESTRATOR).toBeDefined();
|
|
122
|
+
expect(API_ENDPOINTS.ORCHESTRATOR).toBe('/api/orchestrator');
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
describe('Tools Management - Hook Interface Verification', () => {
|
|
127
|
+
test('useTools returns expected interface shape', async () => {
|
|
128
|
+
const { useTools } = await import('../../state/useTools.js');
|
|
129
|
+
|
|
130
|
+
// We can verify the function signature
|
|
131
|
+
expect(useTools.length).toBe(3); // sessionManager, messageRouter, currentAgentId
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
describe('Tools Management - Constants Validation', () => {
|
|
136
|
+
test('TOOL_CATEGORY includes all major categories', async () => {
|
|
137
|
+
const { TOOL_CATEGORY } = await import('../../config/constants.js');
|
|
138
|
+
|
|
139
|
+
const categories = Object.keys(TOOL_CATEGORY);
|
|
140
|
+
expect(categories).toContain('SYSTEM');
|
|
141
|
+
expect(categories).toContain('AUTOMATION');
|
|
142
|
+
expect(categories).toContain('ANALYSIS');
|
|
143
|
+
expect(categories).toContain('UTILITY');
|
|
144
|
+
expect(categories).toContain('COLLABORATION');
|
|
145
|
+
expect(categories).toContain('AI');
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
test('TOOL_CATEGORY values match expected format', async () => {
|
|
149
|
+
const { TOOL_CATEGORY } = await import('../../config/constants.js');
|
|
150
|
+
|
|
151
|
+
// Values should be lowercase
|
|
152
|
+
expect(TOOL_CATEGORY.SYSTEM).toMatch(/^[a-z_]+$/);
|
|
153
|
+
expect(TOOL_CATEGORY.AUTOMATION).toMatch(/^[a-z_]+$/);
|
|
154
|
+
expect(TOOL_CATEGORY.ANALYSIS).toMatch(/^[a-z_]+$/);
|
|
155
|
+
expect(TOOL_CATEGORY.UTILITY).toMatch(/^[a-z_]+$/);
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
describe('Tools Management - WebSocket Event Handlers', () => {
|
|
160
|
+
test('MessageRouter has tool event handlers registered', async () => {
|
|
161
|
+
const { MessageRouter } = await import('../../api/messageRouter.js');
|
|
162
|
+
const { WebSocketManager } = await import('../../api/websocket.js');
|
|
163
|
+
|
|
164
|
+
const wsManager = new WebSocketManager('localhost', 8080);
|
|
165
|
+
const router = new MessageRouter(wsManager);
|
|
166
|
+
|
|
167
|
+
// Verify tool event handlers are registered
|
|
168
|
+
// These would be registered by the useTools hook when mounted
|
|
169
|
+
expect(router.hasHandler).toBeDefined();
|
|
170
|
+
expect(typeof router.hasHandler).toBe('function');
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
describe('Tools Management - Tool Categorization', () => {
|
|
175
|
+
test('TOOL_CATEGORY can be used to filter tools by category', async () => {
|
|
176
|
+
const { TOOL_CATEGORY } = await import('../../config/constants.js');
|
|
177
|
+
|
|
178
|
+
// Mock tool list
|
|
179
|
+
const mockTools = [
|
|
180
|
+
{ name: 'execute_command', category: TOOL_CATEGORY.SYSTEM },
|
|
181
|
+
{ name: 'terminal', category: TOOL_CATEGORY.SYSTEM },
|
|
182
|
+
{ name: 'analyze_code', category: TOOL_CATEGORY.ANALYSIS },
|
|
183
|
+
{ name: 'web_search', category: TOOL_CATEGORY.UTILITY },
|
|
184
|
+
{ name: 'ai_assistant', category: TOOL_CATEGORY.AI },
|
|
185
|
+
];
|
|
186
|
+
|
|
187
|
+
// Filter by category
|
|
188
|
+
const systemTools = mockTools.filter(t => t.category === TOOL_CATEGORY.SYSTEM);
|
|
189
|
+
const analysisTools = mockTools.filter(t => t.category === TOOL_CATEGORY.ANALYSIS);
|
|
190
|
+
const utilityTools = mockTools.filter(t => t.category === TOOL_CATEGORY.UTILITY);
|
|
191
|
+
const aiTools = mockTools.filter(t => t.category === TOOL_CATEGORY.AI);
|
|
192
|
+
|
|
193
|
+
expect(systemTools.length).toBe(2);
|
|
194
|
+
expect(analysisTools.length).toBe(1);
|
|
195
|
+
expect(utilityTools.length).toBe(1);
|
|
196
|
+
expect(aiTools.length).toBe(1);
|
|
197
|
+
|
|
198
|
+
expect(systemTools[0].name).toBe('execute_command');
|
|
199
|
+
expect(analysisTools[0].name).toBe('analyze_code');
|
|
200
|
+
});
|
|
201
|
+
});
|
|
202
|
+
|
|
203
|
+
describe('Tools Management - Tool Search', () => {
|
|
204
|
+
test('Tool search should work with name and description', async () => {
|
|
205
|
+
// Mock tool list
|
|
206
|
+
const mockTools = [
|
|
207
|
+
{ name: 'read_file', description: 'Read contents of a file' },
|
|
208
|
+
{ name: 'write_file', description: 'Write data to a file' },
|
|
209
|
+
{ name: 'analyze_code', description: 'Perform static code analysis' },
|
|
210
|
+
];
|
|
211
|
+
|
|
212
|
+
// Search by name
|
|
213
|
+
const searchByName = (query) => {
|
|
214
|
+
const lowerQuery = query.toLowerCase();
|
|
215
|
+
return mockTools.filter(t =>
|
|
216
|
+
t.name?.toLowerCase().includes(lowerQuery) ||
|
|
217
|
+
t.description?.toLowerCase().includes(lowerQuery)
|
|
218
|
+
);
|
|
219
|
+
};
|
|
220
|
+
|
|
221
|
+
const fileTools = searchByName('file');
|
|
222
|
+
expect(fileTools.length).toBe(2);
|
|
223
|
+
expect(fileTools.map(t => t.name)).toContain('read_file');
|
|
224
|
+
expect(fileTools.map(t => t.name)).toContain('write_file');
|
|
225
|
+
|
|
226
|
+
const analyzeTools = searchByName('analyze');
|
|
227
|
+
expect(analyzeTools.length).toBe(1);
|
|
228
|
+
expect(analyzeTools[0].name).toBe('analyze_code');
|
|
229
|
+
});
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
describe('Tools Management - Execution State Tracking', () => {
|
|
233
|
+
test('Execution state can track multiple tools', async () => {
|
|
234
|
+
// Mock execution tracking
|
|
235
|
+
const executingTools = new Set();
|
|
236
|
+
|
|
237
|
+
// Start execution
|
|
238
|
+
executingTools.add('read_file');
|
|
239
|
+
executingTools.add('analyze_code');
|
|
240
|
+
|
|
241
|
+
expect(executingTools.has('read_file')).toBe(true);
|
|
242
|
+
expect(executingTools.has('analyze_code')).toBe(true);
|
|
243
|
+
expect(executingTools.size).toBe(2);
|
|
244
|
+
|
|
245
|
+
// Complete execution
|
|
246
|
+
executingTools.delete('read_file');
|
|
247
|
+
|
|
248
|
+
expect(executingTools.has('read_file')).toBe(false);
|
|
249
|
+
expect(executingTools.has('analyze_code')).toBe(true);
|
|
250
|
+
expect(executingTools.size).toBe(1);
|
|
251
|
+
});
|
|
252
|
+
|
|
253
|
+
test('Tool results can be stored by execution ID', async () => {
|
|
254
|
+
// Mock tool results storage
|
|
255
|
+
const toolResults = new Map();
|
|
256
|
+
|
|
257
|
+
// Store results
|
|
258
|
+
toolResults.set('exec-1', { success: true, data: 'file contents' });
|
|
259
|
+
toolResults.set('exec-2', { success: true, data: { issues: [] } });
|
|
260
|
+
|
|
261
|
+
expect(toolResults.get('exec-1')).toBeDefined();
|
|
262
|
+
expect(toolResults.get('exec-1').success).toBe(true);
|
|
263
|
+
expect(toolResults.get('exec-1').data).toBe('file contents');
|
|
264
|
+
|
|
265
|
+
expect(toolResults.get('exec-2')).toBeDefined();
|
|
266
|
+
expect(toolResults.get('exec-2').data.issues).toEqual([]);
|
|
267
|
+
|
|
268
|
+
expect(toolResults.size).toBe(2);
|
|
269
|
+
});
|
|
270
|
+
});
|
|
271
|
+
|
|
272
|
+
describe('Tools Management - Tool Caching', () => {
|
|
273
|
+
test('Tool cache supports TTL-based caching', async () => {
|
|
274
|
+
const CACHE_TTL = 600000; // 10 minutes
|
|
275
|
+
|
|
276
|
+
// Mock cache
|
|
277
|
+
let toolsCache;
|
|
278
|
+
let toolsCacheTimestamp;
|
|
279
|
+
|
|
280
|
+
// Initial fetch
|
|
281
|
+
const mockTools = [{ name: 'read_file' }];
|
|
282
|
+
toolsCache = mockTools;
|
|
283
|
+
toolsCacheTimestamp = Date.now();
|
|
284
|
+
|
|
285
|
+
// Check cache validity
|
|
286
|
+
const now = Date.now();
|
|
287
|
+
const isCacheValid = (now - toolsCacheTimestamp) < CACHE_TTL;
|
|
288
|
+
|
|
289
|
+
expect(isCacheValid).toBe(true);
|
|
290
|
+
expect(toolsCache).toBe(mockTools);
|
|
291
|
+
});
|
|
292
|
+
|
|
293
|
+
test('Tool cache expires after TTL', async () => {
|
|
294
|
+
const CACHE_TTL = 100; // 100ms for testing
|
|
295
|
+
|
|
296
|
+
// Mock cache
|
|
297
|
+
let toolsCacheTimestamp;
|
|
298
|
+
|
|
299
|
+
// Initial fetch
|
|
300
|
+
toolsCacheTimestamp = Date.now();
|
|
301
|
+
|
|
302
|
+
// Wait for cache to expire
|
|
303
|
+
await new Promise(resolve => setTimeout(resolve, 150));
|
|
304
|
+
|
|
305
|
+
// Check cache validity
|
|
306
|
+
const now = Date.now();
|
|
307
|
+
const isCacheValid = (now - toolsCacheTimestamp) < CACHE_TTL;
|
|
308
|
+
|
|
309
|
+
expect(isCacheValid).toBe(false);
|
|
310
|
+
});
|
|
311
|
+
});
|
|
312
|
+
|
|
313
|
+
describe('Tools Management - Tool Filtering', () => {
|
|
314
|
+
test('Tools can be filtered by multiple criteria', async () => {
|
|
315
|
+
const { TOOL_CATEGORY } = await import('../../config/constants.js');
|
|
316
|
+
|
|
317
|
+
// Mock tool list
|
|
318
|
+
const mockTools = [
|
|
319
|
+
{ name: 'execute_command', category: TOOL_CATEGORY.SYSTEM, enabled: true },
|
|
320
|
+
{ name: 'terminal', category: TOOL_CATEGORY.SYSTEM, enabled: false },
|
|
321
|
+
{ name: 'analyze_code', category: TOOL_CATEGORY.ANALYSIS, enabled: true },
|
|
322
|
+
];
|
|
323
|
+
|
|
324
|
+
// Filter by category and enabled status
|
|
325
|
+
const filterTools = (criteria) => {
|
|
326
|
+
let filtered = [...mockTools];
|
|
327
|
+
|
|
328
|
+
if (criteria.category) {
|
|
329
|
+
filtered = filtered.filter(t => t.category === criteria.category);
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
if (criteria.enabled !== undefined) {
|
|
333
|
+
filtered = filtered.filter(t => t.enabled === criteria.enabled);
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
return filtered;
|
|
337
|
+
};
|
|
338
|
+
|
|
339
|
+
// Filter: system tools only
|
|
340
|
+
const systemTools = filterTools({ category: TOOL_CATEGORY.SYSTEM });
|
|
341
|
+
expect(systemTools.length).toBe(2);
|
|
342
|
+
|
|
343
|
+
// Filter: enabled tools only
|
|
344
|
+
const enabledTools = filterTools({ enabled: true });
|
|
345
|
+
expect(enabledTools.length).toBe(2);
|
|
346
|
+
|
|
347
|
+
// Filter: enabled system tools
|
|
348
|
+
const enabledSystemTools = filterTools({
|
|
349
|
+
category: TOOL_CATEGORY.SYSTEM,
|
|
350
|
+
enabled: true,
|
|
351
|
+
});
|
|
352
|
+
expect(enabledSystemTools.length).toBe(1);
|
|
353
|
+
expect(enabledSystemTools[0].name).toBe('execute_command');
|
|
354
|
+
});
|
|
355
|
+
});
|
|
356
|
+
|
|
357
|
+
describe('Tools Management - Category Counts', () => {
|
|
358
|
+
test('Category counts can be calculated', async () => {
|
|
359
|
+
const { TOOL_CATEGORY } = await import('../../config/constants.js');
|
|
360
|
+
|
|
361
|
+
// Mock tool list
|
|
362
|
+
const mockTools = [
|
|
363
|
+
{ name: 'execute_command', category: TOOL_CATEGORY.SYSTEM },
|
|
364
|
+
{ name: 'terminal', category: TOOL_CATEGORY.SYSTEM },
|
|
365
|
+
{ name: 'analyze_code', category: TOOL_CATEGORY.ANALYSIS },
|
|
366
|
+
{ name: 'web_search', category: TOOL_CATEGORY.UTILITY },
|
|
367
|
+
];
|
|
368
|
+
|
|
369
|
+
// Calculate counts
|
|
370
|
+
const getCategoryCounts = (tools) => {
|
|
371
|
+
const counts = {};
|
|
372
|
+
for (const category of Object.values(TOOL_CATEGORY)) {
|
|
373
|
+
counts[category] = tools.filter(t => t.category === category).length;
|
|
374
|
+
}
|
|
375
|
+
return counts;
|
|
376
|
+
};
|
|
377
|
+
|
|
378
|
+
const counts = getCategoryCounts(mockTools);
|
|
379
|
+
|
|
380
|
+
expect(counts[TOOL_CATEGORY.SYSTEM]).toBe(2);
|
|
381
|
+
expect(counts[TOOL_CATEGORY.ANALYSIS]).toBe(1);
|
|
382
|
+
expect(counts[TOOL_CATEGORY.UTILITY]).toBe(1);
|
|
383
|
+
expect(counts[TOOL_CATEGORY.AUTOMATION]).toBe(0);
|
|
384
|
+
});
|
|
385
|
+
});
|