swarmcraft 0.0.1 → 0.1.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/.gitmodules +6 -0
- package/.storybook/main.ts +15 -0
- package/.storybook/preview.tsx +30 -0
- package/CLAUDE.md +222 -0
- package/README.md +135 -1
- package/api/proxy.ts +104 -0
- package/dist/server/app.d.ts +3 -0
- package/dist/server/app.d.ts.map +1 -0
- package/dist/server/app.js +133 -0
- package/dist/server/app.js.map +1 -0
- package/dist/server/config.d.ts +31 -0
- package/dist/server/config.d.ts.map +1 -0
- package/dist/server/config.js +19 -0
- package/dist/server/config.js.map +1 -0
- package/dist/server/context.d.ts +62 -0
- package/dist/server/context.d.ts.map +1 -0
- package/dist/server/context.js +87 -0
- package/dist/server/context.js.map +1 -0
- package/dist/server/db/index.d.ts +7 -0
- package/dist/server/db/index.d.ts.map +1 -0
- package/dist/server/db/index.js +52 -0
- package/dist/server/db/index.js.map +1 -0
- package/dist/server/db/provider.d.ts +57 -0
- package/dist/server/db/provider.d.ts.map +1 -0
- package/dist/server/db/provider.js +13 -0
- package/dist/server/db/provider.js.map +1 -0
- package/dist/server/db/providers/sqlite.d.ts +37 -0
- package/dist/server/db/providers/sqlite.d.ts.map +1 -0
- package/dist/server/db/providers/sqlite.js +1093 -0
- package/dist/server/db/providers/sqlite.js.map +1 -0
- package/dist/server/db/repositories.d.ts +142 -0
- package/dist/server/db/repositories.d.ts.map +1 -0
- package/dist/server/db/repositories.js +12 -0
- package/dist/server/db/repositories.js.map +1 -0
- package/dist/server/db/seed.d.ts +2 -0
- package/dist/server/db/seed.d.ts.map +1 -0
- package/dist/server/db/seed.js +143 -0
- package/dist/server/db/seed.js.map +1 -0
- package/dist/server/index.d.ts +2 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +28 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/map/acp-manager.d.ts +113 -0
- package/dist/server/map/acp-manager.d.ts.map +1 -0
- package/dist/server/map/acp-manager.js +391 -0
- package/dist/server/map/acp-manager.js.map +1 -0
- package/dist/server/map/client-manager.d.ts +51 -0
- package/dist/server/map/client-manager.d.ts.map +1 -0
- package/dist/server/map/client-manager.js +323 -0
- package/dist/server/map/client-manager.js.map +1 -0
- package/dist/server/map/event-handler.d.ts +7 -0
- package/dist/server/map/event-handler.d.ts.map +1 -0
- package/dist/server/map/event-handler.js +374 -0
- package/dist/server/map/event-handler.js.map +1 -0
- package/dist/server/map/index.d.ts +6 -0
- package/dist/server/map/index.d.ts.map +1 -0
- package/dist/server/map/index.js +5 -0
- package/dist/server/map/index.js.map +1 -0
- package/dist/server/map/types.d.ts +28 -0
- package/dist/server/map/types.d.ts.map +1 -0
- package/dist/server/map/types.js +4 -0
- package/dist/server/map/types.js.map +1 -0
- package/dist/server/pipeline/ast-cache.d.ts +12 -0
- package/dist/server/pipeline/ast-cache.d.ts.map +1 -0
- package/dist/server/pipeline/ast-cache.js +34 -0
- package/dist/server/pipeline/ast-cache.js.map +1 -0
- package/dist/server/pipeline/bm25-index.d.ts +25 -0
- package/dist/server/pipeline/bm25-index.d.ts.map +1 -0
- package/dist/server/pipeline/bm25-index.js +69 -0
- package/dist/server/pipeline/bm25-index.js.map +1 -0
- package/dist/server/pipeline/call-processor.d.ts +9 -0
- package/dist/server/pipeline/call-processor.d.ts.map +1 -0
- package/dist/server/pipeline/call-processor.js +192 -0
- package/dist/server/pipeline/call-processor.js.map +1 -0
- package/dist/server/pipeline/community-processor.d.ts +31 -0
- package/dist/server/pipeline/community-processor.d.ts.map +1 -0
- package/dist/server/pipeline/community-processor.js +175 -0
- package/dist/server/pipeline/community-processor.js.map +1 -0
- package/dist/server/pipeline/csv-generator.d.ts +14 -0
- package/dist/server/pipeline/csv-generator.d.ts.map +1 -0
- package/dist/server/pipeline/csv-generator.js +196 -0
- package/dist/server/pipeline/csv-generator.js.map +1 -0
- package/dist/server/pipeline/embedder.d.ts +19 -0
- package/dist/server/pipeline/embedder.d.ts.map +1 -0
- package/dist/server/pipeline/embedder.js +103 -0
- package/dist/server/pipeline/embedder.js.map +1 -0
- package/dist/server/pipeline/embedding-pipeline.d.ts +17 -0
- package/dist/server/pipeline/embedding-pipeline.d.ts.map +1 -0
- package/dist/server/pipeline/embedding-pipeline.js +169 -0
- package/dist/server/pipeline/embedding-pipeline.js.map +1 -0
- package/dist/server/pipeline/embedding-types.d.ts +53 -0
- package/dist/server/pipeline/embedding-types.d.ts.map +1 -0
- package/dist/server/pipeline/embedding-types.js +15 -0
- package/dist/server/pipeline/embedding-types.js.map +1 -0
- package/dist/server/pipeline/entry-point-scoring.d.ts +17 -0
- package/dist/server/pipeline/entry-point-scoring.d.ts.map +1 -0
- package/dist/server/pipeline/entry-point-scoring.js +166 -0
- package/dist/server/pipeline/entry-point-scoring.js.map +1 -0
- package/dist/server/pipeline/file-reader.d.ts +15 -0
- package/dist/server/pipeline/file-reader.d.ts.map +1 -0
- package/dist/server/pipeline/file-reader.js +95 -0
- package/dist/server/pipeline/file-reader.js.map +1 -0
- package/dist/server/pipeline/framework-detection.d.ts +26 -0
- package/dist/server/pipeline/framework-detection.d.ts.map +1 -0
- package/dist/server/pipeline/framework-detection.js +140 -0
- package/dist/server/pipeline/framework-detection.js.map +1 -0
- package/dist/server/pipeline/graph.d.ts +3 -0
- package/dist/server/pipeline/graph.d.ts.map +1 -0
- package/dist/server/pipeline/graph.js +31 -0
- package/dist/server/pipeline/graph.js.map +1 -0
- package/dist/server/pipeline/heritage-processor.d.ts +15 -0
- package/dist/server/pipeline/heritage-processor.d.ts.map +1 -0
- package/dist/server/pipeline/heritage-processor.js +115 -0
- package/dist/server/pipeline/heritage-processor.js.map +1 -0
- package/dist/server/pipeline/hybrid-search.d.ts +24 -0
- package/dist/server/pipeline/hybrid-search.d.ts.map +1 -0
- package/dist/server/pipeline/hybrid-search.js +57 -0
- package/dist/server/pipeline/hybrid-search.js.map +1 -0
- package/dist/server/pipeline/ignore-service.d.ts +2 -0
- package/dist/server/pipeline/ignore-service.d.ts.map +1 -0
- package/dist/server/pipeline/ignore-service.js +197 -0
- package/dist/server/pipeline/ignore-service.js.map +1 -0
- package/dist/server/pipeline/import-processor.d.ts +9 -0
- package/dist/server/pipeline/import-processor.d.ts.map +1 -0
- package/dist/server/pipeline/import-processor.js +142 -0
- package/dist/server/pipeline/import-processor.js.map +1 -0
- package/dist/server/pipeline/kuzu-adapter.d.ts +44 -0
- package/dist/server/pipeline/kuzu-adapter.d.ts.map +1 -0
- package/dist/server/pipeline/kuzu-adapter.js +254 -0
- package/dist/server/pipeline/kuzu-adapter.js.map +1 -0
- package/dist/server/pipeline/kuzu-schema.d.ts +47 -0
- package/dist/server/pipeline/kuzu-schema.d.ts.map +1 -0
- package/dist/server/pipeline/kuzu-schema.js +322 -0
- package/dist/server/pipeline/kuzu-schema.js.map +1 -0
- package/dist/server/pipeline/parser-loader.d.ts +5 -0
- package/dist/server/pipeline/parser-loader.d.ts.map +1 -0
- package/dist/server/pipeline/parser-loader.js +68 -0
- package/dist/server/pipeline/parser-loader.js.map +1 -0
- package/dist/server/pipeline/parsing-processor.d.ts +9 -0
- package/dist/server/pipeline/parsing-processor.d.ts.map +1 -0
- package/dist/server/pipeline/parsing-processor.js +194 -0
- package/dist/server/pipeline/parsing-processor.js.map +1 -0
- package/dist/server/pipeline/pipeline-service.d.ts +84 -0
- package/dist/server/pipeline/pipeline-service.d.ts.map +1 -0
- package/dist/server/pipeline/pipeline-service.js +349 -0
- package/dist/server/pipeline/pipeline-service.js.map +1 -0
- package/dist/server/pipeline/pipeline.d.ts +6 -0
- package/dist/server/pipeline/pipeline.d.ts.map +1 -0
- package/dist/server/pipeline/pipeline.js +219 -0
- package/dist/server/pipeline/pipeline.js.map +1 -0
- package/dist/server/pipeline/process-processor.d.ts +45 -0
- package/dist/server/pipeline/process-processor.d.ts.map +1 -0
- package/dist/server/pipeline/process-processor.js +201 -0
- package/dist/server/pipeline/process-processor.js.map +1 -0
- package/dist/server/pipeline/structure-processor.d.ts +3 -0
- package/dist/server/pipeline/structure-processor.d.ts.map +1 -0
- package/dist/server/pipeline/structure-processor.js +37 -0
- package/dist/server/pipeline/structure-processor.js.map +1 -0
- package/dist/server/pipeline/symbol-table.d.ts +17 -0
- package/dist/server/pipeline/symbol-table.d.ts.map +1 -0
- package/dist/server/pipeline/symbol-table.js +33 -0
- package/dist/server/pipeline/symbol-table.js.map +1 -0
- package/dist/server/pipeline/text-generator.d.ts +9 -0
- package/dist/server/pipeline/text-generator.d.ts.map +1 -0
- package/dist/server/pipeline/text-generator.js +60 -0
- package/dist/server/pipeline/text-generator.js.map +1 -0
- package/dist/server/pipeline/tree-sitter-queries.d.ts +12 -0
- package/dist/server/pipeline/tree-sitter-queries.d.ts.map +1 -0
- package/dist/server/pipeline/tree-sitter-queries.js +320 -0
- package/dist/server/pipeline/tree-sitter-queries.js.map +1 -0
- package/dist/server/pipeline/types.d.ts +68 -0
- package/dist/server/pipeline/types.d.ts.map +1 -0
- package/dist/server/pipeline/types.js +3 -0
- package/dist/server/pipeline/types.js.map +1 -0
- package/dist/server/pipeline/utils.d.ts +14 -0
- package/dist/server/pipeline/utils.d.ts.map +1 -0
- package/dist/server/pipeline/utils.js +42 -0
- package/dist/server/pipeline/utils.js.map +1 -0
- package/dist/server/plugin.d.ts +55 -0
- package/dist/server/plugin.d.ts.map +1 -0
- package/dist/server/plugin.js +120 -0
- package/dist/server/plugin.js.map +1 -0
- package/dist/server/routes/acp.d.ts +3 -0
- package/dist/server/routes/acp.d.ts.map +1 -0
- package/dist/server/routes/acp.js +225 -0
- package/dist/server/routes/acp.js.map +1 -0
- package/dist/server/routes/agents.d.ts +3 -0
- package/dist/server/routes/agents.d.ts.map +1 -0
- package/dist/server/routes/agents.js +288 -0
- package/dist/server/routes/agents.js.map +1 -0
- package/dist/server/routes/events.d.ts +3 -0
- package/dist/server/routes/events.d.ts.map +1 -0
- package/dist/server/routes/events.js +103 -0
- package/dist/server/routes/events.js.map +1 -0
- package/dist/server/routes/federation.d.ts +3 -0
- package/dist/server/routes/federation.d.ts.map +1 -0
- package/dist/server/routes/federation.js +188 -0
- package/dist/server/routes/federation.js.map +1 -0
- package/dist/server/routes/graph.d.ts +3 -0
- package/dist/server/routes/graph.d.ts.map +1 -0
- package/dist/server/routes/graph.js +107 -0
- package/dist/server/routes/graph.js.map +1 -0
- package/dist/server/routes/index.d.ts +3 -0
- package/dist/server/routes/index.d.ts.map +1 -0
- package/dist/server/routes/index.js +38 -0
- package/dist/server/routes/index.js.map +1 -0
- package/dist/server/routes/map-servers.d.ts +3 -0
- package/dist/server/routes/map-servers.d.ts.map +1 -0
- package/dist/server/routes/map-servers.js +154 -0
- package/dist/server/routes/map-servers.js.map +1 -0
- package/dist/server/routes/messages.d.ts +3 -0
- package/dist/server/routes/messages.d.ts.map +1 -0
- package/dist/server/routes/messages.js +92 -0
- package/dist/server/routes/messages.js.map +1 -0
- package/dist/server/routes/pipeline.d.ts +3 -0
- package/dist/server/routes/pipeline.d.ts.map +1 -0
- package/dist/server/routes/pipeline.js +200 -0
- package/dist/server/routes/pipeline.js.map +1 -0
- package/dist/server/routes/scopes.d.ts +3 -0
- package/dist/server/routes/scopes.d.ts.map +1 -0
- package/dist/server/routes/scopes.js +130 -0
- package/dist/server/routes/scopes.js.map +1 -0
- package/dist/server/routes/search.d.ts +3 -0
- package/dist/server/routes/search.d.ts.map +1 -0
- package/dist/server/routes/search.js +263 -0
- package/dist/server/routes/search.js.map +1 -0
- package/dist/server/routes/subprocess.d.ts +3 -0
- package/dist/server/routes/subprocess.d.ts.map +1 -0
- package/dist/server/routes/subprocess.js +91 -0
- package/dist/server/routes/subprocess.js.map +1 -0
- package/dist/server/routes/tasks.d.ts +3 -0
- package/dist/server/routes/tasks.d.ts.map +1 -0
- package/dist/server/routes/tasks.js +182 -0
- package/dist/server/routes/tasks.js.map +1 -0
- package/dist/server/routes/terminal.d.ts +3 -0
- package/dist/server/routes/terminal.d.ts.map +1 -0
- package/dist/server/routes/terminal.js +66 -0
- package/dist/server/routes/terminal.js.map +1 -0
- package/dist/server/services/acp-service.d.ts +14 -0
- package/dist/server/services/acp-service.d.ts.map +1 -0
- package/dist/server/services/acp-service.js +92 -0
- package/dist/server/services/acp-service.js.map +1 -0
- package/dist/server/services/agent-service.d.ts +21 -0
- package/dist/server/services/agent-service.d.ts.map +1 -0
- package/dist/server/services/agent-service.js +162 -0
- package/dist/server/services/agent-service.js.map +1 -0
- package/dist/server/services/embedding-service.d.ts +31 -0
- package/dist/server/services/embedding-service.d.ts.map +1 -0
- package/dist/server/services/embedding-service.js +122 -0
- package/dist/server/services/embedding-service.js.map +1 -0
- package/dist/server/services/event-service.d.ts +15 -0
- package/dist/server/services/event-service.d.ts.map +1 -0
- package/dist/server/services/event-service.js +110 -0
- package/dist/server/services/event-service.js.map +1 -0
- package/dist/server/services/federation-service.d.ts +66 -0
- package/dist/server/services/federation-service.d.ts.map +1 -0
- package/dist/server/services/federation-service.js +354 -0
- package/dist/server/services/federation-service.js.map +1 -0
- package/dist/server/services/index.d.ts +11 -0
- package/dist/server/services/index.d.ts.map +1 -0
- package/dist/server/services/index.js +11 -0
- package/dist/server/services/index.js.map +1 -0
- package/dist/server/services/map-server-service.d.ts +13 -0
- package/dist/server/services/map-server-service.d.ts.map +1 -0
- package/dist/server/services/map-server-service.js +99 -0
- package/dist/server/services/map-server-service.js.map +1 -0
- package/dist/server/services/message-service.d.ts +21 -0
- package/dist/server/services/message-service.d.ts.map +1 -0
- package/dist/server/services/message-service.js +131 -0
- package/dist/server/services/message-service.js.map +1 -0
- package/dist/server/services/position-service.d.ts +38 -0
- package/dist/server/services/position-service.d.ts.map +1 -0
- package/dist/server/services/position-service.js +102 -0
- package/dist/server/services/position-service.js.map +1 -0
- package/dist/server/services/scope-service.d.ts +13 -0
- package/dist/server/services/scope-service.d.ts.map +1 -0
- package/dist/server/services/scope-service.js +84 -0
- package/dist/server/services/scope-service.js.map +1 -0
- package/dist/server/services/task-service.d.ts +17 -0
- package/dist/server/services/task-service.d.ts.map +1 -0
- package/dist/server/services/task-service.js +153 -0
- package/dist/server/services/task-service.js.map +1 -0
- package/dist/server/standalone.d.ts +10 -0
- package/dist/server/standalone.d.ts.map +1 -0
- package/dist/server/standalone.js +61 -0
- package/dist/server/standalone.js.map +1 -0
- package/dist/server/subprocess/manager.d.ts +93 -0
- package/dist/server/subprocess/manager.d.ts.map +1 -0
- package/dist/server/subprocess/manager.js +294 -0
- package/dist/server/subprocess/manager.js.map +1 -0
- package/dist/server/terminal/pty-manager.d.ts +68 -0
- package/dist/server/terminal/pty-manager.d.ts.map +1 -0
- package/dist/server/terminal/pty-manager.js +159 -0
- package/dist/server/terminal/pty-manager.js.map +1 -0
- package/dist/server/terminal/terminal-ws.d.ts +30 -0
- package/dist/server/terminal/terminal-ws.d.ts.map +1 -0
- package/dist/server/terminal/terminal-ws.js +174 -0
- package/dist/server/terminal/terminal-ws.js.map +1 -0
- package/dist/server/types/index.d.ts +646 -0
- package/dist/server/types/index.d.ts.map +1 -0
- package/dist/server/types/index.js +219 -0
- package/dist/server/types/index.js.map +1 -0
- package/dist/server/websocket/hub.d.ts +52 -0
- package/dist/server/websocket/hub.d.ts.map +1 -0
- package/dist/server/websocket/hub.js +284 -0
- package/dist/server/websocket/hub.js.map +1 -0
- package/dist/ui/assets/__vite-browser-external-2447137e-BIHI7g3E.js +1 -0
- package/dist/ui/assets/architectureDiagram-RIHJSL5F-BLjzzama.js +36 -0
- package/dist/ui/assets/blockDiagram-WDLGXV4W-CfjAYIxi.js +122 -0
- package/dist/ui/assets/c4Diagram-7AWUDI2P-sT2XKuUP.js +10 -0
- package/dist/ui/assets/chunk-3TDMV3MO-Bxnq8mRd.js +1 -0
- package/dist/ui/assets/chunk-7RZVMHOQ-BtHAcADN.js +338 -0
- package/dist/ui/assets/chunk-AEOMTBSW-DNRxgAdV.js +1 -0
- package/dist/ui/assets/chunk-BGEGVY25-j9SOAo9R.js +220 -0
- package/dist/ui/assets/chunk-H3VCZNTA-B8-y1Qzl.js +13 -0
- package/dist/ui/assets/chunk-KFR3WFC5-BQmtaZNa.js +165 -0
- package/dist/ui/assets/chunk-KSICW3F5-CYn_lo1Z.js +15 -0
- package/dist/ui/assets/chunk-LWM4QWG6-BA5Oh46p.js +1 -0
- package/dist/ui/assets/chunk-M3I2T2XC-qqbmEBo8.js +1 -0
- package/dist/ui/assets/chunk-TU3PZOEN-BjdRCFqV.js +1 -0
- package/dist/ui/assets/chunk-VGHHFSQR-F2Gbfk2-.js +1 -0
- package/dist/ui/assets/chunk-WNUA3B3J-VJOuaUzE.js +1 -0
- package/dist/ui/assets/classDiagram-W3T7ADTY-DRkYdVE3.js +1 -0
- package/dist/ui/assets/classDiagram-v2-NUY7TN2I-DRkYdVE3.js +1 -0
- package/dist/ui/assets/cose-bilkent-DQETAGN7-Clw7xpXe.js +1 -0
- package/dist/ui/assets/dagre-PD6EB5X7-tYZpOLd9.js +4 -0
- package/dist/ui/assets/diagram-H6XQBSGY-DZCBn0TZ.js +24 -0
- package/dist/ui/assets/diagram-LDM27ML3-CzZzZx6J.js +43 -0
- package/dist/ui/assets/diagram-YNAIMP7R-DNdhponr.js +24 -0
- package/dist/ui/assets/erDiagram-JKLMQEMA-BMOTNoGb.js +60 -0
- package/dist/ui/assets/flowDiagram-TPJNMKY5-C-OssWJF.js +162 -0
- package/dist/ui/assets/ganttDiagram-TVT35BNJ-CwgLhyUZ.js +267 -0
- package/dist/ui/assets/gitGraphDiagram-ZZNRLE66-DpGt8N98.js +65 -0
- package/dist/ui/assets/index-BFtmBU10.css +1 -0
- package/dist/ui/assets/index-DQVKoPTL.js +2056 -0
- package/dist/ui/assets/infoDiagram-WBDZ6S3U-CFtYwwmB.js +2 -0
- package/dist/ui/assets/journeyDiagram-FDC3KNBO--b9Jhj9Q.js +139 -0
- package/dist/ui/assets/kanban-definition-YQQHB3YZ-BZ_Ch9Cc.js +89 -0
- package/dist/ui/assets/katex-4QAC45MX-Dff7K1ZL.js +261 -0
- package/dist/ui/assets/mindmap-definition-SIOIWSPX-DBzIm3kL.js +68 -0
- package/dist/ui/assets/pieDiagram-XCFX7IE7-BXzisUE2.js +30 -0
- package/dist/ui/assets/quadrantDiagram-ZSOMFDZY-Bu4cQN4z.js +7 -0
- package/dist/ui/assets/requirementDiagram-RUCZPMKB-0TiifMFj.js +64 -0
- package/dist/ui/assets/sankeyDiagram-VQJ3IPPN-BIkDjTLo.js +10 -0
- package/dist/ui/assets/sequenceDiagram-JT7H6RCS-BUTj5ooL.js +145 -0
- package/dist/ui/assets/stateDiagram-MULPRXYB-Bi5lOV5p.js +1 -0
- package/dist/ui/assets/stateDiagram-v2-LMKPZ2WR-DaVjZN8W.js +1 -0
- package/dist/ui/assets/timeline-definition-O36V2GCZ-CupfAi-e.js +61 -0
- package/dist/ui/assets/treemap-GDKQZRPO-TD7FEVA6-KiwGKXLZ.js +161 -0
- package/dist/ui/assets/xychartDiagram-HB2IZN64-CTaMW-Ct.js +7 -0
- package/dist/ui/assets/zip-CCSlD_xh.js +12 -0
- package/dist/ui/index.html +16 -0
- package/dist/ui/wasm/c/tree-sitter-c.wasm +0 -0
- package/dist/ui/wasm/cpp/tree-sitter-cpp.wasm +0 -0
- package/dist/ui/wasm/csharp/tree-sitter-csharp.wasm +0 -0
- package/dist/ui/wasm/go/tree-sitter-go.wasm +0 -0
- package/dist/ui/wasm/java/tree-sitter-java.wasm +0 -0
- package/dist/ui/wasm/javascript/tree-sitter-javascript.wasm +0 -0
- package/dist/ui/wasm/kuzu-wasm.wasm +0 -0
- package/dist/ui/wasm/python/tree-sitter-python.wasm +0 -0
- package/dist/ui/wasm/rust/tree-sitter-rust.wasm +0 -0
- package/dist/ui/wasm/tree-sitter.wasm +0 -0
- package/dist/ui/wasm/typescript/tree-sitter-tsx.wasm +0 -0
- package/dist/ui/wasm/typescript/tree-sitter-typescript.wasm +0 -0
- package/docs/ARCHITECTURE.md +818 -0
- package/docs/CYTOSCAPE_INTEGRATION_SPEC.md +2458 -0
- package/index.html +15 -0
- package/package.json +163 -9
- package/public/wasm/c/tree-sitter-c.wasm +0 -0
- package/public/wasm/cpp/tree-sitter-cpp.wasm +0 -0
- package/public/wasm/csharp/tree-sitter-csharp.wasm +0 -0
- package/public/wasm/go/tree-sitter-go.wasm +0 -0
- package/public/wasm/java/tree-sitter-java.wasm +0 -0
- package/public/wasm/javascript/tree-sitter-javascript.wasm +0 -0
- package/public/wasm/kuzu-wasm.wasm +0 -0
- package/public/wasm/python/tree-sitter-python.wasm +0 -0
- package/public/wasm/rust/tree-sitter-rust.wasm +0 -0
- package/public/wasm/tree-sitter.wasm +0 -0
- package/public/wasm/typescript/tree-sitter-tsx.wasm +0 -0
- package/public/wasm/typescript/tree-sitter-typescript.wasm +0 -0
- package/server/.env.example +14 -0
- package/src/server/app.ts +150 -0
- package/src/server/config.ts +23 -0
- package/src/server/context.ts +171 -0
- package/src/server/db/index.ts +65 -0
- package/src/server/db/provider.ts +90 -0
- package/src/server/db/providers/sqlite.ts +1164 -0
- package/src/server/db/repositories.ts +222 -0
- package/src/server/db/schema.sql +135 -0
- package/src/server/db/seed.ts +291 -0
- package/src/server/fastify.d.ts +7 -0
- package/src/server/index.ts +30 -0
- package/src/server/map/acp-manager.ts +518 -0
- package/src/server/map/client-manager.ts +421 -0
- package/src/server/map/event-handler.ts +443 -0
- package/src/server/map/index.ts +5 -0
- package/src/server/map/types.ts +78 -0
- package/src/server/pipeline/ast-cache.ts +46 -0
- package/src/server/pipeline/bm25-index.ts +86 -0
- package/src/server/pipeline/call-processor.ts +241 -0
- package/src/server/pipeline/community-processor.ts +260 -0
- package/src/server/pipeline/csv-generator.ts +225 -0
- package/src/server/pipeline/embedder.ts +120 -0
- package/src/server/pipeline/embedding-pipeline.ts +216 -0
- package/src/server/pipeline/embedding-types.ts +68 -0
- package/src/server/pipeline/entry-point-scoring.ts +197 -0
- package/src/server/pipeline/file-reader.ts +111 -0
- package/src/server/pipeline/framework-detection.ts +180 -0
- package/src/server/pipeline/graph.ts +35 -0
- package/src/server/pipeline/heritage-processor.ts +145 -0
- package/src/server/pipeline/hybrid-search.ts +83 -0
- package/src/server/pipeline/ignore-service.ts +222 -0
- package/src/server/pipeline/import-processor.ts +190 -0
- package/src/server/pipeline/kuzu-adapter.ts +282 -0
- package/src/server/pipeline/kuzu-schema.ts +348 -0
- package/src/server/pipeline/kuzu.d.ts +21 -0
- package/src/server/pipeline/parser-loader.ts +77 -0
- package/src/server/pipeline/parsing-processor.ts +212 -0
- package/src/server/pipeline/pipeline-service.ts +437 -0
- package/src/server/pipeline/pipeline.ts +252 -0
- package/src/server/pipeline/process-processor.ts +315 -0
- package/src/server/pipeline/structure-processor.ts +46 -0
- package/src/server/pipeline/symbol-table.ts +52 -0
- package/src/server/pipeline/text-generator.ts +73 -0
- package/src/server/pipeline/tree-sitter-queries.ts +330 -0
- package/src/server/pipeline/types.ts +107 -0
- package/src/server/pipeline/utils.ts +31 -0
- package/src/server/plugin.ts +180 -0
- package/src/server/routes/acp.ts +334 -0
- package/src/server/routes/agents.ts +343 -0
- package/src/server/routes/events.ts +126 -0
- package/src/server/routes/federation.ts +237 -0
- package/src/server/routes/graph.ts +126 -0
- package/src/server/routes/index.ts +40 -0
- package/src/server/routes/map-servers.ts +182 -0
- package/src/server/routes/messages.ts +106 -0
- package/src/server/routes/pipeline.ts +229 -0
- package/src/server/routes/scopes.ts +163 -0
- package/src/server/routes/search.ts +289 -0
- package/src/server/routes/subprocess.ts +126 -0
- package/src/server/routes/tasks.ts +210 -0
- package/src/server/routes/terminal.ts +87 -0
- package/src/server/services/acp-service.ts +129 -0
- package/src/server/services/agent-service.ts +229 -0
- package/src/server/services/embedding-service.ts +121 -0
- package/src/server/services/event-service.ts +149 -0
- package/src/server/services/federation-service.ts +388 -0
- package/src/server/services/index.ts +10 -0
- package/src/server/services/map-server-service.ts +132 -0
- package/src/server/services/message-service.ts +176 -0
- package/src/server/services/position-service.ts +118 -0
- package/src/server/services/scope-service.ts +128 -0
- package/src/server/services/task-service.ts +203 -0
- package/src/server/standalone.ts +70 -0
- package/src/server/subprocess/manager.ts +409 -0
- package/src/server/terminal/node-pty.d.ts +32 -0
- package/src/server/terminal/pty-manager.ts +228 -0
- package/src/server/terminal/terminal-ws.ts +213 -0
- package/src/server/tests/api.test.ts +351 -0
- package/src/server/tests/pipeline-entry-point-scoring.test.ts +130 -0
- package/src/server/tests/pipeline-file-reader.test.ts +129 -0
- package/src/server/tests/pipeline-framework-detection.test.ts +163 -0
- package/src/server/tests/pipeline-graph.test.ts +87 -0
- package/src/server/tests/pipeline-ignore-service.test.ts +152 -0
- package/src/server/tests/pipeline-routes.test.ts +312 -0
- package/src/server/tests/pipeline-service.test.ts +80 -0
- package/src/server/tests/pipeline-structure.test.ts +94 -0
- package/src/server/tests/pipeline-symbol-table.test.ts +80 -0
- package/src/server/tests/pipeline-utils.test.ts +89 -0
- package/src/server/tests/pty-manager.test.ts +229 -0
- package/src/server/tests/terminal-api.test.ts +247 -0
- package/src/server/tests/terminal-ws.test.ts +302 -0
- package/src/server/types/index.ts +296 -0
- package/src/server/websocket/hub.ts +356 -0
- package/src/ui/App.tsx +15 -0
- package/src/ui/AppContent.tsx +298 -0
- package/src/ui/SwarmCraftApp.tsx +29 -0
- package/src/ui/components/ActivityFeed.tsx +204 -0
- package/src/ui/components/AttentionPanel.tsx +150 -0
- package/src/ui/components/CodeReferencesPanel.tsx +459 -0
- package/src/ui/components/ConnectionBanner.tsx +50 -0
- package/src/ui/components/DropZone.tsx +542 -0
- package/src/ui/components/EmbeddingStatus.tsx +114 -0
- package/src/ui/components/FileTreePanel.tsx +528 -0
- package/src/ui/components/GraphCanvas.tsx +436 -0
- package/src/ui/components/Header.tsx +440 -0
- package/src/ui/components/LoadingOverlay.tsx +66 -0
- package/src/ui/components/MCPToggle.tsx +300 -0
- package/src/ui/components/MarkdownRenderer.tsx +198 -0
- package/src/ui/components/MermaidDiagram.tsx +157 -0
- package/src/ui/components/ProcessFlowModal.tsx +301 -0
- package/src/ui/components/ProcessesPanel.tsx +509 -0
- package/src/ui/components/QueryFAB.tsx +405 -0
- package/src/ui/components/RightPanel.tsx +126 -0
- package/src/ui/components/StatusBar.tsx +83 -0
- package/src/ui/components/UnifiedGraphCanvas.tsx +168 -0
- package/src/ui/components/acp/ACPConversationPanel.tsx +395 -0
- package/src/ui/components/acp/ACPInjectInput.tsx +281 -0
- package/src/ui/components/acp/index.ts +2 -0
- package/src/ui/components/agents/AgentControlPanel.tsx +382 -0
- package/src/ui/components/agents/AgentDetailsModal.tsx +551 -0
- package/src/ui/components/agents/AgentHierarchyView.tsx +307 -0
- package/src/ui/components/agents/AgentListPanel.tsx +343 -0
- package/src/ui/components/agents/index.ts +4 -0
- package/src/ui/components/common/VirtualList.tsx +269 -0
- package/src/ui/components/common/index.ts +1 -0
- package/src/ui/components/cytoscape/CytoscapeCanvas.tsx +718 -0
- package/src/ui/components/cytoscape/CytoscapeProvider.tsx +291 -0
- package/src/ui/components/cytoscape/Minimap.tsx +300 -0
- package/src/ui/components/cytoscape/NavigationControls.tsx +262 -0
- package/src/ui/components/cytoscape/ViewSwitcher.tsx +84 -0
- package/src/ui/components/cytoscape/__tests__/helpers/cytoscapeMock.ts +611 -0
- package/src/ui/components/cytoscape/adapters/AgentAdapter.ts +271 -0
- package/src/ui/components/cytoscape/adapters/GraphologyAdapter.ts +328 -0
- package/src/ui/components/cytoscape/adapters/__tests__/AgentAdapter.test.ts +427 -0
- package/src/ui/components/cytoscape/adapters/__tests__/GraphologyAdapter.test.ts +463 -0
- package/src/ui/components/cytoscape/adapters/index.ts +6 -0
- package/src/ui/components/cytoscape/hooks/index.ts +6 -0
- package/src/ui/components/cytoscape/hooks/useAgentOverlay.ts +323 -0
- package/src/ui/components/cytoscape/hooks/useCytoscapeEvents.ts +283 -0
- package/src/ui/components/cytoscape/index.ts +34 -0
- package/src/ui/components/cytoscape/services/AnimationService.ts +228 -0
- package/src/ui/components/cytoscape/services/ContextMenuService.ts +269 -0
- package/src/ui/components/cytoscape/services/HistoryService.ts +691 -0
- package/src/ui/components/cytoscape/services/HoverMenuService.ts +408 -0
- package/src/ui/components/cytoscape/services/NavigationService.ts +468 -0
- package/src/ui/components/cytoscape/services/PerformanceService.ts +496 -0
- package/src/ui/components/cytoscape/services/SelectionService.ts +404 -0
- package/src/ui/components/cytoscape/services/ThemeService.ts +675 -0
- package/src/ui/components/cytoscape/services/__tests__/HistoryService.test.ts +451 -0
- package/src/ui/components/cytoscape/services/__tests__/NavigationService.test.ts +317 -0
- package/src/ui/components/cytoscape/services/__tests__/PerformanceService.test.ts +310 -0
- package/src/ui/components/cytoscape/services/__tests__/SelectionService.test.ts +284 -0
- package/src/ui/components/cytoscape/services/__tests__/ThemeService.test.ts +432 -0
- package/src/ui/components/cytoscape/services/index.ts +18 -0
- package/src/ui/components/cytoscape/styles/index.ts +6 -0
- package/src/ui/components/cytoscape/styles/layoutConfig.ts +157 -0
- package/src/ui/components/cytoscape/styles/stylesheet.ts +643 -0
- package/src/ui/components/cytoscape/types.ts +178 -0
- package/src/ui/components/dashboard/MonitoringDashboard.tsx +327 -0
- package/src/ui/components/dashboard/index.ts +1 -0
- package/src/ui/components/events/EventStreamPanel.tsx +362 -0
- package/src/ui/components/events/index.ts +1 -0
- package/src/ui/components/map-servers/FederationGraph.tsx +291 -0
- package/src/ui/components/map-servers/ServerConnectionPanel.tsx +753 -0
- package/src/ui/components/map-servers/index.ts +2 -0
- package/src/ui/components/messages/MessageEdgeLayer.tsx +329 -0
- package/src/ui/components/messages/MessageInspector.tsx +275 -0
- package/src/ui/components/messages/MessageStreamPanel.tsx +344 -0
- package/src/ui/components/messages/index.ts +3 -0
- package/src/ui/components/overlay/AgentOverlayLayer.tsx +200 -0
- package/src/ui/components/overlay/HeatmapOverlay.tsx +238 -0
- package/src/ui/components/overlay/index.ts +2 -0
- package/src/ui/components/swarmcraft/SwarmCraftPanel.tsx +277 -0
- package/src/ui/components/swarmcraft/index.ts +1 -0
- package/src/ui/components/tasks/TaskBoardPanel.tsx +376 -0
- package/src/ui/components/tasks/TaskDetailView.tsx +307 -0
- package/src/ui/components/tasks/index.ts +2 -0
- package/src/ui/components/terminal/TerminalPanel.tsx +359 -0
- package/src/ui/components/terminal/__tests__/TerminalPanel.test.tsx +380 -0
- package/src/ui/components/timeline/ActivityTimeline.tsx +299 -0
- package/src/ui/components/timeline/TimelineControls.tsx +304 -0
- package/src/ui/components/timeline/index.ts +2 -0
- package/src/ui/config/ignore-service.ts +239 -0
- package/src/ui/config/supported-languages.ts +14 -0
- package/src/ui/contexts/ServiceContext.tsx +57 -0
- package/src/ui/contexts/SwarmCraftContext.tsx +75 -0
- package/src/ui/core/graph/graph.ts +41 -0
- package/src/ui/core/graph/types.ts +86 -0
- package/src/ui/core/mcp/mcp-client.ts +341 -0
- package/src/ui/embed.css +292 -0
- package/src/ui/embed.ts +18 -0
- package/src/ui/hooks/useACPStreams.ts +110 -0
- package/src/ui/hooks/useAgentPositions.ts +91 -0
- package/src/ui/hooks/useAppState.tsx +582 -0
- package/src/ui/hooks/useAttention.ts +213 -0
- package/src/ui/hooks/useSigma.ts +639 -0
- package/src/ui/hooks/useSwarmCraft.ts +523 -0
- package/src/ui/index.css +365 -0
- package/src/ui/lib/constants.ts +123 -0
- package/src/ui/lib/graph-adapter.ts +387 -0
- package/src/ui/lib/mermaid-generator.ts +158 -0
- package/src/ui/lib/utils.ts +3 -0
- package/src/ui/main.tsx +14 -0
- package/src/ui/repomix-output.md +13681 -0
- package/src/ui/services/__tests__/acp-service.test.ts +550 -0
- package/src/ui/services/acp-service.ts +624 -0
- package/src/ui/services/agent-control.ts +202 -0
- package/src/ui/services/cache-service.ts +289 -0
- package/src/ui/services/factory.ts +28 -0
- package/src/ui/services/filter-presets.ts +305 -0
- package/src/ui/services/git-clone.ts +219 -0
- package/src/ui/services/layout-persistence.ts +380 -0
- package/src/ui/services/swarmcraft-api.ts +627 -0
- package/src/ui/services/swarmcraft-ws.ts +496 -0
- package/src/ui/services/zip.ts +77 -0
- package/src/ui/stories/AgentListPanel.stories.tsx +223 -0
- package/src/ui/stories/Configure.mdx +364 -0
- package/src/ui/stories/CytoscapeCanvas.stories.tsx +391 -0
- package/src/ui/stories/Introduction.mdx +72 -0
- package/src/ui/stories/Minimap.stories.tsx +180 -0
- package/src/ui/stories/NavigationControls.stories.tsx +196 -0
- package/src/ui/stories/ViewSwitcher.stories.tsx +89 -0
- package/src/ui/stories/assets/accessibility.png +0 -0
- package/src/ui/stories/assets/accessibility.svg +1 -0
- package/src/ui/stories/assets/addon-library.png +0 -0
- package/src/ui/stories/assets/assets.png +0 -0
- package/src/ui/stories/assets/avif-test-image.avif +0 -0
- package/src/ui/stories/assets/context.png +0 -0
- package/src/ui/stories/assets/discord.svg +1 -0
- package/src/ui/stories/assets/docs.png +0 -0
- package/src/ui/stories/assets/figma-plugin.png +0 -0
- package/src/ui/stories/assets/github.svg +1 -0
- package/src/ui/stories/assets/share.png +0 -0
- package/src/ui/stories/assets/styling.png +0 -0
- package/src/ui/stories/assets/testing.png +0 -0
- package/src/ui/stories/assets/theming.png +0 -0
- package/src/ui/stories/assets/tutorials.svg +1 -0
- package/src/ui/stories/assets/youtube.svg +1 -0
- package/src/ui/stories/button.css +30 -0
- package/src/ui/stories/header.css +32 -0
- package/src/ui/stories/page.css +68 -0
- package/src/ui/test/setup.ts +41 -0
- package/src/ui/types/acp.ts +123 -0
- package/src/ui/types/attention.ts +39 -0
- package/src/ui/types/cytoscape-extensions.d.ts +82 -0
- package/src/ui/types/map.ts +314 -0
- package/src/ui/types/pipeline.ts +13 -0
- package/src/ui/utils/position-calculator.ts +186 -0
- package/src/ui/vite-env.d.ts +1 -0
- package/tsconfig.json +8 -0
- package/tsconfig.node.json +13 -0
- package/tsconfig.server.json +20 -0
- package/tsconfig.ui.json +32 -0
- package/vercel.json +17 -0
- package/vite.config.ts +36 -0
- package/vitest.config.ts +21 -0
- package/vitest.server.config.ts +10 -0
- package/index.js +0 -2
package/.gitmodules
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { StorybookConfig } from '@storybook/react-vite';
|
|
2
|
+
|
|
3
|
+
const config: StorybookConfig = {
|
|
4
|
+
stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|mjs|ts|tsx)'],
|
|
5
|
+
addons: [
|
|
6
|
+
'@storybook/addon-essentials',
|
|
7
|
+
'@storybook/addon-interactions',
|
|
8
|
+
],
|
|
9
|
+
framework: {
|
|
10
|
+
name: '@storybook/react-vite',
|
|
11
|
+
options: {},
|
|
12
|
+
},
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export default config;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { Preview } from '@storybook/react-vite';
|
|
3
|
+
import '../src/index.css';
|
|
4
|
+
|
|
5
|
+
const preview: Preview = {
|
|
6
|
+
parameters: {
|
|
7
|
+
controls: {
|
|
8
|
+
matchers: {
|
|
9
|
+
color: /(background|color)$/i,
|
|
10
|
+
date: /Date$/i,
|
|
11
|
+
},
|
|
12
|
+
},
|
|
13
|
+
backgrounds: {
|
|
14
|
+
default: 'dark',
|
|
15
|
+
values: [
|
|
16
|
+
{ name: 'dark', value: '#0a0a0f' },
|
|
17
|
+
{ name: 'light', value: '#ffffff' },
|
|
18
|
+
],
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
decorators: [
|
|
22
|
+
(Story) => (
|
|
23
|
+
<div className="bg-background text-foreground min-h-screen p-4">
|
|
24
|
+
<Story />
|
|
25
|
+
</div>
|
|
26
|
+
),
|
|
27
|
+
],
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export default preview;
|
package/CLAUDE.md
ADDED
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
# CLAUDE.md - Development Guidelines for AI Agents
|
|
2
|
+
|
|
3
|
+
This document provides context and guidelines for AI agents working on the SwarmCraft codebase.
|
|
4
|
+
|
|
5
|
+
## Project Overview
|
|
6
|
+
|
|
7
|
+
SwarmCraft is a full-stack MAP (Multi-Agent Protocol) client for monitoring and steering coding agents on a codebase graph. It combines code graph visualization (Cytoscape/Sigma) with real-time agent monitoring via the MAP protocol and interactive ACP (Agent Client Protocol) conversations.
|
|
8
|
+
|
|
9
|
+
## Quick Start Commands
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
# Frontend
|
|
13
|
+
npm install # Install dependencies
|
|
14
|
+
npm run dev # Start development server (Vite)
|
|
15
|
+
npm run build # TypeScript check + production build
|
|
16
|
+
npm test # Run tests in watch mode
|
|
17
|
+
npm run test:run # Run tests once
|
|
18
|
+
|
|
19
|
+
# Backend
|
|
20
|
+
cd server && npm install && npm run dev # Start backend server
|
|
21
|
+
cd server && npm run build # Build backend
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Architecture Overview
|
|
25
|
+
|
|
26
|
+
### System Architecture
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
Browser (React) ↔ Backend (Fastify REST/WS) ↔ MAP Server(s) ↔ Agents
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### Frontend (`src/`)
|
|
33
|
+
|
|
34
|
+
1. **Visualization Layer** (`src/components/`)
|
|
35
|
+
- Sigma.js: WebGL-based, high-performance rendering for large graphs
|
|
36
|
+
- Cytoscape.js: Feature-rich, DOM-based rendering with advanced interactions
|
|
37
|
+
- ViewSwitcher allows toggling between renderers
|
|
38
|
+
- Agent overlay on codebase graph with position calculator
|
|
39
|
+
|
|
40
|
+
2. **Data Layer** (`src/core/`)
|
|
41
|
+
- Graphology: In-memory graph data structure
|
|
42
|
+
- Kuzu: WASM-based graph database for persistence
|
|
43
|
+
- Adapters convert between data formats
|
|
44
|
+
|
|
45
|
+
3. **Agent Layer** (MAP-based)
|
|
46
|
+
- `src/hooks/useSwarmCraft.ts` — Main agent state hook (agents, positions, messages)
|
|
47
|
+
- `src/services/swarmcraft-api.ts` — REST client to backend
|
|
48
|
+
- `src/services/swarmcraft-ws.ts` — WebSocket client with auto-reconnection and event batching
|
|
49
|
+
- `src/services/acp-service.ts` — ACP stream management and message assembly
|
|
50
|
+
|
|
51
|
+
4. **Types** (`src/types/`)
|
|
52
|
+
- `src/types/map.ts` — MAP protocol types (MAPAgent, MAPMessage, MAPEvent, etc.)
|
|
53
|
+
- `src/types/acp.ts` — ACP types (streams, messages, parts, permissions, questions)
|
|
54
|
+
|
|
55
|
+
### Backend (`server/src/`)
|
|
56
|
+
|
|
57
|
+
1. **MAP Integration** (`server/src/map/`)
|
|
58
|
+
- `client-manager.ts` — Manages `ClientConnection` instances to MAP servers via `@multi-agent-protocol/sdk`
|
|
59
|
+
- `event-handler.ts` — Processes MAP events (agent lifecycle, messages, scopes)
|
|
60
|
+
- `acp-manager.ts` — Manages `ACPStreamConnection` instances for ACP conversations
|
|
61
|
+
|
|
62
|
+
2. **REST API** (`server/src/routes/`)
|
|
63
|
+
- Agent, message, task, scope, and event CRUD
|
|
64
|
+
- MAP server management (add, connect, disconnect)
|
|
65
|
+
- ACP stream lifecycle (create, initialize, prompt, permission/question reply, extension calls)
|
|
66
|
+
- Subprocess spawning and management
|
|
67
|
+
|
|
68
|
+
3. **WebSocket Hub** (`server/src/websocket/hub.ts`)
|
|
69
|
+
- Real-time event broadcast with topic-based subscriptions
|
|
70
|
+
- Heartbeat/ping-pong for connection liveness
|
|
71
|
+
- Topics: agents, messages, events, tasks, positions, acp
|
|
72
|
+
|
|
73
|
+
4. **Services** (`server/src/services/`)
|
|
74
|
+
- SQLite persistence for agents, messages, events, tasks, positions
|
|
75
|
+
- Federation service for multi-server coordination
|
|
76
|
+
|
|
77
|
+
5. **Subprocess Management** (`server/src/subprocess/`)
|
|
78
|
+
- Spawn/stop MAP server processes (e.g. macro-agent)
|
|
79
|
+
- Auto-connect to spawned servers
|
|
80
|
+
- Log streaming
|
|
81
|
+
|
|
82
|
+
### Key Design Patterns
|
|
83
|
+
|
|
84
|
+
- **Service-Oriented Architecture**: Core functionality encapsulated in services
|
|
85
|
+
- **Adapter Pattern**: Data conversion between Graphology, Cytoscape, and Agent formats
|
|
86
|
+
- **Provider Pattern**: React contexts for shared state
|
|
87
|
+
- **Event-Driven**: MAP events → backend EventEmitter → WebSocket → frontend React state
|
|
88
|
+
- **ACP Streaming**: `pendingParts[]` accumulation with part-based message assembly (aligned with openswarm patterns)
|
|
89
|
+
|
|
90
|
+
## MAP Protocol Integration
|
|
91
|
+
|
|
92
|
+
### Agent States
|
|
93
|
+
|
|
94
|
+
9 states: `registered`, `active`, `busy`, `idle`, `suspended`, `stopping`, `stopped`, `failed`, `orphaned`
|
|
95
|
+
|
|
96
|
+
### ACP (Agent Client Protocol)
|
|
97
|
+
|
|
98
|
+
Interactive conversations with agents, proxied through the backend:
|
|
99
|
+
|
|
100
|
+
```
|
|
101
|
+
Frontend (acp-service.ts)
|
|
102
|
+
→ REST: POST /acp/streams/:id/prompt
|
|
103
|
+
→ Backend (acp-manager.ts)
|
|
104
|
+
→ ACPStreamConnection.prompt()
|
|
105
|
+
→ MAP Server → Agent
|
|
106
|
+
Agent response streams back via:
|
|
107
|
+
ACPStreamConnection events
|
|
108
|
+
→ Backend EventEmitter
|
|
109
|
+
→ WebSocket broadcast
|
|
110
|
+
→ Frontend acp-service.ts (message assembly)
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### ACP Message Assembly
|
|
114
|
+
|
|
115
|
+
Messages are assembled from streaming parts (aligned with openswarm):
|
|
116
|
+
- `ACPTextPart` — Streaming text content
|
|
117
|
+
- `ACPToolCallPart` — Tool invocations
|
|
118
|
+
- `ACPToolResultPart` — Tool outputs
|
|
119
|
+
- `ACPStepStartPart` / `ACPStepFinishPart` — Step lifecycle
|
|
120
|
+
|
|
121
|
+
### ACP Interactive Requests
|
|
122
|
+
|
|
123
|
+
- **Permissions**: Agent requests tool execution approval → frontend shows dialog → user approves/denies
|
|
124
|
+
- **Questions**: Agent asks structured questions with options → frontend shows selection UI → user answers
|
|
125
|
+
|
|
126
|
+
## Cytoscape Integration
|
|
127
|
+
|
|
128
|
+
### Component Hierarchy
|
|
129
|
+
|
|
130
|
+
```
|
|
131
|
+
CytoscapeProvider (context)
|
|
132
|
+
└── CytoscapeCanvas (main visualization)
|
|
133
|
+
├── NavigationControls (zoom/pan UI)
|
|
134
|
+
└── Minimap (overview navigation)
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### Services (`src/components/cytoscape/services/`)
|
|
138
|
+
|
|
139
|
+
| Service | Responsibility |
|
|
140
|
+
|---------|----------------|
|
|
141
|
+
| `SelectionService` | Multi-select, focus mode, selection expansion |
|
|
142
|
+
| `NavigationService` | Zoom, pan, fit, viewport history |
|
|
143
|
+
| `HistoryService` | Undo/redo for graph changes |
|
|
144
|
+
| `ThemeService` | Theme switching, CSS variables, custom themes |
|
|
145
|
+
| `PerformanceService` | LOD rendering, debounced layouts, batch ops |
|
|
146
|
+
| `AnimationService` | Node/edge animations |
|
|
147
|
+
| `ContextMenuService` | Right-click context menus |
|
|
148
|
+
| `HoverMenuService` | Hover tooltips and menus |
|
|
149
|
+
|
|
150
|
+
## Testing Guidelines
|
|
151
|
+
|
|
152
|
+
### Test Framework
|
|
153
|
+
- **Vitest** with jsdom environment
|
|
154
|
+
- Tests co-located in `__tests__` directories
|
|
155
|
+
- Global setup in `src/test/setup.ts`
|
|
156
|
+
|
|
157
|
+
### Running Tests
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
npm test # Watch mode
|
|
161
|
+
npm run test:run # Single run
|
|
162
|
+
npm run test:coverage # With coverage report
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### Test Principles
|
|
166
|
+
|
|
167
|
+
1. **Minimal Mocking**: Use real Graphology instances where possible
|
|
168
|
+
2. **Integration-style**: Test service interactions, not just units
|
|
169
|
+
3. **Event Verification**: Verify events are emitted correctly
|
|
170
|
+
4. **State Assertions**: Check state changes, not implementation details
|
|
171
|
+
|
|
172
|
+
## Key Files Reference
|
|
173
|
+
|
|
174
|
+
| Purpose | File |
|
|
175
|
+
|---------|------|
|
|
176
|
+
| App entry | `src/App.tsx` |
|
|
177
|
+
| Main state hook | `src/hooks/useAppState.ts` |
|
|
178
|
+
| Agent state hook | `src/hooks/useSwarmCraft.ts` |
|
|
179
|
+
| ACP service | `src/services/acp-service.ts` |
|
|
180
|
+
| REST API client | `src/services/swarmcraft-api.ts` |
|
|
181
|
+
| WebSocket client | `src/services/swarmcraft-ws.ts` |
|
|
182
|
+
| MAP types | `src/types/map.ts` |
|
|
183
|
+
| ACP types | `src/types/acp.ts` |
|
|
184
|
+
| Backend entry | `server/src/index.ts` |
|
|
185
|
+
| MAP client manager | `server/src/map/client-manager.ts` |
|
|
186
|
+
| ACP stream manager | `server/src/map/acp-manager.ts` |
|
|
187
|
+
| MAP event handler | `server/src/map/event-handler.ts` |
|
|
188
|
+
| WebSocket hub | `server/src/websocket/hub.ts` |
|
|
189
|
+
| ACP routes | `server/src/routes/acp.ts` |
|
|
190
|
+
|
|
191
|
+
## Dependencies of Note
|
|
192
|
+
|
|
193
|
+
| Package | Purpose |
|
|
194
|
+
|---------|---------|
|
|
195
|
+
| `cytoscape` | Graph visualization |
|
|
196
|
+
| `cytoscape-cola` | Force-directed layout |
|
|
197
|
+
| `graphology` | Graph data structure |
|
|
198
|
+
| `sigma` | WebGL graph rendering |
|
|
199
|
+
| `kuzu-wasm` | Graph database |
|
|
200
|
+
| `@multi-agent-protocol/sdk` | MAP protocol SDK (backend) |
|
|
201
|
+
|
|
202
|
+
## Common Gotchas
|
|
203
|
+
|
|
204
|
+
### TypeScript Build Errors in Tests
|
|
205
|
+
|
|
206
|
+
Test files are excluded from the production build via `tsconfig.app.json`. If you add new test patterns, update the exclusion list.
|
|
207
|
+
|
|
208
|
+
### MAP Agent State vs Display State
|
|
209
|
+
|
|
210
|
+
`getAgentDisplayState()` in `src/types/map.ts` maps raw MAP states to display-friendly states. Always use this for UI rendering.
|
|
211
|
+
|
|
212
|
+
### ACP Stream State Split
|
|
213
|
+
|
|
214
|
+
Frontend `acp-service.ts` and backend `acp-manager.ts` each maintain separate stream state. Backend broadcasts lifecycle events that frontend consumes to stay in sync.
|
|
215
|
+
|
|
216
|
+
## Contributing
|
|
217
|
+
|
|
218
|
+
1. Run `npm run build` before committing to catch type errors
|
|
219
|
+
2. Run `npm test` to ensure tests pass
|
|
220
|
+
3. Follow existing patterns for new services/adapters
|
|
221
|
+
4. Add tests for new functionality
|
|
222
|
+
5. Update this file if adding significant new patterns or components
|
package/README.md
CHANGED
|
@@ -1 +1,135 @@
|
|
|
1
|
-
#
|
|
1
|
+
# SwarmCraft
|
|
2
|
+
|
|
3
|
+
A visual code exploration and multi-agent orchestration platform. SwarmCraft enables developers to visualize codebases as interactive graphs, manage AI agent swarms, and explore code relationships through an intuitive web interface.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
### Code Visualization
|
|
8
|
+
- **Interactive Graph Canvas**: Visualize code structure as a navigable graph using Sigma.js or Cytoscape.js
|
|
9
|
+
- **Dual View Modes**: Switch between Sigma (fast, WebGL-based) and Cytoscape (feature-rich, DOM-based) renderers
|
|
10
|
+
- **File Tree Navigation**: Browse and navigate the codebase structure
|
|
11
|
+
- **Code References Panel**: View code snippets and relationships for selected nodes
|
|
12
|
+
|
|
13
|
+
### Session Visualization (Cytoscape)
|
|
14
|
+
- **VoiceTree-inspired Design**: Hierarchical agent visualization with conversation flow
|
|
15
|
+
- **Multi-select & Focus Mode**: Select multiple nodes with keyboard modifiers, focus on specific subgraphs
|
|
16
|
+
- **Undo/Redo History**: Track and revert graph changes with full history support
|
|
17
|
+
- **Viewport Navigation**: Zoom, pan, fit-to-view with viewport history (back/forward navigation)
|
|
18
|
+
- **Theme System**: Light/dark/high-contrast themes with custom theme support
|
|
19
|
+
- **Minimap**: Overview navigation for large graphs
|
|
20
|
+
- **Performance Optimization**: Level-of-Detail (LOD) rendering, debounced layouts, batch operations
|
|
21
|
+
|
|
22
|
+
### Multi-Agent Orchestration
|
|
23
|
+
- **Agent Swarm Management**: Create, monitor, and coordinate multiple AI agents
|
|
24
|
+
- **MCP Server Integration**: Connect to Model Context Protocol servers
|
|
25
|
+
- **Task Assignment**: Create and assign tasks to agents
|
|
26
|
+
- **Real-time Messaging**: Monitor inter-agent communication
|
|
27
|
+
|
|
28
|
+
### Intelligent Analysis
|
|
29
|
+
- **Smart Clustering**: AI-powered code clustering using LLMs (Anthropic, OpenAI, Google, Ollama)
|
|
30
|
+
- **Embeddings Pipeline**: Generate code embeddings using WebGPU or WASM
|
|
31
|
+
- **Semantic Search**: Find related code using vector similarity
|
|
32
|
+
|
|
33
|
+
## Tech Stack
|
|
34
|
+
|
|
35
|
+
- **Frontend**: React 18, TypeScript, Tailwind CSS
|
|
36
|
+
- **Graph Libraries**: Sigma.js, Cytoscape.js, Graphology
|
|
37
|
+
- **Database**: Kuzu (WASM-based graph database)
|
|
38
|
+
- **AI/LLM**: LangChain, LangGraph with multi-provider support
|
|
39
|
+
- **Code Parsing**: Tree-sitter (WASM)
|
|
40
|
+
- **Build**: Vite
|
|
41
|
+
|
|
42
|
+
## Getting Started
|
|
43
|
+
|
|
44
|
+
### Prerequisites
|
|
45
|
+
- Node.js 18+
|
|
46
|
+
- npm or yarn
|
|
47
|
+
|
|
48
|
+
### Installation
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
# Install dependencies
|
|
52
|
+
npm install
|
|
53
|
+
|
|
54
|
+
# Start development server
|
|
55
|
+
npm run dev
|
|
56
|
+
|
|
57
|
+
# Build for production
|
|
58
|
+
npm run build
|
|
59
|
+
|
|
60
|
+
# Run tests
|
|
61
|
+
npm test
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Usage
|
|
65
|
+
|
|
66
|
+
1. **Load a Repository**: Drag and drop a ZIP file or clone from a Git URL
|
|
67
|
+
2. **Explore the Graph**: Navigate the code structure using pan, zoom, and node selection
|
|
68
|
+
3. **Configure LLM**: Open Settings to configure your preferred LLM provider for intelligent features
|
|
69
|
+
4. **Use Agents**: Open the SwarmCraft panel to create and manage AI agents
|
|
70
|
+
|
|
71
|
+
## Project Structure
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
src/
|
|
75
|
+
├── components/
|
|
76
|
+
│ ├── cytoscape/ # Cytoscape visualization components
|
|
77
|
+
│ │ ├── adapters/ # Data adapters (Graphology, Agent)
|
|
78
|
+
│ │ ├── services/ # Core services (Selection, Navigation, History, Theme, Performance)
|
|
79
|
+
│ │ ├── hooks/ # React hooks for Cytoscape integration
|
|
80
|
+
│ │ └── styles/ # Stylesheets and layout configuration
|
|
81
|
+
│ ├── agents/ # Agent management UI
|
|
82
|
+
│ ├── swarmcraft/ # SwarmCraft dashboard components
|
|
83
|
+
│ └── ... # Other UI components
|
|
84
|
+
├── core/
|
|
85
|
+
│ ├── embeddings/ # Code embedding generation
|
|
86
|
+
│ ├── graph/ # Graph operations and algorithms
|
|
87
|
+
│ ├── ingestion/ # Code ingestion pipeline
|
|
88
|
+
│ ├── kuzu/ # Kuzu database integration
|
|
89
|
+
│ ├── llm/ # LLM provider integrations
|
|
90
|
+
│ ├── mcp/ # MCP client implementation
|
|
91
|
+
│ └── search/ # Search functionality
|
|
92
|
+
├── contexts/ # React contexts
|
|
93
|
+
├── hooks/ # Shared React hooks
|
|
94
|
+
├── services/ # Application services
|
|
95
|
+
├── types/ # TypeScript type definitions
|
|
96
|
+
└── workers/ # Web workers for background processing
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Testing
|
|
100
|
+
|
|
101
|
+
The project uses Vitest for testing with jsdom environment.
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
# Run tests in watch mode
|
|
105
|
+
npm test
|
|
106
|
+
|
|
107
|
+
# Run tests once
|
|
108
|
+
npm run test:run
|
|
109
|
+
|
|
110
|
+
# Run tests with coverage
|
|
111
|
+
npm run test:coverage
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### Test Structure
|
|
115
|
+
- Tests are co-located with source files in `__tests__` directories
|
|
116
|
+
- Mock helpers are in `src/components/cytoscape/__tests__/helpers/`
|
|
117
|
+
- Global test setup is in `src/test/setup.ts`
|
|
118
|
+
|
|
119
|
+
## Configuration
|
|
120
|
+
|
|
121
|
+
### LLM Providers
|
|
122
|
+
SwarmCraft supports multiple LLM providers:
|
|
123
|
+
- **Anthropic** (Claude)
|
|
124
|
+
- **OpenAI** (GPT-4, GPT-3.5)
|
|
125
|
+
- **Google** (Gemini)
|
|
126
|
+
- **Ollama** (Local models)
|
|
127
|
+
|
|
128
|
+
Configure via the Settings panel in the application.
|
|
129
|
+
|
|
130
|
+
### Environment Variables
|
|
131
|
+
No environment variables are required for basic usage. LLM API keys are configured through the Settings panel and stored locally.
|
|
132
|
+
|
|
133
|
+
## License
|
|
134
|
+
|
|
135
|
+
MIT
|
package/api/proxy.ts
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import type { VercelRequest, VercelResponse } from '@vercel/node';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* CORS Proxy for isomorphic-git
|
|
5
|
+
*
|
|
6
|
+
* isomorphic-git calls: /api/proxy?url=https://github.com/...
|
|
7
|
+
*/
|
|
8
|
+
export default async function handler(req: VercelRequest, res: VercelResponse) {
|
|
9
|
+
// Handle CORS preflight
|
|
10
|
+
if (req.method === 'OPTIONS') {
|
|
11
|
+
res.setHeader('Access-Control-Allow-Origin', '*');
|
|
12
|
+
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
|
|
13
|
+
res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization, Git-Protocol, Accept');
|
|
14
|
+
res.status(200).end();
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
// Get URL from query parameter
|
|
19
|
+
const { url } = req.query;
|
|
20
|
+
|
|
21
|
+
if (!url || typeof url !== 'string') {
|
|
22
|
+
res.status(400).json({ error: 'Missing url query parameter' });
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// Only allow GitHub URLs for security
|
|
27
|
+
const allowedHosts = ['github.com', 'raw.githubusercontent.com'];
|
|
28
|
+
let parsedUrl: URL;
|
|
29
|
+
|
|
30
|
+
try {
|
|
31
|
+
parsedUrl = new URL(url);
|
|
32
|
+
} catch {
|
|
33
|
+
res.status(400).json({ error: 'Invalid URL' });
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
if (!allowedHosts.some(host => parsedUrl.hostname.endsWith(host))) {
|
|
38
|
+
res.status(403).json({ error: 'Only GitHub URLs are allowed' });
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
try {
|
|
43
|
+
const headers: Record<string, string> = {
|
|
44
|
+
'User-Agent': 'git/isomorphic-git',
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
// Forward relevant headers
|
|
48
|
+
if (req.headers.authorization) {
|
|
49
|
+
headers['Authorization'] = req.headers.authorization as string;
|
|
50
|
+
}
|
|
51
|
+
if (req.headers['content-type']) {
|
|
52
|
+
headers['Content-Type'] = req.headers['content-type'] as string;
|
|
53
|
+
}
|
|
54
|
+
if (req.headers['git-protocol']) {
|
|
55
|
+
headers['Git-Protocol'] = req.headers['git-protocol'] as string;
|
|
56
|
+
}
|
|
57
|
+
if (req.headers.accept) {
|
|
58
|
+
headers['Accept'] = req.headers.accept as string;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Get request body for POST requests
|
|
62
|
+
let body: Buffer | undefined;
|
|
63
|
+
if (req.method === 'POST') {
|
|
64
|
+
const chunks: Buffer[] = [];
|
|
65
|
+
for await (const chunk of req) {
|
|
66
|
+
chunks.push(typeof chunk === 'string' ? Buffer.from(chunk) : chunk);
|
|
67
|
+
}
|
|
68
|
+
body = Buffer.concat(chunks);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const response = await fetch(url, {
|
|
72
|
+
method: req.method || 'GET',
|
|
73
|
+
headers,
|
|
74
|
+
body: body ? new Uint8Array(body) : undefined,
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
// Set CORS headers
|
|
78
|
+
res.setHeader('Access-Control-Allow-Origin', '*');
|
|
79
|
+
res.setHeader('Access-Control-Expose-Headers', '*');
|
|
80
|
+
|
|
81
|
+
// Forward response headers (except ones that cause issues)
|
|
82
|
+
const skipHeaders = [
|
|
83
|
+
'content-encoding',
|
|
84
|
+
'transfer-encoding',
|
|
85
|
+
'connection',
|
|
86
|
+
'www-authenticate', // IMPORTANT: Strip this to prevent browser's native auth popup!
|
|
87
|
+
];
|
|
88
|
+
|
|
89
|
+
response.headers.forEach((value, key) => {
|
|
90
|
+
if (!skipHeaders.includes(key.toLowerCase())) {
|
|
91
|
+
res.setHeader(key, value);
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
res.status(response.status);
|
|
96
|
+
const buffer = await response.arrayBuffer();
|
|
97
|
+
res.send(Buffer.from(buffer));
|
|
98
|
+
|
|
99
|
+
} catch (error) {
|
|
100
|
+
console.error('Proxy error:', error);
|
|
101
|
+
res.status(500).json({ error: 'Proxy request failed', details: String(error) });
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/server/app.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAYnD,wBAAsB,QAAQ,IAAI,OAAO,CAAC,eAAe,CAAC,CAyIzD"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import Fastify from 'fastify';
|
|
2
|
+
import cors from '@fastify/cors';
|
|
3
|
+
import websocket from '@fastify/websocket';
|
|
4
|
+
import { config } from './config.js';
|
|
5
|
+
import { initDb, closeDb } from './db/index.js';
|
|
6
|
+
import { registerRoutes } from './routes/index.js';
|
|
7
|
+
import { wsHub } from './websocket/hub.js';
|
|
8
|
+
import { setupEventHandlers, mapClientManager, acpStreamManager } from './map/index.js';
|
|
9
|
+
import { subprocessManager } from './subprocess/manager.js';
|
|
10
|
+
import { ptyManager } from './terminal/pty-manager.js';
|
|
11
|
+
import { handleTerminalWebSocket } from './terminal/terminal-ws.js';
|
|
12
|
+
export async function buildApp() {
|
|
13
|
+
const isProd = process.env.NODE_ENV === 'production';
|
|
14
|
+
const fastify = Fastify({
|
|
15
|
+
logger: isProd
|
|
16
|
+
? { level: config.logLevel }
|
|
17
|
+
: {
|
|
18
|
+
level: config.logLevel,
|
|
19
|
+
transport: {
|
|
20
|
+
target: 'pino-pretty',
|
|
21
|
+
options: {
|
|
22
|
+
translateTime: 'HH:MM:ss Z',
|
|
23
|
+
ignore: 'pid,hostname',
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
// Initialize database
|
|
29
|
+
initDb();
|
|
30
|
+
// Setup MAP event handlers
|
|
31
|
+
setupEventHandlers();
|
|
32
|
+
// Wire ACP stream events to WebSocket hub for frontend real-time updates
|
|
33
|
+
const acpEvents = [
|
|
34
|
+
'stream.created',
|
|
35
|
+
'stream.initialized',
|
|
36
|
+
'stream.closed',
|
|
37
|
+
'stream.error',
|
|
38
|
+
'stream.reconnecting',
|
|
39
|
+
'stream.reconnected',
|
|
40
|
+
'session.started',
|
|
41
|
+
'session.loaded',
|
|
42
|
+
'session.update',
|
|
43
|
+
'session.lost',
|
|
44
|
+
'prompt.started',
|
|
45
|
+
'prompt.completed',
|
|
46
|
+
'prompt.cancelled',
|
|
47
|
+
'permission.request',
|
|
48
|
+
'question.request',
|
|
49
|
+
];
|
|
50
|
+
for (const eventName of acpEvents) {
|
|
51
|
+
acpStreamManager.on(eventName, (payload) => {
|
|
52
|
+
const message = {
|
|
53
|
+
type: `acp.${eventName}`,
|
|
54
|
+
payload,
|
|
55
|
+
timestamp: Date.now(),
|
|
56
|
+
};
|
|
57
|
+
// Broadcast to both 'events' topic and dedicated 'acp' topic
|
|
58
|
+
wsHub.broadcast(message, 'events');
|
|
59
|
+
wsHub.broadcast(message, 'acp');
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
// Wire subprocess events to WebSocket hub
|
|
63
|
+
const subprocessEvents = [
|
|
64
|
+
'process.started',
|
|
65
|
+
'process.stopped',
|
|
66
|
+
'process.exited',
|
|
67
|
+
'process.error',
|
|
68
|
+
'process.connected',
|
|
69
|
+
'process.log',
|
|
70
|
+
];
|
|
71
|
+
for (const eventName of subprocessEvents) {
|
|
72
|
+
subprocessManager.on(eventName, (payload) => {
|
|
73
|
+
wsHub.broadcast({
|
|
74
|
+
type: `subprocess.${eventName.replace('process.', '')}`,
|
|
75
|
+
payload,
|
|
76
|
+
timestamp: Date.now(),
|
|
77
|
+
}, 'events');
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
// Register plugins
|
|
81
|
+
await fastify.register(cors, {
|
|
82
|
+
origin: config.corsOrigin,
|
|
83
|
+
methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
|
|
84
|
+
allowedHeaders: ['Content-Type', 'Authorization'],
|
|
85
|
+
});
|
|
86
|
+
await fastify.register(websocket);
|
|
87
|
+
// Register WebSocket route
|
|
88
|
+
fastify.register(async function (fastify) {
|
|
89
|
+
fastify.get('/ws', { websocket: true }, (socket, req) => {
|
|
90
|
+
wsHub.addClient(socket);
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
// Register terminal WebSocket route (dedicated PTY tunnel)
|
|
94
|
+
fastify.register(async function (fastify) {
|
|
95
|
+
fastify.get('/ws/terminal', { websocket: true }, (socket, req) => {
|
|
96
|
+
const url = new URL(req.url, `http://${req.headers.host}`);
|
|
97
|
+
const query = {
|
|
98
|
+
cols: url.searchParams.get('cols') ?? undefined,
|
|
99
|
+
rows: url.searchParams.get('rows') ?? undefined,
|
|
100
|
+
command: url.searchParams.get('command') ?? undefined,
|
|
101
|
+
args: url.searchParams.get('args') ?? undefined,
|
|
102
|
+
cwd: url.searchParams.get('cwd') ?? undefined,
|
|
103
|
+
sessionId: url.searchParams.get('sessionId') ?? undefined,
|
|
104
|
+
env: url.searchParams.get('env') ?? undefined,
|
|
105
|
+
};
|
|
106
|
+
handleTerminalWebSocket(socket, query);
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
// Register REST routes
|
|
110
|
+
await registerRoutes(fastify);
|
|
111
|
+
// WebSocket stats endpoint
|
|
112
|
+
fastify.get('/api/ws/stats', async () => {
|
|
113
|
+
return {
|
|
114
|
+
success: true,
|
|
115
|
+
data: wsHub.getStats(),
|
|
116
|
+
};
|
|
117
|
+
});
|
|
118
|
+
// Graceful shutdown
|
|
119
|
+
const shutdown = async () => {
|
|
120
|
+
fastify.log.info('Shutting down...');
|
|
121
|
+
await acpStreamManager.closeAll();
|
|
122
|
+
await mapClientManager.disconnectAll();
|
|
123
|
+
await subprocessManager.stopAll();
|
|
124
|
+
ptyManager.destroyAll();
|
|
125
|
+
await fastify.close();
|
|
126
|
+
closeDb();
|
|
127
|
+
process.exit(0);
|
|
128
|
+
};
|
|
129
|
+
process.on('SIGTERM', shutdown);
|
|
130
|
+
process.on('SIGINT', shutdown);
|
|
131
|
+
return fastify;
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=app.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/server/app.ts"],"names":[],"mappings":"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"}
|