swarmcraft 0.0.1 → 0.1.1
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 +3 -0
- package/.storybook/main.ts +15 -0
- package/.storybook/preview.tsx +30 -0
- package/CLAUDE.md +253 -0
- package/LICENSE +21 -0
- package/README.md +130 -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 +43 -0
- package/dist/server/config.d.ts.map +1 -0
- package/dist/server/config.js +26 -0
- package/dist/server/config.js.map +1 -0
- package/dist/server/context.d.ts +75 -0
- package/dist/server/context.d.ts.map +1 -0
- package/dist/server/context.js +103 -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 +121 -0
- package/dist/server/map/acp-manager.d.ts.map +1 -0
- package/dist/server/map/acp-manager.js +404 -0
- package/dist/server/map/acp-manager.js.map +1 -0
- package/dist/server/map/client-manager.d.ts +53 -0
- package/dist/server/map/client-manager.d.ts.map +1 -0
- package/dist/server/map/client-manager.js +327 -0
- package/dist/server/map/client-manager.js.map +1 -0
- package/dist/server/map/event-handler.d.ts +6 -0
- package/dist/server/map/event-handler.d.ts.map +1 -0
- package/dist/server/map/event-handler.js +370 -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 +86 -0
- package/dist/server/pipeline/pipeline-service.d.ts.map +1 -0
- package/dist/server/pipeline/pipeline-service.js +352 -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 +122 -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/sessionlog.d.ts +9 -0
- package/dist/server/routes/sessionlog.d.ts.map +1 -0
- package/dist/server/routes/sessionlog.js +128 -0
- package/dist/server/routes/sessionlog.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 +29 -0
- package/dist/server/services/embedding-service.d.ts.map +1 -0
- package/dist/server/services/embedding-service.js +67 -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 +56 -0
- package/dist/server/services/federation-service.d.ts.map +1 -0
- package/dist/server/services/federation-service.js +147 -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 +32 -0
- package/dist/server/services/position-service.d.ts.map +1 -0
- package/dist/server/services/position-service.js +59 -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/sessionlog/event-bridge.d.ts +20 -0
- package/dist/server/sessionlog/event-bridge.d.ts.map +1 -0
- package/dist/server/sessionlog/event-bridge.js +247 -0
- package/dist/server/sessionlog/event-bridge.js.map +1 -0
- package/dist/server/sessionlog/index.d.ts +8 -0
- package/dist/server/sessionlog/index.d.ts.map +1 -0
- package/dist/server/sessionlog/index.js +6 -0
- package/dist/server/sessionlog/index.js.map +1 -0
- package/dist/server/sessionlog/session-watcher.d.ts +87 -0
- package/dist/server/sessionlog/session-watcher.d.ts.map +1 -0
- package/dist/server/sessionlog/session-watcher.js +254 -0
- package/dist/server/sessionlog/session-watcher.js.map +1 -0
- package/dist/server/sessionlog/transcript-adapter.d.ts +35 -0
- package/dist/server/sessionlog/transcript-adapter.d.ts.map +1 -0
- package/dist/server/sessionlog/transcript-adapter.js +132 -0
- package/dist/server/sessionlog/transcript-adapter.js.map +1 -0
- package/dist/server/sessionlog/transcript-parser.d.ts +48 -0
- package/dist/server/sessionlog/transcript-parser.d.ts.map +1 -0
- package/dist/server/sessionlog/transcript-parser.js +319 -0
- package/dist/server/sessionlog/transcript-parser.js.map +1 -0
- package/dist/server/sessionlog/types.d.ts +98 -0
- package/dist/server/sessionlog/types.d.ts.map +1 -0
- package/dist/server/sessionlog/types.js +36 -0
- package/dist/server/sessionlog/types.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 +59 -0
- package/dist/server/standalone.js.map +1 -0
- package/dist/server/subprocess/manager.d.ts +98 -0
- package/dist/server/subprocess/manager.d.ts.map +1 -0
- package/dist/server/subprocess/manager.js +300 -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 +54 -0
- package/dist/server/websocket/hub.d.ts.map +1 -0
- package/dist/server/websocket/hub.js +287 -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-CB_retbF.js +36 -0
- package/dist/ui/assets/blockDiagram-WDLGXV4W-CgXwvk1I.js +122 -0
- package/dist/ui/assets/c4Diagram-7AWUDI2P-C8HDrltZ.js +10 -0
- package/dist/ui/assets/chunk-3TDMV3MO-DFHcdmen.js +1 -0
- package/dist/ui/assets/chunk-7RZVMHOQ-B5SRuCzt.js +338 -0
- package/dist/ui/assets/chunk-AEOMTBSW-Dhe4qe5z.js +1 -0
- package/dist/ui/assets/chunk-BGEGVY25-Cg9fNKRk.js +220 -0
- package/dist/ui/assets/chunk-H3VCZNTA-HT6wiToA.js +13 -0
- package/dist/ui/assets/chunk-KFR3WFC5-DUOC0iNF.js +165 -0
- package/dist/ui/assets/chunk-KSICW3F5-B4uGabmh.js +15 -0
- package/dist/ui/assets/chunk-LWM4QWG6-AQRtplIi.js +1 -0
- package/dist/ui/assets/chunk-M3I2T2XC-CwLqaa1O.js +1 -0
- package/dist/ui/assets/chunk-TU3PZOEN-CFfl6_Kk.js +1 -0
- package/dist/ui/assets/chunk-VGHHFSQR--tHHUaKU.js +1 -0
- package/dist/ui/assets/chunk-WNUA3B3J-B9-h8qLh.js +1 -0
- package/dist/ui/assets/classDiagram-W3T7ADTY-DwVZ8Oaq.js +1 -0
- package/dist/ui/assets/classDiagram-v2-NUY7TN2I-DwVZ8Oaq.js +1 -0
- package/dist/ui/assets/cose-bilkent-DQETAGN7-BCQmvNA4.js +1 -0
- package/dist/ui/assets/dagre-PD6EB5X7-C51E25PG.js +4 -0
- package/dist/ui/assets/diagram-H6XQBSGY-DGcs6tzR.js +24 -0
- package/dist/ui/assets/diagram-LDM27ML3-BppAr5H3.js +43 -0
- package/dist/ui/assets/diagram-YNAIMP7R-CPs8mD7q.js +24 -0
- package/dist/ui/assets/erDiagram-JKLMQEMA-CEHQF3xs.js +60 -0
- package/dist/ui/assets/flowDiagram-TPJNMKY5-x3yStqgk.js +162 -0
- package/dist/ui/assets/ganttDiagram-TVT35BNJ-DwvKwK7B.js +267 -0
- package/dist/ui/assets/gitGraphDiagram-ZZNRLE66-DnG5ShIg.js +65 -0
- package/dist/ui/assets/index-BcpSOuVX.js +2056 -0
- package/dist/ui/assets/index-tbwaRGvL.css +1 -0
- package/dist/ui/assets/infoDiagram-WBDZ6S3U-hMQoXMtH.js +2 -0
- package/dist/ui/assets/journeyDiagram-FDC3KNBO-DYXNpAZx.js +139 -0
- package/dist/ui/assets/kanban-definition-YQQHB3YZ-BVNjx3md.js +89 -0
- package/dist/ui/assets/katex-4QAC45MX-DGfTcqso.js +261 -0
- package/dist/ui/assets/mindmap-definition-SIOIWSPX-C3kw-n2b.js +68 -0
- package/dist/ui/assets/pieDiagram-XCFX7IE7-Cz3-AgWe.js +30 -0
- package/dist/ui/assets/quadrantDiagram-ZSOMFDZY-CN21bfLl.js +7 -0
- package/dist/ui/assets/requirementDiagram-RUCZPMKB-CofrbuMO.js +64 -0
- package/dist/ui/assets/sankeyDiagram-VQJ3IPPN-CB1c4p71.js +10 -0
- package/dist/ui/assets/sequenceDiagram-JT7H6RCS-CTJfbBuA.js +145 -0
- package/dist/ui/assets/stateDiagram-MULPRXYB-v7evpSXl.js +1 -0
- package/dist/ui/assets/stateDiagram-v2-LMKPZ2WR-Dne5-Laq.js +1 -0
- package/dist/ui/assets/timeline-definition-O36V2GCZ-D6JDV-W4.js +61 -0
- package/dist/ui/assets/treemap-GDKQZRPO-TD7FEVA6-BfiO94pT.js +161 -0
- package/dist/ui/assets/xychartDiagram-HB2IZN64-CQoYRUsf.js +7 -0
- package/dist/ui/assets/zip-JuLA9AYS.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/docs/design/UNIVERSAL_AGENT_VISUALIZATION.md +1202 -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 +21 -0
- package/src/server/config.ts +31 -0
- package/src/server/context.ts +209 -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 +535 -0
- package/src/server/map/client-manager.ts +425 -0
- package/src/server/map/event-handler.ts +439 -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 +443 -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 +185 -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/sessionlog.ts +156 -0
- package/src/server/routes/subprocess.ts +126 -0
- package/src/server/routes/tasks.ts +210 -0
- package/src/server/services/embedding-service.ts +82 -0
- package/src/server/services/federation-service.ts +199 -0
- package/src/server/services/position-service.ts +73 -0
- package/src/server/sessionlog/event-bridge.ts +307 -0
- package/src/server/sessionlog/index.ts +16 -0
- package/src/server/sessionlog/session-watcher.ts +340 -0
- package/src/server/sessionlog/transcript-adapter.ts +187 -0
- package/src/server/sessionlog/transcript-parser.ts +390 -0
- package/src/server/sessionlog/types.ts +162 -0
- package/src/server/standalone.ts +67 -0
- package/src/server/subprocess/manager.ts +417 -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/sessionlog-event-bridge.test.ts +597 -0
- package/src/server/tests/sessionlog-routes.test.ts +430 -0
- package/src/server/tests/sessionlog-session-watcher.test.ts +666 -0
- package/src/server/tests/sessionlog-transcript-adapter.test.ts +249 -0
- package/src/server/tests/sessionlog-transcript-parser.test.ts +850 -0
- package/src/server/types/index.ts +296 -0
- package/src/server/websocket/hub.ts +359 -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/ErrorBoundary.tsx +48 -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 +300 -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/AgentHierarchyView.tsx +307 -0
- package/src/ui/components/agents/AgentListPanel.tsx +343 -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/events/EventStreamPanel.tsx +362 -0
- package/src/ui/components/map-servers/ServerConnectionPanel.tsx +753 -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/overlay/AgentOverlayLayer.tsx +200 -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/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/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/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 +500 -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 +17 -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/factory.ts +28 -0
- package/src/ui/services/git-clone.ts +219 -0
- package/src/ui/services/swarmcraft-api.ts +612 -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 +340 -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,253 @@
|
|
|
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
|
+
npm install # Install dependencies (single package)
|
|
13
|
+
npm run dev # Start Vite dev server (frontend only)
|
|
14
|
+
npm run dev:server # Start backend server (tsx watch)
|
|
15
|
+
npm run build # Build server + UI (TypeScript check + Vite)
|
|
16
|
+
npm test # Run all tests (UI + server, single run)
|
|
17
|
+
npm run test:ui:watch # Run UI tests in watch mode
|
|
18
|
+
npm run test:server:watch # Run server tests in watch mode
|
|
19
|
+
npm run typecheck # TypeScript check all projects
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Architecture Overview
|
|
23
|
+
|
|
24
|
+
### System Architecture
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
Browser (React) ↔ Backend (Fastify REST/WS) ↔ MAP Server(s) ↔ Agents
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Monorepo Layout
|
|
31
|
+
|
|
32
|
+
This is a **single-package monorepo** with frontend and backend co-located:
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
src/
|
|
36
|
+
├── ui/ # Frontend (React + Vite)
|
|
37
|
+
│ ├── components/ # React components
|
|
38
|
+
│ ├── hooks/ # React hooks
|
|
39
|
+
│ ├── services/ # API client, WS client, ACP service
|
|
40
|
+
│ ├── core/ # Graph DB, MCP client, ingestion pipeline
|
|
41
|
+
│ ├── types/ # Frontend type definitions
|
|
42
|
+
│ └── contexts/ # React contexts
|
|
43
|
+
├── server/ # Backend (Fastify)
|
|
44
|
+
│ ├── routes/ # REST API endpoints
|
|
45
|
+
│ ├── map/ # MAP protocol integration
|
|
46
|
+
│ ├── websocket/ # WebSocket hub
|
|
47
|
+
│ ├── db/ # SQLite persistence (provider pattern)
|
|
48
|
+
│ ├── subprocess/ # Process spawning
|
|
49
|
+
│ └── terminal/ # PTY management
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### Frontend (`src/ui/`)
|
|
53
|
+
|
|
54
|
+
1. **Visualization Layer** (`src/ui/components/`)
|
|
55
|
+
- Sigma.js: WebGL-based, high-performance rendering for large graphs
|
|
56
|
+
- Cytoscape.js: Feature-rich, DOM-based rendering with advanced interactions
|
|
57
|
+
- ViewSwitcher allows toggling between renderers
|
|
58
|
+
- Agent overlay on codebase graph with position calculator
|
|
59
|
+
|
|
60
|
+
2. **Data Layer** (`src/ui/core/`)
|
|
61
|
+
- Graphology: In-memory graph data structure
|
|
62
|
+
- Kuzu: WASM-based graph database for persistence
|
|
63
|
+
- Adapters convert between data formats
|
|
64
|
+
|
|
65
|
+
3. **Agent Layer** (MAP-based)
|
|
66
|
+
- `src/ui/hooks/useSwarmCraft.ts` — Main agent state hook (agents, positions, messages)
|
|
67
|
+
- `src/ui/services/swarmcraft-api.ts` — REST client to backend
|
|
68
|
+
- `src/ui/services/swarmcraft-ws.ts` — WebSocket client with auto-reconnection and event batching
|
|
69
|
+
- `src/ui/services/acp-service.ts` — ACP stream management and message assembly
|
|
70
|
+
|
|
71
|
+
4. **Types** (`src/ui/types/`)
|
|
72
|
+
- `src/ui/types/map.ts` — MAP protocol types (MAPAgent, MAPMessage, MAPEvent, etc.)
|
|
73
|
+
- `src/ui/types/acp.ts` — ACP types (streams, messages, parts, permissions, questions)
|
|
74
|
+
|
|
75
|
+
### Backend (`src/server/`)
|
|
76
|
+
|
|
77
|
+
1. **MAP Integration** (`src/server/map/`)
|
|
78
|
+
- `client-manager.ts` — Manages `ClientConnection` instances to MAP servers via `@multi-agent-protocol/sdk`
|
|
79
|
+
- `event-handler.ts` — Processes MAP events (agent lifecycle, messages, scopes)
|
|
80
|
+
- `acp-manager.ts` — Manages `ACPStreamConnection` instances for ACP conversations
|
|
81
|
+
|
|
82
|
+
2. **REST API** (`src/server/routes/`)
|
|
83
|
+
- Agent, message, task, scope, and event CRUD
|
|
84
|
+
- MAP server management (add, connect, disconnect)
|
|
85
|
+
- ACP stream lifecycle (create, initialize, prompt, permission/question reply, extension calls)
|
|
86
|
+
- Subprocess spawning and management
|
|
87
|
+
|
|
88
|
+
3. **WebSocket Hub** (`src/server/websocket/hub.ts`)
|
|
89
|
+
- Real-time event broadcast with topic-based subscriptions
|
|
90
|
+
- Heartbeat/ping-pong for connection liveness
|
|
91
|
+
- Topics: agents, messages, events, tasks, positions, acp
|
|
92
|
+
|
|
93
|
+
4. **Database** (`src/server/db/`)
|
|
94
|
+
- SQLite persistence via provider pattern (`SQLiteSwarmCraftProvider`)
|
|
95
|
+
- Repository classes for agents, messages, events, tasks, positions, ACP conversations, MAP servers
|
|
96
|
+
- Plugin registers `fastify.swarmcraft.*` decorated services
|
|
97
|
+
|
|
98
|
+
5. **Subprocess Management** (`src/server/subprocess/`)
|
|
99
|
+
- Spawn/stop MAP server processes (e.g. macro-agent)
|
|
100
|
+
- Auto-connect to spawned servers
|
|
101
|
+
- Log streaming
|
|
102
|
+
|
|
103
|
+
### Key Design Patterns
|
|
104
|
+
|
|
105
|
+
- **Provider Pattern**: Database access via `fastify.swarmcraft.*` (NOT legacy singleton services)
|
|
106
|
+
- **Adapter Pattern**: Data conversion between Graphology, Cytoscape, and Agent formats
|
|
107
|
+
- **Provider Pattern**: React contexts for shared state
|
|
108
|
+
- **Event-Driven**: MAP events → backend EventEmitter → WebSocket → frontend React state
|
|
109
|
+
- **ACP Streaming**: `pendingParts[]` accumulation with part-based message assembly
|
|
110
|
+
|
|
111
|
+
## MAP Protocol Integration
|
|
112
|
+
|
|
113
|
+
### Agent States
|
|
114
|
+
|
|
115
|
+
9 states: `registered`, `active`, `busy`, `idle`, `suspended`, `stopping`, `stopped`, `failed`, `orphaned`
|
|
116
|
+
|
|
117
|
+
### ACP (Agent Client Protocol)
|
|
118
|
+
|
|
119
|
+
Interactive conversations with agents, proxied through the backend:
|
|
120
|
+
|
|
121
|
+
```
|
|
122
|
+
Frontend (acp-service.ts)
|
|
123
|
+
→ REST: POST /acp/streams/:id/prompt
|
|
124
|
+
→ Backend (acp-manager.ts)
|
|
125
|
+
→ ACPStreamConnection.prompt()
|
|
126
|
+
→ MAP Server → Agent
|
|
127
|
+
Agent response streams back via:
|
|
128
|
+
ACPStreamConnection events
|
|
129
|
+
→ Backend EventEmitter
|
|
130
|
+
→ WebSocket broadcast
|
|
131
|
+
→ Frontend acp-service.ts (message assembly)
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### ACP Message Assembly
|
|
135
|
+
|
|
136
|
+
Messages are assembled from streaming parts:
|
|
137
|
+
- `ACPTextPart` — Streaming text content
|
|
138
|
+
- `ACPToolCallPart` — Tool invocations
|
|
139
|
+
- `ACPToolResultPart` — Tool outputs
|
|
140
|
+
- `ACPStepStartPart` / `ACPStepFinishPart` — Step lifecycle
|
|
141
|
+
|
|
142
|
+
### ACP Interactive Requests
|
|
143
|
+
|
|
144
|
+
- **Permissions**: Agent requests tool execution approval → frontend shows dialog → user approves/denies
|
|
145
|
+
- **Questions**: Agent asks structured questions with options → frontend shows selection UI → user answers
|
|
146
|
+
|
|
147
|
+
## Cytoscape Integration
|
|
148
|
+
|
|
149
|
+
### Component Hierarchy
|
|
150
|
+
|
|
151
|
+
```
|
|
152
|
+
CytoscapeProvider (context)
|
|
153
|
+
└── CytoscapeCanvas (main visualization)
|
|
154
|
+
├── NavigationControls (zoom/pan UI)
|
|
155
|
+
└── Minimap (overview navigation)
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Services (`src/ui/components/cytoscape/services/`)
|
|
159
|
+
|
|
160
|
+
| Service | Responsibility |
|
|
161
|
+
|---------|----------------|
|
|
162
|
+
| `SelectionService` | Multi-select, focus mode, selection expansion |
|
|
163
|
+
| `NavigationService` | Zoom, pan, fit, viewport history |
|
|
164
|
+
| `HistoryService` | Undo/redo for graph changes |
|
|
165
|
+
| `ThemeService` | Theme switching, CSS variables, custom themes |
|
|
166
|
+
| `PerformanceService` | LOD rendering, debounced layouts, batch ops |
|
|
167
|
+
| `AnimationService` | Node/edge animations |
|
|
168
|
+
| `ContextMenuService` | Right-click context menus |
|
|
169
|
+
| `HoverMenuService` | Hover tooltips and menus |
|
|
170
|
+
|
|
171
|
+
## Testing Guidelines
|
|
172
|
+
|
|
173
|
+
### Test Framework
|
|
174
|
+
- **Vitest** with jsdom environment
|
|
175
|
+
- Tests co-located in `__tests__` directories
|
|
176
|
+
- Global setup in `src/ui/test/setup.ts`
|
|
177
|
+
|
|
178
|
+
### Running Tests
|
|
179
|
+
|
|
180
|
+
```bash
|
|
181
|
+
npm test # Run all tests once (UI + server)
|
|
182
|
+
npm run test:ui:watch # UI tests in watch mode
|
|
183
|
+
npm run test:server:watch # Server tests in watch mode
|
|
184
|
+
npm run test:coverage # With coverage report
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### Test Principles
|
|
188
|
+
|
|
189
|
+
1. **Minimal Mocking**: Use real Graphology instances where possible
|
|
190
|
+
2. **Integration-style**: Test service interactions, not just units
|
|
191
|
+
3. **Event Verification**: Verify events are emitted correctly
|
|
192
|
+
4. **State Assertions**: Check state changes, not implementation details
|
|
193
|
+
|
|
194
|
+
## Key Files Reference
|
|
195
|
+
|
|
196
|
+
| Purpose | File |
|
|
197
|
+
|---------|------|
|
|
198
|
+
| App entry | `src/ui/App.tsx` |
|
|
199
|
+
| Main state hook | `src/ui/hooks/useAppState.tsx` |
|
|
200
|
+
| Agent state hook | `src/ui/hooks/useSwarmCraft.ts` |
|
|
201
|
+
| ACP service | `src/ui/services/acp-service.ts` |
|
|
202
|
+
| REST API client | `src/ui/services/swarmcraft-api.ts` |
|
|
203
|
+
| WebSocket client | `src/ui/services/swarmcraft-ws.ts` |
|
|
204
|
+
| MAP types | `src/ui/types/map.ts` |
|
|
205
|
+
| ACP types | `src/ui/types/acp.ts` |
|
|
206
|
+
| Backend entry | `src/server/index.ts` |
|
|
207
|
+
| Backend plugin | `src/server/plugin.ts` |
|
|
208
|
+
| MAP client manager | `src/server/map/client-manager.ts` |
|
|
209
|
+
| ACP stream manager | `src/server/map/acp-manager.ts` |
|
|
210
|
+
| MAP event handler | `src/server/map/event-handler.ts` |
|
|
211
|
+
| WebSocket hub | `src/server/websocket/hub.ts` |
|
|
212
|
+
| ACP routes | `src/server/routes/acp.ts` |
|
|
213
|
+
| DB provider | `src/server/db/provider.ts` |
|
|
214
|
+
|
|
215
|
+
## Dependencies of Note
|
|
216
|
+
|
|
217
|
+
| Package | Purpose |
|
|
218
|
+
|---------|---------|
|
|
219
|
+
| `cytoscape` | Graph visualization |
|
|
220
|
+
| `cytoscape-cola` | Force-directed layout |
|
|
221
|
+
| `graphology` | Graph data structure |
|
|
222
|
+
| `sigma` | WebGL graph rendering |
|
|
223
|
+
| `kuzu-wasm` | Graph database (frontend) |
|
|
224
|
+
| `@multi-agent-protocol/sdk` | MAP protocol SDK (backend) |
|
|
225
|
+
| `fastify` | Backend HTTP framework |
|
|
226
|
+
| `@fastify/websocket` | WebSocket support |
|
|
227
|
+
| `better-sqlite3` | SQLite database (backend) |
|
|
228
|
+
|
|
229
|
+
## Common Gotchas
|
|
230
|
+
|
|
231
|
+
### TypeScript Build Errors in Tests
|
|
232
|
+
|
|
233
|
+
Test files are excluded from the production build via `tsconfig.ui.json`. If you add new test patterns, update the exclusion list.
|
|
234
|
+
|
|
235
|
+
### MAP Agent State vs Display State
|
|
236
|
+
|
|
237
|
+
`getAgentDisplayState()` in `src/ui/types/map.ts` maps raw MAP states to display-friendly states. Always use this for UI rendering.
|
|
238
|
+
|
|
239
|
+
### ACP Stream State Split
|
|
240
|
+
|
|
241
|
+
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.
|
|
242
|
+
|
|
243
|
+
### Database Access Pattern
|
|
244
|
+
|
|
245
|
+
Use the provider pattern (`fastify.swarmcraft.db.*`) for database access. Do NOT use the legacy singleton services in `src/server/services/`.
|
|
246
|
+
|
|
247
|
+
## Contributing
|
|
248
|
+
|
|
249
|
+
1. Run `npm run build` before committing to catch type errors
|
|
250
|
+
2. Run `npm test` to ensure tests pass
|
|
251
|
+
3. Follow existing patterns for new services/adapters
|
|
252
|
+
4. Add tests for new functionality
|
|
253
|
+
5. Update this file if adding significant new patterns or components
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Alex Ngai
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1 +1,130 @@
|
|
|
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 via MAP protocol
|
|
24
|
+
- **ACP Conversations**: Interactive conversations with agents (permissions, questions, tool calls)
|
|
25
|
+
- **Task Assignment**: Create and assign tasks to agents
|
|
26
|
+
- **Real-time Messaging**: Monitor inter-agent communication
|
|
27
|
+
|
|
28
|
+
### Code Analysis
|
|
29
|
+
- **Embeddings Pipeline**: Generate code embeddings using WebGPU or WASM
|
|
30
|
+
- **Semantic Search**: Find related code using vector similarity
|
|
31
|
+
|
|
32
|
+
## Tech Stack
|
|
33
|
+
|
|
34
|
+
- **Frontend**: React 18, TypeScript, Tailwind CSS
|
|
35
|
+
- **Graph Libraries**: Sigma.js, Cytoscape.js, Graphology
|
|
36
|
+
- **Database**: Kuzu (WASM, frontend), SQLite (backend)
|
|
37
|
+
- **Code Parsing**: Tree-sitter (WASM)
|
|
38
|
+
- **Backend**: Fastify, @multi-agent-protocol/sdk
|
|
39
|
+
- **Build**: Vite
|
|
40
|
+
|
|
41
|
+
## Getting Started
|
|
42
|
+
|
|
43
|
+
### Prerequisites
|
|
44
|
+
- Node.js 18+
|
|
45
|
+
- npm
|
|
46
|
+
|
|
47
|
+
### Installation
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
# Install dependencies
|
|
51
|
+
npm install
|
|
52
|
+
|
|
53
|
+
# Start frontend dev server
|
|
54
|
+
npm run dev
|
|
55
|
+
|
|
56
|
+
# Start backend server (in a separate terminal)
|
|
57
|
+
npm run dev:server
|
|
58
|
+
|
|
59
|
+
# Build for production
|
|
60
|
+
npm run build
|
|
61
|
+
|
|
62
|
+
# Run tests
|
|
63
|
+
npm test
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### Usage
|
|
67
|
+
|
|
68
|
+
1. **Load a Repository**: Drag and drop a ZIP file or clone from a Git URL
|
|
69
|
+
2. **Explore the Graph**: Navigate the code structure using pan, zoom, and node selection
|
|
70
|
+
3. **Use Agents**: Open the SwarmCraft panel to connect MAP servers and manage AI agents
|
|
71
|
+
|
|
72
|
+
## Project Structure
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
src/
|
|
76
|
+
├── ui/ # Frontend (React + Vite)
|
|
77
|
+
│ ├── components/
|
|
78
|
+
│ │ ├── cytoscape/ # Cytoscape visualization components
|
|
79
|
+
│ │ │ ├── adapters/ # Data adapters (Graphology, Agent)
|
|
80
|
+
│ │ │ ├── services/ # Core services (Selection, Navigation, History, Theme, Performance)
|
|
81
|
+
│ │ │ └── hooks/ # React hooks for Cytoscape integration
|
|
82
|
+
│ │ ├── agents/ # Agent management UI
|
|
83
|
+
│ │ ├── acp/ # ACP conversation panels
|
|
84
|
+
│ │ ├── swarmcraft/ # SwarmCraft dashboard components
|
|
85
|
+
│ │ └── ... # Other UI components
|
|
86
|
+
│ ├── core/
|
|
87
|
+
│ │ ├── embeddings/ # Code embedding generation
|
|
88
|
+
│ │ ├── graph/ # Graph operations and algorithms
|
|
89
|
+
│ │ ├── ingestion/ # Code ingestion pipeline
|
|
90
|
+
│ │ ├── kuzu/ # Kuzu database integration
|
|
91
|
+
│ │ ├── mcp/ # MCP client implementation
|
|
92
|
+
│ │ └── search/ # Search functionality
|
|
93
|
+
│ ├── hooks/ # Shared React hooks
|
|
94
|
+
│ ├── services/ # API client, WS client, ACP service
|
|
95
|
+
│ └── types/ # TypeScript type definitions
|
|
96
|
+
├── server/ # Backend (Fastify)
|
|
97
|
+
│ ├── routes/ # REST API endpoints
|
|
98
|
+
│ ├── map/ # MAP protocol integration
|
|
99
|
+
│ ├── websocket/ # WebSocket hub
|
|
100
|
+
│ ├── db/ # SQLite persistence
|
|
101
|
+
│ ├── subprocess/ # Process management
|
|
102
|
+
│ └── terminal/ # PTY management
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## Testing
|
|
106
|
+
|
|
107
|
+
The project uses Vitest for testing.
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
npm test # Run all tests once
|
|
111
|
+
npm run test:ui:watch # UI tests in watch mode
|
|
112
|
+
npm run test:server:watch # Server tests in watch mode
|
|
113
|
+
npm run test:coverage # With coverage report
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### Test Structure
|
|
117
|
+
- Tests are co-located with source files in `__tests__` directories
|
|
118
|
+
- Mock helpers are in `src/ui/components/cytoscape/__tests__/helpers/`
|
|
119
|
+
- Global test setup is in `src/ui/test/setup.ts`
|
|
120
|
+
|
|
121
|
+
## Environment Variables
|
|
122
|
+
|
|
123
|
+
| Variable | Default | Purpose |
|
|
124
|
+
|----------|---------|---------|
|
|
125
|
+
| `VITE_SWARMCRAFT_API_URL` | `http://localhost:3001/api` | Backend API URL |
|
|
126
|
+
| `VITE_SWARMCRAFT_WS_URL` | `ws://localhost:3001/ws` | Backend WebSocket URL |
|
|
127
|
+
|
|
128
|
+
## License
|
|
129
|
+
|
|
130
|
+
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"}
|