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,554 +1,554 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tools State Management Hook
|
|
3
|
-
* React hook for managing tools - listing, categorization, execution state, and capabilities
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { useState, useEffect, useCallback, useRef, useMemo } from 'react';
|
|
7
|
-
import { API_ENDPOINTS, TOOL_CATEGORY } from '../config/constants.js';
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Tools state management hook
|
|
11
|
-
* Manages tool listing, categorization, execution tracking, and capabilities
|
|
12
|
-
*/
|
|
13
|
-
export function useTools(sessionManager, messageRouter, currentAgentId) {
|
|
14
|
-
// Tool state
|
|
15
|
-
const [tools, setTools] = useState([]);
|
|
16
|
-
const [loading, setLoading] = useState(false);
|
|
17
|
-
const [error, setError] = useState(null);
|
|
18
|
-
|
|
19
|
-
// Execution state
|
|
20
|
-
const [executingTools, setExecutingTools] = useState(new Set());
|
|
21
|
-
const [toolResults, setToolResults] = useState(new Map());
|
|
22
|
-
|
|
23
|
-
// Tool cache
|
|
24
|
-
const toolsCache = useRef(null);
|
|
25
|
-
const toolsCacheTimestamp = useRef(0);
|
|
26
|
-
const CACHE_TTL = 600000; // 10 minutes
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Fetch available tools
|
|
30
|
-
*/
|
|
31
|
-
const fetchTools = useCallback(async (options = {}) => {
|
|
32
|
-
if (!sessionManager?.isValid()) {
|
|
33
|
-
setError('Invalid session');
|
|
34
|
-
return { success: false, error: 'Invalid session' };
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
const { forceRefresh = false } = options;
|
|
38
|
-
|
|
39
|
-
// Check cache
|
|
40
|
-
const now = Date.now();
|
|
41
|
-
if (!forceRefresh && toolsCache.current && (now - toolsCacheTimestamp.current) < CACHE_TTL) {
|
|
42
|
-
setTools(toolsCache.current);
|
|
43
|
-
return { success: true, tools: toolsCache.current, cached: true };
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
setLoading(true);
|
|
47
|
-
setError(null);
|
|
48
|
-
|
|
49
|
-
try {
|
|
50
|
-
const response = await sessionManager.makeRequest('GET', API_ENDPOINTS.TOOLS);
|
|
51
|
-
|
|
52
|
-
if (response.success && response.tools) {
|
|
53
|
-
// Cache tools
|
|
54
|
-
toolsCache.current = response.tools;
|
|
55
|
-
toolsCacheTimestamp.current = now;
|
|
56
|
-
|
|
57
|
-
setTools(response.tools);
|
|
58
|
-
return { success: true, tools: response.tools };
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
throw new Error(response.error || 'Failed to fetch tools');
|
|
62
|
-
} catch (err) {
|
|
63
|
-
setError(err.message);
|
|
64
|
-
return { success: false, error: err.message };
|
|
65
|
-
} finally {
|
|
66
|
-
setLoading(false);
|
|
67
|
-
}
|
|
68
|
-
}, [sessionManager]);
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* Get tool by name
|
|
72
|
-
*/
|
|
73
|
-
const getToolByName = useCallback((toolName) => {
|
|
74
|
-
return tools.find(tool => tool.name === toolName) || null;
|
|
75
|
-
}, [tools]);
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* Get tools by category
|
|
79
|
-
*/
|
|
80
|
-
const getToolsByCategory = useCallback((category) => {
|
|
81
|
-
return tools.filter(tool => tool.category === category);
|
|
82
|
-
}, [tools]);
|
|
83
|
-
|
|
84
|
-
/**
|
|
85
|
-
* Get system tools
|
|
86
|
-
*/
|
|
87
|
-
const getSystemTools = useCallback(() => {
|
|
88
|
-
return getToolsByCategory(TOOL_CATEGORY.SYSTEM);
|
|
89
|
-
}, [getToolsByCategory]);
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* Get automation tools
|
|
93
|
-
*/
|
|
94
|
-
const getAutomationTools = useCallback(() => {
|
|
95
|
-
return getToolsByCategory(TOOL_CATEGORY.AUTOMATION);
|
|
96
|
-
}, [getToolsByCategory]);
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* Get analysis tools
|
|
100
|
-
*/
|
|
101
|
-
const getAnalysisTools = useCallback(() => {
|
|
102
|
-
return getToolsByCategory(TOOL_CATEGORY.ANALYSIS);
|
|
103
|
-
}, [getToolsByCategory]);
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* Get utility tools
|
|
107
|
-
*/
|
|
108
|
-
const getUtilityTools = useCallback(() => {
|
|
109
|
-
return getToolsByCategory(TOOL_CATEGORY.UTILITY);
|
|
110
|
-
}, [getToolsByCategory]);
|
|
111
|
-
|
|
112
|
-
/**
|
|
113
|
-
* Get collaboration tools
|
|
114
|
-
*/
|
|
115
|
-
const getCollaborationTools = useCallback(() => {
|
|
116
|
-
return getToolsByCategory(TOOL_CATEGORY.COLLABORATION);
|
|
117
|
-
}, [getToolsByCategory]);
|
|
118
|
-
|
|
119
|
-
/**
|
|
120
|
-
* Get AI tools
|
|
121
|
-
*/
|
|
122
|
-
const getAITools = useCallback(() => {
|
|
123
|
-
return getToolsByCategory(TOOL_CATEGORY.AI);
|
|
124
|
-
}, [getToolsByCategory]);
|
|
125
|
-
|
|
126
|
-
/**
|
|
127
|
-
* Check if tool is available
|
|
128
|
-
*/
|
|
129
|
-
const isToolAvailable = useCallback((toolName) => {
|
|
130
|
-
return tools.some(tool => tool.name === toolName);
|
|
131
|
-
}, [tools]);
|
|
132
|
-
|
|
133
|
-
/**
|
|
134
|
-
* Check if tool is executing
|
|
135
|
-
*/
|
|
136
|
-
const isToolExecuting = useCallback((toolName) => {
|
|
137
|
-
return executingTools.has(toolName);
|
|
138
|
-
}, [executingTools]);
|
|
139
|
-
|
|
140
|
-
/**
|
|
141
|
-
* Get tool result
|
|
142
|
-
*/
|
|
143
|
-
const getToolResult = useCallback((executionId) => {
|
|
144
|
-
return toolResults.get(executionId) || null;
|
|
145
|
-
}, [toolResults]);
|
|
146
|
-
|
|
147
|
-
/**
|
|
148
|
-
* Execute a tool
|
|
149
|
-
*/
|
|
150
|
-
const executeTool = useCallback(async (toolName, parameters = {}) => {
|
|
151
|
-
if (!sessionManager?.isValid() || !currentAgentId) {
|
|
152
|
-
throw new Error('Invalid session or no agent selected');
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
if (!toolName) {
|
|
156
|
-
throw new Error('Tool name is required');
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
// Check if tool exists
|
|
160
|
-
const tool = getToolByName(toolName);
|
|
161
|
-
if (!tool) {
|
|
162
|
-
throw new Error(`Tool not found: ${toolName}`);
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
// Mark as executing
|
|
166
|
-
setExecutingTools(prev => new Set(prev).add(toolName));
|
|
167
|
-
setError(null);
|
|
168
|
-
|
|
169
|
-
try {
|
|
170
|
-
// Execute via orchestrator
|
|
171
|
-
const response = await sessionManager.makeRequest('POST', API_ENDPOINTS.ORCHESTRATOR, {
|
|
172
|
-
action: 'execute_tool',
|
|
173
|
-
payload: {
|
|
174
|
-
agentId: currentAgentId,
|
|
175
|
-
toolName,
|
|
176
|
-
parameters,
|
|
177
|
-
},
|
|
178
|
-
sessionId: sessionManager.getSessionId(),
|
|
179
|
-
});
|
|
180
|
-
|
|
181
|
-
if (response.success) {
|
|
182
|
-
// Store result
|
|
183
|
-
const executionId = response.executionId || `${toolName}-${Date.now()}`;
|
|
184
|
-
setToolResults(prev => new Map(prev).set(executionId, response.result));
|
|
185
|
-
|
|
186
|
-
return {
|
|
187
|
-
success: true,
|
|
188
|
-
executionId,
|
|
189
|
-
result: response.result,
|
|
190
|
-
};
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
throw new Error(response.error || 'Failed to execute tool');
|
|
194
|
-
} catch (err) {
|
|
195
|
-
setError(err.message);
|
|
196
|
-
throw err;
|
|
197
|
-
} finally {
|
|
198
|
-
// Remove from executing set
|
|
199
|
-
setExecutingTools(prev => {
|
|
200
|
-
const next = new Set(prev);
|
|
201
|
-
next.delete(toolName);
|
|
202
|
-
return next;
|
|
203
|
-
});
|
|
204
|
-
}
|
|
205
|
-
}, [sessionManager, currentAgentId, getToolByName]);
|
|
206
|
-
|
|
207
|
-
/**
|
|
208
|
-
* Get tool capabilities
|
|
209
|
-
*/
|
|
210
|
-
const getToolCapabilities = useCallback(async (toolName) => {
|
|
211
|
-
if (!sessionManager?.isValid()) {
|
|
212
|
-
throw new Error('Invalid session');
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
if (!toolName) {
|
|
216
|
-
throw new Error('Tool name is required');
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
try {
|
|
220
|
-
const response = await sessionManager.makeRequest('POST', API_ENDPOINTS.ORCHESTRATOR, {
|
|
221
|
-
action: 'get_tool_capabilities',
|
|
222
|
-
payload: { toolName },
|
|
223
|
-
sessionId: sessionManager.getSessionId(),
|
|
224
|
-
});
|
|
225
|
-
|
|
226
|
-
if (response.success && response.capabilities) {
|
|
227
|
-
return { success: true, capabilities: response.capabilities };
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
throw new Error(response.error || 'Failed to get tool capabilities');
|
|
231
|
-
} catch (err) {
|
|
232
|
-
throw new Error(`Failed to get capabilities for ${toolName}: ${err.message}
|
|
233
|
-
}
|
|
234
|
-
}, [sessionManager]);
|
|
235
|
-
|
|
236
|
-
/**
|
|
237
|
-
* Enable tool for agent
|
|
238
|
-
*/
|
|
239
|
-
const enableTool = useCallback(async (agentId, toolName) => {
|
|
240
|
-
if (!sessionManager?.isValid()) {
|
|
241
|
-
throw new Error('Invalid session');
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
if (!agentId) {
|
|
245
|
-
throw new Error('Agent ID is required');
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
if (!toolName) {
|
|
249
|
-
throw new Error('Tool name is required');
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
try {
|
|
253
|
-
const response = await sessionManager.makeRequest('POST', API_ENDPOINTS.ORCHESTRATOR, {
|
|
254
|
-
action: 'enable_tool',
|
|
255
|
-
payload: {
|
|
256
|
-
agentId,
|
|
257
|
-
toolName,
|
|
258
|
-
},
|
|
259
|
-
sessionId: sessionManager.getSessionId(),
|
|
260
|
-
});
|
|
261
|
-
|
|
262
|
-
if (response.success) {
|
|
263
|
-
return { success: true };
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
throw new Error(response.error || 'Failed to enable tool');
|
|
267
|
-
} catch (err) {
|
|
268
|
-
throw new Error(`Failed to enable ${toolName}: ${err.message}
|
|
269
|
-
}
|
|
270
|
-
}, [sessionManager]);
|
|
271
|
-
|
|
272
|
-
/**
|
|
273
|
-
* Disable tool for agent
|
|
274
|
-
*/
|
|
275
|
-
const disableTool = useCallback(async (agentId, toolName) => {
|
|
276
|
-
if (!sessionManager?.isValid()) {
|
|
277
|
-
throw new Error('Invalid session');
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
if (!agentId) {
|
|
281
|
-
throw new Error('Agent ID is required');
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
if (!toolName) {
|
|
285
|
-
throw new Error('Tool name is required');
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
try {
|
|
289
|
-
const response = await sessionManager.makeRequest('POST', API_ENDPOINTS.ORCHESTRATOR, {
|
|
290
|
-
action: 'disable_tool',
|
|
291
|
-
payload: {
|
|
292
|
-
agentId,
|
|
293
|
-
toolName,
|
|
294
|
-
},
|
|
295
|
-
sessionId: sessionManager.getSessionId(),
|
|
296
|
-
});
|
|
297
|
-
|
|
298
|
-
if (response.success) {
|
|
299
|
-
return { success: true };
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
throw new Error(response.error || 'Failed to disable tool');
|
|
303
|
-
} catch (err) {
|
|
304
|
-
throw new Error(`Failed to disable ${toolName}: ${err.message}
|
|
305
|
-
}
|
|
306
|
-
}, [sessionManager]);
|
|
307
|
-
|
|
308
|
-
/**
|
|
309
|
-
* Get enabled tools for agent
|
|
310
|
-
*/
|
|
311
|
-
const getEnabledTools = useCallback(async (agentId) => {
|
|
312
|
-
if (!sessionManager?.isValid()) {
|
|
313
|
-
throw new Error('Invalid session');
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
if (!agentId) {
|
|
317
|
-
throw new Error('Agent ID is required');
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
try {
|
|
321
|
-
const response = await sessionManager.makeRequest('POST', API_ENDPOINTS.ORCHESTRATOR, {
|
|
322
|
-
action: 'get_enabled_tools',
|
|
323
|
-
payload: { agentId },
|
|
324
|
-
sessionId: sessionManager.getSessionId(),
|
|
325
|
-
});
|
|
326
|
-
|
|
327
|
-
if (response.success && response.tools) {
|
|
328
|
-
return { success: true, tools: response.tools };
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
throw new Error(response.error || 'Failed to get enabled tools');
|
|
332
|
-
} catch (err) {
|
|
333
|
-
throw new Error(`Failed to get enabled tools: ${err.message}
|
|
334
|
-
}
|
|
335
|
-
}, [sessionManager]);
|
|
336
|
-
|
|
337
|
-
/**
|
|
338
|
-
* Get all categories with tool counts
|
|
339
|
-
*/
|
|
340
|
-
const getCategoryCounts = useCallback(() => {
|
|
341
|
-
const counts = {};
|
|
342
|
-
|
|
343
|
-
for (const category of Object.values(TOOL_CATEGORY)) {
|
|
344
|
-
counts[category] = tools.filter(t => t.category === category).length;
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
return counts;
|
|
348
|
-
}, [tools]);
|
|
349
|
-
|
|
350
|
-
/**
|
|
351
|
-
* Search tools by name or description
|
|
352
|
-
*/
|
|
353
|
-
const searchTools = useCallback((query) => {
|
|
354
|
-
if (!query || query.trim().length === 0) {
|
|
355
|
-
return tools;
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
const lowerQuery = query.toLowerCase();
|
|
359
|
-
return tools.filter(tool =>
|
|
360
|
-
tool.name?.toLowerCase().includes(lowerQuery) ||
|
|
361
|
-
tool.description?.toLowerCase().includes(lowerQuery)
|
|
362
|
-
);
|
|
363
|
-
}, [tools]);
|
|
364
|
-
|
|
365
|
-
/**
|
|
366
|
-
* Filter tools by multiple criteria
|
|
367
|
-
*/
|
|
368
|
-
const filterTools = useCallback((criteria = {}) => {
|
|
369
|
-
let filtered = [...tools];
|
|
370
|
-
|
|
371
|
-
if (criteria.category) {
|
|
372
|
-
filtered = filtered.filter(t => t.category === criteria.category);
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
if (criteria.enabled !== undefined) {
|
|
376
|
-
filtered = filtered.filter(t => t.enabled === criteria.enabled);
|
|
377
|
-
}
|
|
378
|
-
|
|
379
|
-
if (criteria.query) {
|
|
380
|
-
const lowerQuery = criteria.query.toLowerCase();
|
|
381
|
-
filtered = filtered.filter(t =>
|
|
382
|
-
t.name?.toLowerCase().includes(lowerQuery) ||
|
|
383
|
-
t.description?.toLowerCase().includes(lowerQuery)
|
|
384
|
-
);
|
|
385
|
-
}
|
|
386
|
-
|
|
387
|
-
return filtered;
|
|
388
|
-
}, [tools]);
|
|
389
|
-
|
|
390
|
-
/**
|
|
391
|
-
* Clear tool result
|
|
392
|
-
*/
|
|
393
|
-
const clearToolResult = useCallback((executionId) => {
|
|
394
|
-
setToolResults(prev => {
|
|
395
|
-
const next = new Map(prev);
|
|
396
|
-
next.delete(executionId);
|
|
397
|
-
return next;
|
|
398
|
-
});
|
|
399
|
-
}, []);
|
|
400
|
-
|
|
401
|
-
/**
|
|
402
|
-
* Clear all tool results
|
|
403
|
-
*/
|
|
404
|
-
const clearAllToolResults = useCallback(() => {
|
|
405
|
-
setToolResults(new Map());
|
|
406
|
-
}, []);
|
|
407
|
-
|
|
408
|
-
/**
|
|
409
|
-
* Clear error
|
|
410
|
-
*/
|
|
411
|
-
const clearError = useCallback(() => {
|
|
412
|
-
setError(null);
|
|
413
|
-
}, []);
|
|
414
|
-
|
|
415
|
-
/**
|
|
416
|
-
* Refresh tool list
|
|
417
|
-
*/
|
|
418
|
-
const refresh = useCallback(async () => {
|
|
419
|
-
return fetchTools({ forceRefresh: true });
|
|
420
|
-
}, [fetchTools]);
|
|
421
|
-
|
|
422
|
-
// Set up WebSocket listeners for tool events
|
|
423
|
-
useEffect(() => {
|
|
424
|
-
if (!messageRouter) return;
|
|
425
|
-
|
|
426
|
-
// Tool execution started
|
|
427
|
-
const handleToolExecutionStarted = (data) => {
|
|
428
|
-
if (data.agentId === currentAgentId && data.toolName) {
|
|
429
|
-
setExecutingTools(prev => new Set(prev).add(data.toolName));
|
|
430
|
-
}
|
|
431
|
-
};
|
|
432
|
-
|
|
433
|
-
// Tool execution completed
|
|
434
|
-
const handleToolExecutionCompleted = (data) => {
|
|
435
|
-
if (data.agentId === currentAgentId && data.toolName) {
|
|
436
|
-
setExecutingTools(prev => {
|
|
437
|
-
const next = new Set(prev);
|
|
438
|
-
next.delete(data.toolName);
|
|
439
|
-
return next;
|
|
440
|
-
});
|
|
441
|
-
|
|
442
|
-
if (data.executionId && data.result) {
|
|
443
|
-
setToolResults(prev => new Map(prev).set(data.executionId, data.result));
|
|
444
|
-
}
|
|
445
|
-
}
|
|
446
|
-
};
|
|
447
|
-
|
|
448
|
-
// Tool enabled/disabled
|
|
449
|
-
const handleToolStateChanged = (data) => {
|
|
450
|
-
if (data.agentId === currentAgentId) {
|
|
451
|
-
// Refresh tool list to get updated enabled state
|
|
452
|
-
refresh();
|
|
453
|
-
}
|
|
454
|
-
};
|
|
455
|
-
|
|
456
|
-
messageRouter.on('tool:execution_started', handleToolExecutionStarted);
|
|
457
|
-
messageRouter.on('tool:execution_completed', handleToolExecutionCompleted);
|
|
458
|
-
messageRouter.on('tool:state_changed', handleToolStateChanged);
|
|
459
|
-
|
|
460
|
-
return () => {
|
|
461
|
-
messageRouter.off('tool:execution_started', handleToolExecutionStarted);
|
|
462
|
-
messageRouter.off('tool:execution_completed', handleToolExecutionCompleted);
|
|
463
|
-
messageRouter.off('tool:state_changed', handleToolStateChanged);
|
|
464
|
-
};
|
|
465
|
-
}, [messageRouter, currentAgentId, refresh]);
|
|
466
|
-
|
|
467
|
-
// Auto-fetch tools on mount
|
|
468
|
-
useEffect(() => {
|
|
469
|
-
if (sessionManager?.isValid() && tools.length === 0) {
|
|
470
|
-
fetchTools();
|
|
471
|
-
}
|
|
472
|
-
|
|
473
|
-
}, [sessionManager?.isValid, tools.length]);
|
|
474
|
-
|
|
475
|
-
// Return hook interface
|
|
476
|
-
return useMemo(() => ({
|
|
477
|
-
// State
|
|
478
|
-
tools,
|
|
479
|
-
loading,
|
|
480
|
-
error,
|
|
481
|
-
|
|
482
|
-
// Execution state
|
|
483
|
-
executingTools: Array.from(executingTools),
|
|
484
|
-
toolResults,
|
|
485
|
-
|
|
486
|
-
// Operations
|
|
487
|
-
fetchTools,
|
|
488
|
-
executeTool,
|
|
489
|
-
refresh,
|
|
490
|
-
|
|
491
|
-
// Tool queries
|
|
492
|
-
getToolByName,
|
|
493
|
-
getToolsByCategory,
|
|
494
|
-
getSystemTools,
|
|
495
|
-
getAutomationTools,
|
|
496
|
-
getAnalysisTools,
|
|
497
|
-
getUtilityTools,
|
|
498
|
-
getCollaborationTools,
|
|
499
|
-
getAITools,
|
|
500
|
-
isToolAvailable,
|
|
501
|
-
searchTools,
|
|
502
|
-
filterTools,
|
|
503
|
-
getCategoryCounts,
|
|
504
|
-
|
|
505
|
-
// Execution queries
|
|
506
|
-
isToolExecuting,
|
|
507
|
-
getToolResult,
|
|
508
|
-
clearToolResult,
|
|
509
|
-
clearAllToolResults,
|
|
510
|
-
|
|
511
|
-
// Capabilities
|
|
512
|
-
getToolCapabilities,
|
|
513
|
-
|
|
514
|
-
// Tool management
|
|
515
|
-
enableTool,
|
|
516
|
-
disableTool,
|
|
517
|
-
getEnabledTools,
|
|
518
|
-
|
|
519
|
-
// Utilities
|
|
520
|
-
clearError,
|
|
521
|
-
}), [
|
|
522
|
-
tools,
|
|
523
|
-
loading,
|
|
524
|
-
error,
|
|
525
|
-
executingTools,
|
|
526
|
-
toolResults,
|
|
527
|
-
fetchTools,
|
|
528
|
-
executeTool,
|
|
529
|
-
refresh,
|
|
530
|
-
getToolByName,
|
|
531
|
-
getToolsByCategory,
|
|
532
|
-
getSystemTools,
|
|
533
|
-
getAutomationTools,
|
|
534
|
-
getAnalysisTools,
|
|
535
|
-
getUtilityTools,
|
|
536
|
-
getCollaborationTools,
|
|
537
|
-
getAITools,
|
|
538
|
-
isToolAvailable,
|
|
539
|
-
searchTools,
|
|
540
|
-
filterTools,
|
|
541
|
-
getCategoryCounts,
|
|
542
|
-
isToolExecuting,
|
|
543
|
-
getToolResult,
|
|
544
|
-
clearToolResult,
|
|
545
|
-
clearAllToolResults,
|
|
546
|
-
getToolCapabilities,
|
|
547
|
-
enableTool,
|
|
548
|
-
disableTool,
|
|
549
|
-
getEnabledTools,
|
|
550
|
-
clearError,
|
|
551
|
-
]);
|
|
552
|
-
}
|
|
553
|
-
|
|
554
|
-
export default useTools;
|
|
1
|
+
/**
|
|
2
|
+
* Tools State Management Hook
|
|
3
|
+
* React hook for managing tools - listing, categorization, execution state, and capabilities
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { useState, useEffect, useCallback, useRef, useMemo } from 'react';
|
|
7
|
+
import { API_ENDPOINTS, TOOL_CATEGORY } from '../config/constants.js';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Tools state management hook
|
|
11
|
+
* Manages tool listing, categorization, execution tracking, and capabilities
|
|
12
|
+
*/
|
|
13
|
+
export function useTools(sessionManager, messageRouter, currentAgentId) {
|
|
14
|
+
// Tool state
|
|
15
|
+
const [tools, setTools] = useState([]);
|
|
16
|
+
const [loading, setLoading] = useState(false);
|
|
17
|
+
const [error, setError] = useState(null);
|
|
18
|
+
|
|
19
|
+
// Execution state
|
|
20
|
+
const [executingTools, setExecutingTools] = useState(new Set());
|
|
21
|
+
const [toolResults, setToolResults] = useState(new Map());
|
|
22
|
+
|
|
23
|
+
// Tool cache
|
|
24
|
+
const toolsCache = useRef(null);
|
|
25
|
+
const toolsCacheTimestamp = useRef(0);
|
|
26
|
+
const CACHE_TTL = 600000; // 10 minutes
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Fetch available tools
|
|
30
|
+
*/
|
|
31
|
+
const fetchTools = useCallback(async (options = {}) => {
|
|
32
|
+
if (!sessionManager?.isValid()) {
|
|
33
|
+
setError('Invalid session');
|
|
34
|
+
return { success: false, error: 'Invalid session' };
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const { forceRefresh = false } = options;
|
|
38
|
+
|
|
39
|
+
// Check cache
|
|
40
|
+
const now = Date.now();
|
|
41
|
+
if (!forceRefresh && toolsCache.current && (now - toolsCacheTimestamp.current) < CACHE_TTL) {
|
|
42
|
+
setTools(toolsCache.current);
|
|
43
|
+
return { success: true, tools: toolsCache.current, cached: true };
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
setLoading(true);
|
|
47
|
+
setError(null);
|
|
48
|
+
|
|
49
|
+
try {
|
|
50
|
+
const response = await sessionManager.makeRequest('GET', API_ENDPOINTS.TOOLS);
|
|
51
|
+
|
|
52
|
+
if (response.success && response.tools) {
|
|
53
|
+
// Cache tools
|
|
54
|
+
toolsCache.current = response.tools;
|
|
55
|
+
toolsCacheTimestamp.current = now;
|
|
56
|
+
|
|
57
|
+
setTools(response.tools);
|
|
58
|
+
return { success: true, tools: response.tools };
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
throw new Error(response.error || 'Failed to fetch tools');
|
|
62
|
+
} catch (err) {
|
|
63
|
+
setError(err.message);
|
|
64
|
+
return { success: false, error: err.message };
|
|
65
|
+
} finally {
|
|
66
|
+
setLoading(false);
|
|
67
|
+
}
|
|
68
|
+
}, [sessionManager]);
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Get tool by name
|
|
72
|
+
*/
|
|
73
|
+
const getToolByName = useCallback((toolName) => {
|
|
74
|
+
return tools.find(tool => tool.name === toolName) || null;
|
|
75
|
+
}, [tools]);
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Get tools by category
|
|
79
|
+
*/
|
|
80
|
+
const getToolsByCategory = useCallback((category) => {
|
|
81
|
+
return tools.filter(tool => tool.category === category);
|
|
82
|
+
}, [tools]);
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Get system tools
|
|
86
|
+
*/
|
|
87
|
+
const getSystemTools = useCallback(() => {
|
|
88
|
+
return getToolsByCategory(TOOL_CATEGORY.SYSTEM);
|
|
89
|
+
}, [getToolsByCategory]);
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Get automation tools
|
|
93
|
+
*/
|
|
94
|
+
const getAutomationTools = useCallback(() => {
|
|
95
|
+
return getToolsByCategory(TOOL_CATEGORY.AUTOMATION);
|
|
96
|
+
}, [getToolsByCategory]);
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Get analysis tools
|
|
100
|
+
*/
|
|
101
|
+
const getAnalysisTools = useCallback(() => {
|
|
102
|
+
return getToolsByCategory(TOOL_CATEGORY.ANALYSIS);
|
|
103
|
+
}, [getToolsByCategory]);
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Get utility tools
|
|
107
|
+
*/
|
|
108
|
+
const getUtilityTools = useCallback(() => {
|
|
109
|
+
return getToolsByCategory(TOOL_CATEGORY.UTILITY);
|
|
110
|
+
}, [getToolsByCategory]);
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Get collaboration tools
|
|
114
|
+
*/
|
|
115
|
+
const getCollaborationTools = useCallback(() => {
|
|
116
|
+
return getToolsByCategory(TOOL_CATEGORY.COLLABORATION);
|
|
117
|
+
}, [getToolsByCategory]);
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Get AI tools
|
|
121
|
+
*/
|
|
122
|
+
const getAITools = useCallback(() => {
|
|
123
|
+
return getToolsByCategory(TOOL_CATEGORY.AI);
|
|
124
|
+
}, [getToolsByCategory]);
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Check if tool is available
|
|
128
|
+
*/
|
|
129
|
+
const isToolAvailable = useCallback((toolName) => {
|
|
130
|
+
return tools.some(tool => tool.name === toolName);
|
|
131
|
+
}, [tools]);
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Check if tool is executing
|
|
135
|
+
*/
|
|
136
|
+
const isToolExecuting = useCallback((toolName) => {
|
|
137
|
+
return executingTools.has(toolName);
|
|
138
|
+
}, [executingTools]);
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Get tool result
|
|
142
|
+
*/
|
|
143
|
+
const getToolResult = useCallback((executionId) => {
|
|
144
|
+
return toolResults.get(executionId) || null;
|
|
145
|
+
}, [toolResults]);
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Execute a tool
|
|
149
|
+
*/
|
|
150
|
+
const executeTool = useCallback(async (toolName, parameters = {}) => {
|
|
151
|
+
if (!sessionManager?.isValid() || !currentAgentId) {
|
|
152
|
+
throw new Error('Invalid session or no agent selected');
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
if (!toolName) {
|
|
156
|
+
throw new Error('Tool name is required');
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// Check if tool exists
|
|
160
|
+
const tool = getToolByName(toolName);
|
|
161
|
+
if (!tool) {
|
|
162
|
+
throw new Error(`Tool not found: ${toolName}`);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// Mark as executing
|
|
166
|
+
setExecutingTools(prev => new Set(prev).add(toolName));
|
|
167
|
+
setError(null);
|
|
168
|
+
|
|
169
|
+
try {
|
|
170
|
+
// Execute via orchestrator
|
|
171
|
+
const response = await sessionManager.makeRequest('POST', API_ENDPOINTS.ORCHESTRATOR, {
|
|
172
|
+
action: 'execute_tool',
|
|
173
|
+
payload: {
|
|
174
|
+
agentId: currentAgentId,
|
|
175
|
+
toolName,
|
|
176
|
+
parameters,
|
|
177
|
+
},
|
|
178
|
+
sessionId: sessionManager.getSessionId(),
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
if (response.success) {
|
|
182
|
+
// Store result
|
|
183
|
+
const executionId = response.executionId || `${toolName}-${Date.now()}`;
|
|
184
|
+
setToolResults(prev => new Map(prev).set(executionId, response.result));
|
|
185
|
+
|
|
186
|
+
return {
|
|
187
|
+
success: true,
|
|
188
|
+
executionId,
|
|
189
|
+
result: response.result,
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
throw new Error(response.error || 'Failed to execute tool');
|
|
194
|
+
} catch (err) {
|
|
195
|
+
setError(err.message);
|
|
196
|
+
throw err;
|
|
197
|
+
} finally {
|
|
198
|
+
// Remove from executing set
|
|
199
|
+
setExecutingTools(prev => {
|
|
200
|
+
const next = new Set(prev);
|
|
201
|
+
next.delete(toolName);
|
|
202
|
+
return next;
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
}, [sessionManager, currentAgentId, getToolByName]);
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* Get tool capabilities
|
|
209
|
+
*/
|
|
210
|
+
const getToolCapabilities = useCallback(async (toolName) => {
|
|
211
|
+
if (!sessionManager?.isValid()) {
|
|
212
|
+
throw new Error('Invalid session');
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
if (!toolName) {
|
|
216
|
+
throw new Error('Tool name is required');
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
try {
|
|
220
|
+
const response = await sessionManager.makeRequest('POST', API_ENDPOINTS.ORCHESTRATOR, {
|
|
221
|
+
action: 'get_tool_capabilities',
|
|
222
|
+
payload: { toolName },
|
|
223
|
+
sessionId: sessionManager.getSessionId(),
|
|
224
|
+
});
|
|
225
|
+
|
|
226
|
+
if (response.success && response.capabilities) {
|
|
227
|
+
return { success: true, capabilities: response.capabilities };
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
throw new Error(response.error || 'Failed to get tool capabilities');
|
|
231
|
+
} catch (err) {
|
|
232
|
+
throw new Error(`Failed to get capabilities for ${toolName}: ${err.message}`, { cause: err });
|
|
233
|
+
}
|
|
234
|
+
}, [sessionManager]);
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* Enable tool for agent
|
|
238
|
+
*/
|
|
239
|
+
const enableTool = useCallback(async (agentId, toolName) => {
|
|
240
|
+
if (!sessionManager?.isValid()) {
|
|
241
|
+
throw new Error('Invalid session');
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
if (!agentId) {
|
|
245
|
+
throw new Error('Agent ID is required');
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
if (!toolName) {
|
|
249
|
+
throw new Error('Tool name is required');
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
try {
|
|
253
|
+
const response = await sessionManager.makeRequest('POST', API_ENDPOINTS.ORCHESTRATOR, {
|
|
254
|
+
action: 'enable_tool',
|
|
255
|
+
payload: {
|
|
256
|
+
agentId,
|
|
257
|
+
toolName,
|
|
258
|
+
},
|
|
259
|
+
sessionId: sessionManager.getSessionId(),
|
|
260
|
+
});
|
|
261
|
+
|
|
262
|
+
if (response.success) {
|
|
263
|
+
return { success: true };
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
throw new Error(response.error || 'Failed to enable tool');
|
|
267
|
+
} catch (err) {
|
|
268
|
+
throw new Error(`Failed to enable ${toolName}: ${err.message}`, { cause: err });
|
|
269
|
+
}
|
|
270
|
+
}, [sessionManager]);
|
|
271
|
+
|
|
272
|
+
/**
|
|
273
|
+
* Disable tool for agent
|
|
274
|
+
*/
|
|
275
|
+
const disableTool = useCallback(async (agentId, toolName) => {
|
|
276
|
+
if (!sessionManager?.isValid()) {
|
|
277
|
+
throw new Error('Invalid session');
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
if (!agentId) {
|
|
281
|
+
throw new Error('Agent ID is required');
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
if (!toolName) {
|
|
285
|
+
throw new Error('Tool name is required');
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
try {
|
|
289
|
+
const response = await sessionManager.makeRequest('POST', API_ENDPOINTS.ORCHESTRATOR, {
|
|
290
|
+
action: 'disable_tool',
|
|
291
|
+
payload: {
|
|
292
|
+
agentId,
|
|
293
|
+
toolName,
|
|
294
|
+
},
|
|
295
|
+
sessionId: sessionManager.getSessionId(),
|
|
296
|
+
});
|
|
297
|
+
|
|
298
|
+
if (response.success) {
|
|
299
|
+
return { success: true };
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
throw new Error(response.error || 'Failed to disable tool');
|
|
303
|
+
} catch (err) {
|
|
304
|
+
throw new Error(`Failed to disable ${toolName}: ${err.message}`, { cause: err });
|
|
305
|
+
}
|
|
306
|
+
}, [sessionManager]);
|
|
307
|
+
|
|
308
|
+
/**
|
|
309
|
+
* Get enabled tools for agent
|
|
310
|
+
*/
|
|
311
|
+
const getEnabledTools = useCallback(async (agentId) => {
|
|
312
|
+
if (!sessionManager?.isValid()) {
|
|
313
|
+
throw new Error('Invalid session');
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
if (!agentId) {
|
|
317
|
+
throw new Error('Agent ID is required');
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
try {
|
|
321
|
+
const response = await sessionManager.makeRequest('POST', API_ENDPOINTS.ORCHESTRATOR, {
|
|
322
|
+
action: 'get_enabled_tools',
|
|
323
|
+
payload: { agentId },
|
|
324
|
+
sessionId: sessionManager.getSessionId(),
|
|
325
|
+
});
|
|
326
|
+
|
|
327
|
+
if (response.success && response.tools) {
|
|
328
|
+
return { success: true, tools: response.tools };
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
throw new Error(response.error || 'Failed to get enabled tools');
|
|
332
|
+
} catch (err) {
|
|
333
|
+
throw new Error(`Failed to get enabled tools: ${err.message}`, { cause: err });
|
|
334
|
+
}
|
|
335
|
+
}, [sessionManager]);
|
|
336
|
+
|
|
337
|
+
/**
|
|
338
|
+
* Get all categories with tool counts
|
|
339
|
+
*/
|
|
340
|
+
const getCategoryCounts = useCallback(() => {
|
|
341
|
+
const counts = {};
|
|
342
|
+
|
|
343
|
+
for (const category of Object.values(TOOL_CATEGORY)) {
|
|
344
|
+
counts[category] = tools.filter(t => t.category === category).length;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
return counts;
|
|
348
|
+
}, [tools]);
|
|
349
|
+
|
|
350
|
+
/**
|
|
351
|
+
* Search tools by name or description
|
|
352
|
+
*/
|
|
353
|
+
const searchTools = useCallback((query) => {
|
|
354
|
+
if (!query || query.trim().length === 0) {
|
|
355
|
+
return tools;
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
const lowerQuery = query.toLowerCase();
|
|
359
|
+
return tools.filter(tool =>
|
|
360
|
+
tool.name?.toLowerCase().includes(lowerQuery) ||
|
|
361
|
+
tool.description?.toLowerCase().includes(lowerQuery)
|
|
362
|
+
);
|
|
363
|
+
}, [tools]);
|
|
364
|
+
|
|
365
|
+
/**
|
|
366
|
+
* Filter tools by multiple criteria
|
|
367
|
+
*/
|
|
368
|
+
const filterTools = useCallback((criteria = {}) => {
|
|
369
|
+
let filtered = [...tools];
|
|
370
|
+
|
|
371
|
+
if (criteria.category) {
|
|
372
|
+
filtered = filtered.filter(t => t.category === criteria.category);
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
if (criteria.enabled !== undefined) {
|
|
376
|
+
filtered = filtered.filter(t => t.enabled === criteria.enabled);
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
if (criteria.query) {
|
|
380
|
+
const lowerQuery = criteria.query.toLowerCase();
|
|
381
|
+
filtered = filtered.filter(t =>
|
|
382
|
+
t.name?.toLowerCase().includes(lowerQuery) ||
|
|
383
|
+
t.description?.toLowerCase().includes(lowerQuery)
|
|
384
|
+
);
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
return filtered;
|
|
388
|
+
}, [tools]);
|
|
389
|
+
|
|
390
|
+
/**
|
|
391
|
+
* Clear tool result
|
|
392
|
+
*/
|
|
393
|
+
const clearToolResult = useCallback((executionId) => {
|
|
394
|
+
setToolResults(prev => {
|
|
395
|
+
const next = new Map(prev);
|
|
396
|
+
next.delete(executionId);
|
|
397
|
+
return next;
|
|
398
|
+
});
|
|
399
|
+
}, []);
|
|
400
|
+
|
|
401
|
+
/**
|
|
402
|
+
* Clear all tool results
|
|
403
|
+
*/
|
|
404
|
+
const clearAllToolResults = useCallback(() => {
|
|
405
|
+
setToolResults(new Map());
|
|
406
|
+
}, []);
|
|
407
|
+
|
|
408
|
+
/**
|
|
409
|
+
* Clear error
|
|
410
|
+
*/
|
|
411
|
+
const clearError = useCallback(() => {
|
|
412
|
+
setError(null);
|
|
413
|
+
}, []);
|
|
414
|
+
|
|
415
|
+
/**
|
|
416
|
+
* Refresh tool list
|
|
417
|
+
*/
|
|
418
|
+
const refresh = useCallback(async () => {
|
|
419
|
+
return fetchTools({ forceRefresh: true });
|
|
420
|
+
}, [fetchTools]);
|
|
421
|
+
|
|
422
|
+
// Set up WebSocket listeners for tool events
|
|
423
|
+
useEffect(() => {
|
|
424
|
+
if (!messageRouter) return;
|
|
425
|
+
|
|
426
|
+
// Tool execution started
|
|
427
|
+
const handleToolExecutionStarted = (data) => {
|
|
428
|
+
if (data.agentId === currentAgentId && data.toolName) {
|
|
429
|
+
setExecutingTools(prev => new Set(prev).add(data.toolName));
|
|
430
|
+
}
|
|
431
|
+
};
|
|
432
|
+
|
|
433
|
+
// Tool execution completed
|
|
434
|
+
const handleToolExecutionCompleted = (data) => {
|
|
435
|
+
if (data.agentId === currentAgentId && data.toolName) {
|
|
436
|
+
setExecutingTools(prev => {
|
|
437
|
+
const next = new Set(prev);
|
|
438
|
+
next.delete(data.toolName);
|
|
439
|
+
return next;
|
|
440
|
+
});
|
|
441
|
+
|
|
442
|
+
if (data.executionId && data.result) {
|
|
443
|
+
setToolResults(prev => new Map(prev).set(data.executionId, data.result));
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
};
|
|
447
|
+
|
|
448
|
+
// Tool enabled/disabled
|
|
449
|
+
const handleToolStateChanged = (data) => {
|
|
450
|
+
if (data.agentId === currentAgentId) {
|
|
451
|
+
// Refresh tool list to get updated enabled state
|
|
452
|
+
refresh();
|
|
453
|
+
}
|
|
454
|
+
};
|
|
455
|
+
|
|
456
|
+
messageRouter.on('tool:execution_started', handleToolExecutionStarted);
|
|
457
|
+
messageRouter.on('tool:execution_completed', handleToolExecutionCompleted);
|
|
458
|
+
messageRouter.on('tool:state_changed', handleToolStateChanged);
|
|
459
|
+
|
|
460
|
+
return () => {
|
|
461
|
+
messageRouter.off('tool:execution_started', handleToolExecutionStarted);
|
|
462
|
+
messageRouter.off('tool:execution_completed', handleToolExecutionCompleted);
|
|
463
|
+
messageRouter.off('tool:state_changed', handleToolStateChanged);
|
|
464
|
+
};
|
|
465
|
+
}, [messageRouter, currentAgentId, refresh]);
|
|
466
|
+
|
|
467
|
+
// Auto-fetch tools on mount
|
|
468
|
+
useEffect(() => {
|
|
469
|
+
if (sessionManager?.isValid() && tools.length === 0) {
|
|
470
|
+
fetchTools();
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
}, [sessionManager?.isValid, tools.length]);
|
|
474
|
+
|
|
475
|
+
// Return hook interface
|
|
476
|
+
return useMemo(() => ({
|
|
477
|
+
// State
|
|
478
|
+
tools,
|
|
479
|
+
loading,
|
|
480
|
+
error,
|
|
481
|
+
|
|
482
|
+
// Execution state
|
|
483
|
+
executingTools: Array.from(executingTools),
|
|
484
|
+
toolResults,
|
|
485
|
+
|
|
486
|
+
// Operations
|
|
487
|
+
fetchTools,
|
|
488
|
+
executeTool,
|
|
489
|
+
refresh,
|
|
490
|
+
|
|
491
|
+
// Tool queries
|
|
492
|
+
getToolByName,
|
|
493
|
+
getToolsByCategory,
|
|
494
|
+
getSystemTools,
|
|
495
|
+
getAutomationTools,
|
|
496
|
+
getAnalysisTools,
|
|
497
|
+
getUtilityTools,
|
|
498
|
+
getCollaborationTools,
|
|
499
|
+
getAITools,
|
|
500
|
+
isToolAvailable,
|
|
501
|
+
searchTools,
|
|
502
|
+
filterTools,
|
|
503
|
+
getCategoryCounts,
|
|
504
|
+
|
|
505
|
+
// Execution queries
|
|
506
|
+
isToolExecuting,
|
|
507
|
+
getToolResult,
|
|
508
|
+
clearToolResult,
|
|
509
|
+
clearAllToolResults,
|
|
510
|
+
|
|
511
|
+
// Capabilities
|
|
512
|
+
getToolCapabilities,
|
|
513
|
+
|
|
514
|
+
// Tool management
|
|
515
|
+
enableTool,
|
|
516
|
+
disableTool,
|
|
517
|
+
getEnabledTools,
|
|
518
|
+
|
|
519
|
+
// Utilities
|
|
520
|
+
clearError,
|
|
521
|
+
}), [
|
|
522
|
+
tools,
|
|
523
|
+
loading,
|
|
524
|
+
error,
|
|
525
|
+
executingTools,
|
|
526
|
+
toolResults,
|
|
527
|
+
fetchTools,
|
|
528
|
+
executeTool,
|
|
529
|
+
refresh,
|
|
530
|
+
getToolByName,
|
|
531
|
+
getToolsByCategory,
|
|
532
|
+
getSystemTools,
|
|
533
|
+
getAutomationTools,
|
|
534
|
+
getAnalysisTools,
|
|
535
|
+
getUtilityTools,
|
|
536
|
+
getCollaborationTools,
|
|
537
|
+
getAITools,
|
|
538
|
+
isToolAvailable,
|
|
539
|
+
searchTools,
|
|
540
|
+
filterTools,
|
|
541
|
+
getCategoryCounts,
|
|
542
|
+
isToolExecuting,
|
|
543
|
+
getToolResult,
|
|
544
|
+
clearToolResult,
|
|
545
|
+
clearAllToolResults,
|
|
546
|
+
getToolCapabilities,
|
|
547
|
+
enableTool,
|
|
548
|
+
disableTool,
|
|
549
|
+
getEnabledTools,
|
|
550
|
+
clearError,
|
|
551
|
+
]);
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
export default useTools;
|