agentstudio 0.3.3 → 0.4.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/bin/agentstudio.js +44 -4
- package/bin/agentstudio.js.map +1 -1
- package/bin/serviceManager.d.ts.map +1 -1
- package/bin/serviceManager.js +312 -28
- package/bin/serviceManager.js.map +1 -1
- package/config/engineConfig.d.ts +96 -0
- package/config/engineConfig.d.ts.map +1 -0
- package/config/engineConfig.js +429 -0
- package/config/engineConfig.js.map +1 -0
- package/engines/claude/__tests__/supportedModels.test.d.ts +10 -0
- package/engines/claude/__tests__/supportedModels.test.d.ts.map +1 -0
- package/engines/claude/__tests__/supportedModels.test.js +89 -0
- package/engines/claude/__tests__/supportedModels.test.js.map +1 -0
- package/engines/claude/aguiAdapter.d.ts +101 -0
- package/engines/claude/aguiAdapter.d.ts.map +1 -0
- package/engines/claude/aguiAdapter.js +382 -0
- package/engines/claude/aguiAdapter.js.map +1 -0
- package/engines/claude/claudeEngine.d.ts +42 -0
- package/engines/claude/claudeEngine.d.ts.map +1 -0
- package/engines/claude/claudeEngine.js +325 -0
- package/engines/claude/claudeEngine.js.map +1 -0
- package/engines/claude/index.d.ts +8 -0
- package/engines/claude/index.d.ts.map +1 -0
- package/engines/claude/index.js +14 -0
- package/engines/claude/index.js.map +1 -0
- package/engines/cursor/__tests__/a2aAdapter.test.d.ts +6 -0
- package/engines/cursor/__tests__/a2aAdapter.test.d.ts.map +1 -0
- package/engines/cursor/__tests__/a2aAdapter.test.js +376 -0
- package/engines/cursor/__tests__/a2aAdapter.test.js.map +1 -0
- package/engines/cursor/a2aAdapter.d.ts +180 -0
- package/engines/cursor/a2aAdapter.d.ts.map +1 -0
- package/engines/cursor/a2aAdapter.js +405 -0
- package/engines/cursor/a2aAdapter.js.map +1 -0
- package/engines/cursor/aguiAdapter.d.ts +97 -0
- package/engines/cursor/aguiAdapter.d.ts.map +1 -0
- package/engines/cursor/aguiAdapter.js +507 -0
- package/engines/cursor/aguiAdapter.js.map +1 -0
- package/engines/cursor/cursorEngine.d.ts +68 -0
- package/engines/cursor/cursorEngine.d.ts.map +1 -0
- package/engines/cursor/cursorEngine.js +465 -0
- package/engines/cursor/cursorEngine.js.map +1 -0
- package/engines/cursor/index.d.ts +11 -0
- package/engines/cursor/index.d.ts.map +1 -0
- package/engines/cursor/index.js +21 -0
- package/engines/cursor/index.js.map +1 -0
- package/engines/engineManager.d.ts +80 -0
- package/engines/engineManager.d.ts.map +1 -0
- package/engines/engineManager.js +137 -0
- package/engines/engineManager.js.map +1 -0
- package/engines/index.d.ts +26 -0
- package/engines/index.d.ts.map +1 -0
- package/engines/index.js +81 -0
- package/engines/index.js.map +1 -0
- package/engines/types.d.ts +319 -0
- package/engines/types.d.ts.map +1 -0
- package/engines/types.js +69 -0
- package/engines/types.js.map +1 -0
- package/index.d.ts.map +1 -1
- package/index.js +178 -25
- package/index.js.map +1 -1
- package/middleware/auth.d.ts.map +1 -1
- package/middleware/auth.js +4 -0
- package/middleware/auth.js.map +1 -1
- package/package.json +7 -1
- package/public/assets/AgentsPage-D462iGRy.js +10 -0
- package/public/assets/{Button-BoiVlafj.js → Button-B_6lGF64.js} +1 -1
- package/public/assets/ChatPage-NjuRQPaL.js +478 -0
- package/public/assets/{CommandForm-Se4iemMp.js → CommandForm-DwGvE9A_.js} +1 -1
- package/public/assets/CommandsPage-DeUS8fhJ.js +1 -0
- package/public/assets/CursorConfigPage-Bl1Blrbr.js +1 -0
- package/public/assets/{DashboardPage-DbCVzPKz.js → DashboardPage-DH-2iuqf.js} +1 -1
- package/public/assets/EngineGate-DxTYx9wb.js +1 -0
- package/public/assets/{FileBrowser-DcoBWzKK.js → FileBrowser-CeGsJnUL.js} +5 -5
- package/public/assets/{FileExplorer-B41BB0LM.js → FileExplorer-x5R0Tcmk.js} +1 -1
- package/public/assets/GeneralSettingsPage-lhNEJQD_.js +1 -0
- package/public/assets/HooksPage-9fingjdz.js +1 -0
- package/public/assets/LandingPage-BAzi8PDo.js +1 -0
- package/public/assets/LoginPage-kQ_NWy8p.js +16 -0
- package/public/assets/McpAdminSettingsPage-DQHpWHRC.js +7 -0
- package/public/assets/McpPage-DLHfmhSJ.js +20 -0
- package/public/assets/{MemorySettingsPage-DYSuz-hU.js → MemorySettingsPage-CRIPja9X.js} +1 -1
- package/public/assets/ModelsPage-Bb5vSsuc.js +1 -0
- package/public/assets/PluginsPage-BhKM7gV7.js +12 -0
- package/public/assets/ProjectSelector-Cbct6pnn.js +1 -0
- package/public/assets/ProjectsPage-lQo7-7dt.js +21 -0
- package/public/assets/RulesPage-BRnB7__3.js +1 -0
- package/public/assets/ScheduledTasksPage-CZiABTSb.js +1 -0
- package/public/assets/SettingsLayout-BfG7ftoT.js +1 -0
- package/public/assets/SkillsPage-CL6MKxQ9.js +18 -0
- package/public/assets/{SubagentForm-C0R084ja.js → SubagentForm-BzzeWg0W.js} +2 -2
- package/public/assets/{SubagentsPage-BKFNmqxg.js → SubagentsPage-DhFP2kDE.js} +1 -1
- package/public/assets/SystemInfoPage-CFHUN3j8.js +1 -0
- package/public/assets/{TelemetrySettingsPage-Ck2btMol.js → TelemetrySettingsPage-BcZFVBXN.js} +1 -1
- package/public/assets/{ToastTestPage-B79DFhqI.js → ToastTestPage-BtGnZdyk.js} +1 -1
- package/public/assets/{ToolsList-Kfxwp80g.js → ToolsList-CTsQr53G.js} +1 -1
- package/public/assets/{UnifiedToolSelector-CkafUbz3.js → UnifiedToolSelector-BP6fuyzG.js} +1 -1
- package/public/assets/VersionSettingsPage-DjOjyL3X.js +5 -0
- package/public/assets/VoiceSettingsPage-d3l9AWBn.js +1 -0
- package/public/assets/WebSocketTunnelPage-CfHtJR9r.js +1 -0
- package/public/assets/_basePickBy-Bac3af5O.js +1 -0
- package/public/assets/{_baseUniq-COj5YnAO.js → _baseUniq-Dvh9sZ-T.js} +1 -1
- package/public/assets/{agents-3mB536QF.js → agents-KlPdWQ8K.js} +1 -1
- package/public/assets/arc-CRR5EPpK.js +1 -0
- package/public/assets/{architectureDiagram-VXUJARFQ-DD1BwT1T.js → architectureDiagram-VXUJARFQ-Ct1p8kmV.js} +1 -1
- package/public/assets/{blockDiagram-VD42YOAC-DFKUIZc6.js → blockDiagram-VD42YOAC-CX_8YiYn.js} +1 -1
- package/public/assets/{c4Diagram-YG6GDRKO-B0VVIIvh.js → c4Diagram-YG6GDRKO-BIBVWIY4.js} +1 -1
- package/public/assets/channel-CPs-2Y_m.js +1 -0
- package/public/assets/{chunk-4BX2VUAB-DM8J7YO9.js → chunk-4BX2VUAB-CQNNXsb5.js} +1 -1
- package/public/assets/{chunk-55IACEB6-BjhdmGlM.js → chunk-55IACEB6-N_ZrGhOu.js} +1 -1
- package/public/assets/{chunk-B4BG7PRW-1RJ6n2xv.js → chunk-B4BG7PRW-CI6DkhbM.js} +1 -1
- package/public/assets/{chunk-DI55MBZ5-1-EHSO67.js → chunk-DI55MBZ5-Dgj-Eo9U.js} +1 -1
- package/public/assets/{chunk-FMBD7UC4-DV3SMJK_.js → chunk-FMBD7UC4-o4B0HzSK.js} +1 -1
- package/public/assets/{chunk-QN33PNHL-IlsCTdDq.js → chunk-QN33PNHL-DXlfdPIk.js} +1 -1
- package/public/assets/{chunk-QZHKN3VN-DJXs-Fqo.js → chunk-QZHKN3VN-ZCBUGD7e.js} +1 -1
- package/public/assets/{chunk-TZMSLE5B-BxHO9wa1.js → chunk-TZMSLE5B-N3lZ106d.js} +1 -1
- package/public/assets/classDiagram-2ON5EDUG-DCwNRxvC.js +1 -0
- package/public/assets/classDiagram-v2-WZHVMYZB-DCwNRxvC.js +1 -0
- package/public/assets/clone-C3DcKvhB.js +1 -0
- package/public/assets/{cose-bilkent-S5V4N54A-BVJXoW_K.js → cose-bilkent-S5V4N54A-Crc39J9q.js} +1 -1
- package/public/assets/{dagre-6UL2VRFP-DHDnVshA.js → dagre-6UL2VRFP-nC3WLCf7.js} +1 -1
- package/public/assets/{diagram-PSM6KHXK-40qGxDeg.js → diagram-PSM6KHXK-B5DQIDQ3.js} +1 -1
- package/public/assets/diagram-QEK2KX5R-BccDOQuz.js +43 -0
- package/public/assets/{diagram-S2PKOQOG-D7AX72a5.js → diagram-S2PKOQOG-D-Cv16WE.js} +1 -1
- package/public/assets/{erDiagram-Q2GNP2WA-BHsgeBpL.js → erDiagram-Q2GNP2WA-Dr0ZgvnS.js} +1 -1
- package/public/assets/{flowDiagram-NV44I4VS-BYqChOSE.js → flowDiagram-NV44I4VS-DGbbfVi5.js} +1 -1
- package/public/assets/{ganttDiagram-LVOFAZNH-CZFFSLKX.js → ganttDiagram-LVOFAZNH-C-3Wnf96.js} +1 -1
- package/public/assets/{gitGraphDiagram-NY62KEGX-C5Bgrf0J.js → gitGraphDiagram-NY62KEGX--Q8whT5z.js} +1 -1
- package/public/assets/{graph-BP5lFRBg.js → graph-CO1DMS2E.js} +1 -1
- package/public/assets/{index-BEPv9Bqe.js → index-B5hSSnK3.js} +58 -58
- package/public/assets/index-gbHlIp96.css +1 -0
- package/public/assets/infoDiagram-F6ZHWCRC-DSR9cM2B.js +2 -0
- package/public/assets/{journeyDiagram-XKPGCS4Q--abC1RHz.js → journeyDiagram-XKPGCS4Q-Cc00zHNt.js} +1 -1
- package/public/assets/{kanban-definition-3W4ZIXB7-BJeChfWu.js → kanban-definition-3W4ZIXB7-BF_gHshF.js} +6 -6
- package/public/assets/{layout-DjAix4WK.js → layout-BxoLV88o.js} +1 -1
- package/public/assets/{linear-Cw0z8VNY.js → linear-Y8e2e012.js} +1 -1
- package/public/assets/{mindmap-definition-VGOIOE7T-U_T9xIUk.js → mindmap-definition-VGOIOE7T-CzpuQA4p.js} +1 -1
- package/public/assets/{pieDiagram-ADFJNKIX-B0mT9OgH.js → pieDiagram-ADFJNKIX-B22MhIcy.js} +2 -2
- package/public/assets/{quadrantDiagram-AYHSOK5B-BWdlgO0u.js → quadrantDiagram-AYHSOK5B-CTT9bIA8.js} +1 -1
- package/public/assets/{requirementDiagram-UZGBJVZJ-B-8LxsGB.js → requirementDiagram-UZGBJVZJ-B_vjXDH9.js} +1 -1
- package/public/assets/{sankeyDiagram-TZEHDZUN-OXuxkgGA.js → sankeyDiagram-TZEHDZUN-CKfZ4633.js} +1 -1
- package/public/assets/{sequenceDiagram-WL72ISMW-Bt5twlzi.js → sequenceDiagram-WL72ISMW-BmTPN6j6.js} +1 -1
- package/public/assets/{stateDiagram-FKZM4ZOC-Dmph7TeW.js → stateDiagram-FKZM4ZOC-y2fQE1C7.js} +1 -1
- package/public/assets/stateDiagram-v2-4FDKWEC3-C4CM6z52.js +1 -0
- package/public/assets/{table-DjMdAdjH.js → table-BJUz-ck5.js} +1 -1
- package/public/assets/{timeline-definition-IT6M3QCI-CcV8nyIH.js → timeline-definition-IT6M3QCI-DsXlR68n.js} +1 -1
- package/public/assets/{tools-BAI9XHGS.js → tools-BZTR2NP1.js} +1 -1
- package/public/assets/{treemap-KMMF4GRG-DBuwkj4f.js → treemap-KMMF4GRG-Cecs9uxX.js} +1 -1
- package/public/assets/{ui-components-DaGtjl0g.js → ui-components-DjgDPiqV.js} +153 -128
- package/public/assets/useAgents-8KXN6U61.js +2 -0
- package/public/assets/{useClaudeVersions-Cy71v4HE.js → useClaudeVersions-DicHLV6A.js} +1 -1
- package/public/assets/useCommands-DbSH48ba.js +1 -0
- package/public/assets/{useProjects-XgfgISgV.js → useProjects-Bbh6hJMM.js} +1 -1
- package/public/assets/{useSessions-CQgq4d84.js → useSessions-DOa4-xiB.js} +1 -1
- package/public/assets/{xychartDiagram-PRI3JC2R-Bo9K-U2S.js → xychartDiagram-PRI3JC2R-C2IWhyM7.js} +1 -1
- package/public/index.html +5 -5
- package/routes/a2a.d.ts +7 -0
- package/routes/a2a.d.ts.map +1 -1
- package/routes/a2a.js +193 -21
- package/routes/a2a.js.map +1 -1
- package/routes/agents.d.ts.map +1 -1
- package/routes/agents.js +45 -2
- package/routes/agents.js.map +1 -1
- package/routes/agui.d.ts +16 -0
- package/routes/agui.d.ts.map +1 -0
- package/routes/agui.js +520 -0
- package/routes/agui.js.map +1 -0
- package/routes/commands.d.ts.map +1 -1
- package/routes/commands.js +35 -3
- package/routes/commands.js.map +1 -1
- package/routes/cursorA2a.d.ts +18 -0
- package/routes/cursorA2a.d.ts.map +1 -0
- package/routes/cursorA2a.js +393 -0
- package/routes/cursorA2a.js.map +1 -0
- package/routes/engine.d.ts +12 -0
- package/routes/engine.d.ts.map +1 -0
- package/routes/engine.js +178 -0
- package/routes/engine.js.map +1 -0
- package/routes/gitVersions.d.ts +10 -0
- package/routes/gitVersions.d.ts.map +1 -0
- package/routes/gitVersions.js +147 -0
- package/routes/gitVersions.js.map +1 -0
- package/routes/hooks.d.ts +11 -0
- package/routes/hooks.d.ts.map +1 -0
- package/routes/hooks.js +303 -0
- package/routes/hooks.js.map +1 -0
- package/routes/mcp.d.ts.map +1 -1
- package/routes/mcp.js +28 -3
- package/routes/mcp.js.map +1 -1
- package/routes/plugins.d.ts.map +1 -1
- package/routes/plugins.js +317 -4
- package/routes/plugins.js.map +1 -1
- package/routes/rules.d.ts +9 -0
- package/routes/rules.d.ts.map +1 -0
- package/routes/rules.js +470 -0
- package/routes/rules.js.map +1 -0
- package/routes/sessions.d.ts.map +1 -1
- package/routes/sessions.js +68 -32
- package/routes/sessions.js.map +1 -1
- package/routes/speechToText.d.ts +8 -0
- package/routes/speechToText.d.ts.map +1 -0
- package/routes/speechToText.js +216 -0
- package/routes/speechToText.js.map +1 -0
- package/schemas/a2a.d.ts +2 -2
- package/services/__tests__/agentImporter.test.d.ts +5 -0
- package/services/__tests__/agentImporter.test.d.ts.map +1 -0
- package/services/__tests__/agentImporter.test.js +379 -0
- package/services/__tests__/agentImporter.test.js.map +1 -0
- package/services/__tests__/marketplaceUpdateService.test.d.ts +5 -0
- package/services/__tests__/marketplaceUpdateService.test.d.ts.map +1 -0
- package/services/__tests__/marketplaceUpdateService.test.js +227 -0
- package/services/__tests__/marketplaceUpdateService.test.js.map +1 -0
- package/services/__tests__/pluginInstaller.test.js +172 -0
- package/services/__tests__/pluginInstaller.test.js.map +1 -1
- package/services/__tests__/projectMetadataStorage.test.js +19 -4
- package/services/__tests__/projectMetadataStorage.test.js.map +1 -1
- package/services/a2a/__tests__/agentCardService.test.js +224 -0
- package/services/a2a/__tests__/agentCardService.test.js.map +1 -1
- package/services/a2a/__tests__/cursorA2aService.test.d.ts +6 -0
- package/services/a2a/__tests__/cursorA2aService.test.d.ts.map +1 -0
- package/services/a2a/__tests__/cursorA2aService.test.js +359 -0
- package/services/a2a/__tests__/cursorA2aService.test.js.map +1 -0
- package/services/a2a/agentCardService.d.ts +22 -0
- package/services/a2a/agentCardService.d.ts.map +1 -1
- package/services/a2a/agentCardService.js +246 -0
- package/services/a2a/agentCardService.js.map +1 -1
- package/services/a2a/cursorA2aService.d.ts +126 -0
- package/services/a2a/cursorA2aService.d.ts.map +1 -0
- package/services/a2a/cursorA2aService.js +336 -0
- package/services/a2a/cursorA2aService.js.map +1 -0
- package/services/agentImporter.d.ts +62 -0
- package/services/agentImporter.d.ts.map +1 -0
- package/services/agentImporter.js +335 -0
- package/services/agentImporter.js.map +1 -0
- package/services/cursorConfigService.d.ts +75 -0
- package/services/cursorConfigService.d.ts.map +1 -0
- package/services/cursorConfigService.js +538 -0
- package/services/cursorConfigService.js.map +1 -0
- package/services/gitVersionService.d.ts +52 -0
- package/services/gitVersionService.d.ts.map +1 -0
- package/services/gitVersionService.js +377 -0
- package/services/gitVersionService.js.map +1 -0
- package/services/marketplaceUpdateService.d.ts +66 -0
- package/services/marketplaceUpdateService.d.ts.map +1 -0
- package/services/marketplaceUpdateService.js +364 -0
- package/services/marketplaceUpdateService.js.map +1 -0
- package/services/mcpAdmin/__tests__/scheduledTaskTools.test.d.ts +5 -0
- package/services/mcpAdmin/__tests__/scheduledTaskTools.test.d.ts.map +1 -0
- package/services/mcpAdmin/__tests__/scheduledTaskTools.test.js +429 -0
- package/services/mcpAdmin/__tests__/scheduledTaskTools.test.js.map +1 -0
- 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/scheduledTaskTools.d.ts +64 -0
- package/services/mcpAdmin/tools/scheduledTaskTools.d.ts.map +1 -0
- package/services/mcpAdmin/tools/scheduledTaskTools.js +1002 -0
- package/services/mcpAdmin/tools/scheduledTaskTools.js.map +1 -0
- package/services/mcpAdmin/types.d.ts +1 -1
- package/services/mcpAdmin/types.d.ts.map +1 -1
- package/services/pluginInstaller.d.ts +55 -1
- package/services/pluginInstaller.d.ts.map +1 -1
- package/services/pluginInstaller.js +437 -13
- package/services/pluginInstaller.js.map +1 -1
- package/services/projectMetadataStorage.d.ts.map +1 -1
- package/services/projectMetadataStorage.js +4 -2
- package/services/projectMetadataStorage.js.map +1 -1
- package/services/sessionEventBus.d.ts +67 -0
- package/services/sessionEventBus.d.ts.map +1 -0
- package/services/sessionEventBus.js +106 -0
- package/services/sessionEventBus.js.map +1 -0
- package/services/sessionManager.d.ts.map +1 -1
- package/services/sessionManager.js +4 -2
- package/services/sessionManager.js.map +1 -1
- package/services/speechToText/__tests__/speechToText.test.d.ts +5 -0
- package/services/speechToText/__tests__/speechToText.test.d.ts.map +1 -0
- package/services/speechToText/__tests__/speechToText.test.js +208 -0
- package/services/speechToText/__tests__/speechToText.test.js.map +1 -0
- package/services/speechToText/index.d.ts +25 -0
- package/services/speechToText/index.d.ts.map +1 -0
- package/services/speechToText/index.js +228 -0
- package/services/speechToText/index.js.map +1 -0
- package/services/speechToText/providers/aliyun.d.ts +22 -0
- package/services/speechToText/providers/aliyun.d.ts.map +1 -0
- package/services/speechToText/providers/aliyun.js +185 -0
- package/services/speechToText/providers/aliyun.js.map +1 -0
- package/services/speechToText/providers/google.d.ts +24 -0
- package/services/speechToText/providers/google.d.ts.map +1 -0
- package/services/speechToText/providers/google.js +205 -0
- package/services/speechToText/providers/google.js.map +1 -0
- package/services/speechToText/providers/openaiCompatible.d.ts +22 -0
- package/services/speechToText/providers/openaiCompatible.d.ts.map +1 -0
- package/services/speechToText/providers/openaiCompatible.js +198 -0
- package/services/speechToText/providers/openaiCompatible.js.map +1 -0
- package/services/speechToText/providers/tencent.d.ts +23 -0
- package/services/speechToText/providers/tencent.d.ts.map +1 -0
- package/services/speechToText/providers/tencent.js +215 -0
- package/services/speechToText/providers/tencent.js.map +1 -0
- package/services/speechToText/types.d.ts +102 -0
- package/services/speechToText/types.d.ts.map +1 -0
- package/services/speechToText/types.js +43 -0
- package/services/speechToText/types.js.map +1 -0
- package/services/taskExecutor/__tests__/mcp-tools-integration.test.d.ts +8 -2
- package/services/taskExecutor/__tests__/mcp-tools-integration.test.d.ts.map +1 -1
- package/services/taskExecutor/__tests__/mcp-tools-integration.test.js +215 -72
- package/services/taskExecutor/__tests__/mcp-tools-integration.test.js.map +1 -1
- package/services/taskExecutor/taskWorker.js +9 -1
- package/services/taskExecutor/taskWorker.js.map +1 -1
- package/services/telemetry.js +1 -1
- package/types/a2a.d.ts +20 -0
- package/types/a2a.d.ts.map +1 -1
- package/types/engine.d.ts +314 -0
- package/types/engine.d.ts.map +1 -0
- package/types/engine.js +14 -0
- package/types/engine.js.map +1 -0
- package/types/hooks.d.ts +45 -0
- package/types/hooks.d.ts.map +1 -0
- package/types/hooks.js +9 -0
- package/types/hooks.js.map +1 -0
- package/types/plugins.d.ts +86 -2
- package/types/plugins.d.ts.map +1 -1
- package/types/plugins.js +1 -0
- package/types/plugins.js.map +1 -1
- package/types/rules.d.ts +51 -0
- package/types/rules.d.ts.map +1 -0
- package/types/rules.js +9 -0
- package/types/rules.js.map +1 -0
- package/utils/__tests__/cursorIdeAgentParser.test.d.ts +7 -0
- package/utils/__tests__/cursorIdeAgentParser.test.d.ts.map +1 -0
- package/utils/__tests__/cursorIdeAgentParser.test.js +289 -0
- package/utils/__tests__/cursorIdeAgentParser.test.js.map +1 -0
- package/utils/claudeUtils.d.ts +3 -1
- package/utils/claudeUtils.d.ts.map +1 -1
- package/utils/claudeUtils.js +26 -12
- package/utils/claudeUtils.js.map +1 -1
- package/utils/cursorCliHistoryParser.d.ts +58 -0
- package/utils/cursorCliHistoryParser.d.ts.map +1 -0
- package/utils/cursorCliHistoryParser.js +664 -0
- package/utils/cursorCliHistoryParser.js.map +1 -0
- package/utils/cursorIdeAgentParser.d.ts +49 -0
- package/utils/cursorIdeAgentParser.d.ts.map +1 -0
- package/utils/cursorIdeAgentParser.js +332 -0
- package/utils/cursorIdeAgentParser.js.map +1 -0
- package/public/assets/AgentsPage-gSnkPp2k.js +0 -10
- package/public/assets/ChatPage-BMrfVkpt.js +0 -471
- package/public/assets/CommandsPage-B6u4IO7L.js +0 -1
- package/public/assets/GeneralSettingsPage-BbEbWJUQ.js +0 -1
- package/public/assets/LandingPage-DFPm2d4Y.js +0 -1
- package/public/assets/LoginPage-D5kZJqhk.js +0 -16
- package/public/assets/McpAdminSettingsPage-D32iUEjH.js +0 -7
- package/public/assets/McpPage-QT4qs391.js +0 -20
- package/public/assets/PluginsPage-BotzuK9f.js +0 -1
- package/public/assets/ProjectSelector-DujNObqr.js +0 -1
- package/public/assets/ProjectsPage-CRWe6HPl.js +0 -21
- package/public/assets/ScheduledTasksPage-Beeurg-w.js +0 -1
- package/public/assets/SettingsLayout-BfkBUyI_.js +0 -1
- package/public/assets/SkillsPage-B59bAr6W.js +0 -18
- package/public/assets/SystemInfoPage-D89s7PjE.js +0 -1
- package/public/assets/VersionSettingsPage-CaB4PH6h.js +0 -5
- package/public/assets/WebSocketTunnelPage-Cbru_-hL.js +0 -1
- package/public/assets/_basePickBy-5fAM04Ra.js +0 -1
- package/public/assets/arc-C2gTU2ZR.js +0 -1
- package/public/assets/channel-DcVTcy-S.js +0 -1
- package/public/assets/classDiagram-2ON5EDUG-BXVT6Q7h.js +0 -1
- package/public/assets/classDiagram-v2-WZHVMYZB-BXVT6Q7h.js +0 -1
- package/public/assets/clone-Bp6orjIq.js +0 -1
- package/public/assets/diagram-QEK2KX5R-BfMGeeRo.js +0 -43
- package/public/assets/index-BgR-BTTw.css +0 -1
- package/public/assets/infoDiagram-F6ZHWCRC-C6OApgqf.js +0 -2
- package/public/assets/stateDiagram-v2-4FDKWEC3-DyE8O3Kx.js +0 -1
- package/public/assets/useAgents-D5EDAc_E.js +0 -2
- package/public/assets/useCommands-BgoCfyuu.js +0 -1
package/routes/engine.js
ADDED
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Engine Configuration API Routes
|
|
4
|
+
*
|
|
5
|
+
* Provides endpoints for:
|
|
6
|
+
* - GET /api/engine - Get current engine configuration
|
|
7
|
+
* - GET /api/engine/capabilities - Get engine capabilities
|
|
8
|
+
* - GET /api/engine/paths - Get engine paths configuration
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
const express_1 = require("express");
|
|
12
|
+
const engineConfig_js_1 = require("../config/engineConfig.js");
|
|
13
|
+
const cursorConfigService_js_1 = require("../services/cursorConfigService.js");
|
|
14
|
+
const router = (0, express_1.Router)();
|
|
15
|
+
/**
|
|
16
|
+
* GET /api/engine
|
|
17
|
+
* Get current engine configuration
|
|
18
|
+
*/
|
|
19
|
+
router.get('/', (_req, res) => {
|
|
20
|
+
try {
|
|
21
|
+
const config = (0, engineConfig_js_1.getEngineConfig)();
|
|
22
|
+
const response = {
|
|
23
|
+
engine: config.engine,
|
|
24
|
+
name: config.name,
|
|
25
|
+
version: config.version,
|
|
26
|
+
capabilities: config.capabilities,
|
|
27
|
+
paths: config.paths,
|
|
28
|
+
};
|
|
29
|
+
res.json(response);
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
console.error('Error getting engine config:', error);
|
|
33
|
+
res.status(500).json({
|
|
34
|
+
error: 'Failed to get engine configuration',
|
|
35
|
+
message: error instanceof Error ? error.message : 'Unknown error',
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
/**
|
|
40
|
+
* GET /api/engine/capabilities
|
|
41
|
+
* Get engine capabilities only
|
|
42
|
+
*/
|
|
43
|
+
router.get('/capabilities', (_req, res) => {
|
|
44
|
+
try {
|
|
45
|
+
const config = (0, engineConfig_js_1.getEngineConfig)();
|
|
46
|
+
res.json(config.capabilities);
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
console.error('Error getting engine capabilities:', error);
|
|
50
|
+
res.status(500).json({
|
|
51
|
+
error: 'Failed to get engine capabilities',
|
|
52
|
+
message: error instanceof Error ? error.message : 'Unknown error',
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
/**
|
|
57
|
+
* GET /api/engine/paths
|
|
58
|
+
* Get engine paths configuration
|
|
59
|
+
*/
|
|
60
|
+
router.get('/paths', (_req, res) => {
|
|
61
|
+
try {
|
|
62
|
+
const paths = (0, engineConfig_js_1.getEnginePaths)();
|
|
63
|
+
res.json(paths);
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
console.error('Error getting engine paths:', error);
|
|
67
|
+
res.status(500).json({
|
|
68
|
+
error: 'Failed to get engine paths',
|
|
69
|
+
message: error instanceof Error ? error.message : 'Unknown error',
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
/**
|
|
74
|
+
* GET /api/engine/feature/:feature
|
|
75
|
+
* Check if a specific feature is supported
|
|
76
|
+
*/
|
|
77
|
+
router.get('/feature/:feature', (req, res) => {
|
|
78
|
+
try {
|
|
79
|
+
const { feature } = req.params;
|
|
80
|
+
const config = (0, engineConfig_js_1.getEngineConfig)();
|
|
81
|
+
const features = config.capabilities.features;
|
|
82
|
+
if (!(feature in features)) {
|
|
83
|
+
res.status(400).json({
|
|
84
|
+
error: 'Unknown feature',
|
|
85
|
+
message: `Feature "${feature}" is not recognized`,
|
|
86
|
+
validFeatures: Object.keys(features),
|
|
87
|
+
});
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
const supported = (0, engineConfig_js_1.isFeatureSupported)(feature);
|
|
91
|
+
res.json({
|
|
92
|
+
feature,
|
|
93
|
+
supported,
|
|
94
|
+
engine: (0, engineConfig_js_1.getEngineType)(),
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
console.error('Error checking feature:', error);
|
|
99
|
+
res.status(500).json({
|
|
100
|
+
error: 'Failed to check feature support',
|
|
101
|
+
message: error instanceof Error ? error.message : 'Unknown error',
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
/**
|
|
106
|
+
* GET /api/engine/project-data
|
|
107
|
+
* Get project data directory information
|
|
108
|
+
*/
|
|
109
|
+
router.get('/project-data', (req, res) => {
|
|
110
|
+
try {
|
|
111
|
+
const { projectPath } = req.query;
|
|
112
|
+
if (!projectPath || typeof projectPath !== 'string') {
|
|
113
|
+
res.status(400).json({
|
|
114
|
+
error: 'Missing projectPath query parameter',
|
|
115
|
+
});
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
const hash = (0, engineConfig_js_1.projectPathToHash)(projectPath);
|
|
119
|
+
const dataDir = (0, engineConfig_js_1.getProjectDataDir)(projectPath);
|
|
120
|
+
res.json({
|
|
121
|
+
projectPath,
|
|
122
|
+
hash,
|
|
123
|
+
dataDir,
|
|
124
|
+
mcpsDir: `${dataDir}/mcps`,
|
|
125
|
+
transcriptsDir: `${dataDir}/agent-transcripts`,
|
|
126
|
+
terminalsDir: `${dataDir}/terminals`,
|
|
127
|
+
assetsDir: `${dataDir}/assets`,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
console.error('Error getting project data:', error);
|
|
132
|
+
res.status(500).json({
|
|
133
|
+
error: 'Failed to get project data directory',
|
|
134
|
+
message: error instanceof Error ? error.message : 'Unknown error',
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
/**
|
|
139
|
+
* GET /api/engine/cursor-config
|
|
140
|
+
* Get Cursor configuration (MCP, rules, commands, skills, plugins)
|
|
141
|
+
* Only available when running with cursor-cli engine
|
|
142
|
+
*/
|
|
143
|
+
router.get('/cursor-config', async (_req, res) => {
|
|
144
|
+
try {
|
|
145
|
+
if (!(0, engineConfig_js_1.isCursorEngine)()) {
|
|
146
|
+
res.status(400).json({
|
|
147
|
+
error: 'Not available',
|
|
148
|
+
message: 'This endpoint is only available when running with cursor-cli engine',
|
|
149
|
+
});
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
const [mcp, rules, commands, skills, plugins, marketplaces] = await Promise.all([
|
|
153
|
+
(0, cursorConfigService_js_1.getMcpServers)(),
|
|
154
|
+
(0, cursorConfigService_js_1.getRules)(),
|
|
155
|
+
(0, cursorConfigService_js_1.getCommands)(),
|
|
156
|
+
(0, cursorConfigService_js_1.getSkills)(),
|
|
157
|
+
(0, cursorConfigService_js_1.getPluginsConfig)(),
|
|
158
|
+
(0, cursorConfigService_js_1.getMarketplacesConfig)(),
|
|
159
|
+
]);
|
|
160
|
+
res.json({
|
|
161
|
+
mcp,
|
|
162
|
+
rules,
|
|
163
|
+
commands,
|
|
164
|
+
skills,
|
|
165
|
+
plugins,
|
|
166
|
+
marketplaces,
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
console.error('Error getting Cursor config:', error);
|
|
171
|
+
res.status(500).json({
|
|
172
|
+
error: 'Failed to get Cursor configuration',
|
|
173
|
+
message: error instanceof Error ? error.message : 'Unknown error',
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
exports.default = router;
|
|
178
|
+
//# sourceMappingURL=engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/routes/engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Git Version Management API Routes
|
|
3
|
+
*
|
|
4
|
+
* Provides endpoints for managing project versions via Git.
|
|
5
|
+
* All routes are scoped under /api/projects/:projectId/versions
|
|
6
|
+
*/
|
|
7
|
+
import express from 'express';
|
|
8
|
+
declare const router: express.Router;
|
|
9
|
+
export default router;
|
|
10
|
+
//# sourceMappingURL=gitVersions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitVersions.d.ts","sourceRoot":"","sources":["../../src/routes/gitVersions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,OAAO,MAAM,SAAS,CAAC;AAe9B,QAAA,MAAM,MAAM,EAAE,OAAO,CAAC,MAA8C,CAAC;AAsJrE,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Git Version Management API Routes
|
|
4
|
+
*
|
|
5
|
+
* Provides endpoints for managing project versions via Git.
|
|
6
|
+
* All routes are scoped under /api/projects/:projectId/versions
|
|
7
|
+
*/
|
|
8
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
const express_1 = __importDefault(require("express"));
|
|
13
|
+
const projectMetadataStorage_1 = require("../services/projectMetadataStorage");
|
|
14
|
+
const gitVersionService_1 = require("../services/gitVersionService");
|
|
15
|
+
const router = express_1.default.Router({ mergeParams: true });
|
|
16
|
+
const projectStorage = new projectMetadataStorage_1.ProjectMetadataStorage();
|
|
17
|
+
/**
|
|
18
|
+
* Resolve project path from the projectId URL parameter.
|
|
19
|
+
* projectId can be an encoded path or a project identifier.
|
|
20
|
+
*/
|
|
21
|
+
function resolveProjectPath(projectId) {
|
|
22
|
+
const decodedPath = decodeURIComponent(projectId);
|
|
23
|
+
// Try to look up the project to get the real path
|
|
24
|
+
const project = projectStorage.getProject(decodedPath);
|
|
25
|
+
if (project && project.path) {
|
|
26
|
+
return project.path;
|
|
27
|
+
}
|
|
28
|
+
// Fallback: use decoded path directly
|
|
29
|
+
return decodedPath;
|
|
30
|
+
}
|
|
31
|
+
// ========================================
|
|
32
|
+
// GET /api/projects/:projectId/versions
|
|
33
|
+
// List all versions for a project
|
|
34
|
+
// ========================================
|
|
35
|
+
router.get('/', async (req, res) => {
|
|
36
|
+
try {
|
|
37
|
+
const projectPath = resolveProjectPath(req.params.projectId);
|
|
38
|
+
const versions = await (0, gitVersionService_1.listVersions)(projectPath);
|
|
39
|
+
res.json({ versions });
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
console.error('[GitVersion] Error listing versions:', error.message);
|
|
43
|
+
res.status(500).json({ error: error.message || 'Failed to list versions' });
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
// ========================================
|
|
47
|
+
// GET /api/projects/:projectId/versions/status
|
|
48
|
+
// Get version status (current version, dirty state, etc.)
|
|
49
|
+
// ========================================
|
|
50
|
+
router.get('/status', async (req, res) => {
|
|
51
|
+
try {
|
|
52
|
+
const projectPath = resolveProjectPath(req.params.projectId);
|
|
53
|
+
const status = await (0, gitVersionService_1.getVersionStatus)(projectPath);
|
|
54
|
+
res.json(status);
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
console.error('[GitVersion] Error getting version status:', error.message);
|
|
58
|
+
res.status(500).json({ error: error.message || 'Failed to get version status' });
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
// ========================================
|
|
62
|
+
// POST /api/projects/:projectId/versions
|
|
63
|
+
// Create a new version
|
|
64
|
+
// Body: { message: string }
|
|
65
|
+
// ========================================
|
|
66
|
+
router.post('/', async (req, res) => {
|
|
67
|
+
try {
|
|
68
|
+
const projectPath = resolveProjectPath(req.params.projectId);
|
|
69
|
+
const { message } = req.body;
|
|
70
|
+
if (!message || typeof message !== 'string' || !message.trim()) {
|
|
71
|
+
return res.status(400).json({ error: 'Version message is required' });
|
|
72
|
+
}
|
|
73
|
+
const result = await (0, gitVersionService_1.createVersion)(projectPath, message.trim());
|
|
74
|
+
console.log(`[GitVersion] Created version ${result.tag} for project: ${projectPath}`);
|
|
75
|
+
res.json({
|
|
76
|
+
success: true,
|
|
77
|
+
version: result,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
console.error('[GitVersion] Error creating version:', error.message);
|
|
82
|
+
if (error.message.includes('No changes to save')) {
|
|
83
|
+
return res.status(400).json({ error: error.message });
|
|
84
|
+
}
|
|
85
|
+
res.status(500).json({ error: error.message || 'Failed to create version' });
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
// ========================================
|
|
89
|
+
// POST /api/projects/:projectId/versions/checkout
|
|
90
|
+
// Switch to a specific version
|
|
91
|
+
// Body: { tag: string, force?: boolean }
|
|
92
|
+
// ========================================
|
|
93
|
+
router.post('/checkout', async (req, res) => {
|
|
94
|
+
try {
|
|
95
|
+
const projectPath = resolveProjectPath(req.params.projectId);
|
|
96
|
+
const { tag, force } = req.body;
|
|
97
|
+
if (!tag || typeof tag !== 'string') {
|
|
98
|
+
return res.status(400).json({ error: 'Version tag is required' });
|
|
99
|
+
}
|
|
100
|
+
await (0, gitVersionService_1.checkoutVersion)(projectPath, tag, !!force);
|
|
101
|
+
console.log(`[GitVersion] Checked out version ${tag} for project: ${projectPath}`);
|
|
102
|
+
res.json({
|
|
103
|
+
success: true,
|
|
104
|
+
message: `Switched to version ${tag}`,
|
|
105
|
+
tag,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
console.error('[GitVersion] Error checking out version:', error.message);
|
|
110
|
+
if (error.message === 'DIRTY_WORKING_TREE') {
|
|
111
|
+
return res.status(409).json({
|
|
112
|
+
error: 'Working tree has uncommitted changes',
|
|
113
|
+
code: 'DIRTY_WORKING_TREE',
|
|
114
|
+
message: 'Please save a new version or discard changes before switching versions.',
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
if (error.message.includes('not found')) {
|
|
118
|
+
return res.status(404).json({ error: error.message });
|
|
119
|
+
}
|
|
120
|
+
res.status(500).json({ error: error.message || 'Failed to checkout version' });
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
// ========================================
|
|
124
|
+
// DELETE /api/projects/:projectId/versions/:tag
|
|
125
|
+
// Delete a version tag
|
|
126
|
+
// ========================================
|
|
127
|
+
router.delete('/:tag', async (req, res) => {
|
|
128
|
+
try {
|
|
129
|
+
const projectPath = resolveProjectPath(req.params.projectId);
|
|
130
|
+
const tag = req.params.tag;
|
|
131
|
+
await (0, gitVersionService_1.deleteVersion)(projectPath, tag);
|
|
132
|
+
console.log(`[GitVersion] Deleted version ${tag} for project: ${projectPath}`);
|
|
133
|
+
res.json({
|
|
134
|
+
success: true,
|
|
135
|
+
message: `Version ${tag} deleted`,
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
console.error('[GitVersion] Error deleting version:', error.message);
|
|
140
|
+
if (error.message.includes('not found')) {
|
|
141
|
+
return res.status(404).json({ error: error.message });
|
|
142
|
+
}
|
|
143
|
+
res.status(500).json({ error: error.message || 'Failed to delete version' });
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
exports.default = router;
|
|
147
|
+
//# sourceMappingURL=gitVersions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitVersions.js","sourceRoot":"","sources":["../../src/routes/gitVersions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hooks API routes (Claude Code only)
|
|
3
|
+
*
|
|
4
|
+
* Hooks are configured in settings files:
|
|
5
|
+
* - Global: ~/.claude/settings.json
|
|
6
|
+
* - Local: .claude/settings.local.json
|
|
7
|
+
*/
|
|
8
|
+
import { Router } from 'express';
|
|
9
|
+
declare const router: Router;
|
|
10
|
+
export default router;
|
|
11
|
+
//# sourceMappingURL=hooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/routes/hooks.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAgB,EAAE,MAAM,EAAqB,MAAM,SAAS,CAAC;AAQ7D,QAAA,MAAM,MAAM,EAAE,MAAiB,CAAC;AA2UhC,eAAe,MAAM,CAAC"}
|
package/routes/hooks.js
ADDED
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Hooks API routes (Claude Code only)
|
|
4
|
+
*
|
|
5
|
+
* Hooks are configured in settings files:
|
|
6
|
+
* - Global: ~/.claude/settings.json
|
|
7
|
+
* - Local: .claude/settings.local.json
|
|
8
|
+
*/
|
|
9
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
10
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
const express_1 = require("express");
|
|
14
|
+
const promises_1 = __importDefault(require("fs/promises"));
|
|
15
|
+
const path_1 = __importDefault(require("path"));
|
|
16
|
+
const os_1 = __importDefault(require("os"));
|
|
17
|
+
const engineConfig_js_1 = require("../config/engineConfig.js");
|
|
18
|
+
const sdkConfig_js_1 = require("../config/sdkConfig.js");
|
|
19
|
+
const router = (0, express_1.Router)();
|
|
20
|
+
// Get global settings file path
|
|
21
|
+
const getGlobalSettingsPath = () => {
|
|
22
|
+
return path_1.default.join(os_1.default.homedir(), '.claude', 'settings.json');
|
|
23
|
+
};
|
|
24
|
+
// Get local settings file path
|
|
25
|
+
const getLocalSettingsPath = (projectPath) => {
|
|
26
|
+
const sdkDirName = (0, sdkConfig_js_1.getSdkDirName)();
|
|
27
|
+
if (projectPath) {
|
|
28
|
+
return path_1.default.join(projectPath, sdkDirName, 'settings.local.json');
|
|
29
|
+
}
|
|
30
|
+
return path_1.default.join(process.cwd(), '..', sdkDirName, 'settings.local.json');
|
|
31
|
+
};
|
|
32
|
+
// Check if file exists
|
|
33
|
+
async function fileExists(filePath) {
|
|
34
|
+
try {
|
|
35
|
+
await promises_1.default.access(filePath);
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// Read settings file
|
|
43
|
+
async function readSettingsFile(filePath) {
|
|
44
|
+
try {
|
|
45
|
+
if (!(await fileExists(filePath))) {
|
|
46
|
+
return {};
|
|
47
|
+
}
|
|
48
|
+
const content = await promises_1.default.readFile(filePath, 'utf-8');
|
|
49
|
+
return JSON.parse(content);
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
console.error(`Error reading settings file ${filePath}:`, error);
|
|
53
|
+
return {};
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
// Write settings file
|
|
57
|
+
async function writeSettingsFile(filePath, settings) {
|
|
58
|
+
const dir = path_1.default.dirname(filePath);
|
|
59
|
+
await promises_1.default.mkdir(dir, { recursive: true });
|
|
60
|
+
await promises_1.default.writeFile(filePath, JSON.stringify(settings, null, 2), 'utf-8');
|
|
61
|
+
}
|
|
62
|
+
// Extract hooks from settings
|
|
63
|
+
function extractHooks(settings, scope) {
|
|
64
|
+
const hooksConfig = settings;
|
|
65
|
+
const hooks = hooksConfig.hooks || [];
|
|
66
|
+
return hooks.map((hook, index) => ({
|
|
67
|
+
id: `${scope}:${index}`,
|
|
68
|
+
event: hook.event,
|
|
69
|
+
command: hook.command,
|
|
70
|
+
matcher: hook.matcher,
|
|
71
|
+
enabled: hook.enabled !== false,
|
|
72
|
+
timeout: hook.timeout,
|
|
73
|
+
}));
|
|
74
|
+
}
|
|
75
|
+
// GET /api/hooks - List all hooks
|
|
76
|
+
router.get('/', async (req, res) => {
|
|
77
|
+
try {
|
|
78
|
+
// Hooks are only available in Claude SDK mode
|
|
79
|
+
if ((0, engineConfig_js_1.isCursorEngine)()) {
|
|
80
|
+
res.status(400).json({
|
|
81
|
+
error: 'Not available',
|
|
82
|
+
message: 'Hooks are only available when using Claude SDK engine',
|
|
83
|
+
});
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
const projectPath = req.query.projectPath;
|
|
87
|
+
const scope = req.query.scope || 'all';
|
|
88
|
+
const hooks = [];
|
|
89
|
+
// Read global hooks
|
|
90
|
+
if (scope === 'all' || scope === 'global') {
|
|
91
|
+
const globalSettings = await readSettingsFile(getGlobalSettingsPath());
|
|
92
|
+
const globalHooks = extractHooks(globalSettings, 'global');
|
|
93
|
+
hooks.push(...globalHooks);
|
|
94
|
+
}
|
|
95
|
+
// Read local hooks
|
|
96
|
+
if (scope === 'all' || scope === 'local') {
|
|
97
|
+
const localSettings = await readSettingsFile(getLocalSettingsPath(projectPath));
|
|
98
|
+
const localHooks = extractHooks(localSettings, 'local');
|
|
99
|
+
hooks.push(...localHooks);
|
|
100
|
+
}
|
|
101
|
+
res.json({
|
|
102
|
+
hooks,
|
|
103
|
+
engine: 'claude-sdk',
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
console.error('Error listing hooks:', error);
|
|
108
|
+
res.status(500).json({ error: 'Failed to list hooks' });
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
// GET /api/hooks/:id - Get a single hook
|
|
112
|
+
router.get('/:id', async (req, res) => {
|
|
113
|
+
try {
|
|
114
|
+
if ((0, engineConfig_js_1.isCursorEngine)()) {
|
|
115
|
+
res.status(400).json({
|
|
116
|
+
error: 'Not available',
|
|
117
|
+
message: 'Hooks are only available when using Claude SDK engine',
|
|
118
|
+
});
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
const { id } = req.params;
|
|
122
|
+
const projectPath = req.query.projectPath;
|
|
123
|
+
// Parse id format: scope:index
|
|
124
|
+
const [scope, indexStr] = id.split(':');
|
|
125
|
+
const index = parseInt(indexStr, 10);
|
|
126
|
+
if (!scope || isNaN(index) || !['global', 'local'].includes(scope)) {
|
|
127
|
+
res.status(400).json({ error: 'Invalid hook ID format. Expected: scope:index' });
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
const settingsPath = scope === 'global'
|
|
131
|
+
? getGlobalSettingsPath()
|
|
132
|
+
: getLocalSettingsPath(projectPath);
|
|
133
|
+
const settings = await readSettingsFile(settingsPath);
|
|
134
|
+
const hooksConfig = settings;
|
|
135
|
+
const hooks = hooksConfig.hooks || [];
|
|
136
|
+
if (index < 0 || index >= hooks.length) {
|
|
137
|
+
res.status(404).json({ error: 'Hook not found' });
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
const hook = hooks[index];
|
|
141
|
+
const hookItem = {
|
|
142
|
+
id,
|
|
143
|
+
event: hook.event,
|
|
144
|
+
command: hook.command,
|
|
145
|
+
matcher: hook.matcher,
|
|
146
|
+
enabled: hook.enabled !== false,
|
|
147
|
+
timeout: hook.timeout,
|
|
148
|
+
};
|
|
149
|
+
res.json({ hook: hookItem });
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
console.error('Error getting hook:', error);
|
|
153
|
+
res.status(500).json({ error: 'Failed to get hook' });
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
// POST /api/hooks - Create a new hook
|
|
157
|
+
router.post('/', async (req, res) => {
|
|
158
|
+
try {
|
|
159
|
+
if ((0, engineConfig_js_1.isCursorEngine)()) {
|
|
160
|
+
res.status(400).json({
|
|
161
|
+
error: 'Not available',
|
|
162
|
+
message: 'Hooks are only available when using Claude SDK engine',
|
|
163
|
+
});
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
const hookData = req.body;
|
|
167
|
+
const projectPath = req.query.projectPath;
|
|
168
|
+
const scope = req.query.scope || 'global';
|
|
169
|
+
if (!hookData.event || !hookData.command) {
|
|
170
|
+
res.status(400).json({ error: 'Missing required fields: event, command' });
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
const validEvents = [
|
|
174
|
+
'PreToolUse', 'PostToolUse', 'PostToolUseFailure',
|
|
175
|
+
'PermissionRequest', 'SessionStart', 'UserPromptSubmit', 'Notification'
|
|
176
|
+
];
|
|
177
|
+
if (!validEvents.includes(hookData.event)) {
|
|
178
|
+
res.status(400).json({ error: `Invalid event type. Must be one of: ${validEvents.join(', ')}` });
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
const settingsPath = scope === 'global'
|
|
182
|
+
? getGlobalSettingsPath()
|
|
183
|
+
: getLocalSettingsPath(projectPath);
|
|
184
|
+
const settings = await readSettingsFile(settingsPath);
|
|
185
|
+
const hooksConfig = settings;
|
|
186
|
+
if (!hooksConfig.hooks) {
|
|
187
|
+
hooksConfig.hooks = [];
|
|
188
|
+
}
|
|
189
|
+
const newHook = {
|
|
190
|
+
event: hookData.event,
|
|
191
|
+
command: hookData.command,
|
|
192
|
+
matcher: hookData.matcher,
|
|
193
|
+
enabled: hookData.enabled !== false,
|
|
194
|
+
timeout: hookData.timeout,
|
|
195
|
+
};
|
|
196
|
+
hooksConfig.hooks.push(newHook);
|
|
197
|
+
await writeSettingsFile(settingsPath, settings);
|
|
198
|
+
const hookItem = {
|
|
199
|
+
id: `${scope}:${hooksConfig.hooks.length - 1}`,
|
|
200
|
+
...newHook,
|
|
201
|
+
enabled: newHook.enabled !== false,
|
|
202
|
+
};
|
|
203
|
+
res.status(201).json({ hook: hookItem, message: 'Hook created successfully' });
|
|
204
|
+
}
|
|
205
|
+
catch (error) {
|
|
206
|
+
console.error('Error creating hook:', error);
|
|
207
|
+
res.status(500).json({ error: 'Failed to create hook' });
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
// PUT /api/hooks/:id - Update a hook
|
|
211
|
+
router.put('/:id', async (req, res) => {
|
|
212
|
+
try {
|
|
213
|
+
if ((0, engineConfig_js_1.isCursorEngine)()) {
|
|
214
|
+
res.status(400).json({
|
|
215
|
+
error: 'Not available',
|
|
216
|
+
message: 'Hooks are only available when using Claude SDK engine',
|
|
217
|
+
});
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
const { id } = req.params;
|
|
221
|
+
const updateData = req.body;
|
|
222
|
+
const projectPath = req.query.projectPath;
|
|
223
|
+
// Parse id format: scope:index
|
|
224
|
+
const [scope, indexStr] = id.split(':');
|
|
225
|
+
const index = parseInt(indexStr, 10);
|
|
226
|
+
if (!scope || isNaN(index) || !['global', 'local'].includes(scope)) {
|
|
227
|
+
res.status(400).json({ error: 'Invalid hook ID format. Expected: scope:index' });
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
const settingsPath = scope === 'global'
|
|
231
|
+
? getGlobalSettingsPath()
|
|
232
|
+
: getLocalSettingsPath(projectPath);
|
|
233
|
+
const settings = await readSettingsFile(settingsPath);
|
|
234
|
+
const hooksConfig = settings;
|
|
235
|
+
const hooks = hooksConfig.hooks || [];
|
|
236
|
+
if (index < 0 || index >= hooks.length) {
|
|
237
|
+
res.status(404).json({ error: 'Hook not found' });
|
|
238
|
+
return;
|
|
239
|
+
}
|
|
240
|
+
// Update hook
|
|
241
|
+
const existingHook = hooks[index];
|
|
242
|
+
const updatedHook = {
|
|
243
|
+
event: updateData.event ?? existingHook.event,
|
|
244
|
+
command: updateData.command ?? existingHook.command,
|
|
245
|
+
matcher: updateData.matcher ?? existingHook.matcher,
|
|
246
|
+
enabled: updateData.enabled ?? existingHook.enabled,
|
|
247
|
+
timeout: updateData.timeout ?? existingHook.timeout,
|
|
248
|
+
};
|
|
249
|
+
hooks[index] = updatedHook;
|
|
250
|
+
await writeSettingsFile(settingsPath, settings);
|
|
251
|
+
const hookItem = {
|
|
252
|
+
id,
|
|
253
|
+
...updatedHook,
|
|
254
|
+
enabled: updatedHook.enabled !== false,
|
|
255
|
+
};
|
|
256
|
+
res.json({ hook: hookItem, message: 'Hook updated successfully' });
|
|
257
|
+
}
|
|
258
|
+
catch (error) {
|
|
259
|
+
console.error('Error updating hook:', error);
|
|
260
|
+
res.status(500).json({ error: 'Failed to update hook' });
|
|
261
|
+
}
|
|
262
|
+
});
|
|
263
|
+
// DELETE /api/hooks/:id - Delete a hook
|
|
264
|
+
router.delete('/:id', async (req, res) => {
|
|
265
|
+
try {
|
|
266
|
+
if ((0, engineConfig_js_1.isCursorEngine)()) {
|
|
267
|
+
res.status(400).json({
|
|
268
|
+
error: 'Not available',
|
|
269
|
+
message: 'Hooks are only available when using Claude SDK engine',
|
|
270
|
+
});
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
const { id } = req.params;
|
|
274
|
+
const projectPath = req.query.projectPath;
|
|
275
|
+
// Parse id format: scope:index
|
|
276
|
+
const [scope, indexStr] = id.split(':');
|
|
277
|
+
const index = parseInt(indexStr, 10);
|
|
278
|
+
if (!scope || isNaN(index) || !['global', 'local'].includes(scope)) {
|
|
279
|
+
res.status(400).json({ error: 'Invalid hook ID format. Expected: scope:index' });
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
282
|
+
const settingsPath = scope === 'global'
|
|
283
|
+
? getGlobalSettingsPath()
|
|
284
|
+
: getLocalSettingsPath(projectPath);
|
|
285
|
+
const settings = await readSettingsFile(settingsPath);
|
|
286
|
+
const hooksConfig = settings;
|
|
287
|
+
const hooks = hooksConfig.hooks || [];
|
|
288
|
+
if (index < 0 || index >= hooks.length) {
|
|
289
|
+
res.status(404).json({ error: 'Hook not found' });
|
|
290
|
+
return;
|
|
291
|
+
}
|
|
292
|
+
// Remove hook
|
|
293
|
+
hooks.splice(index, 1);
|
|
294
|
+
await writeSettingsFile(settingsPath, settings);
|
|
295
|
+
res.json({ message: 'Hook deleted successfully' });
|
|
296
|
+
}
|
|
297
|
+
catch (error) {
|
|
298
|
+
console.error('Error deleting hook:', error);
|
|
299
|
+
res.status(500).json({ error: 'Failed to delete hook' });
|
|
300
|
+
}
|
|
301
|
+
});
|
|
302
|
+
exports.default = router;
|
|
303
|
+
//# sourceMappingURL=hooks.js.map
|