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,537 +1,537 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Agent State Management Hook
|
|
3
|
-
* React hook for managing agents - listing, creation, deletion, switching, and mode control
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { useState, useEffect, useCallback, useRef, useMemo } from 'react';
|
|
7
|
-
import { API_ENDPOINTS, AGENT_MODE, AGENT_STATUS } from '../config/constants.js';
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Agent state management hook
|
|
11
|
-
* Manages agent list, current agent, and agent operations
|
|
12
|
-
*/
|
|
13
|
-
export function useAgents(sessionManager, messageRouter) {
|
|
14
|
-
// Agent state
|
|
15
|
-
const [agents, setAgents] = useState([]);
|
|
16
|
-
const [currentAgentId, setCurrentAgentId] = useState(null);
|
|
17
|
-
const [loading, setLoading] = useState(false);
|
|
18
|
-
const [error, setError] = useState(null);
|
|
19
|
-
|
|
20
|
-
// Cache for agent metadata
|
|
21
|
-
const metadataCache = useRef(new Map());
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Get current agent object
|
|
25
|
-
*/
|
|
26
|
-
const currentAgent = agents.find(agent => agent.agentId === currentAgentId) || null;
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Fetch available agents from server
|
|
30
|
-
*/
|
|
31
|
-
const fetchAgents = useCallback(async () => {
|
|
32
|
-
if (!sessionManager?.isValid()) {
|
|
33
|
-
setError('Invalid session');
|
|
34
|
-
return;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
setLoading(true);
|
|
38
|
-
setError(null);
|
|
39
|
-
|
|
40
|
-
try {
|
|
41
|
-
const response = await sessionManager.makeRequest('GET', API_ENDPOINTS.AGENTS_AVAILABLE);
|
|
42
|
-
|
|
43
|
-
if (response.success && response.agents) {
|
|
44
|
-
setAgents(response.agents);
|
|
45
|
-
|
|
46
|
-
// If no current agent and agents exist, select first LOADED agent
|
|
47
|
-
// (archived agents need to be imported first)
|
|
48
|
-
if (!currentAgentId && response.agents.length > 0) {
|
|
49
|
-
const loadedAgent = response.agents.find(a => a.isLoaded);
|
|
50
|
-
if (loadedAgent) {
|
|
51
|
-
setCurrentAgentId(loadedAgent.agentId);
|
|
52
|
-
}
|
|
53
|
-
// If no loaded agents, don't auto-select - user needs to create or import one
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
return { success: true, agents: response.agents };
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
throw new Error(response.error || 'Failed to fetch agents');
|
|
60
|
-
} catch (err) {
|
|
61
|
-
setError(err.message);
|
|
62
|
-
return { success: false, error: err.message };
|
|
63
|
-
} finally {
|
|
64
|
-
setLoading(false);
|
|
65
|
-
}
|
|
66
|
-
}, [sessionManager, currentAgentId]);
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Get agent metadata by ID
|
|
70
|
-
*/
|
|
71
|
-
const getAgentMetadata = useCallback(async (agentId) => {
|
|
72
|
-
if (!sessionManager?.isValid()) {
|
|
73
|
-
throw new Error('Invalid session');
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
// Check cache first
|
|
77
|
-
if (metadataCache.current.has(agentId)) {
|
|
78
|
-
return metadataCache.current.get(agentId);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
try {
|
|
82
|
-
const endpoint = API_ENDPOINTS.AGENTS_METADATA.replace(':agentId', agentId);
|
|
83
|
-
const response = await sessionManager.makeRequest('GET', endpoint);
|
|
84
|
-
|
|
85
|
-
if (response.success && response.metadata) {
|
|
86
|
-
// Cache metadata
|
|
87
|
-
metadataCache.current.set(agentId, response.metadata);
|
|
88
|
-
return response.metadata;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
throw new Error(response.error || 'Failed to get agent metadata');
|
|
92
|
-
} catch (err) {
|
|
93
|
-
throw new Error(`Failed to get metadata for agent ${agentId}: ${err.message}
|
|
94
|
-
}
|
|
95
|
-
}, [sessionManager]);
|
|
96
|
-
|
|
97
|
-
/**
|
|
98
|
-
* Create a new agent via orchestrator
|
|
99
|
-
*/
|
|
100
|
-
const createAgent = useCallback(async (agentConfig) => {
|
|
101
|
-
if (!sessionManager?.isValid()) {
|
|
102
|
-
throw new Error('Invalid session');
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
setLoading(true);
|
|
106
|
-
setError(null);
|
|
107
|
-
|
|
108
|
-
try {
|
|
109
|
-
// Send create agent request via orchestrator
|
|
110
|
-
const response = await sessionManager.makeRequest('POST', API_ENDPOINTS.ORCHESTRATOR, {
|
|
111
|
-
action: 'create_agent',
|
|
112
|
-
payload: agentConfig,
|
|
113
|
-
sessionId: sessionManager.getSessionId(),
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
console.log('[DEBUG useAgents.createAgent] Backend response:', JSON.stringify(response, null, 2));
|
|
117
|
-
console.log('[DEBUG useAgents.createAgent] response.success:', response.success);
|
|
118
|
-
console.log('[DEBUG useAgents.createAgent] response.data:', response.data);
|
|
119
|
-
console.log('[DEBUG useAgents.createAgent] response.error:', response.error);
|
|
120
|
-
|
|
121
|
-
// Backend returns agent in "data" field, not "agent" field
|
|
122
|
-
const agent = response.data || response.agent;
|
|
123
|
-
|
|
124
|
-
if (response.success && agent) {
|
|
125
|
-
// Add new agent to list
|
|
126
|
-
setAgents(prev => [...prev, agent]);
|
|
127
|
-
|
|
128
|
-
// Optionally switch to new agent
|
|
129
|
-
if (agentConfig.switchTo !== false) {
|
|
130
|
-
setCurrentAgentId(agent.agentId);
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
return { success: true, agent: agent };
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
throw new Error(response.error || 'Failed to create agent');
|
|
137
|
-
} catch (err) {
|
|
138
|
-
setError(err.message);
|
|
139
|
-
throw err;
|
|
140
|
-
} finally {
|
|
141
|
-
setLoading(false);
|
|
142
|
-
}
|
|
143
|
-
}, [sessionManager]);
|
|
144
|
-
|
|
145
|
-
/**
|
|
146
|
-
* Delete an agent
|
|
147
|
-
*/
|
|
148
|
-
const deleteAgent = useCallback(async (agentId) => {
|
|
149
|
-
if (!sessionManager?.isValid()) {
|
|
150
|
-
throw new Error('Invalid session');
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
setLoading(true);
|
|
154
|
-
setError(null);
|
|
155
|
-
|
|
156
|
-
try {
|
|
157
|
-
const response = await sessionManager.makeRequest('POST', API_ENDPOINTS.ORCHESTRATOR, {
|
|
158
|
-
action: 'delete_agent',
|
|
159
|
-
payload: { agentId },
|
|
160
|
-
sessionId: sessionManager.getSessionId(),
|
|
161
|
-
});
|
|
162
|
-
|
|
163
|
-
if (response.success) {
|
|
164
|
-
// Remove agent from list
|
|
165
|
-
setAgents(prev => prev.filter(agent => agent.agentId !== agentId));
|
|
166
|
-
|
|
167
|
-
// If deleted agent was current, switch to another
|
|
168
|
-
if (currentAgentId === agentId) {
|
|
169
|
-
const remainingAgents = agents.filter(agent => agent.agentId !== agentId);
|
|
170
|
-
setCurrentAgentId(remainingAgents.length > 0 ? remainingAgents[0].agentId : null);
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
// Clear metadata cache
|
|
174
|
-
metadataCache.current.delete(agentId);
|
|
175
|
-
|
|
176
|
-
return { success: true };
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
throw new Error(response.error || 'Failed to delete agent');
|
|
180
|
-
} catch (err) {
|
|
181
|
-
setError(err.message);
|
|
182
|
-
throw err;
|
|
183
|
-
} finally {
|
|
184
|
-
setLoading(false);
|
|
185
|
-
}
|
|
186
|
-
}, [sessionManager, currentAgentId, agents]);
|
|
187
|
-
|
|
188
|
-
/**
|
|
189
|
-
* Switch to a different agent
|
|
190
|
-
* Auto-imports archived agents if needed
|
|
191
|
-
*/
|
|
192
|
-
const switchAgent = useCallback(async (agentId) => {
|
|
193
|
-
const agent = agents.find(a => a.agentId === agentId);
|
|
194
|
-
if (!agent) {
|
|
195
|
-
setError(`Agent ${agentId} not found`);
|
|
196
|
-
return { success: false, error: 'Agent not found' };
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
// If agent is not loaded (archived), import it first
|
|
200
|
-
if (!agent.isLoaded && agent.canImport) {
|
|
201
|
-
try {
|
|
202
|
-
setLoading(true);
|
|
203
|
-
const response = await sessionManager.makeRequest('POST', API_ENDPOINTS.AGENTS_IMPORT, { agentId });
|
|
204
|
-
|
|
205
|
-
if (response.success && response.agent) {
|
|
206
|
-
// Update the agent in our list to mark as loaded
|
|
207
|
-
setAgents(prev => prev.map(a =>
|
|
208
|
-
a.agentId === agentId ? { ...a, ...response.agent, isLoaded: true, canImport: false } : a
|
|
209
|
-
));
|
|
210
|
-
} else {
|
|
211
|
-
setError(response.error || 'Failed to import agent');
|
|
212
|
-
return { success: false, error: response.error || 'Failed to import agent' };
|
|
213
|
-
}
|
|
214
|
-
} catch (err) {
|
|
215
|
-
setError(`Failed to import agent: ${err.message}`);
|
|
216
|
-
return { success: false, error: err.message };
|
|
217
|
-
} finally {
|
|
218
|
-
setLoading(false);
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
setCurrentAgentId(agentId);
|
|
223
|
-
setError(null);
|
|
224
|
-
|
|
225
|
-
return { success: true, agent };
|
|
226
|
-
}, [agents, sessionManager]);
|
|
227
|
-
|
|
228
|
-
/**
|
|
229
|
-
* Get agent mode (CHAT or AGENT)
|
|
230
|
-
*/
|
|
231
|
-
const getAgentMode = useCallback(async (agentId) => {
|
|
232
|
-
if (!sessionManager?.isValid()) {
|
|
233
|
-
throw new Error('Invalid session');
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
try {
|
|
237
|
-
const endpoint = API_ENDPOINTS.AGENTS_MODE_GET.replace(':agentId', agentId);
|
|
238
|
-
const response = await sessionManager.makeRequest('GET', endpoint);
|
|
239
|
-
|
|
240
|
-
if (response.success) {
|
|
241
|
-
return { success: true, mode: response.mode };
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
throw new Error(response.error || 'Failed to get agent mode');
|
|
245
|
-
} catch (err) {
|
|
246
|
-
throw new Error(`Failed to get mode for agent ${agentId}: ${err.message}
|
|
247
|
-
}
|
|
248
|
-
}, [sessionManager]);
|
|
249
|
-
|
|
250
|
-
/**
|
|
251
|
-
* Set agent mode (CHAT or AGENT)
|
|
252
|
-
*/
|
|
253
|
-
const setAgentMode = useCallback(async (agentId, mode) => {
|
|
254
|
-
if (!sessionManager?.isValid()) {
|
|
255
|
-
throw new Error('Invalid session');
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
// Validate mode
|
|
259
|
-
if (mode !== AGENT_MODE.CHAT && mode !== AGENT_MODE.AGENT) {
|
|
260
|
-
throw new Error(`Invalid mode: ${mode}. Must be CHAT or AGENT`);
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
setLoading(true);
|
|
264
|
-
setError(null);
|
|
265
|
-
|
|
266
|
-
try {
|
|
267
|
-
const endpoint = API_ENDPOINTS.AGENTS_MODE_SET.replace(':agentId', agentId);
|
|
268
|
-
const response = await sessionManager.makeRequest('POST', endpoint, { mode });
|
|
269
|
-
|
|
270
|
-
if (response.success) {
|
|
271
|
-
// Update agent in list
|
|
272
|
-
setAgents(prev => prev.map(agent =>
|
|
273
|
-
agent.agentId === agentId ? { ...agent, mode } : agent
|
|
274
|
-
));
|
|
275
|
-
|
|
276
|
-
return { success: true, mode: response.mode };
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
throw new Error(response.error || 'Failed to set agent mode');
|
|
280
|
-
} catch (err) {
|
|
281
|
-
setError(err.message);
|
|
282
|
-
throw err;
|
|
283
|
-
} finally {
|
|
284
|
-
setLoading(false);
|
|
285
|
-
}
|
|
286
|
-
}, [sessionManager]);
|
|
287
|
-
|
|
288
|
-
/**
|
|
289
|
-
* Stop agent execution
|
|
290
|
-
*/
|
|
291
|
-
const stopAgent = useCallback(async (agentId) => {
|
|
292
|
-
if (!sessionManager?.isValid()) {
|
|
293
|
-
throw new Error('Invalid session');
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
setLoading(true);
|
|
297
|
-
setError(null);
|
|
298
|
-
|
|
299
|
-
try {
|
|
300
|
-
const endpoint = API_ENDPOINTS.AGENTS_STOP.replace(':agentId', agentId);
|
|
301
|
-
const response = await sessionManager.makeRequest('POST', endpoint);
|
|
302
|
-
|
|
303
|
-
if (response.success) {
|
|
304
|
-
return { success: true };
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
throw new Error(response.error || 'Failed to stop agent');
|
|
308
|
-
} catch (err) {
|
|
309
|
-
setError(err.message);
|
|
310
|
-
throw err;
|
|
311
|
-
} finally {
|
|
312
|
-
setLoading(false);
|
|
313
|
-
}
|
|
314
|
-
}, [sessionManager]);
|
|
315
|
-
|
|
316
|
-
/**
|
|
317
|
-
* Import an agent
|
|
318
|
-
*/
|
|
319
|
-
const importAgent = useCallback(async (importData) => {
|
|
320
|
-
if (!sessionManager?.isValid()) {
|
|
321
|
-
throw new Error('Invalid session');
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
setLoading(true);
|
|
325
|
-
setError(null);
|
|
326
|
-
|
|
327
|
-
try {
|
|
328
|
-
const response = await sessionManager.makeRequest('POST', API_ENDPOINTS.AGENTS_IMPORT, importData);
|
|
329
|
-
|
|
330
|
-
if (response.success && response.agent) {
|
|
331
|
-
// Add imported agent to list
|
|
332
|
-
setAgents(prev => [...prev, response.agent]);
|
|
333
|
-
|
|
334
|
-
return { success: true, agent: response.agent };
|
|
335
|
-
}
|
|
336
|
-
|
|
337
|
-
throw new Error(response.error || 'Failed to import agent');
|
|
338
|
-
} catch (err) {
|
|
339
|
-
setError(err.message);
|
|
340
|
-
throw err;
|
|
341
|
-
} finally {
|
|
342
|
-
setLoading(false);
|
|
343
|
-
}
|
|
344
|
-
}, [sessionManager]);
|
|
345
|
-
|
|
346
|
-
/**
|
|
347
|
-
* Update agent configuration via orchestrator
|
|
348
|
-
*/
|
|
349
|
-
const updateAgentConfig = useCallback(async (agentId, updates) => {
|
|
350
|
-
if (!sessionManager?.isValid()) {
|
|
351
|
-
throw new Error('Invalid session');
|
|
352
|
-
}
|
|
353
|
-
|
|
354
|
-
setLoading(true);
|
|
355
|
-
setError(null);
|
|
356
|
-
|
|
357
|
-
try {
|
|
358
|
-
// Send update agent request via orchestrator
|
|
359
|
-
const response = await sessionManager.makeRequest('POST', API_ENDPOINTS.ORCHESTRATOR, {
|
|
360
|
-
action: 'update_agent',
|
|
361
|
-
payload: { agentId, updates },
|
|
362
|
-
sessionId: sessionManager.getSessionId(),
|
|
363
|
-
});
|
|
364
|
-
|
|
365
|
-
if (response.success && response.data) {
|
|
366
|
-
// Update agent in local list
|
|
367
|
-
setAgents(prev => prev.map(agent =>
|
|
368
|
-
agent.agentId === agentId ? { ...agent, ...updates } : agent
|
|
369
|
-
));
|
|
370
|
-
|
|
371
|
-
// Clear metadata cache for this agent
|
|
372
|
-
metadataCache.current.delete(agentId);
|
|
373
|
-
|
|
374
|
-
return { success: true, agent: response.data };
|
|
375
|
-
}
|
|
376
|
-
|
|
377
|
-
throw new Error(response.error || 'Failed to update agent');
|
|
378
|
-
} catch (err) {
|
|
379
|
-
setError(err.message);
|
|
380
|
-
throw err;
|
|
381
|
-
} finally {
|
|
382
|
-
setLoading(false);
|
|
383
|
-
}
|
|
384
|
-
}, [sessionManager]);
|
|
385
|
-
|
|
386
|
-
/**
|
|
387
|
-
* Update agent in list (from WebSocket events)
|
|
388
|
-
*/
|
|
389
|
-
const updateAgent = useCallback((agentId, updates) => {
|
|
390
|
-
setAgents(prev => prev.map(agent =>
|
|
391
|
-
agent.agentId === agentId ? { ...agent, ...updates } : agent
|
|
392
|
-
));
|
|
393
|
-
}, []);
|
|
394
|
-
|
|
395
|
-
/**
|
|
396
|
-
* Get agent by ID
|
|
397
|
-
*/
|
|
398
|
-
const getAgent = useCallback((agentId) => {
|
|
399
|
-
return agents.find(agent => agent.agentId === agentId) || null;
|
|
400
|
-
}, [agents]);
|
|
401
|
-
|
|
402
|
-
/**
|
|
403
|
-
* Get agents by status
|
|
404
|
-
*/
|
|
405
|
-
const getAgentsByStatus = useCallback((status) => {
|
|
406
|
-
return agents.filter(agent => agent.status === status);
|
|
407
|
-
}, [agents]);
|
|
408
|
-
|
|
409
|
-
/**
|
|
410
|
-
* Get active agents
|
|
411
|
-
*/
|
|
412
|
-
const getActiveAgents = useCallback(() => {
|
|
413
|
-
return getAgentsByStatus(AGENT_STATUS.ACTIVE);
|
|
414
|
-
}, [getAgentsByStatus]);
|
|
415
|
-
|
|
416
|
-
/**
|
|
417
|
-
* Clear error
|
|
418
|
-
*/
|
|
419
|
-
const clearError = useCallback(() => {
|
|
420
|
-
setError(null);
|
|
421
|
-
}, []);
|
|
422
|
-
|
|
423
|
-
/**
|
|
424
|
-
* Refresh agent list
|
|
425
|
-
*/
|
|
426
|
-
const refresh = useCallback(async () => {
|
|
427
|
-
return fetchAgents();
|
|
428
|
-
}, [fetchAgents]);
|
|
429
|
-
|
|
430
|
-
// Set up WebSocket message listeners for agent events
|
|
431
|
-
useEffect(() => {
|
|
432
|
-
if (!messageRouter) return;
|
|
433
|
-
|
|
434
|
-
// Agent mode changed
|
|
435
|
-
const handleModeChanged = (message) => {
|
|
436
|
-
if (message.agentId && message.mode) {
|
|
437
|
-
updateAgent(message.agentId, { mode: message.mode });
|
|
438
|
-
}
|
|
439
|
-
};
|
|
440
|
-
|
|
441
|
-
// Agent imported
|
|
442
|
-
const handleAgentImported = (agent) => {
|
|
443
|
-
setAgents(prev => {
|
|
444
|
-
// Check if already exists
|
|
445
|
-
if (prev.find(a => a.agentId === agent.agentId)) {
|
|
446
|
-
return prev;
|
|
447
|
-
}
|
|
448
|
-
return [...prev, agent];
|
|
449
|
-
});
|
|
450
|
-
};
|
|
451
|
-
|
|
452
|
-
// Agent error
|
|
453
|
-
const handleAgentError = (message) => {
|
|
454
|
-
if (message.agentId) {
|
|
455
|
-
updateAgent(message.agentId, { status: AGENT_STATUS.ERROR, error: message.error });
|
|
456
|
-
}
|
|
457
|
-
};
|
|
458
|
-
|
|
459
|
-
messageRouter.on('agent:mode_changed', handleModeChanged);
|
|
460
|
-
messageRouter.on('agent:imported', handleAgentImported);
|
|
461
|
-
messageRouter.on('agent:error', handleAgentError);
|
|
462
|
-
|
|
463
|
-
return () => {
|
|
464
|
-
messageRouter.off('agent:mode_changed', handleModeChanged);
|
|
465
|
-
messageRouter.off('agent:imported', handleAgentImported);
|
|
466
|
-
messageRouter.off('agent:error', handleAgentError);
|
|
467
|
-
};
|
|
468
|
-
}, [messageRouter, updateAgent]);
|
|
469
|
-
|
|
470
|
-
// Auto-fetch agents on mount
|
|
471
|
-
useEffect(() => {
|
|
472
|
-
if (sessionManager?.isValid()) {
|
|
473
|
-
fetchAgents();
|
|
474
|
-
}
|
|
475
|
-
|
|
476
|
-
}, [sessionManager?.isValid]);
|
|
477
|
-
|
|
478
|
-
// Return hook interface
|
|
479
|
-
return useMemo(() => ({
|
|
480
|
-
// State
|
|
481
|
-
agents,
|
|
482
|
-
currentAgent,
|
|
483
|
-
currentAgentId,
|
|
484
|
-
loading,
|
|
485
|
-
error,
|
|
486
|
-
|
|
487
|
-
// Operations
|
|
488
|
-
fetchAgents,
|
|
489
|
-
createAgent,
|
|
490
|
-
deleteAgent,
|
|
491
|
-
switchAgent,
|
|
492
|
-
importAgent,
|
|
493
|
-
stopAgent,
|
|
494
|
-
updateAgentConfig,
|
|
495
|
-
|
|
496
|
-
// Mode control
|
|
497
|
-
getAgentMode,
|
|
498
|
-
setAgentMode,
|
|
499
|
-
|
|
500
|
-
// Metadata
|
|
501
|
-
getAgentMetadata,
|
|
502
|
-
|
|
503
|
-
// Helpers
|
|
504
|
-
getAgent,
|
|
505
|
-
getAgentsByStatus,
|
|
506
|
-
getActiveAgents,
|
|
507
|
-
updateAgent,
|
|
508
|
-
|
|
509
|
-
// Utilities
|
|
510
|
-
clearError,
|
|
511
|
-
refresh,
|
|
512
|
-
}), [
|
|
513
|
-
agents,
|
|
514
|
-
currentAgent,
|
|
515
|
-
currentAgentId,
|
|
516
|
-
loading,
|
|
517
|
-
error,
|
|
518
|
-
fetchAgents,
|
|
519
|
-
createAgent,
|
|
520
|
-
deleteAgent,
|
|
521
|
-
switchAgent,
|
|
522
|
-
importAgent,
|
|
523
|
-
stopAgent,
|
|
524
|
-
updateAgentConfig,
|
|
525
|
-
getAgentMode,
|
|
526
|
-
setAgentMode,
|
|
527
|
-
getAgentMetadata,
|
|
528
|
-
getAgent,
|
|
529
|
-
getAgentsByStatus,
|
|
530
|
-
getActiveAgents,
|
|
531
|
-
updateAgent,
|
|
532
|
-
clearError,
|
|
533
|
-
refresh,
|
|
534
|
-
]);
|
|
535
|
-
}
|
|
536
|
-
|
|
537
|
-
export default useAgents;
|
|
1
|
+
/**
|
|
2
|
+
* Agent State Management Hook
|
|
3
|
+
* React hook for managing agents - listing, creation, deletion, switching, and mode control
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { useState, useEffect, useCallback, useRef, useMemo } from 'react';
|
|
7
|
+
import { API_ENDPOINTS, AGENT_MODE, AGENT_STATUS } from '../config/constants.js';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Agent state management hook
|
|
11
|
+
* Manages agent list, current agent, and agent operations
|
|
12
|
+
*/
|
|
13
|
+
export function useAgents(sessionManager, messageRouter) {
|
|
14
|
+
// Agent state
|
|
15
|
+
const [agents, setAgents] = useState([]);
|
|
16
|
+
const [currentAgentId, setCurrentAgentId] = useState(null);
|
|
17
|
+
const [loading, setLoading] = useState(false);
|
|
18
|
+
const [error, setError] = useState(null);
|
|
19
|
+
|
|
20
|
+
// Cache for agent metadata
|
|
21
|
+
const metadataCache = useRef(new Map());
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Get current agent object
|
|
25
|
+
*/
|
|
26
|
+
const currentAgent = agents.find(agent => agent.agentId === currentAgentId) || null;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Fetch available agents from server
|
|
30
|
+
*/
|
|
31
|
+
const fetchAgents = useCallback(async () => {
|
|
32
|
+
if (!sessionManager?.isValid()) {
|
|
33
|
+
setError('Invalid session');
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
setLoading(true);
|
|
38
|
+
setError(null);
|
|
39
|
+
|
|
40
|
+
try {
|
|
41
|
+
const response = await sessionManager.makeRequest('GET', API_ENDPOINTS.AGENTS_AVAILABLE);
|
|
42
|
+
|
|
43
|
+
if (response.success && response.agents) {
|
|
44
|
+
setAgents(response.agents);
|
|
45
|
+
|
|
46
|
+
// If no current agent and agents exist, select first LOADED agent
|
|
47
|
+
// (archived agents need to be imported first)
|
|
48
|
+
if (!currentAgentId && response.agents.length > 0) {
|
|
49
|
+
const loadedAgent = response.agents.find(a => a.isLoaded);
|
|
50
|
+
if (loadedAgent) {
|
|
51
|
+
setCurrentAgentId(loadedAgent.agentId);
|
|
52
|
+
}
|
|
53
|
+
// If no loaded agents, don't auto-select - user needs to create or import one
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
return { success: true, agents: response.agents };
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
throw new Error(response.error || 'Failed to fetch agents');
|
|
60
|
+
} catch (err) {
|
|
61
|
+
setError(err.message);
|
|
62
|
+
return { success: false, error: err.message };
|
|
63
|
+
} finally {
|
|
64
|
+
setLoading(false);
|
|
65
|
+
}
|
|
66
|
+
}, [sessionManager, currentAgentId]);
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Get agent metadata by ID
|
|
70
|
+
*/
|
|
71
|
+
const getAgentMetadata = useCallback(async (agentId) => {
|
|
72
|
+
if (!sessionManager?.isValid()) {
|
|
73
|
+
throw new Error('Invalid session');
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Check cache first
|
|
77
|
+
if (metadataCache.current.has(agentId)) {
|
|
78
|
+
return metadataCache.current.get(agentId);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
try {
|
|
82
|
+
const endpoint = API_ENDPOINTS.AGENTS_METADATA.replace(':agentId', agentId);
|
|
83
|
+
const response = await sessionManager.makeRequest('GET', endpoint);
|
|
84
|
+
|
|
85
|
+
if (response.success && response.metadata) {
|
|
86
|
+
// Cache metadata
|
|
87
|
+
metadataCache.current.set(agentId, response.metadata);
|
|
88
|
+
return response.metadata;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
throw new Error(response.error || 'Failed to get agent metadata');
|
|
92
|
+
} catch (err) {
|
|
93
|
+
throw new Error(`Failed to get metadata for agent ${agentId}: ${err.message}`, { cause: err });
|
|
94
|
+
}
|
|
95
|
+
}, [sessionManager]);
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Create a new agent via orchestrator
|
|
99
|
+
*/
|
|
100
|
+
const createAgent = useCallback(async (agentConfig) => {
|
|
101
|
+
if (!sessionManager?.isValid()) {
|
|
102
|
+
throw new Error('Invalid session');
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
setLoading(true);
|
|
106
|
+
setError(null);
|
|
107
|
+
|
|
108
|
+
try {
|
|
109
|
+
// Send create agent request via orchestrator
|
|
110
|
+
const response = await sessionManager.makeRequest('POST', API_ENDPOINTS.ORCHESTRATOR, {
|
|
111
|
+
action: 'create_agent',
|
|
112
|
+
payload: agentConfig,
|
|
113
|
+
sessionId: sessionManager.getSessionId(),
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
console.log('[DEBUG useAgents.createAgent] Backend response:', JSON.stringify(response, null, 2));
|
|
117
|
+
console.log('[DEBUG useAgents.createAgent] response.success:', response.success);
|
|
118
|
+
console.log('[DEBUG useAgents.createAgent] response.data:', response.data);
|
|
119
|
+
console.log('[DEBUG useAgents.createAgent] response.error:', response.error);
|
|
120
|
+
|
|
121
|
+
// Backend returns agent in "data" field, not "agent" field
|
|
122
|
+
const agent = response.data || response.agent;
|
|
123
|
+
|
|
124
|
+
if (response.success && agent) {
|
|
125
|
+
// Add new agent to list
|
|
126
|
+
setAgents(prev => [...prev, agent]);
|
|
127
|
+
|
|
128
|
+
// Optionally switch to new agent
|
|
129
|
+
if (agentConfig.switchTo !== false) {
|
|
130
|
+
setCurrentAgentId(agent.agentId);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
return { success: true, agent: agent };
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
throw new Error(response.error || 'Failed to create agent');
|
|
137
|
+
} catch (err) {
|
|
138
|
+
setError(err.message);
|
|
139
|
+
throw err;
|
|
140
|
+
} finally {
|
|
141
|
+
setLoading(false);
|
|
142
|
+
}
|
|
143
|
+
}, [sessionManager]);
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Delete an agent
|
|
147
|
+
*/
|
|
148
|
+
const deleteAgent = useCallback(async (agentId) => {
|
|
149
|
+
if (!sessionManager?.isValid()) {
|
|
150
|
+
throw new Error('Invalid session');
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
setLoading(true);
|
|
154
|
+
setError(null);
|
|
155
|
+
|
|
156
|
+
try {
|
|
157
|
+
const response = await sessionManager.makeRequest('POST', API_ENDPOINTS.ORCHESTRATOR, {
|
|
158
|
+
action: 'delete_agent',
|
|
159
|
+
payload: { agentId },
|
|
160
|
+
sessionId: sessionManager.getSessionId(),
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
if (response.success) {
|
|
164
|
+
// Remove agent from list
|
|
165
|
+
setAgents(prev => prev.filter(agent => agent.agentId !== agentId));
|
|
166
|
+
|
|
167
|
+
// If deleted agent was current, switch to another
|
|
168
|
+
if (currentAgentId === agentId) {
|
|
169
|
+
const remainingAgents = agents.filter(agent => agent.agentId !== agentId);
|
|
170
|
+
setCurrentAgentId(remainingAgents.length > 0 ? remainingAgents[0].agentId : null);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
// Clear metadata cache
|
|
174
|
+
metadataCache.current.delete(agentId);
|
|
175
|
+
|
|
176
|
+
return { success: true };
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
throw new Error(response.error || 'Failed to delete agent');
|
|
180
|
+
} catch (err) {
|
|
181
|
+
setError(err.message);
|
|
182
|
+
throw err;
|
|
183
|
+
} finally {
|
|
184
|
+
setLoading(false);
|
|
185
|
+
}
|
|
186
|
+
}, [sessionManager, currentAgentId, agents]);
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Switch to a different agent
|
|
190
|
+
* Auto-imports archived agents if needed
|
|
191
|
+
*/
|
|
192
|
+
const switchAgent = useCallback(async (agentId) => {
|
|
193
|
+
const agent = agents.find(a => a.agentId === agentId);
|
|
194
|
+
if (!agent) {
|
|
195
|
+
setError(`Agent ${agentId} not found`);
|
|
196
|
+
return { success: false, error: 'Agent not found' };
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
// If agent is not loaded (archived), import it first
|
|
200
|
+
if (!agent.isLoaded && agent.canImport) {
|
|
201
|
+
try {
|
|
202
|
+
setLoading(true);
|
|
203
|
+
const response = await sessionManager.makeRequest('POST', API_ENDPOINTS.AGENTS_IMPORT, { agentId });
|
|
204
|
+
|
|
205
|
+
if (response.success && response.agent) {
|
|
206
|
+
// Update the agent in our list to mark as loaded
|
|
207
|
+
setAgents(prev => prev.map(a =>
|
|
208
|
+
a.agentId === agentId ? { ...a, ...response.agent, isLoaded: true, canImport: false } : a
|
|
209
|
+
));
|
|
210
|
+
} else {
|
|
211
|
+
setError(response.error || 'Failed to import agent');
|
|
212
|
+
return { success: false, error: response.error || 'Failed to import agent' };
|
|
213
|
+
}
|
|
214
|
+
} catch (err) {
|
|
215
|
+
setError(`Failed to import agent: ${err.message}`);
|
|
216
|
+
return { success: false, error: err.message };
|
|
217
|
+
} finally {
|
|
218
|
+
setLoading(false);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
setCurrentAgentId(agentId);
|
|
223
|
+
setError(null);
|
|
224
|
+
|
|
225
|
+
return { success: true, agent };
|
|
226
|
+
}, [agents, sessionManager]);
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* Get agent mode (CHAT or AGENT)
|
|
230
|
+
*/
|
|
231
|
+
const getAgentMode = useCallback(async (agentId) => {
|
|
232
|
+
if (!sessionManager?.isValid()) {
|
|
233
|
+
throw new Error('Invalid session');
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
try {
|
|
237
|
+
const endpoint = API_ENDPOINTS.AGENTS_MODE_GET.replace(':agentId', agentId);
|
|
238
|
+
const response = await sessionManager.makeRequest('GET', endpoint);
|
|
239
|
+
|
|
240
|
+
if (response.success) {
|
|
241
|
+
return { success: true, mode: response.mode };
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
throw new Error(response.error || 'Failed to get agent mode');
|
|
245
|
+
} catch (err) {
|
|
246
|
+
throw new Error(`Failed to get mode for agent ${agentId}: ${err.message}`, { cause: err });
|
|
247
|
+
}
|
|
248
|
+
}, [sessionManager]);
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* Set agent mode (CHAT or AGENT)
|
|
252
|
+
*/
|
|
253
|
+
const setAgentMode = useCallback(async (agentId, mode) => {
|
|
254
|
+
if (!sessionManager?.isValid()) {
|
|
255
|
+
throw new Error('Invalid session');
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
// Validate mode
|
|
259
|
+
if (mode !== AGENT_MODE.CHAT && mode !== AGENT_MODE.AGENT) {
|
|
260
|
+
throw new Error(`Invalid mode: ${mode}. Must be CHAT or AGENT`);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
setLoading(true);
|
|
264
|
+
setError(null);
|
|
265
|
+
|
|
266
|
+
try {
|
|
267
|
+
const endpoint = API_ENDPOINTS.AGENTS_MODE_SET.replace(':agentId', agentId);
|
|
268
|
+
const response = await sessionManager.makeRequest('POST', endpoint, { mode });
|
|
269
|
+
|
|
270
|
+
if (response.success) {
|
|
271
|
+
// Update agent in list
|
|
272
|
+
setAgents(prev => prev.map(agent =>
|
|
273
|
+
agent.agentId === agentId ? { ...agent, mode } : agent
|
|
274
|
+
));
|
|
275
|
+
|
|
276
|
+
return { success: true, mode: response.mode };
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
throw new Error(response.error || 'Failed to set agent mode');
|
|
280
|
+
} catch (err) {
|
|
281
|
+
setError(err.message);
|
|
282
|
+
throw err;
|
|
283
|
+
} finally {
|
|
284
|
+
setLoading(false);
|
|
285
|
+
}
|
|
286
|
+
}, [sessionManager]);
|
|
287
|
+
|
|
288
|
+
/**
|
|
289
|
+
* Stop agent execution
|
|
290
|
+
*/
|
|
291
|
+
const stopAgent = useCallback(async (agentId) => {
|
|
292
|
+
if (!sessionManager?.isValid()) {
|
|
293
|
+
throw new Error('Invalid session');
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
setLoading(true);
|
|
297
|
+
setError(null);
|
|
298
|
+
|
|
299
|
+
try {
|
|
300
|
+
const endpoint = API_ENDPOINTS.AGENTS_STOP.replace(':agentId', agentId);
|
|
301
|
+
const response = await sessionManager.makeRequest('POST', endpoint);
|
|
302
|
+
|
|
303
|
+
if (response.success) {
|
|
304
|
+
return { success: true };
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
throw new Error(response.error || 'Failed to stop agent');
|
|
308
|
+
} catch (err) {
|
|
309
|
+
setError(err.message);
|
|
310
|
+
throw err;
|
|
311
|
+
} finally {
|
|
312
|
+
setLoading(false);
|
|
313
|
+
}
|
|
314
|
+
}, [sessionManager]);
|
|
315
|
+
|
|
316
|
+
/**
|
|
317
|
+
* Import an agent
|
|
318
|
+
*/
|
|
319
|
+
const importAgent = useCallback(async (importData) => {
|
|
320
|
+
if (!sessionManager?.isValid()) {
|
|
321
|
+
throw new Error('Invalid session');
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
setLoading(true);
|
|
325
|
+
setError(null);
|
|
326
|
+
|
|
327
|
+
try {
|
|
328
|
+
const response = await sessionManager.makeRequest('POST', API_ENDPOINTS.AGENTS_IMPORT, importData);
|
|
329
|
+
|
|
330
|
+
if (response.success && response.agent) {
|
|
331
|
+
// Add imported agent to list
|
|
332
|
+
setAgents(prev => [...prev, response.agent]);
|
|
333
|
+
|
|
334
|
+
return { success: true, agent: response.agent };
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
throw new Error(response.error || 'Failed to import agent');
|
|
338
|
+
} catch (err) {
|
|
339
|
+
setError(err.message);
|
|
340
|
+
throw err;
|
|
341
|
+
} finally {
|
|
342
|
+
setLoading(false);
|
|
343
|
+
}
|
|
344
|
+
}, [sessionManager]);
|
|
345
|
+
|
|
346
|
+
/**
|
|
347
|
+
* Update agent configuration via orchestrator
|
|
348
|
+
*/
|
|
349
|
+
const updateAgentConfig = useCallback(async (agentId, updates) => {
|
|
350
|
+
if (!sessionManager?.isValid()) {
|
|
351
|
+
throw new Error('Invalid session');
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
setLoading(true);
|
|
355
|
+
setError(null);
|
|
356
|
+
|
|
357
|
+
try {
|
|
358
|
+
// Send update agent request via orchestrator
|
|
359
|
+
const response = await sessionManager.makeRequest('POST', API_ENDPOINTS.ORCHESTRATOR, {
|
|
360
|
+
action: 'update_agent',
|
|
361
|
+
payload: { agentId, updates },
|
|
362
|
+
sessionId: sessionManager.getSessionId(),
|
|
363
|
+
});
|
|
364
|
+
|
|
365
|
+
if (response.success && response.data) {
|
|
366
|
+
// Update agent in local list
|
|
367
|
+
setAgents(prev => prev.map(agent =>
|
|
368
|
+
agent.agentId === agentId ? { ...agent, ...updates } : agent
|
|
369
|
+
));
|
|
370
|
+
|
|
371
|
+
// Clear metadata cache for this agent
|
|
372
|
+
metadataCache.current.delete(agentId);
|
|
373
|
+
|
|
374
|
+
return { success: true, agent: response.data };
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
throw new Error(response.error || 'Failed to update agent');
|
|
378
|
+
} catch (err) {
|
|
379
|
+
setError(err.message);
|
|
380
|
+
throw err;
|
|
381
|
+
} finally {
|
|
382
|
+
setLoading(false);
|
|
383
|
+
}
|
|
384
|
+
}, [sessionManager]);
|
|
385
|
+
|
|
386
|
+
/**
|
|
387
|
+
* Update agent in list (from WebSocket events)
|
|
388
|
+
*/
|
|
389
|
+
const updateAgent = useCallback((agentId, updates) => {
|
|
390
|
+
setAgents(prev => prev.map(agent =>
|
|
391
|
+
agent.agentId === agentId ? { ...agent, ...updates } : agent
|
|
392
|
+
));
|
|
393
|
+
}, []);
|
|
394
|
+
|
|
395
|
+
/**
|
|
396
|
+
* Get agent by ID
|
|
397
|
+
*/
|
|
398
|
+
const getAgent = useCallback((agentId) => {
|
|
399
|
+
return agents.find(agent => agent.agentId === agentId) || null;
|
|
400
|
+
}, [agents]);
|
|
401
|
+
|
|
402
|
+
/**
|
|
403
|
+
* Get agents by status
|
|
404
|
+
*/
|
|
405
|
+
const getAgentsByStatus = useCallback((status) => {
|
|
406
|
+
return agents.filter(agent => agent.status === status);
|
|
407
|
+
}, [agents]);
|
|
408
|
+
|
|
409
|
+
/**
|
|
410
|
+
* Get active agents
|
|
411
|
+
*/
|
|
412
|
+
const getActiveAgents = useCallback(() => {
|
|
413
|
+
return getAgentsByStatus(AGENT_STATUS.ACTIVE);
|
|
414
|
+
}, [getAgentsByStatus]);
|
|
415
|
+
|
|
416
|
+
/**
|
|
417
|
+
* Clear error
|
|
418
|
+
*/
|
|
419
|
+
const clearError = useCallback(() => {
|
|
420
|
+
setError(null);
|
|
421
|
+
}, []);
|
|
422
|
+
|
|
423
|
+
/**
|
|
424
|
+
* Refresh agent list
|
|
425
|
+
*/
|
|
426
|
+
const refresh = useCallback(async () => {
|
|
427
|
+
return fetchAgents();
|
|
428
|
+
}, [fetchAgents]);
|
|
429
|
+
|
|
430
|
+
// Set up WebSocket message listeners for agent events
|
|
431
|
+
useEffect(() => {
|
|
432
|
+
if (!messageRouter) return;
|
|
433
|
+
|
|
434
|
+
// Agent mode changed
|
|
435
|
+
const handleModeChanged = (message) => {
|
|
436
|
+
if (message.agentId && message.mode) {
|
|
437
|
+
updateAgent(message.agentId, { mode: message.mode });
|
|
438
|
+
}
|
|
439
|
+
};
|
|
440
|
+
|
|
441
|
+
// Agent imported
|
|
442
|
+
const handleAgentImported = (agent) => {
|
|
443
|
+
setAgents(prev => {
|
|
444
|
+
// Check if already exists
|
|
445
|
+
if (prev.find(a => a.agentId === agent.agentId)) {
|
|
446
|
+
return prev;
|
|
447
|
+
}
|
|
448
|
+
return [...prev, agent];
|
|
449
|
+
});
|
|
450
|
+
};
|
|
451
|
+
|
|
452
|
+
// Agent error
|
|
453
|
+
const handleAgentError = (message) => {
|
|
454
|
+
if (message.agentId) {
|
|
455
|
+
updateAgent(message.agentId, { status: AGENT_STATUS.ERROR, error: message.error });
|
|
456
|
+
}
|
|
457
|
+
};
|
|
458
|
+
|
|
459
|
+
messageRouter.on('agent:mode_changed', handleModeChanged);
|
|
460
|
+
messageRouter.on('agent:imported', handleAgentImported);
|
|
461
|
+
messageRouter.on('agent:error', handleAgentError);
|
|
462
|
+
|
|
463
|
+
return () => {
|
|
464
|
+
messageRouter.off('agent:mode_changed', handleModeChanged);
|
|
465
|
+
messageRouter.off('agent:imported', handleAgentImported);
|
|
466
|
+
messageRouter.off('agent:error', handleAgentError);
|
|
467
|
+
};
|
|
468
|
+
}, [messageRouter, updateAgent]);
|
|
469
|
+
|
|
470
|
+
// Auto-fetch agents on mount
|
|
471
|
+
useEffect(() => {
|
|
472
|
+
if (sessionManager?.isValid()) {
|
|
473
|
+
fetchAgents();
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
}, [sessionManager?.isValid]);
|
|
477
|
+
|
|
478
|
+
// Return hook interface
|
|
479
|
+
return useMemo(() => ({
|
|
480
|
+
// State
|
|
481
|
+
agents,
|
|
482
|
+
currentAgent,
|
|
483
|
+
currentAgentId,
|
|
484
|
+
loading,
|
|
485
|
+
error,
|
|
486
|
+
|
|
487
|
+
// Operations
|
|
488
|
+
fetchAgents,
|
|
489
|
+
createAgent,
|
|
490
|
+
deleteAgent,
|
|
491
|
+
switchAgent,
|
|
492
|
+
importAgent,
|
|
493
|
+
stopAgent,
|
|
494
|
+
updateAgentConfig,
|
|
495
|
+
|
|
496
|
+
// Mode control
|
|
497
|
+
getAgentMode,
|
|
498
|
+
setAgentMode,
|
|
499
|
+
|
|
500
|
+
// Metadata
|
|
501
|
+
getAgentMetadata,
|
|
502
|
+
|
|
503
|
+
// Helpers
|
|
504
|
+
getAgent,
|
|
505
|
+
getAgentsByStatus,
|
|
506
|
+
getActiveAgents,
|
|
507
|
+
updateAgent,
|
|
508
|
+
|
|
509
|
+
// Utilities
|
|
510
|
+
clearError,
|
|
511
|
+
refresh,
|
|
512
|
+
}), [
|
|
513
|
+
agents,
|
|
514
|
+
currentAgent,
|
|
515
|
+
currentAgentId,
|
|
516
|
+
loading,
|
|
517
|
+
error,
|
|
518
|
+
fetchAgents,
|
|
519
|
+
createAgent,
|
|
520
|
+
deleteAgent,
|
|
521
|
+
switchAgent,
|
|
522
|
+
importAgent,
|
|
523
|
+
stopAgent,
|
|
524
|
+
updateAgentConfig,
|
|
525
|
+
getAgentMode,
|
|
526
|
+
setAgentMode,
|
|
527
|
+
getAgentMetadata,
|
|
528
|
+
getAgent,
|
|
529
|
+
getAgentsByStatus,
|
|
530
|
+
getActiveAgents,
|
|
531
|
+
updateAgent,
|
|
532
|
+
clearError,
|
|
533
|
+
refresh,
|
|
534
|
+
]);
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
export default useAgents;
|