diff options
| author | Adam Malczewski <[email protected]> | 2026-05-19 19:40:21 +0900 |
|---|---|---|
| committer | Adam Malczewski <[email protected]> | 2026-05-19 19:40:21 +0900 |
| commit | f78a91c20f658dd404277919a0b872b352c99bb6 (patch) | |
| tree | 58cfffb655da4443f4b7a39543b86f988f15239f /packages/api/src/index.ts | |
| download | dispatch-main.tar.gz dispatch-main.zip | |
- Bun monorepo with @dispatch/core, @dispatch/api, @dispatch/frontend
- Agent runtime with Vercel AI SDK, streaming via WebSocket
- Tools: read_file, write_file, list_files (scoped to working directory)
- Hono API server with POST /chat, GET /status, GET /health, WS /ws
- Svelte 5 + DaisyUI frontend with chat UI, theme switcher, copy button
- OpenCode Go (Zen) as LLM provider, deepseek-v4-flash-free model
- Docker setup (dev + prod) with bin/ scripts and gopass secrets
- Biome v2 linting/formatting, Vitest tests (44 passing)
- Debug info attached to error messages for diagnostics
Diffstat (limited to 'packages/api/src/index.ts')
| -rw-r--r-- | packages/api/src/index.ts | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/packages/api/src/index.ts b/packages/api/src/index.ts new file mode 100644 index 0000000..02b04b6 --- /dev/null +++ b/packages/api/src/index.ts @@ -0,0 +1,37 @@ +import { createBunWebSocket } from "hono/bun"; +import { agentManager, app } from "./app.js"; + +const { upgradeWebSocket, websocket } = createBunWebSocket(); + +app.get( + "/ws", + upgradeWebSocket((_c) => { + return { + onOpen(_event, ws) { + // Send current status immediately + ws.send(JSON.stringify({ type: "status", status: agentManager.getStatus() })); + + const unsubscribe = agentManager.onEvent((event) => { + ws.send(JSON.stringify(event)); + }); + + // Store unsubscribe fn on the raw socket for cleanup + (ws as unknown as { _unsub?: () => void })._unsub = unsubscribe; + }, + onClose(_event, ws) { + const unsub = (ws as unknown as { _unsub?: () => void })._unsub; + if (unsub) { + unsub(); + } + }, + }; + }), +); + +export { app }; + +export default { + port: 3000, + fetch: app.fetch, + websocket, +}; |
