agentstudio 0.1.26 → 0.1.28
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/index.d.ts.map +1 -1
- package/index.js +36 -18
- package/index.js.map +1 -1
- package/package.json +6 -5
- package/public/assets/{AgentsPage-DR5v4Vfe.js → AgentsPage-VVVyzMq0.js} +1 -1
- package/public/assets/{Button-6I_OiXLX.js → Button-B9AQtJ7x.js} +1 -1
- package/public/assets/{ChatPage-DzORphjz.js → ChatPage-p1JCfA2A.js} +5 -5
- package/public/assets/{CommandForm-k3XXwCB4.js → CommandForm-B_beYCv3.js} +1 -1
- package/public/assets/{CommandsPage-C6dcKcFf.js → CommandsPage-Blc1Kt4Z.js} +1 -1
- package/public/assets/{DashboardPage-4YSwoWTH.js → DashboardPage-Dokn4y-N.js} +1 -1
- package/public/assets/{FileBrowser-BvyXd63f.js → FileBrowser-Dg9PfXOo.js} +4 -4
- package/public/assets/{FileExplorer-DhPt_quM.js → FileExplorer-B7BFy0Tu.js} +1 -1
- package/public/assets/{GeneralSettingsPage-DkHRbImS.js → GeneralSettingsPage-DLSSSadp.js} +1 -1
- package/public/assets/LandingPage-Ck2WpTto.js +1 -0
- package/public/assets/{LoginPage-Bfy9WmmY.js → LoginPage-D2Ykhr7D.js} +4 -4
- package/public/assets/{McpAdminSettingsPage-BFuQouo8.js → McpAdminSettingsPage-BAKOckWx.js} +1 -1
- package/public/assets/{McpPage-DDiRtENp.js → McpPage-DkD9BOrP.js} +1 -1
- package/public/assets/{MemorySettingsPage-D5Kec6pT.js → MemorySettingsPage-CiUs5u2g.js} +1 -1
- package/public/assets/{PluginsPage-DSo1pTD-.js → PluginsPage-CkXNjZMq.js} +1 -1
- package/public/assets/{ProjectSelector-Dqm5v8o9.js → ProjectSelector-B1_umywl.js} +1 -1
- package/public/assets/ProjectsPage-CQ8zwJ5D.js +21 -0
- package/public/assets/ScheduledTasksPage-BjSzD4T2.js +1 -0
- package/public/assets/{SettingsLayout-Blt_jAZx.js → SettingsLayout-CccK5RVj.js} +1 -1
- package/public/assets/{SkillsPage-B5YxNlWJ.js → SkillsPage-D_LECy2S.js} +1 -1
- package/public/assets/{SubagentForm-B09hmrYM.js → SubagentForm-D9EFQxlZ.js} +1 -1
- package/public/assets/{SubagentsPage-Bqk10bb7.js → SubagentsPage-D_sdehiT.js} +1 -1
- package/public/assets/SystemInfoPage-vz5Ey9DK.js +1 -0
- package/public/assets/TelemetrySettingsPage-DMngnKDW.js +1 -0
- package/public/assets/{ToastTestPage-Dzfb1AsW.js → ToastTestPage-CafmBcnU.js} +1 -1
- package/public/assets/{ToolsList-CmrJAKcE.js → ToolsList-CnepUgI-.js} +1 -1
- package/public/assets/{UnifiedToolSelector-CN690ltz.js → UnifiedToolSelector-CnFTY88B.js} +1 -1
- package/public/assets/VersionSettingsPage-D9hYO4VL.js +5 -0
- package/public/assets/{_basePickBy-X3KkSOFK.js → _basePickBy-lvDxpUoY.js} +1 -1
- package/public/assets/{_baseUniq-cv9EC14t.js → _baseUniq-DyqfOLmW.js} +1 -1
- package/public/assets/{agents-DfHGzNHW.js → agents-DmLFhp96.js} +1 -1
- package/public/assets/arc-DuR7lLva.js +1 -0
- package/public/assets/{architectureDiagram-VXUJARFQ-CMo92Xcm.js → architectureDiagram-VXUJARFQ-CkKlTxxx.js} +1 -1
- package/public/assets/{blockDiagram-VD42YOAC-CSewaHod.js → blockDiagram-VD42YOAC-DdR02awp.js} +1 -1
- package/public/assets/{c4Diagram-YG6GDRKO-D4-A7anv.js → c4Diagram-YG6GDRKO-MlkMVL2r.js} +1 -1
- package/public/assets/channel-DHM1jRJ0.js +1 -0
- package/public/assets/{chunk-4BX2VUAB-CKW-jgB1.js → chunk-4BX2VUAB-BI02zXQl.js} +1 -1
- package/public/assets/{chunk-55IACEB6-Bh_iEZAg.js → chunk-55IACEB6-DtWZPbH-.js} +1 -1
- package/public/assets/{chunk-B4BG7PRW-CGcWESsJ.js → chunk-B4BG7PRW-yLeRKRZl.js} +1 -1
- package/public/assets/{chunk-DI55MBZ5-BNQVU-r5.js → chunk-DI55MBZ5-DF-5ELa5.js} +1 -1
- package/public/assets/{chunk-FMBD7UC4-B51X6fKC.js → chunk-FMBD7UC4-BjJNxbrL.js} +1 -1
- package/public/assets/{chunk-QN33PNHL-DadRd0Qs.js → chunk-QN33PNHL-rs7Z3IPT.js} +1 -1
- package/public/assets/{chunk-QZHKN3VN-0AwjBk6f.js → chunk-QZHKN3VN-DoIXOkrg.js} +1 -1
- package/public/assets/{chunk-TZMSLE5B-CIFE5KnY.js → chunk-TZMSLE5B-xkKgCGO2.js} +1 -1
- package/public/assets/classDiagram-2ON5EDUG-BJtIba9N.js +1 -0
- package/public/assets/classDiagram-v2-WZHVMYZB-BJtIba9N.js +1 -0
- package/public/assets/clone-Bbn_OKGL.js +1 -0
- package/public/assets/{cose-bilkent-S5V4N54A-BPWEQsNm.js → cose-bilkent-S5V4N54A-BIz6tY7t.js} +1 -1
- package/public/assets/{dagre-6UL2VRFP-Cu-RCZe5.js → dagre-6UL2VRFP-CponDeYZ.js} +1 -1
- package/public/assets/{diagram-PSM6KHXK-DBfl10yA.js → diagram-PSM6KHXK-D31S6iiK.js} +1 -1
- package/public/assets/{diagram-QEK2KX5R-CXLsPBvR.js → diagram-QEK2KX5R-C6RWP-cs.js} +1 -1
- package/public/assets/{diagram-S2PKOQOG-BjaXE_9W.js → diagram-S2PKOQOG-BKs_7af1.js} +1 -1
- package/public/assets/{erDiagram-Q2GNP2WA-BPkK30VB.js → erDiagram-Q2GNP2WA-Ro9hB6-s.js} +1 -1
- package/public/assets/{flowDiagram-NV44I4VS-i4BoJF1x.js → flowDiagram-NV44I4VS-IKSFEVlB.js} +1 -1
- package/public/assets/{ganttDiagram-LVOFAZNH-C7Fa9LKl.js → ganttDiagram-LVOFAZNH-CPDNSzAq.js} +1 -1
- package/public/assets/{gitGraphDiagram-NY62KEGX-x4fV46FC.js → gitGraphDiagram-NY62KEGX-c_yb5ztL.js} +1 -1
- package/public/assets/{graph-Bj4qRtTX.js → graph-BoMdSZEp.js} +1 -1
- package/public/assets/index-BUj-AMWq.js +297 -0
- package/public/assets/index-CEBbr0XW.css +1 -0
- package/public/assets/infoDiagram-F6ZHWCRC-904Ek2Zh.js +2 -0
- package/public/assets/{journeyDiagram-XKPGCS4Q-BByZuK2D.js → journeyDiagram-XKPGCS4Q-D4izttrO.js} +1 -1
- package/public/assets/{kanban-definition-3W4ZIXB7-BW-KJqNN.js → kanban-definition-3W4ZIXB7-DE7WCrea.js} +1 -1
- package/public/assets/{layout-BIkzRvdA.js → layout-BezNHWMi.js} +1 -1
- package/public/assets/{linear-CY3SKQlQ.js → linear-KRX5ckNK.js} +1 -1
- package/public/assets/{mindmap-definition-VGOIOE7T-CIjq8dul.js → mindmap-definition-VGOIOE7T-Dlr09KqO.js} +1 -1
- package/public/assets/{pieDiagram-ADFJNKIX-CYrXbDgB.js → pieDiagram-ADFJNKIX-Bbzzfu-z.js} +2 -2
- package/public/assets/{quadrantDiagram-AYHSOK5B-zshqcC4H.js → quadrantDiagram-AYHSOK5B-DubsKDPG.js} +1 -1
- package/public/assets/{requirementDiagram-UZGBJVZJ-Eykzktn0.js → requirementDiagram-UZGBJVZJ-B-rG6Gty.js} +1 -1
- package/public/assets/{sankeyDiagram-TZEHDZUN-CUUZTWXT.js → sankeyDiagram-TZEHDZUN-DU7Rgr_5.js} +1 -1
- package/public/assets/{sequenceDiagram-WL72ISMW-u-TgVaJG.js → sequenceDiagram-WL72ISMW-BRlH6dPX.js} +1 -1
- package/public/assets/stateDiagram-FKZM4ZOC-BeAzs0_-.js +1 -0
- package/public/assets/stateDiagram-v2-4FDKWEC3-C0c8d9Xs.js +1 -0
- package/public/assets/{table-DUC-Ijtn.js → table-aqcpYX4Z.js} +1 -1
- package/public/assets/{timeline-definition-IT6M3QCI-CJpXtgDn.js → timeline-definition-IT6M3QCI-BU_B1RmT.js} +1 -1
- package/public/assets/{tools-CljQNVZC.js → tools-XV29tg8x.js} +1 -1
- package/public/assets/{treemap-KMMF4GRG-BHfi2-Z-.js → treemap-KMMF4GRG-CP2M7QfX.js} +1 -1
- package/public/assets/{ui-components-umMeMlgF.js → ui-components-ND8WdSiV.js} +135 -120
- package/public/assets/{useAgents-Cc9gZfER.js → useAgents-COcSvqDE.js} +1 -1
- package/public/assets/{useClaudeVersions-oq1-p4ja.js → useClaudeVersions-C8b4adpW.js} +1 -1
- package/public/assets/{useCommands-CgIOltx6.js → useCommands-D79pjz3C.js} +1 -1
- package/public/assets/{useProjects-B1Ip38ES.js → useProjects-CP0Q5-jg.js} +1 -1
- package/public/assets/{useSessions-Dl3mKnA7.js → useSessions-C2gXprHI.js} +1 -1
- package/public/assets/{xychartDiagram-PRI3JC2R-DrK8IYgl.js → xychartDiagram-PRI3JC2R-OdQKUqyr.js} +1 -1
- package/public/index.html +5 -5
- package/routes/a2a.d.ts.map +1 -1
- package/routes/a2a.js +84 -26
- package/routes/a2a.js.map +1 -1
- package/routes/agents.js +2 -2
- package/routes/agents.js.map +1 -1
- package/routes/projects.d.ts.map +1 -1
- package/routes/projects.js +35 -3
- package/routes/projects.js.map +1 -1
- package/routes/scheduledTasks.d.ts.map +1 -1
- package/routes/scheduledTasks.js +68 -2
- package/routes/scheduledTasks.js.map +1 -1
- package/routes/taskExecutor.d.ts +9 -0
- package/routes/taskExecutor.d.ts.map +1 -0
- package/routes/taskExecutor.js +224 -0
- package/routes/taskExecutor.js.map +1 -0
- package/routes/version.d.ts +4 -0
- package/routes/version.d.ts.map +1 -0
- package/routes/version.js +216 -0
- package/routes/version.js.map +1 -0
- package/schemas/a2a.d.ts +106 -18
- package/schemas/a2a.d.ts.map +1 -1
- package/schemas/a2a.js +17 -1
- package/schemas/a2a.js.map +1 -1
- package/services/__tests__/sessionConcurrency.test.d.ts +7 -0
- package/services/__tests__/sessionConcurrency.test.d.ts.map +1 -0
- package/services/__tests__/sessionConcurrency.test.js +110 -0
- package/services/__tests__/sessionConcurrency.test.js.map +1 -0
- package/services/__tests__/slackAIService.test.js +10 -8
- package/services/__tests__/slackAIService.test.js.map +1 -1
- package/services/a2a/__tests__/agentCardService.test.js +1 -1
- package/services/a2a/__tests__/agentCardService.test.js.map +1 -1
- package/services/a2a/__tests__/webhookService.test.d.ts +6 -0
- package/services/a2a/__tests__/webhookService.test.d.ts.map +1 -0
- package/services/a2a/__tests__/webhookService.test.js +196 -0
- package/services/a2a/__tests__/webhookService.test.js.map +1 -0
- package/services/a2a/a2aClientTool.d.ts +2 -2
- package/services/a2a/a2aClientTool.d.ts.map +1 -1
- package/services/a2a/a2aClientTool.js +5 -3
- package/services/a2a/a2aClientTool.js.map +1 -1
- package/services/a2a/a2aIntegration.d.ts +2 -1
- package/services/a2a/a2aIntegration.d.ts.map +1 -1
- package/services/a2a/a2aIntegration.js +3 -2
- package/services/a2a/a2aIntegration.js.map +1 -1
- package/services/a2a/a2aSdkMcp.d.ts +2 -1
- package/services/a2a/a2aSdkMcp.d.ts.map +1 -1
- package/services/a2a/a2aSdkMcp.js +4 -1
- package/services/a2a/a2aSdkMcp.js.map +1 -1
- package/services/a2a/taskManager.d.ts +2 -1
- package/services/a2a/taskManager.d.ts.map +1 -1
- package/services/a2a/taskManager.js +3 -1
- package/services/a2a/taskManager.js.map +1 -1
- package/services/a2a/webhookService.d.ts +30 -0
- package/services/a2a/webhookService.d.ts.map +1 -0
- package/services/a2a/webhookService.js +113 -0
- package/services/a2a/webhookService.js.map +1 -0
- package/services/claudeSession.d.ts +6 -0
- package/services/claudeSession.d.ts.map +1 -1
- package/services/claudeSession.js +23 -1
- package/services/claudeSession.js.map +1 -1
- package/services/mcpAdmin/__tests__/providerTools.test.d.ts +7 -0
- package/services/mcpAdmin/__tests__/providerTools.test.d.ts.map +1 -0
- package/services/mcpAdmin/__tests__/providerTools.test.js +258 -0
- package/services/mcpAdmin/__tests__/providerTools.test.js.map +1 -0
- package/services/mcpAdmin/__tests__/tools.test.js +21 -3
- package/services/mcpAdmin/__tests__/tools.test.js.map +1 -1
- package/services/mcpAdmin/tools/agentTools.d.ts.map +1 -1
- package/services/mcpAdmin/tools/agentTools.js +4 -11
- package/services/mcpAdmin/tools/agentTools.js.map +1 -1
- package/services/mcpAdmin/tools/index.d.ts +1 -0
- package/services/mcpAdmin/tools/index.d.ts.map +1 -1
- package/services/mcpAdmin/tools/index.js +5 -1
- package/services/mcpAdmin/tools/index.js.map +1 -1
- package/services/mcpAdmin/tools/projectTools.d.ts.map +1 -1
- package/services/mcpAdmin/tools/projectTools.js +30 -1
- package/services/mcpAdmin/tools/projectTools.js.map +1 -1
- package/services/mcpAdmin/tools/providerTools.d.ts +40 -0
- package/services/mcpAdmin/tools/providerTools.d.ts.map +1 -0
- package/services/mcpAdmin/tools/providerTools.js +581 -0
- package/services/mcpAdmin/tools/providerTools.js.map +1 -0
- package/services/projectMetadataStorage.d.ts +1 -1
- package/services/projectMetadataStorage.d.ts.map +1 -1
- package/services/projectMetadataStorage.js.map +1 -1
- package/services/scheduledTaskStorage.d.ts +11 -0
- package/services/scheduledTaskStorage.d.ts.map +1 -1
- package/services/scheduledTaskStorage.js +66 -0
- package/services/scheduledTaskStorage.js.map +1 -1
- package/services/schedulerService.d.ts +10 -0
- package/services/schedulerService.d.ts.map +1 -1
- package/services/schedulerService.js +71 -224
- package/services/schedulerService.js.map +1 -1
- package/services/sessionManager.d.ts +6 -0
- package/services/sessionManager.d.ts.map +1 -1
- package/services/sessionManager.js +12 -0
- package/services/sessionManager.js.map +1 -1
- package/services/slackAIService.d.ts.map +1 -1
- package/services/slackAIService.js +39 -14
- package/services/slackAIService.js.map +1 -1
- package/services/taskExecutor/BuiltinExecutor.d.ts +44 -0
- package/services/taskExecutor/BuiltinExecutor.d.ts.map +1 -0
- package/services/taskExecutor/BuiltinExecutor.js +513 -0
- package/services/taskExecutor/BuiltinExecutor.js.map +1 -0
- package/services/taskExecutor/__tests__/a2a-tasks.test.d.ts +7 -0
- package/services/taskExecutor/__tests__/a2a-tasks.test.d.ts.map +1 -0
- package/services/taskExecutor/__tests__/a2a-tasks.test.js +328 -0
- package/services/taskExecutor/__tests__/a2a-tasks.test.js.map +1 -0
- package/services/taskExecutor/__tests__/e2e-workflows.test.d.ts +7 -0
- package/services/taskExecutor/__tests__/e2e-workflows.test.d.ts.map +1 -0
- package/services/taskExecutor/__tests__/e2e-workflows.test.js +446 -0
- package/services/taskExecutor/__tests__/e2e-workflows.test.js.map +1 -0
- package/services/taskExecutor/__tests__/error-handling.test.d.ts +7 -0
- package/services/taskExecutor/__tests__/error-handling.test.d.ts.map +1 -0
- package/services/taskExecutor/__tests__/error-handling.test.js +387 -0
- package/services/taskExecutor/__tests__/error-handling.test.js.map +1 -0
- package/services/taskExecutor/__tests__/stress.test.d.ts +7 -0
- package/services/taskExecutor/__tests__/stress.test.d.ts.map +1 -0
- package/services/taskExecutor/__tests__/stress.test.js +329 -0
- package/services/taskExecutor/__tests__/stress.test.js.map +1 -0
- package/services/taskExecutor/__tests__/taskExecutor.integration.test.d.ts +7 -0
- package/services/taskExecutor/__tests__/taskExecutor.integration.test.d.ts.map +1 -0
- package/services/taskExecutor/__tests__/taskExecutor.integration.test.js +205 -0
- package/services/taskExecutor/__tests__/taskExecutor.integration.test.js.map +1 -0
- package/services/taskExecutor/__tests__/timeout-cancellation.test.d.ts +7 -0
- package/services/taskExecutor/__tests__/timeout-cancellation.test.d.ts.map +1 -0
- package/services/taskExecutor/__tests__/timeout-cancellation.test.js +319 -0
- package/services/taskExecutor/__tests__/timeout-cancellation.test.js.map +1 -0
- package/services/taskExecutor/index.d.ts +40 -0
- package/services/taskExecutor/index.d.ts.map +1 -0
- package/services/taskExecutor/index.js +166 -0
- package/services/taskExecutor/index.js.map +1 -0
- package/services/taskExecutor/taskWorker.d.ts +11 -0
- package/services/taskExecutor/taskWorker.d.ts.map +1 -0
- package/services/taskExecutor/taskWorker.js +170 -0
- package/services/taskExecutor/taskWorker.js.map +1 -0
- package/services/taskExecutor/types.d.ts +145 -0
- package/services/taskExecutor/types.d.ts.map +1 -0
- package/services/taskExecutor/types.js +9 -0
- package/services/taskExecutor/types.js.map +1 -0
- package/services/telemetry.d.ts +40 -0
- package/services/telemetry.d.ts.map +1 -0
- package/services/telemetry.js +245 -0
- package/services/telemetry.js.map +1 -0
- package/types/a2a.d.ts +18 -0
- package/types/a2a.d.ts.map +1 -1
- package/types/a2a.js.map +1 -1
- package/types/agents.d.ts +0 -1
- package/types/agents.d.ts.map +1 -1
- package/types/agents.js +0 -1
- package/types/agents.js.map +1 -1
- package/types/projects.d.ts +2 -0
- package/types/projects.d.ts.map +1 -1
- package/types/scheduledTasks.d.ts +4 -0
- package/types/scheduledTasks.d.ts.map +1 -1
- package/types/scheduledTasks.js.map +1 -1
- package/utils/__tests__/claudeUtils.test.js +3 -2
- package/utils/__tests__/claudeUtils.test.js.map +1 -1
- package/utils/__tests__/configResolver.test.d.ts +7 -0
- package/utils/__tests__/configResolver.test.d.ts.map +1 -0
- package/utils/__tests__/configResolver.test.js +211 -0
- package/utils/__tests__/configResolver.test.js.map +1 -0
- package/utils/__tests__/sessionUtils.test.js +2 -1
- package/utils/__tests__/sessionUtils.test.js.map +1 -1
- package/utils/claudeUtils.d.ts +2 -1
- package/utils/claudeUtils.d.ts.map +1 -1
- package/utils/claudeUtils.js +45 -78
- package/utils/claudeUtils.js.map +1 -1
- package/utils/configResolver.d.ts +57 -0
- package/utils/configResolver.d.ts.map +1 -0
- package/utils/configResolver.js +130 -0
- package/utils/configResolver.js.map +1 -0
- package/utils/sessionUtils.d.ts.map +1 -1
- package/utils/sessionUtils.js +5 -0
- package/utils/sessionUtils.js.map +1 -1
- package/public/assets/LandingPage-vFck5FSW.js +0 -1
- package/public/assets/ProjectsPage-C1VMe5nk.js +0 -21
- package/public/assets/ScheduledTasksPage-CkUoeT04.js +0 -1
- package/public/assets/VersionSettingsPage-D_keS5fb.js +0 -5
- package/public/assets/arc-C7I_8kFm.js +0 -1
- package/public/assets/channel-CTPfV_fA.js +0 -1
- package/public/assets/classDiagram-2ON5EDUG-CJDL4zC-.js +0 -1
- package/public/assets/classDiagram-v2-WZHVMYZB-CJDL4zC-.js +0 -1
- package/public/assets/clone-BvAwOIZu.js +0 -1
- package/public/assets/index-CJMPRxKv.css +0 -1
- package/public/assets/index-Dz27wKzJ.js +0 -293
- package/public/assets/infoDiagram-F6ZHWCRC-BdQeovBp.js +0 -2
- package/public/assets/stateDiagram-FKZM4ZOC-L8719ElY.js +0 -1
- package/public/assets/stateDiagram-v2-4FDKWEC3-DTGjtVxm.js +0 -1
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Task Timeout and Cancellation Tests
|
|
4
|
+
*
|
|
5
|
+
* Comprehensive tests for task timeout handling and cancellation scenarios.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
const vitest_1 = require("vitest");
|
|
9
|
+
const BuiltinExecutor_js_1 = require("../BuiltinExecutor.js");
|
|
10
|
+
(0, vitest_1.describe)('Task Timeout and Cancellation', () => {
|
|
11
|
+
let executor;
|
|
12
|
+
(0, vitest_1.beforeEach)(async () => {
|
|
13
|
+
executor = new BuiltinExecutor_js_1.BuiltinTaskExecutor({
|
|
14
|
+
maxConcurrent: 2,
|
|
15
|
+
defaultTimeoutMs: 5000, // Short timeout for testing
|
|
16
|
+
maxMemoryMb: 256,
|
|
17
|
+
});
|
|
18
|
+
await executor.start();
|
|
19
|
+
});
|
|
20
|
+
(0, vitest_1.afterEach)(async () => {
|
|
21
|
+
await executor.stop();
|
|
22
|
+
});
|
|
23
|
+
(0, vitest_1.describe)('Task Timeout', () => {
|
|
24
|
+
(0, vitest_1.it)('should timeout task after specified duration', async () => {
|
|
25
|
+
const veryShortTimeout = 500; // 500ms
|
|
26
|
+
const task = {
|
|
27
|
+
id: 'timeout-test-1',
|
|
28
|
+
type: 'scheduled',
|
|
29
|
+
agentId: 'test-agent',
|
|
30
|
+
projectPath: '/tmp/test',
|
|
31
|
+
message: 'Simulate long running task',
|
|
32
|
+
timeoutMs: veryShortTimeout,
|
|
33
|
+
createdAt: new Date().toISOString(),
|
|
34
|
+
};
|
|
35
|
+
await executor.submitTask(task);
|
|
36
|
+
// Wait for timeout to occur
|
|
37
|
+
await new Promise(resolve => setTimeout(resolve, veryShortTimeout + 500));
|
|
38
|
+
const stats = executor.getStats();
|
|
39
|
+
// Task should have timed out and been marked as failed
|
|
40
|
+
(0, vitest_1.expect)(stats.failedTasks).toBeGreaterThan(0);
|
|
41
|
+
});
|
|
42
|
+
(0, vitest_1.it)('should use default timeout when not specified', async () => {
|
|
43
|
+
const taskWithoutTimeout = {
|
|
44
|
+
id: 'default-timeout-test',
|
|
45
|
+
type: 'scheduled',
|
|
46
|
+
agentId: 'test-agent',
|
|
47
|
+
projectPath: '/tmp/test',
|
|
48
|
+
message: 'Test default timeout',
|
|
49
|
+
timeoutMs: 0, // Use 0 to indicate default (executor will use defaultTimeoutMs)
|
|
50
|
+
createdAt: new Date().toISOString(),
|
|
51
|
+
};
|
|
52
|
+
await executor.submitTask(taskWithoutTimeout);
|
|
53
|
+
const status = await executor.getTaskStatus('default-timeout-test');
|
|
54
|
+
(0, vitest_1.expect)(status).not.toBeNull();
|
|
55
|
+
});
|
|
56
|
+
(0, vitest_1.it)('should handle tasks with different timeouts', async () => {
|
|
57
|
+
const shortTask = {
|
|
58
|
+
id: 'short-timeout',
|
|
59
|
+
type: 'scheduled',
|
|
60
|
+
agentId: 'test-agent',
|
|
61
|
+
projectPath: '/tmp/test',
|
|
62
|
+
message: 'Short timeout task',
|
|
63
|
+
timeoutMs: 1000,
|
|
64
|
+
createdAt: new Date().toISOString(),
|
|
65
|
+
};
|
|
66
|
+
const longTask = {
|
|
67
|
+
id: 'long-timeout',
|
|
68
|
+
type: 'scheduled',
|
|
69
|
+
agentId: 'test-agent',
|
|
70
|
+
projectPath: '/tmp/test',
|
|
71
|
+
message: 'Long timeout task',
|
|
72
|
+
timeoutMs: 30000,
|
|
73
|
+
createdAt: new Date().toISOString(),
|
|
74
|
+
};
|
|
75
|
+
await executor.submitTask(shortTask);
|
|
76
|
+
await executor.submitTask(longTask);
|
|
77
|
+
const stats = executor.getStats();
|
|
78
|
+
(0, vitest_1.expect)(stats.runningTasks + stats.queuedTasks).toBe(2);
|
|
79
|
+
});
|
|
80
|
+
(0, vitest_1.it)('should update task status to failed on timeout', async () => {
|
|
81
|
+
const timeoutMs = 800;
|
|
82
|
+
const task = {
|
|
83
|
+
id: 'timeout-status-test',
|
|
84
|
+
type: 'a2a_async',
|
|
85
|
+
agentId: 'test-agent',
|
|
86
|
+
projectPath: '/tmp/test',
|
|
87
|
+
message: 'Task that will timeout',
|
|
88
|
+
timeoutMs,
|
|
89
|
+
createdAt: new Date().toISOString(),
|
|
90
|
+
};
|
|
91
|
+
await executor.submitTask(task);
|
|
92
|
+
// Wait for timeout
|
|
93
|
+
await new Promise(resolve => setTimeout(resolve, timeoutMs + 500));
|
|
94
|
+
const stats = executor.getStats();
|
|
95
|
+
(0, vitest_1.expect)(stats.failedTasks).toBeGreaterThanOrEqual(1);
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
(0, vitest_1.describe)('Task Cancellation', () => {
|
|
99
|
+
(0, vitest_1.it)('should cancel a pending task in queue', async () => {
|
|
100
|
+
// Submit more tasks than maxConcurrent to ensure some are queued
|
|
101
|
+
const tasks = Array.from({ length: 5 }, (_, i) => ({
|
|
102
|
+
id: `cancel-queue-${i}`,
|
|
103
|
+
type: 'scheduled',
|
|
104
|
+
agentId: 'test-agent',
|
|
105
|
+
projectPath: '/tmp/test',
|
|
106
|
+
message: `Task ${i}`,
|
|
107
|
+
timeoutMs: 10000,
|
|
108
|
+
createdAt: new Date().toISOString(),
|
|
109
|
+
}));
|
|
110
|
+
for (const task of tasks) {
|
|
111
|
+
await executor.submitTask(task);
|
|
112
|
+
}
|
|
113
|
+
// Wait for queue to process
|
|
114
|
+
await new Promise(resolve => setTimeout(resolve, 100));
|
|
115
|
+
// Cancel a task that's likely in the queue
|
|
116
|
+
const canceled = await executor.cancelTask('cancel-queue-4');
|
|
117
|
+
(0, vitest_1.expect)(canceled).toBe(true);
|
|
118
|
+
const stats = executor.getStats();
|
|
119
|
+
(0, vitest_1.expect)(stats.canceledTasks).toBeGreaterThan(0);
|
|
120
|
+
});
|
|
121
|
+
(0, vitest_1.it)('should cancel a running task', async () => {
|
|
122
|
+
const task = {
|
|
123
|
+
id: 'cancel-running',
|
|
124
|
+
type: 'scheduled',
|
|
125
|
+
agentId: 'test-agent',
|
|
126
|
+
projectPath: '/tmp/test',
|
|
127
|
+
message: 'Long running task to cancel',
|
|
128
|
+
timeoutMs: 30000,
|
|
129
|
+
createdAt: new Date().toISOString(),
|
|
130
|
+
};
|
|
131
|
+
await executor.submitTask(task);
|
|
132
|
+
// Wait for task to start
|
|
133
|
+
await new Promise(resolve => setTimeout(resolve, 200));
|
|
134
|
+
// Cancel the running task
|
|
135
|
+
const canceled = await executor.cancelTask('cancel-running');
|
|
136
|
+
(0, vitest_1.expect)(canceled).toBe(true);
|
|
137
|
+
const stats = executor.getStats();
|
|
138
|
+
(0, vitest_1.expect)(stats.canceledTasks).toBe(1);
|
|
139
|
+
});
|
|
140
|
+
(0, vitest_1.it)('should return false when canceling non-existent task', async () => {
|
|
141
|
+
const canceled = await executor.cancelTask('non-existent-task-id');
|
|
142
|
+
(0, vitest_1.expect)(canceled).toBe(false);
|
|
143
|
+
});
|
|
144
|
+
(0, vitest_1.it)('should handle multiple cancellations', async () => {
|
|
145
|
+
const tasks = Array.from({ length: 6 }, (_, i) => ({
|
|
146
|
+
id: `multi-cancel-${i}`,
|
|
147
|
+
type: 'scheduled',
|
|
148
|
+
agentId: 'test-agent',
|
|
149
|
+
projectPath: '/tmp/test',
|
|
150
|
+
message: `Task ${i}`,
|
|
151
|
+
timeoutMs: 15000,
|
|
152
|
+
createdAt: new Date().toISOString(),
|
|
153
|
+
}));
|
|
154
|
+
for (const task of tasks) {
|
|
155
|
+
await executor.submitTask(task);
|
|
156
|
+
}
|
|
157
|
+
await new Promise(resolve => setTimeout(resolve, 100));
|
|
158
|
+
// Cancel multiple tasks
|
|
159
|
+
const cancelResults = await Promise.all([
|
|
160
|
+
executor.cancelTask('multi-cancel-1'),
|
|
161
|
+
executor.cancelTask('multi-cancel-3'),
|
|
162
|
+
executor.cancelTask('multi-cancel-5'),
|
|
163
|
+
]);
|
|
164
|
+
(0, vitest_1.expect)(cancelResults.every(r => r === true)).toBe(true);
|
|
165
|
+
const stats = executor.getStats();
|
|
166
|
+
(0, vitest_1.expect)(stats.canceledTasks).toBeGreaterThanOrEqual(3);
|
|
167
|
+
});
|
|
168
|
+
(0, vitest_1.it)('should allow cancellation during executor shutdown', async () => {
|
|
169
|
+
const tasks = Array.from({ length: 3 }, (_, i) => ({
|
|
170
|
+
id: `shutdown-cancel-${i}`,
|
|
171
|
+
type: 'scheduled',
|
|
172
|
+
agentId: 'test-agent',
|
|
173
|
+
projectPath: '/tmp/test',
|
|
174
|
+
message: `Task ${i}`,
|
|
175
|
+
timeoutMs: 20000,
|
|
176
|
+
createdAt: new Date().toISOString(),
|
|
177
|
+
}));
|
|
178
|
+
for (const task of tasks) {
|
|
179
|
+
await executor.submitTask(task);
|
|
180
|
+
}
|
|
181
|
+
// Cancel one task before shutdown
|
|
182
|
+
await executor.cancelTask('shutdown-cancel-1');
|
|
183
|
+
// Shutdown should complete without hanging
|
|
184
|
+
await (0, vitest_1.expect)(executor.stop()).resolves.not.toThrow();
|
|
185
|
+
const stats = executor.getStats();
|
|
186
|
+
(0, vitest_1.expect)(stats.runningTasks).toBe(0);
|
|
187
|
+
(0, vitest_1.expect)(stats.queuedTasks).toBe(0);
|
|
188
|
+
});
|
|
189
|
+
});
|
|
190
|
+
(0, vitest_1.describe)('Cancellation Edge Cases', () => {
|
|
191
|
+
(0, vitest_1.it)('should handle cancellation of already completed task', async () => {
|
|
192
|
+
const quickTask = {
|
|
193
|
+
id: 'quick-complete',
|
|
194
|
+
type: 'scheduled',
|
|
195
|
+
agentId: 'test-agent',
|
|
196
|
+
projectPath: '/tmp/test',
|
|
197
|
+
message: 'Quick task',
|
|
198
|
+
timeoutMs: 100,
|
|
199
|
+
createdAt: new Date().toISOString(),
|
|
200
|
+
};
|
|
201
|
+
await executor.submitTask(quickTask);
|
|
202
|
+
// Wait for task to complete
|
|
203
|
+
await new Promise(resolve => setTimeout(resolve, 500));
|
|
204
|
+
// Try to cancel completed task
|
|
205
|
+
const canceled = await executor.cancelTask('quick-complete');
|
|
206
|
+
(0, vitest_1.expect)(canceled).toBe(false);
|
|
207
|
+
});
|
|
208
|
+
(0, vitest_1.it)('should handle cancellation immediately after submission', async () => {
|
|
209
|
+
const task = {
|
|
210
|
+
id: 'immediate-cancel',
|
|
211
|
+
type: 'scheduled',
|
|
212
|
+
agentId: 'test-agent',
|
|
213
|
+
projectPath: '/tmp/test',
|
|
214
|
+
message: 'Task to cancel immediately',
|
|
215
|
+
timeoutMs: 10000,
|
|
216
|
+
createdAt: new Date().toISOString(),
|
|
217
|
+
};
|
|
218
|
+
await executor.submitTask(task);
|
|
219
|
+
// Cancel immediately
|
|
220
|
+
const canceled = await executor.cancelTask('immediate-cancel');
|
|
221
|
+
(0, vitest_1.expect)(canceled).toBe(true);
|
|
222
|
+
});
|
|
223
|
+
(0, vitest_1.it)('should handle rapid submit-cancel cycles', async () => {
|
|
224
|
+
for (let i = 0; i < 10; i++) {
|
|
225
|
+
const task = {
|
|
226
|
+
id: `rapid-cycle-${i}`,
|
|
227
|
+
type: 'scheduled',
|
|
228
|
+
agentId: 'test-agent',
|
|
229
|
+
projectPath: '/tmp/test',
|
|
230
|
+
message: `Task ${i}`,
|
|
231
|
+
timeoutMs: 5000,
|
|
232
|
+
createdAt: new Date().toISOString(),
|
|
233
|
+
};
|
|
234
|
+
await executor.submitTask(task);
|
|
235
|
+
await executor.cancelTask(`rapid-cycle-${i}`);
|
|
236
|
+
}
|
|
237
|
+
const stats = executor.getStats();
|
|
238
|
+
(0, vitest_1.expect)(stats.canceledTasks).toBeGreaterThan(0);
|
|
239
|
+
(0, vitest_1.expect)(executor.isHealthy()).toBe(true);
|
|
240
|
+
});
|
|
241
|
+
});
|
|
242
|
+
(0, vitest_1.describe)('Timeout vs Cancellation', () => {
|
|
243
|
+
(0, vitest_1.it)('should prefer cancellation over timeout', async () => {
|
|
244
|
+
const task = {
|
|
245
|
+
id: 'cancel-vs-timeout',
|
|
246
|
+
type: 'scheduled',
|
|
247
|
+
agentId: 'test-agent',
|
|
248
|
+
projectPath: '/tmp/test',
|
|
249
|
+
message: 'Task that will be canceled',
|
|
250
|
+
timeoutMs: 2000,
|
|
251
|
+
createdAt: new Date().toISOString(),
|
|
252
|
+
};
|
|
253
|
+
await executor.submitTask(task);
|
|
254
|
+
// Cancel before timeout
|
|
255
|
+
await new Promise(resolve => setTimeout(resolve, 500));
|
|
256
|
+
await executor.cancelTask('cancel-vs-timeout');
|
|
257
|
+
// Wait past original timeout
|
|
258
|
+
await new Promise(resolve => setTimeout(resolve, 2000));
|
|
259
|
+
const stats = executor.getStats();
|
|
260
|
+
(0, vitest_1.expect)(stats.canceledTasks).toBe(1);
|
|
261
|
+
// Should not be counted as failed (timeout)
|
|
262
|
+
(0, vitest_1.expect)(stats.failedTasks).toBe(0);
|
|
263
|
+
});
|
|
264
|
+
});
|
|
265
|
+
(0, vitest_1.describe)('Health Check During Timeout/Cancellation', () => {
|
|
266
|
+
(0, vitest_1.it)('should maintain executor health after timeouts', async () => {
|
|
267
|
+
const tasks = Array.from({ length: 3 }, (_, i) => ({
|
|
268
|
+
id: `health-timeout-${i}`,
|
|
269
|
+
type: 'scheduled',
|
|
270
|
+
agentId: 'test-agent',
|
|
271
|
+
projectPath: '/tmp/test',
|
|
272
|
+
message: `Task ${i}`,
|
|
273
|
+
timeoutMs: 500, // Very short, will timeout
|
|
274
|
+
createdAt: new Date().toISOString(),
|
|
275
|
+
}));
|
|
276
|
+
for (const task of tasks) {
|
|
277
|
+
await executor.submitTask(task);
|
|
278
|
+
}
|
|
279
|
+
// Wait for all to timeout
|
|
280
|
+
await new Promise(resolve => setTimeout(resolve, 1500));
|
|
281
|
+
// Executor should still be healthy
|
|
282
|
+
(0, vitest_1.expect)(executor.isHealthy()).toBe(true);
|
|
283
|
+
// Should be able to accept new tasks
|
|
284
|
+
const newTask = {
|
|
285
|
+
id: 'after-timeouts',
|
|
286
|
+
type: 'scheduled',
|
|
287
|
+
agentId: 'test-agent',
|
|
288
|
+
projectPath: '/tmp/test',
|
|
289
|
+
message: 'New task after timeouts',
|
|
290
|
+
timeoutMs: 5000,
|
|
291
|
+
createdAt: new Date().toISOString(),
|
|
292
|
+
};
|
|
293
|
+
await (0, vitest_1.expect)(executor.submitTask(newTask)).resolves.not.toThrow();
|
|
294
|
+
});
|
|
295
|
+
(0, vitest_1.it)('should maintain executor health after cancellations', async () => {
|
|
296
|
+
const tasks = Array.from({ length: 5 }, (_, i) => ({
|
|
297
|
+
id: `health-cancel-${i}`,
|
|
298
|
+
type: 'scheduled',
|
|
299
|
+
agentId: 'test-agent',
|
|
300
|
+
projectPath: '/tmp/test',
|
|
301
|
+
message: `Task ${i}`,
|
|
302
|
+
timeoutMs: 10000,
|
|
303
|
+
createdAt: new Date().toISOString(),
|
|
304
|
+
}));
|
|
305
|
+
for (const task of tasks) {
|
|
306
|
+
await executor.submitTask(task);
|
|
307
|
+
}
|
|
308
|
+
// Cancel all tasks
|
|
309
|
+
for (const task of tasks) {
|
|
310
|
+
await executor.cancelTask(task.id);
|
|
311
|
+
}
|
|
312
|
+
// Executor should still be healthy
|
|
313
|
+
(0, vitest_1.expect)(executor.isHealthy()).toBe(true);
|
|
314
|
+
const stats = executor.getStats();
|
|
315
|
+
(0, vitest_1.expect)(stats.canceledTasks).toBe(5);
|
|
316
|
+
});
|
|
317
|
+
});
|
|
318
|
+
});
|
|
319
|
+
//# sourceMappingURL=timeout-cancellation.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeout-cancellation.test.js","sourceRoot":"","sources":["../../../../src/services/taskExecutor/__tests__/timeout-cancellation.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified Task Executor - Factory and Initialization
|
|
3
|
+
*
|
|
4
|
+
* Provides a factory function to create the appropriate task executor
|
|
5
|
+
* implementation based on environment configuration.
|
|
6
|
+
*/
|
|
7
|
+
import type { ITaskExecutor } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Initialize the task executor
|
|
10
|
+
*
|
|
11
|
+
* Creates and starts the appropriate executor implementation based on
|
|
12
|
+
* TASK_EXECUTOR_MODE environment variable:
|
|
13
|
+
*
|
|
14
|
+
* - 'builtin' (default): Uses worker threads pool
|
|
15
|
+
* - 'bullmq': Uses BullMQ with Redis (requires REDIS_URL)
|
|
16
|
+
*
|
|
17
|
+
* @returns Initialized task executor instance
|
|
18
|
+
* @throws Error if configuration is invalid
|
|
19
|
+
*/
|
|
20
|
+
export declare function initializeTaskExecutor(): Promise<ITaskExecutor>;
|
|
21
|
+
/**
|
|
22
|
+
* Get the current task executor instance
|
|
23
|
+
*
|
|
24
|
+
* @returns Task executor instance
|
|
25
|
+
* @throws Error if executor not initialized
|
|
26
|
+
*/
|
|
27
|
+
export declare function getTaskExecutor(): ITaskExecutor;
|
|
28
|
+
/**
|
|
29
|
+
* Check if task executor is initialized
|
|
30
|
+
*/
|
|
31
|
+
export declare function isTaskExecutorInitialized(): boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Shutdown the task executor
|
|
34
|
+
*
|
|
35
|
+
* Stops all running tasks and cleans up resources.
|
|
36
|
+
*/
|
|
37
|
+
export declare function shutdownTaskExecutor(): Promise<void>;
|
|
38
|
+
export * from './types.js';
|
|
39
|
+
export { BuiltinTaskExecutor } from './BuiltinExecutor.js';
|
|
40
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/taskExecutor/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAsB,MAAM,YAAY,CAAC;AA4CpE;;;;;;;;;;;GAWG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,aAAa,CAAC,CAsDrE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,IAAI,aAAa,CAK/C;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,OAAO,CAEnD;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAgB1D;AAMD,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Unified Task Executor - Factory and Initialization
|
|
4
|
+
*
|
|
5
|
+
* Provides a factory function to create the appropriate task executor
|
|
6
|
+
* implementation based on environment configuration.
|
|
7
|
+
*/
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
20
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
21
|
+
};
|
|
22
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
exports.BuiltinTaskExecutor = void 0;
|
|
24
|
+
exports.initializeTaskExecutor = initializeTaskExecutor;
|
|
25
|
+
exports.getTaskExecutor = getTaskExecutor;
|
|
26
|
+
exports.isTaskExecutorInitialized = isTaskExecutorInitialized;
|
|
27
|
+
exports.shutdownTaskExecutor = shutdownTaskExecutor;
|
|
28
|
+
const BuiltinExecutor_js_1 = require("./BuiltinExecutor.js");
|
|
29
|
+
// ============================================================================
|
|
30
|
+
// Global State
|
|
31
|
+
// ============================================================================
|
|
32
|
+
let executorInstance = null;
|
|
33
|
+
let isInitializing = false;
|
|
34
|
+
// ============================================================================
|
|
35
|
+
// Configuration
|
|
36
|
+
// ============================================================================
|
|
37
|
+
/**
|
|
38
|
+
* Load executor configuration from environment
|
|
39
|
+
*/
|
|
40
|
+
function loadConfigFromEnv() {
|
|
41
|
+
const maxConcurrent = parseInt(process.env.MAX_CONCURRENT_TASKS || '5', 10);
|
|
42
|
+
const defaultTimeoutMs = parseInt(process.env.TASK_TIMEOUT_DEFAULT || '300000', 10);
|
|
43
|
+
const maxMemoryMb = parseInt(process.env.TASK_MAX_MEMORY_MB || '512', 10);
|
|
44
|
+
const maxRetries = parseInt(process.env.TASK_MAX_RETRIES || '0', 10);
|
|
45
|
+
const retryDelayMs = parseInt(process.env.TASK_RETRY_DELAY_MS || '5000', 10);
|
|
46
|
+
return {
|
|
47
|
+
maxConcurrent: isNaN(maxConcurrent) ? 5 : maxConcurrent,
|
|
48
|
+
defaultTimeoutMs: isNaN(defaultTimeoutMs) ? 300000 : defaultTimeoutMs,
|
|
49
|
+
maxMemoryMb: isNaN(maxMemoryMb) ? 512 : maxMemoryMb,
|
|
50
|
+
maxRetries: isNaN(maxRetries) ? 0 : maxRetries,
|
|
51
|
+
retryDelayMs: isNaN(retryDelayMs) ? 5000 : retryDelayMs,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Get executor mode from environment
|
|
56
|
+
*/
|
|
57
|
+
function getExecutorMode() {
|
|
58
|
+
return process.env.TASK_EXECUTOR_MODE || 'builtin';
|
|
59
|
+
}
|
|
60
|
+
// ============================================================================
|
|
61
|
+
// Factory Function
|
|
62
|
+
// ============================================================================
|
|
63
|
+
/**
|
|
64
|
+
* Initialize the task executor
|
|
65
|
+
*
|
|
66
|
+
* Creates and starts the appropriate executor implementation based on
|
|
67
|
+
* TASK_EXECUTOR_MODE environment variable:
|
|
68
|
+
*
|
|
69
|
+
* - 'builtin' (default): Uses worker threads pool
|
|
70
|
+
* - 'bullmq': Uses BullMQ with Redis (requires REDIS_URL)
|
|
71
|
+
*
|
|
72
|
+
* @returns Initialized task executor instance
|
|
73
|
+
* @throws Error if configuration is invalid
|
|
74
|
+
*/
|
|
75
|
+
async function initializeTaskExecutor() {
|
|
76
|
+
// Return existing instance if already initialized
|
|
77
|
+
if (executorInstance) {
|
|
78
|
+
console.warn('[TaskExecutor] Already initialized, returning existing instance');
|
|
79
|
+
return executorInstance;
|
|
80
|
+
}
|
|
81
|
+
// Prevent concurrent initialization
|
|
82
|
+
if (isInitializing) {
|
|
83
|
+
throw new Error('Task executor initialization already in progress');
|
|
84
|
+
}
|
|
85
|
+
isInitializing = true;
|
|
86
|
+
try {
|
|
87
|
+
const mode = getExecutorMode();
|
|
88
|
+
const config = loadConfigFromEnv();
|
|
89
|
+
console.info(`[TaskExecutor] Initializing with mode: ${mode}`);
|
|
90
|
+
console.info(`[TaskExecutor] Config: maxConcurrent=${config.maxConcurrent}, defaultTimeoutMs=${config.defaultTimeoutMs}`);
|
|
91
|
+
// Create executor based on mode
|
|
92
|
+
let executor;
|
|
93
|
+
switch (mode) {
|
|
94
|
+
case 'builtin':
|
|
95
|
+
executor = new BuiltinExecutor_js_1.BuiltinTaskExecutor(config);
|
|
96
|
+
break;
|
|
97
|
+
case 'bullmq':
|
|
98
|
+
// TODO: Implement BullMQTaskExecutor
|
|
99
|
+
if (!process.env.REDIS_URL) {
|
|
100
|
+
throw new Error('REDIS_URL is required for bullmq mode');
|
|
101
|
+
}
|
|
102
|
+
throw new Error('BullMQ mode not yet implemented. Please use builtin mode or set TASK_EXECUTOR_MODE=builtin');
|
|
103
|
+
default:
|
|
104
|
+
throw new Error(`Unknown task executor mode: ${mode}. Valid options: builtin, bullmq`);
|
|
105
|
+
}
|
|
106
|
+
// Start the executor
|
|
107
|
+
await executor.start();
|
|
108
|
+
executorInstance = executor;
|
|
109
|
+
console.info(`[TaskExecutor] Successfully initialized with mode: ${mode}`);
|
|
110
|
+
return executorInstance;
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
console.error('[TaskExecutor] Initialization failed:', error);
|
|
114
|
+
isInitializing = false;
|
|
115
|
+
throw error;
|
|
116
|
+
}
|
|
117
|
+
finally {
|
|
118
|
+
isInitializing = false;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Get the current task executor instance
|
|
123
|
+
*
|
|
124
|
+
* @returns Task executor instance
|
|
125
|
+
* @throws Error if executor not initialized
|
|
126
|
+
*/
|
|
127
|
+
function getTaskExecutor() {
|
|
128
|
+
if (!executorInstance) {
|
|
129
|
+
throw new Error('Task executor not initialized. Call initializeTaskExecutor() first.');
|
|
130
|
+
}
|
|
131
|
+
return executorInstance;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Check if task executor is initialized
|
|
135
|
+
*/
|
|
136
|
+
function isTaskExecutorInitialized() {
|
|
137
|
+
return executorInstance !== null;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Shutdown the task executor
|
|
141
|
+
*
|
|
142
|
+
* Stops all running tasks and cleans up resources.
|
|
143
|
+
*/
|
|
144
|
+
async function shutdownTaskExecutor() {
|
|
145
|
+
if (!executorInstance) {
|
|
146
|
+
console.warn('[TaskExecutor] No executor to shutdown');
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
console.info('[TaskExecutor] Shutting down...');
|
|
150
|
+
try {
|
|
151
|
+
await executorInstance.stop();
|
|
152
|
+
executorInstance = null;
|
|
153
|
+
console.info('[TaskExecutor] Shutdown complete');
|
|
154
|
+
}
|
|
155
|
+
catch (error) {
|
|
156
|
+
console.error('[TaskExecutor] Error during shutdown:', error);
|
|
157
|
+
throw error;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
// ============================================================================
|
|
161
|
+
// Re-exports
|
|
162
|
+
// ============================================================================
|
|
163
|
+
__exportStar(require("./types.js"), exports);
|
|
164
|
+
var BuiltinExecutor_js_2 = require("./BuiltinExecutor.js");
|
|
165
|
+
Object.defineProperty(exports, "BuiltinTaskExecutor", { enumerable: true, get: function () { return BuiltinExecutor_js_2.BuiltinTaskExecutor; } });
|
|
166
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/taskExecutor/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Task Worker - Executes tasks in isolated worker threads
|
|
3
|
+
*
|
|
4
|
+
* This worker runs in a separate thread and handles:
|
|
5
|
+
* 1. Building query options for Claude SDK
|
|
6
|
+
* 2. Executing the agent task
|
|
7
|
+
* 3. Collecting logs and results
|
|
8
|
+
* 4. Reporting results back to main thread
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=taskWorker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"taskWorker.d.ts","sourceRoot":"","sources":["../../../src/services/taskExecutor/taskWorker.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|