From e94085e75e09d0edd3a9a452e63534b462a83a02 Mon Sep 17 00:00:00 2001 From: StatPan Date: Wed, 8 Apr 2026 23:23:45 +0900 Subject: [PATCH 1/5] =?UTF-8?q?chore:=20OSS=20cleanup=20=E2=80=94=20remove?= =?UTF-8?q?=20private=20docs,=20add=20type=20guards,=20harden=20async/erro?= =?UTF-8?q?r=20handling?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 +- docs/HANDOFF.md | 236 -------------------- docs/PRD.md | 293 ------------------------- src/client/panel/PeerReviewSection.tsx | 7 +- src/client/panel/SessionPanel.tsx | 36 +-- src/server/app.ts | 40 ++++ 6 files changed, 68 insertions(+), 548 deletions(-) delete mode 100644 docs/HANDOFF.md delete mode 100644 docs/PRD.md create mode 100644 src/server/app.ts diff --git a/README.md b/README.md index 6d58c81..0e9d7e4 100644 --- a/README.md +++ b/README.md @@ -34,9 +34,7 @@ Each node on the canvas = one opencode session. The canvas just visualizes what ## Status -๐ŸŒฑ Early development. PRD in [`docs/PRD.md`](docs/PRD.md). - -OpenCode integration notes and supervision source map live in [`docs/OPENCODE_INTEGRATION.md`](docs/OPENCODE_INTEGRATION.md). +Early development. ## Run opencode with Docker diff --git a/docs/HANDOFF.md b/docs/HANDOFF.md deleted file mode 100644 index eb48521..0000000 --- a/docs/HANDOFF.md +++ /dev/null @@ -1,236 +0,0 @@ -# Agentree Handoff - -Last updated: 2026-04-06 - ---- - -## Project context - -Agentree is a Figma-like infinite canvas for supervising live `opencode` session trees. - -- **Client** โ€” React + React Flow canvas, Zustand store, side panel controls -- **Server** โ€” Hono API that proxies `opencode`, rebroadcasts SSE, and stores overlay metadata in SQLite - -Core principle: `opencode` is the source of truth for sessions and execution state. Agentree only stores what `opencode` doesn't know โ€” canvas positions, custom labels, and session relations. - ---- - -## Architecture - -``` -apps/agentree/ -โ”œโ”€โ”€ src/ -โ”‚ โ”œโ”€โ”€ client/ -โ”‚ โ”‚ โ”œโ”€โ”€ canvas/ # AgentCanvas, AgentNode, AgentEdge, GroupHeaderNode -โ”‚ โ”‚ โ”œโ”€โ”€ panel/ # SessionPanel, ApprovalQueue, SubtaskDialog -โ”‚ โ”‚ โ””โ”€โ”€ store/ # agentStore.ts โ€” Zustand, SSE apply, graph build -โ”‚ โ””โ”€โ”€ server/ -โ”‚ โ”œโ”€โ”€ routes/ # tree, session, canvas, approval, relation, system -โ”‚ โ”œโ”€โ”€ sse/ # broadcaster.ts โ€” opencode SSE โ†’ client broadcast -โ”‚ โ”œโ”€โ”€ opencode/ # SDK adapter + compat layer + normalizer -โ”‚ โ””โ”€โ”€ db/ # schema.ts, index.ts โ€” SQLite overlay -โ”œโ”€โ”€ drizzle/ # migrations -โ””โ”€โ”€ docs/ -``` - ---- - -## Current state โ€” Phase 1 + Phase 2 complete - -### Canvas - -- Infinite canvas with zoom/pan (React Flow) -- dagre auto-layout (`rankdir: BT` โ€” roots at bottom, branches grow upward) -- Directory-based group headers -- Recent / All view modes -- Node drag โ†’ SQLite position persist (`canvas_node.pinned`) -- Auto-layout skips pinned nodes -- Real-time node addition/update via SSE - -### Node states and edge styles - -| State | Color | Trigger | -|-------|-------|---------| -| `running` | green | `session.status` | -| `needs-permission` | yellow | `permission.asked` | -| `needs-answer` | orange | `question.asked` | -| `idle` | blue | `session.idle` | -| `done` | gray | `session.status` done | -| `failed` | red | `session.error` | - -| Relation | Edge color | Dash | -|----------|-----------|------| -| parent-child (default) | `#374151` | solid | -| `fork` | `#14b8a6` teal | `8 4` | -| `linked` | `#818cf8` indigo | `4 2` | -| `merged-view` | `#a78bfa` violet | solid | -| `detached` | `#6b7280` gray | `2 6` | -| `needs-permission` | yellow | animated | -| `needs-answer` | orange | animated | - -### Session panel - -Renders the selected session. Contains: - -- Header: title, session ID, status badge -- Fork source banner + navigation -- `session.diff` hint (if fired) -- Metadata block: model, provider, cwd, total cost, total tokens (derived from AssistantMessage fields โ€” no extra API call) -- Action buttons: Spawn subtask, Fork session -- Inline permission/question approval UI -- Child sessions waiting (permission/question) with inline reply controls -- Todo list โ€” collapsible, from `todo.updated` SSE -- **Relations section** โ€” shows non-fork relations to/from this session; `[+ Link]` form to add `linked`/`merged-view`/`detached` relations; `ร—` to delete; creating a relation also adds the corresponding edge on the canvas -- Message history โ€” structured part rendering for all 12 SDK part types: - - `text` โ€” monospace pre-wrap - - `reasoning` โ€” italic, muted, `โŸณ` prefix - - `tool` โ€” pill + state dot (pending/running/completed/error) + collapsible output - - `patch` โ€” file list with `+N`/`-N` - - `subtask` โ€” teal left border, agent name - - `file` โ€” MIME badge; image thumbnail for `image/*` - - `step-finish` โ€” cost/token summary line (right-aligned, 10px) - - `agent` โ€” `โ†ณ agent: {name}`, italic - - `retry` โ€” `โš  retry #{n}: {error}` in orange - - `compaction`, `step-start`, `snapshot` โ€” filtered (noise) - - unknown types โ€” `[{type}]` fallback, never throws -- Live message refresh โ€” 600ms debounce on `lastActivityBySession` SSE activity -- Prompt input + Send / Abort - -### Approval queue - -`ApprovalQueue.tsx` โ€” floating overlay showing all sessions with pending permission/question across the entire canvas (not just the selected one). - -### SSE event coverage in store (`applyEvent`) - -| Event | Handler | -|-------|---------| -| `session.status` | status โ†’ `running` | -| `session.idle` | status โ†’ `idle`, clears `lastActivity` | -| `session.error` | status โ†’ `failed` | -| `permission.asked/updated` | status โ†’ `needs-permission`, stores payload | -| `question.asked/updated` | status โ†’ `needs-answer`, stores payload | -| `permission.replied` | clears pending permission | -| `question.replied/rejected` | clears pending question | -| `message.part.delta/updated` | updates `lastActivityBySession` (triggers panel refresh) | -| `session.created/updated` | updates session list, rebuilds graph | -| `session.deleted` | removes session from all store maps | -| `todo.updated` | updates `todosBySession[sessionId]` | -| `session.diff` | updates `diffBySession[sessionId]` | -| `command.executed` | updates `lastActivityBySession` (triggers panel refresh) | - -### DB overlay tables - -| Table | Purpose | -|-------|---------| -| `canvas_node` | node position (x, y), custom label, pinned flag | -| `session_fork` | legacy fork lineage (kept for backward compat) | -| `session_relation` | generalized relation overlay: `fork`/`linked`/`detached`/`merged-view` | - -### API surface - -| Method | Path | Notes | -|--------|------|-------| -| GET | `/api/health` | server liveness | -| GET | `/api/tree` | sessions + status + canvas overlay + relations | -| GET | `/api/events` | SSE broadcast from opencode | -| GET | `/api/session/:id` | session detail | -| GET | `/api/session/:id/messages` | message history (`?limit=N`) | -| POST | `/api/session` | create session | -| POST | `/api/session/:id/prompt` | send prompt | -| POST | `/api/session/:id/abort` | abort | -| POST | `/api/session/:id/fork` | fork โ€” dual-writes `session_fork` + `session_relation` | -| POST | `/api/session/:id/subtask` | create subtask | -| POST | `/api/permission/:id/reply` | approve/deny permission | -| POST | `/api/question/:id/reply` | answer question | -| POST | `/api/question/:id/reject` | reject question | -| PATCH | `/api/canvas/:id` | save node position/label/pinned | -| GET | `/api/canvas/:id` | get canvas state | -| POST | `/api/relation` | create `linked`/`merged-view`/`detached` relation | -| DELETE | `/api/relation/:id` | delete relation | -| GET | `/api/system/compat` | opencode SDK compat report | - ---- - -## Release checklist status - -| Item | Status | -|------|--------| -| `LICENSE` (Apache-2.0) | โœ… added | -| `.gitignore` โ€” `.env.*`, `*.db*`, `node_modules/`, `dist/` | โœ… done | -| `README.md` โ€” Apache-2.0 license line | โœ… fixed | -| README public cleanup โ€” hardcoded `/home/statpan/...` path, default password in example | โœ… done | -| KIPO ์ƒํ‘œ ์ถœ์› (9๋ฅ˜ + 42๋ฅ˜, 104,000์›) | โŒ manual | - ---- - -## Remaining work - -### Must-do before public release - -**KIPO trademark filing** โ€” "Agentree", 9๋ฅ˜ + 42๋ฅ˜, ์ถœ์›๋ฃŒ 104,000์›. Must file before public GitHub push. - -### Phase 3 (post-release) - -| Feature | Notes | -|---------|-------| -| Canvas drag-to-connect | drag from node โ†’ another node โ†’ pick relation type | -| Multi-operator cursors | Figma-style presence โ€” who is watching which node | -| Node memo / tags | freeform annotations per node | -| Execution history timeline | tool calls, patches, diffs in order | -| npm / Docker packaging | `npm create agentree`, or `docker run` one-liner | - ---- - -## Key file reference - -### Server - -| File | Purpose | -|------|---------| -| `src/server/index.ts` | Hono app, router registration, migration | -| `src/server/routes/tree.ts` | GET /api/tree | -| `src/server/routes/session.ts` | session CRUD + fork + subtask | -| `src/server/routes/relation.ts` | POST/DELETE /api/relation | -| `src/server/routes/canvas.ts` | PATCH/GET /api/canvas/:id | -| `src/server/routes/approval.ts` | permission + question reply | -| `src/server/sse/broadcaster.ts` | opencode SSE โ†’ client rebroadcast | -| `src/server/opencode/index.ts` | adapter entry point | -| `src/server/opencode/normalize.ts` | SDK response normalization | -| `src/server/opencode/compat.ts` | version compat detection | -| `src/server/db/schema.ts` | Drizzle schema | -| `src/server/db/index.ts` | DB query functions | - -### Client - -| File | Purpose | -|------|---------| -| `src/client/store/agentStore.ts` | all client state โ€” graph build, SSE apply, relations | -| `src/client/canvas/AgentCanvas.tsx` | canvas root, SSE subscription, tree reload | -| `src/client/canvas/AgentNode.tsx` | node component | -| `src/client/canvas/AgentEdge.tsx` | edge component | -| `src/client/panel/SessionPanel.tsx` | full session side panel | -| `src/client/panel/ApprovalQueue.tsx` | floating approval overlay | -| `src/client/panel/SubtaskDialog.tsx` | subtask creation modal | -| `src/client/App.tsx` | root layout | - ---- - -## Quick verification - -```bash -pnpm run build # must pass with zero TS errors - -pnpm run dev # start dev server (requires opencode running at localhost:6543) - -curl http://localhost:3001/api/health -curl http://localhost:3001/api/tree | jq '.relations' -``` - -Browser checklist: -- nodes load on canvas -- selecting a session shows metadata block (model / cwd / cost) -- tool call parts are collapsible in the panel -- `[+ Link]` in Relations section creates an edge between two sessions with the correct color/dash -- `ร—` on a relation removes the edge -- permission/question edges animate; inline approval clears them -- dragging a node persists position after reload diff --git a/docs/PRD.md b/docs/PRD.md deleted file mode 100644 index a86552b..0000000 --- a/docs/PRD.md +++ /dev/null @@ -1,293 +0,0 @@ -# Agentree PRD - -> ๋ชฉ์ : Agent ์‹คํ–‰ ํŠธ๋ฆฌ๋ฅผ Figma์ฒ˜๋Ÿผ ์ธํ”ผ๋‹ˆํŠธ ์บ”๋ฒ„์Šค๋กœ ์‹œ๊ฐํ™”ํ•˜๊ณ , ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…์œผ๋กœ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ํ’€์Šคํƒ ์˜คํ”ˆ์†Œ์Šค ๋Œ€์‹œ๋ณด๋“œ -> ๊ธฐ์ค€์ผ: 2026-04-06 (Phase 1 ์™„๋ฃŒ ๊ธฐ์ค€์œผ๋กœ ๊ฐฑ์‹ ) - ---- - -## 1. ํ•ต์‹ฌ ์ปจ์…‰ - -Figma๊ฐ€ ๋””์ž์ธ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์บ”๋ฒ„์Šค์—์„œ ๋™์‹œ์— ๋‹ค๋ฃจ๋“ฏ์ด, Agent๋ฅผ ์บ”๋ฒ„์Šค์—์„œ ๋‹ค๋ฃฌ๋‹ค. - -- process โ†’ subprocess โ†’ thread ๊ณ„์ธต์ด ์บ”๋ฒ„์Šค ์œ„์— ํญํฌ์ฒ˜๋Ÿผ ํŽผ์ณ์ง -- ์คŒ์ธ/์•„์›ƒ, ๋“œ๋ž˜๊ทธ๋กœ ์ „์ฒด ์‹คํ–‰ ํŠธ๋ฆฌ๋ฅผ ํƒ์ƒ‰ -- ๋…ธ๋“œ ์„ ํƒ โ†’ ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…์œผ๋กœ ํ•ด๋‹น agent์— ์ง์ ‘ ์ง€์‹œ -- ํŒŒ์ƒ agent/thread๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ ์บ”๋ฒ„์Šค์— ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋…ธ๋“œ ์ถ”๊ฐ€ - -์‹œ์žฅ์— ์—†๋Š” ์ด์œ : agent ์‹คํ–‰์ด ๋Œ€๋ถ€๋ถ„ CLI/๋กœ๊ทธ ๊ธฐ๋ฐ˜์ด๋ผ ์‹คํ–‰ ํŠธ๋ฆฌ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ํƒ์ƒ‰ํ•˜๋Š” ํˆด ์ž์ฒด๊ฐ€ ์—†์Œ. - ---- - -## 2. ํ•ต์‹ฌ ๋ฐœ๊ฒฌ โ€” opencode session ํŠธ๋ฆฌ๊ฐ€ ๋ฐฑ์—”๋“œ - -opencode SDK๋ฅผ ๋ถ„์„ํ•œ ๊ฒฐ๊ณผ, ๊ณ„์ธต ๊ตฌ์กฐ๊ฐ€ ์ด๋ฏธ ๋‚ด์žฅ๋˜์–ด ์žˆ์Œ: - -- `GET /session` โ€” ์ „์ฒด ์„ธ์…˜ ๋ชฉ๋ก -- `GET /session/{id}/children` โ€” ์ž์‹ ์„ธ์…˜ ์กฐํšŒ (subprocess/thread์— ํ•ด๋‹น) -- `POST /session/{id}/fork` โ€” ์„ธ์…˜ ํŒŒ์ƒ (thread ์ƒ์„ฑ์— ํ•ด๋‹น) -- `GET /global/event` SSE โ€” ์ „์ฒด ์ด๋ฒคํŠธ ์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆผ - -๋”ฐ๋ผ์„œ agentproc์˜ `process โ†’ subprocess โ†’ thread` ๊ณ„์ธต์€ **opencode session ํŠธ๋ฆฌ์— ์ง์ ‘ ๋งคํ•‘**๋œ๋‹ค. - -``` -opencode session (root) โ† process - โ””โ”€ /session/{id}/children โ† subprocess - โ””โ”€ fork๋œ session โ† thread -``` - -opencode๊ฐ€ nativeํ•˜๊ฒŒ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๊ด€๊ณ„/๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” Agentree DB์— ์˜ค๋ฒ„๋ ˆ์ด๋กœ ์ €์žฅํ•œ๋‹ค. -ํ–ฅํ›„ opencode๊ฐ€ ๋™์ผ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๋ฉด ์˜ค๋ฒ„๋ ˆ์ด๋ฅผ ๋Œ€์ฒดํ•˜๊ฑฐ๋‚˜ ์‘์šฉํ•œ๋‹ค. - ---- - -## 3. DB ์—ญํ•  - -Agentree SQLite๋Š” opencode๊ฐ€ ๋ชจ๋ฅด๋Š” ๊ฒƒ์„ ์ €์žฅํ•˜๋Š” **์˜ค๋ฒ„๋ ˆ์ด ๋ ˆ์ด์–ด**๋‹ค. - -### ์ €์žฅ ๋Œ€์ƒ - -| ํ…Œ์ด๋ธ” | ๋‚ด์šฉ | -|--------|------| -| `canvas_node` | ๋…ธ๋“œ ์œ„์น˜ (x, y), ์‚ฌ์šฉ์ž ์ •์˜ ๋ ˆ์ด๋ธ”, pinned ์—ฌ๋ถ€ | -| `session_fork` | fork ๊ด€๊ณ„ (ํ•˜์œ„ ํ˜ธํ™˜ ์œ ์ง€) | -| `session_relation` | ์ผ๋ฐ˜ํ™”๋œ ์„ธ์…˜ ๊ฐ„ ๊ด€๊ณ„ ์˜ค๋ฒ„๋ ˆ์ด | - -### session_relation ๊ด€๊ณ„ ํƒ€์ž… - -| ํƒ€์ž… | ์„ค๋ช… | -|------|------| -| `fork` | fork๋œ ์„ธ์…˜ (session_fork์˜ ์ผ๋ฐ˜ํ™”) | -| `linked` | ์‚ฌ์šฉ์ž๊ฐ€ ์ˆ˜๋™์œผ๋กœ ์—ฐ๊ฒฐํ•œ ๊ด€๊ณ„ | -| `detached` | ์—ฐ๊ฒฐ ํ•ด์ œ๋œ ๊ด€๊ณ„ | -| `merged-view` | ๋ณ‘ํ•ฉ ๋ทฐ๋กœ ๋ฌถ์ธ ๊ด€๊ณ„ | - -์„ธ์…˜ ์ƒํƒœ(status, parent, messages)๋Š” ์—ฌ์ „ํžˆ opencode๊ฐ€ source of truth. - ---- - -## 4. ๋ฒ”์œ„ - -### Phase 1 โ€” ์™„๋ฃŒ โœ“ - -- ์ธํ”ผ๋‹ˆํŠธ ์บ”๋ฒ„์Šค (์คŒ/ํŒฌ/๋“œ๋ž˜๊ทธ) -- opencode session ํŠธ๋ฆฌ โ†’ ์บ”๋ฒ„์Šค ๋…ธ๋“œ ํŠธ๋ฆฌ ์ž๋™ ๋ Œ๋”๋ง -- ๋…ธ๋“œ ์ƒํƒœ ๋ฐฐ์ง€ (running / done / failed / needs-permission / needs-answer) -- ๋…ธ๋“œ ์„ ํƒ โ†’ ์‚ฌ์ด๋“œ ํŒจ๋„์—์„œ ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…์œผ๋กœ agent ์ œ์–ด -- `GET /global/event` SSE โ†’ ๋…ธ๋“œ ์ƒํƒœ ์‹ค์‹œ๊ฐ„ ๋ฐ˜์˜ -- ๋…ธ๋“œ ์œ„์น˜ ๋“œ๋ž˜๊ทธ โ†’ SQLite ์˜์†ํ™” (pinned) -- permission / question ์Šน์ธ UI (์ธ๋ผ์ธ + ํ”Œ๋กœํŒ… ApprovalQueue) -- fork ์‹œ๊ฐํ™” (FORK ๋ฐฐ์ง€, teal ์ ์„  ์—ฃ์ง€, ํฌํฌ ์†Œ์Šค ํ‘œ์‹œ) -- subtask ์ƒ์„ฑ UI -- opencode SDK ๋ฒ„์ „ ํ˜ธํ™˜์„ฑ ์–ด๋Œ‘ํ„ฐ + ๊ฒฝ๊ณ  ํ‘œ์‹œ -- ์ผ๋ฐ˜ํ™”๋œ session_relation ์˜ค๋ฒ„๋ ˆ์ด ๋ชจ๋ธ (DB + API + ์—ฃ์ง€ ์Šคํƒ€์ผ ๊ธฐ๋ฐ˜) - -### Phase 2 โ€” ์ง„ํ–‰ ์˜ˆ์ • - -**Supervision ๊ฐ•ํ™”** - -- SessionPanel ํ™•์žฅ - - ์„ธ์…˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ธ”๋ก (model, provider, agent, cwd, token/cost) - - ๊ตฌ์กฐํ™”๋œ ํŒŒํŠธ ๋ Œ๋”๋ง: `subtask`, `tool`, `file`, `patch` - - ๋ฏธ์‚ฌ์šฉ SSE ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ: `message.part.updated`, `todo.updated`, `session.diff`, `command.executed` -- connect / disconnect / merge ๊ด€๊ณ„ UI (session_relation ๊ธฐ๋ฐ˜) - -**์บ”๋ฒ„์Šค ๊ด€๊ณ„ ํ‘œํ˜„** - -- ๊ด€๊ณ„ ํƒ€์ž…๋ณ„ ์—ฃ์ง€ ์Šคํƒ€์ผ (linked: ์ธ๋””๊ณ , merged-view: ๋ฐ”์ด์˜ฌ๋ ›, detached: ํšŒ์ƒ‰ ์ ์„ ) -- ๋…ธ๋“œ ๊ฐ„ ์ˆ˜๋™ ๊ด€๊ณ„ ์—ฐ๊ฒฐ/ํ•ด์ œ UI - -### Phase 3 โ€” ํ–ฅํ›„ - -- ๋‹ค์ค‘ ์˜คํผ๋ ˆ์ดํ„ฐ (Figma ์ปค์„œ์ฒ˜๋Ÿผ ๋ˆ„๊ฐ€ ์–ด๋А ๋…ธ๋“œ ๋ณด๋Š”์ง€ ํ‘œ์‹œ) -- ๋…ธ๋“œ ๋ฉ”๋ชจ/ํƒœ๊ทธ -- ์‹คํ–‰ ํžˆ์Šคํ† ๋ฆฌ ํƒ€์ž„๋ผ์ธ (tool ํ˜ธ์ถœ, patch, diff ์ˆœ์„œ๋Œ€๋กœ) -- ์˜คํ”ˆ์†Œ์Šค ๋ฐฐํฌ (npm / Docker) - ---- - -## 5. ์•„ํ‚คํ…์ฒ˜ - -``` -apps/agentree/ -โ”œโ”€โ”€ src/ -โ”‚ โ”œโ”€โ”€ client/ # React + React Flow -โ”‚ โ”‚ โ”œโ”€โ”€ canvas/ # ์ธํ”ผ๋‹ˆํŠธ ์บ”๋ฒ„์Šค + ๋…ธ๋“œ ๋ Œ๋”๋ง -โ”‚ โ”‚ โ”œโ”€โ”€ panel/ # ์‚ฌ์ด๋“œ ํŒจ๋„ (์ฑ„ํŒ…, ์Šน์ธ, ๊ด€๊ณ„) -โ”‚ โ”‚ โ””โ”€โ”€ store/ # ์‹ค์‹œ๊ฐ„ ์ƒํƒœ (Zustand) -โ”‚ โ””โ”€โ”€ server/ # Hono ์„œ๋ฒ„ -โ”‚ โ”œโ”€โ”€ routes/ # REST API (opencode SDK ํ”„๋ก์‹œ) -โ”‚ โ”œโ”€โ”€ sse/ # opencode SSE โ†’ ํด๋ผ์ด์–ธํŠธ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ -โ”‚ โ”œโ”€โ”€ opencode/ # opencode SDK ์—ฐ๋™ + ํ˜ธํ™˜์„ฑ ์–ด๋Œ‘ํ„ฐ -โ”‚ โ””โ”€โ”€ db/ # SQLite ์˜ค๋ฒ„๋ ˆ์ด (canvas_node, session_relation) -โ”œโ”€โ”€ drizzle/ # ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ -โ””โ”€โ”€ docs/ -``` - ---- - -## 6. ๋ฐ์ดํ„ฐ ๋ชจ๋ธ - -### canvas_node - -| ์ปฌ๋Ÿผ | ํƒ€์ž… | ์„ค๋ช… | -|------|------|------| -| session_id | text PK | opencode session ID | -| label | text | ์‚ฌ์šฉ์ž ์ •์˜ ๋ ˆ์ด๋ธ” | -| canvas_x | real | ์บ”๋ฒ„์Šค X ์œ„์น˜ | -| canvas_y | real | ์บ”๋ฒ„์Šค Y ์œ„์น˜ | -| pinned | integer | 0/1 โ€” ์ž๋™ ๋ ˆ์ด์•„์›ƒ ๋Œ€์ƒ ์—ฌ๋ถ€ | -| updated_at | text | ISO8601 | - -### session_fork (ํ•˜์œ„ ํ˜ธํ™˜ ์œ ์ง€) - -| ์ปฌ๋Ÿผ | ํƒ€์ž… | ์„ค๋ช… | -|------|------|------| -| session_id | text PK | fork๋œ ์„ธ์…˜ ID | -| forked_from_session_id | text | ์›๋ณธ ์„ธ์…˜ ID | -| created_at | text | ISO8601 | - -### session_relation - -| ์ปฌ๋Ÿผ | ํƒ€์ž… | ์„ค๋ช… | -|------|------|------| -| id | integer PK | auto-increment | -| from_session_id | text | ์†Œ์Šค ์„ธ์…˜ (์—ฃ์ง€ ๋ฐฉํ–ฅ: ๋ถ€๋ชจ) | -| to_session_id | text | ํƒ€๊ฒŸ ์„ธ์…˜ (์—ฃ์ง€ ๋ฐฉํ–ฅ: ์ž์‹/fork) | -| relation_type | text | `fork` \| `linked` \| `detached` \| `merged-view` | -| created_at | text | ISO8601 | - ---- - -## 7. API - -### ํŠธ๋ฆฌ ์กฐํšŒ - -| ๋ฉ”์„œ๋“œ | ๊ฒฝ๋กœ | ์„ค๋ช… | -|--------|------|------| -| GET | /api/tree | ์„ธ์…˜ ๋ชฉ๋ก + ์ƒํƒœ + ์บ”๋ฒ„์Šค ์˜ค๋ฒ„๋ ˆ์ด + ๊ด€๊ณ„ ๋ฐ˜ํ™˜ | -| GET | /api/health | ์„œ๋ฒ„ + opencode ์—ฐ๊ฒฐ ์ƒํƒœ | - -### ์„ธ์…˜ ์ œ์–ด - -| ๋ฉ”์„œ๋“œ | ๊ฒฝ๋กœ | ์„ค๋ช… | -|--------|------|------| -| GET | /api/session/:id | ์„ธ์…˜ ์ƒ์„ธ | -| GET | /api/session/:id/messages | ๋ฉ”์‹œ์ง€ ํžˆ์Šคํ† ๋ฆฌ | -| POST | /api/session | ์ƒˆ ์„ธ์…˜ ์ƒ์„ฑ | -| POST | /api/session/:id/prompt | ํ”„๋กฌํ”„ํŠธ ์ „์†ก | -| POST | /api/session/:id/abort | ์‹คํ–‰ ์ค‘๋‹จ | -| POST | /api/session/:id/fork | ์„ธ์…˜ fork (session_fork + session_relation ๋“€์–ผ ๋ผ์ดํŠธ) | -| POST | /api/session/:id/subtask | ์„œ๋ธŒํƒœ์Šคํฌ ์ƒ์„ฑ | - -### ์Šน์ธ ์ œ์–ด - -| ๋ฉ”์„œ๋“œ | ๊ฒฝ๋กœ | ์„ค๋ช… | -|--------|------|------| -| POST | /api/permission/:requestID/reply | permission ์Šน์ธ/๊ฑฐ๋ถ€ | -| POST | /api/question/:requestID/reply | question ๋‹ต๋ณ€ | -| POST | /api/question/:requestID/reject | question ๊ฑฐ๋ถ€ | - -### ์บ”๋ฒ„์Šค ์ƒํƒœ - -| ๋ฉ”์„œ๋“œ | ๊ฒฝ๋กœ | ์„ค๋ช… | -|--------|------|------| -| PATCH | /api/canvas/:id | ๋…ธ๋“œ ์œ„์น˜/๋ ˆ์ด๋ธ”/pinned ์ €์žฅ | -| GET | /api/canvas/:id | ๋…ธ๋“œ ์บ”๋ฒ„์Šค ์ƒํƒœ ์กฐํšŒ | - -### ์‹ค์‹œ๊ฐ„ - -| ๋ฉ”์„œ๋“œ | ๊ฒฝ๋กœ | ์„ค๋ช… | -|--------|------|------| -| GET | /api/events | opencode SSE ํด๋ผ์ด์–ธํŠธ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ | - ---- - -## 8. ํ”„๋ก ํŠธ ํ•ต์‹ฌ ๋™์ž‘ - -### ์บ”๋ฒ„์Šค - -- React Flow ๊ธฐ๋ฐ˜ ์ธํ”ผ๋‹ˆํŠธ ์บ”๋ฒ„์Šค -- ์ดˆ๊ธฐ ๋ ˆ์ด์•„์›ƒ: dagre ์ž๋™ ๋ฐฐ์น˜ (rankdir: BT โ€” ๋ฟŒ๋ฆฌ๊ฐ€ ์•„๋ž˜, ๊ฐ€์ง€๊ฐ€ ์œ„) -- ๋…ธ๋“œ ๋“œ๋ž˜๊ทธ โ†’ SQLite ์œ„์น˜ ์ €์žฅ (pinned) -- SSE ์ด๋ฒคํŠธ โ†’ ์ƒˆ ๋…ธ๋“œ ์‹ค์‹œ๊ฐ„ ์ถ”๊ฐ€ -- recent / all ๋ทฐ ๋ชจ๋“œ -- ๋””๋ ‰ํ† ๋ฆฌ ๊ธฐ์ค€ ๊ทธ๋ฃน ํ—ค๋” - -### ๋…ธ๋“œ ์ƒํƒœ - -| ์ƒํƒœ | ์ƒ‰์ƒ | ํŠธ๋ฆฌ๊ฑฐ | -|------|------|--------| -| `running` | ์ดˆ๋ก | `session.status` | -| `needs-permission` | ๋…ธ๋ž‘ | `permission.asked` | -| `needs-answer` | ์ฃผํ™ฉ | `question.asked` | -| `idle` | ํŒŒ๋ž‘ | `session.idle` | -| `done` | ํšŒ์ƒ‰ | `session.status` (done) | -| `failed` | ๋นจ๊ฐ• | `session.error` | - -### ์—ฃ์ง€ ์Šคํƒ€์ผ - -| ์กฐ๊ฑด | ์ƒ‰์ƒ | ์„  ์Šคํƒ€์ผ | ์• ๋‹ˆ๋ฉ”์ด์…˜ | -|------|------|-----------|-----------| -| ๊ธฐ๋ณธ ๋ถ€๋ชจ-์ž์‹ | `#374151` | ์‹ค์„  | ์—†์Œ | -| fork ๊ด€๊ณ„ | `#14b8a6` (teal) | `8 4` ์ ์„  | ์—†์Œ | -| linked ๊ด€๊ณ„ | `#818cf8` (indigo) | `4 2` ์ ์„  | ์—†์Œ | -| merged-view | `#a78bfa` (violet) | ์‹ค์„  | ์—†์Œ | -| detached | `#6b7280` (gray) | `2 6` ์ ์„  | ์—†์Œ | -| needs-permission | ๋…ธ๋ž‘ | ์ ์„  | ์žˆ์Œ | -| needs-answer | ์ฃผํ™ฉ | ์ ์„  | ์žˆ์Œ | - -### ์‚ฌ์ด๋“œ ํŒจ๋„ - -- ์„ธ์…˜ ๋ฉ”์‹œ์ง€ ํžˆ์Šคํ† ๋ฆฌ (ํ˜„์žฌ: text/reasoning ํŒŒํŠธ) -- ์ฑ„ํŒ… ์ž…๋ ฅ โ†’ prompt ์ „์†ก -- abort ๋ฒ„ํŠผ -- permission / question ์ธ๋ผ์ธ ์‘๋‹ต UI -- ์ž์‹ ์„ธ์…˜ pending ํ•ญ๋ชฉ ํ‘œ์‹œ -- fork ์†Œ์Šค ํ‘œ์‹œ ๋ฐ ๋„ค๋น„๊ฒŒ์ด์…˜ -- subtask / fork ์ƒ์„ฑ ๋ฒ„ํŠผ - ---- - -## 9. ๋น„์ฆˆ๋‹ˆ์Šค ๋ชจ๋ธ - -**๋ผ์ด์„ ์Šค: Apache-2.0** - -ํ˜„์žฌ ๋‹จ๊ณ„์—์„œ AGPL/BSL์€ ๊ณผ์ž‰ ๋Œ€์‘์ด๋‹ค. ์ด์œ : -- ๋กœ์ปฌ ์‹คํ–‰ ๊ธฐ๋ฐ˜์ด๋ผ ํด๋ผ์šฐ๋“œ ํ”„๋กœ๋ฐ”์ด๋” strip-mining ์œ„ํ˜‘์ด ๋‚ฎ์Œ -- ์ดˆ๊ธฐ ์ฑ„ํƒ ํ™•์‚ฐ์ด ๋ฐฉ์–ด๋ณด๋‹ค ์ค‘์š”ํ•œ ์‹œ์  -- Apache-2.0์€ ํŠนํ—ˆ ๋ฐฉ์–ด ์กฐํ•ญ ํฌํ•จ + ์ƒํ‘œ๋Š” ๋ณ„๋„ ๋ณดํ˜ธ - -**์ƒํ‘œ: ๊ณต๊ฐœ ์ „ KIPO ์ถœ์› (9๋ฅ˜ + 42๋ฅ˜)** - -์˜คํ”ˆ์†Œ์Šค๋กœ ๊ณต๊ฐœํ•ด๋„ "Agentree" ์ƒํ‘œ๋Š” ๋ผ์ด์„ ์Šค๊ฐ€ ๋ณดํ˜ธํ•˜์ง€ ์•Š์Œ. ์ถœ์›์ผ ๊ธฐ์ค€์œผ๋กœ ๊ถŒ๋ฆฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ, ๊ณต๊ฐœ ์ „ ์ถœ์›์ด ํ•„์š”ํ•˜๋‹ค. - -**์ˆ˜์ตํ™”: ์žฅ๊ธฐ ์˜คํ”ˆ์ฝ”์–ด ๋ฐฉํ–ฅ (ํ˜„์žฌ๋Š” ๋ฏธ๊ฒฐ)** - -| ๋ ˆ์ด์–ด | ๊ณต๊ฐœ ์—ฌ๋ถ€ | ๋‚ด์šฉ | -|--------|-----------|------| -| ์ฝ”์–ด | ์˜คํ”ˆ์†Œ์Šค (Apache-2.0) | ์บ”๋ฒ„์Šค, ์„ธ์…˜ ์ œ์–ด, ์˜ค๋ฒ„๋ ˆ์ด DB, SSE | -| ํŒ€ ๋ ˆ์ด์–ด | ์œ ๋ฃŒ (ํ–ฅํ›„, TBD) | ๋ฉ€ํ‹ฐ ์˜คํผ๋ ˆ์ดํ„ฐ, ๊ถŒํ•œ ๊ด€๋ฆฌ, hosted ์—ฐ๊ฒฐ | - -ํŒ€ ๊ธฐ๋Šฅ ์ˆ˜์š”๊ฐ€ ์‹ค์ œ๋กœ ๋ฐœ์ƒํ•˜๋Š” ์‹œ์ ์— ์˜คํ”ˆ์ฝ”์–ด ๊ฒฝ๊ณ„๋ฅผ ์„ค๊ณ„ํ•œ๋‹ค. ์ง€๊ธˆ ์„ค๊ณ„ํ•˜๋ฉด ์ˆ˜์š”๋ณด๋‹ค ์ˆ˜์ต ๊ตฌ์กฐ๋ฅผ ๋จผ์ € ์ƒ์ •ํ•˜๋Š” ๊ผด์ด ๋จ. - -**๊ณต๊ฐœ ์ „ ์ฒดํฌ๋ฆฌ์ŠคํŠธ** -- [ ] KIPO ์ƒํ‘œ ์ถœ์› (9๋ฅ˜ + 42๋ฅ˜, ์ถœ์›๋ฃŒ 104,000์›) -- [ ] `LICENSE` ํŒŒ์ผ ์ถ”๊ฐ€ (Apache-2.0) -- [ ] `.gitignore` ์ •๋ฆฌ -- [ ] `README.md` ๊ณต๊ฐœ์šฉ์œผ๋กœ ์ •๋ฆฌ -- [ ] `.env` ๊ณ„์—ด ํŒŒ์ผ ์ œ์™ธ ํ™•์ธ - ---- - -## 10. ๊ธฐ์ˆ  ์Šคํƒ - -| ๋ ˆ์ด์–ด | ์„ ํƒ | ์ด์œ  | -|--------|------|------| -| ํ”„๋ก ํŠธ | React + Vite | | -| ์บ”๋ฒ„์Šค | React Flow | ์ธํ”ผ๋‹ˆํŠธ ์บ”๋ฒ„์Šค, ๋…ธ๋“œ ์ปค์Šคํ…€, ์คŒ/ํŒฌ ๊ธฐ๋ณธ ์ œ๊ณต | -| ๋ ˆ์ด์•„์›ƒ | dagre | ํŠธ๋ฆฌ ์ž๋™ ๋ฐฐ์น˜ | -| ์ƒํƒœ๊ด€๋ฆฌ | Zustand | SSE ์ด๋ฒคํŠธ โ†’ ์บ”๋ฒ„์Šค ์ƒํƒœ ์—ฐ๋™ | -| ๋ฐฑ์—”๋“œ | Hono (Node) | TypeScript-first, SSE ๋‚ด์žฅ | -| ORM | Drizzle | TypeScript ํƒ€์ž… ์•ˆ์ „ | -| DB | SQLite (WAL) | ์˜ค๋ฒ„๋ ˆ์ด ์ „์šฉ โ€” opencode๊ฐ€ session ์ƒํƒœ์˜ source of truth | -| AI ์—”์ง„ | opencode SDK (`@opencode-ai/sdk`) | session ํŠธ๋ฆฌ๊ฐ€ process ๊ณ„์ธต์˜ source of truth | diff --git a/src/client/panel/PeerReviewSection.tsx b/src/client/panel/PeerReviewSection.tsx index 4d66690..937e0cd 100644 --- a/src/client/panel/PeerReviewSection.tsx +++ b/src/client/panel/PeerReviewSection.tsx @@ -67,9 +67,10 @@ export function PeerReviewSection({ sessionId }: { sessionId: string }) { let summary: string | null = null if (summaryOk && messages.length > 0) { const last = messages[messages.length - 1] - const parts = (last as { parts?: Array<{ type: string; text?: string }> }).parts - if (last && (last as { role?: string }).role === 'assistant' && parts) { - const textPart = parts.find((p: { type: string; text?: string }) => p.type === 'text') + const isMsg = (x: unknown): x is { role: string; parts: Array<{ type: string; text?: string }> } => + typeof x === 'object' && x !== null && 'role' in x && 'parts' in x && Array.isArray((x as { parts: unknown }).parts) + if (isMsg(last) && last.role === 'assistant') { + const textPart = last.parts.find((p) => p.type === 'text') if (textPart?.text) summary = textPart.text } } diff --git a/src/client/panel/SessionPanel.tsx b/src/client/panel/SessionPanel.tsx index 85f8b38..253f346 100644 --- a/src/client/panel/SessionPanel.tsx +++ b/src/client/panel/SessionPanel.tsx @@ -54,6 +54,16 @@ type SessionDetails = { title?: string } +// โ”€โ”€โ”€ Type guards โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + +function asPermissionLike(v: unknown): { requestID?: string; id?: string; title?: string } { + return (v ?? {}) as { requestID?: string; id?: string; title?: string } +} + +function asQuestionLike(v: unknown): { requestID?: string; id?: string; questions?: Array<{ id?: string; question?: string; label?: string }> } { + return (v ?? {}) as { requestID?: string; id?: string; questions?: Array<{ id?: string; question?: string; label?: string }> } +} + // โ”€โ”€โ”€ Helpers โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ function formatTime(value?: number) { @@ -224,7 +234,7 @@ function PartRow({ part }: { part: MessagePart }) {
{part.files.map((f, i) => ( -
+
{f.filename} {(f.additions ?? 0) > 0 && +{f.additions}} {(f.deletions ?? 0) > 0 && -{f.deletions}} @@ -572,7 +582,7 @@ export function SessionPanel({ sessionId }: { sessionId: string }) { useEffect(() => { if (!lastActivity) return const t = setTimeout(() => { - void refreshMessages() + void refreshMessages().catch(console.error) }, 600) return () => clearTimeout(t) }, [lastActivity]) // eslint-disable-line react-hooks/exhaustive-deps @@ -647,8 +657,8 @@ export function SessionPanel({ sessionId }: { sessionId: string }) { async function replyPermission(reply: 'once' | 'always' | 'reject') { if (!pendingPermission || typeof pendingPermission !== 'object') return - const requestID = (pendingPermission as { requestID?: string; id?: string }).requestID - ?? (pendingPermission as { requestID?: string; id?: string }).id + const requestID = asPermissionLike(pendingPermission).requestID + ?? asPermissionLike(pendingPermission).id if (!requestID) return const res = await fetch(`/api/permission/${requestID}/reply`, { method: 'POST', @@ -660,8 +670,8 @@ export function SessionPanel({ sessionId }: { sessionId: string }) { async function submitQuestion() { if (!pendingQuestion || typeof pendingQuestion !== 'object') return - const requestID = (pendingQuestion as { requestID?: string; id?: string }).requestID - ?? (pendingQuestion as { requestID?: string; id?: string }).id + const requestID = asQuestionLike(pendingQuestion).requestID + ?? asQuestionLike(pendingQuestion).id const firstQuestion = questionItems[0] if (!requestID || !firstQuestion?.id || !questionAnswer.trim()) return const res = await fetch(`/api/question/${requestID}/reply`, { @@ -677,15 +687,15 @@ export function SessionPanel({ sessionId }: { sessionId: string }) { async function rejectQuestion() { if (!pendingQuestion || typeof pendingQuestion !== 'object') return - const requestID = (pendingQuestion as { requestID?: string; id?: string }).requestID - ?? (pendingQuestion as { requestID?: string; id?: string }).id + const requestID = asQuestionLike(pendingQuestion).requestID + ?? asQuestionLike(pendingQuestion).id if (!requestID) return const res = await fetch(`/api/question/${requestID}/reject`, { method: 'POST' }) if (!res.ok) throw new Error('Failed to reject question') } async function replyChildPermission(childId: string, reply: 'once' | 'always' | 'reject') { - const p = pendingPermissions[childId] as { requestID?: string; id?: string } | undefined + const p = asPermissionLike(pendingPermissions[childId]) const requestID = p?.requestID ?? p?.id if (!requestID) return try { @@ -701,7 +711,7 @@ export function SessionPanel({ sessionId }: { sessionId: string }) { } async function submitChildQuestion(childId: string) { - const q = pendingQuestions[childId] as { requestID?: string; id?: string; questions?: Array<{ id?: string }> } | undefined + const q = asQuestionLike(pendingQuestions[childId]) const requestID = q?.requestID ?? q?.id const firstQ = q?.questions?.[0] const answer = childAnswers[childId]?.trim() @@ -720,8 +730,8 @@ export function SessionPanel({ sessionId }: { sessionId: string }) { } async function rejectChildQuestion(childId: string) { - const q = pendingQuestions[childId] as { requestID?: string; id?: string } | undefined - const requestID = q?.requestID ?? q?.id + const q = asQuestionLike(pendingQuestions[childId]) + const requestID = q.requestID ?? q.id if (!requestID) return try { const res = await fetch(`/api/question/${requestID}/reject`, { method: 'POST' }) @@ -863,7 +873,7 @@ export function SessionPanel({ sessionId }: { sessionId: string }) {
Permission Request
- {String((pendingPermission as { title?: string }).title ?? 'This session is waiting for permission.')} + {String(asPermissionLike(pendingPermission).title ?? 'This session is waiting for permission.')}
diff --git a/src/server/app.ts b/src/server/app.ts new file mode 100644 index 0000000..1708c1d --- /dev/null +++ b/src/server/app.ts @@ -0,0 +1,40 @@ +import { Hono } from 'hono' +import { cors } from 'hono/cors' +import { treeRouter } from './routes/tree.js' +import { sessionRouter } from './routes/session.js' +import { canvasRouter } from './routes/canvas.js' +import { approvalRouter } from './routes/approval.js' +import { systemRouter } from './routes/system.js' +import { relationRouter } from './routes/relation.js' +import { projectRouter } from './routes/project.js' +import { sseHandler, isOpencodeConnected } from './sse/broadcaster.js' + +export function createApp() { + const app = new Hono() + + app.onError((err, c) => { + console.error(`[error] ${c.req.method} ${c.req.path}:`, err instanceof Error ? err.message : String(err)) + const status = err instanceof Error && 'status' in err ? (err as { status: number }).status : 500 + return c.json({ error: err.message ?? 'Internal Server Error' }, status as 500) + }) + + const allowedOrigins = process.env.CORS_ORIGIN + ? process.env.CORS_ORIGIN.split(',') + : ['http://localhost:5174', 'http://localhost:3001'] + + app.use('*', cors({ + origin: (origin) => allowedOrigins.includes(origin) ? origin : allowedOrigins[0], + })) + + app.get('/api/health', (c) => c.json({ ok: true, opencode: isOpencodeConnected() })) + app.get('/api/events', sseHandler) + app.route('/', treeRouter) + app.route('/', sessionRouter) + app.route('/', canvasRouter) + app.route('/', approvalRouter) + app.route('/', systemRouter) + app.route('/', relationRouter) + app.route('/', projectRouter) + + return app +} From ee41fbf72510bdf79f71099eb67ef65ac47191fe Mon Sep 17 00:00:00 2001 From: StatPan Date: Wed, 8 Apr 2026 23:29:43 +0900 Subject: [PATCH 2/5] fix: restore todo normalization, add taskInvocations to graph build pipeline --- src/client/store/agentStore.ts | 56 ++++++++++++++++++++++++++++------ 1 file changed, 46 insertions(+), 10 deletions(-) diff --git a/src/client/store/agentStore.ts b/src/client/store/agentStore.ts index 22e7dd3..1101041 100644 --- a/src/client/store/agentStore.ts +++ b/src/client/store/agentStore.ts @@ -60,11 +60,25 @@ type SessionInfo = { } | null } +type TaskInvocation = { + id: number + parent_session_id: string + message_id: string | null + part_id: string | null + child_session_id: string | null + agent: string + description: string + prompt_preview: string + created_at: string + updated_at: string +} + type TreePayload = { sessions: SessionInfo[] statusBySession?: Record compat?: CompatInfo | null relations?: SessionRelation[] + taskInvocations?: TaskInvocation[] } type AgentEvent = { @@ -370,7 +384,14 @@ function buildGraph( relations: SessionRelation[] = [], pendingPermissions: Record = {}, pendingQuestions: Record = {}, + taskInvocations: TaskInvocation[] = [], ): Pick { + const taskCountByParent = new Map() + const incomingTaskByChild = new Map() + for (const t of taskInvocations) { + taskCountByParent.set(t.parent_session_id, (taskCountByParent.get(t.parent_session_id) ?? 0) + 1) + if (t.child_session_id) incomingTaskByChild.set(t.child_session_id, t) + } const rawNodes: Node[] = sessions.map((session) => { const childIds = sessions.filter((s) => s.parentID === session.id).map((s) => s.id) const childPendingCount = childIds.filter((id) => pendingPermissions[id] || pendingQuestions[id]).length @@ -393,6 +414,8 @@ function buildGraph( groupKey: projectGroupFromDirectory(session.directory), lastActivity: lastActivityBySession[session.id] ?? '', childPendingCount, + taskCount: taskCountByParent.get(session.id), + incomingTask: incomingTaskByChild.get(session.id), }, } }) @@ -405,11 +428,13 @@ function buildGraph( .filter((session) => session.parentID) .map((session) => { const status = statusBySession[session.id] ?? 'idle' + const incoming = incomingTaskByChild.get(session.id) return { id: `${session.parentID}-${session.id}`, source: session.parentID!, target: session.id, type: 'agentEdge', + ...(incoming ? { data: { kind: 'task', label: incoming.agent } } : {}), ...edgeStyleForSession(session, status, relationTypeBySessionId), } }) @@ -455,6 +480,7 @@ type AgentStore = { subtaskTargetSessionId: string | null pendingPermissions: Record pendingQuestions: Record + taskInvocations: TaskInvocation[] todosBySession: Record> diffBySession: Record addRelation: (fromSessionId: string, toSessionId: string, relationType: string) => Promise @@ -482,6 +508,7 @@ export const useAgentStore = create((set, get) => ({ subtaskTargetSessionId: null, pendingPermissions: {}, pendingQuestions: {}, + taskInvocations: [], todosBySession: {}, diffBySession: {}, @@ -511,7 +538,7 @@ export const useAgentStore = create((set, get) => ({ setViewMode: (mode) => set((state) => ({ viewMode: mode, - ...buildGraph(state.sessions, mode, state.statusBySession, state.lastActivityBySession, state.relations, state.pendingPermissions, state.pendingQuestions), + ...buildGraph(state.sessions, mode, state.statusBySession, state.lastActivityBySession, state.relations, state.pendingPermissions, state.pendingQuestions, state.taskInvocations), })), onNodesChange: (changes) => @@ -537,17 +564,18 @@ export const useAgentStore = create((set, get) => ({ return { sessions, - ...buildGraph(sessions, state.viewMode, state.statusBySession, state.lastActivityBySession, state.relations, state.pendingPermissions, state.pendingQuestions), + ...buildGraph(sessions, state.viewMode, state.statusBySession, state.lastActivityBySession, state.relations, state.pendingPermissions, state.pendingQuestions, state.taskInvocations), } }), - applySessionTree: ({ sessions, statusBySession = {}, compat = null, relations = [] }) => + applySessionTree: ({ sessions, statusBySession = {}, compat = null, relations = [], taskInvocations = [] }) => set((state) => ({ sessions, statusBySession: { ...state.statusBySession, ...statusBySession }, compat, relations, - ...buildGraph(sessions, state.viewMode, { ...state.statusBySession, ...statusBySession }, state.lastActivityBySession, relations, state.pendingPermissions, state.pendingQuestions), + taskInvocations, + ...buildGraph(sessions, state.viewMode, { ...state.statusBySession, ...statusBySession }, state.lastActivityBySession, relations, state.pendingPermissions, state.pendingQuestions, taskInvocations), })), applyEvent: (event) => { @@ -609,7 +637,7 @@ export const useAgentStore = create((set, get) => ({ pendingPermissions, pendingQuestions, lastActivityBySession, - ...buildGraph(state.sessions, state.viewMode, statusBySession, lastActivityBySession, state.relations, pendingPermissions, pendingQuestions), + ...buildGraph(state.sessions, state.viewMode, statusBySession, lastActivityBySession, state.relations, pendingPermissions, pendingQuestions, state.taskInvocations), } }) return @@ -629,7 +657,7 @@ export const useAgentStore = create((set, get) => ({ } return { lastActivityBySession, - ...buildGraph(state.sessions, state.viewMode, state.statusBySession, lastActivityBySession, state.relations, state.pendingPermissions, state.pendingQuestions), + ...buildGraph(state.sessions, state.viewMode, state.statusBySession, lastActivityBySession, state.relations, state.pendingPermissions, state.pendingQuestions, state.taskInvocations), } }) } @@ -649,7 +677,7 @@ export const useAgentStore = create((set, get) => ({ return { sessions, - ...buildGraph(sessions, state.viewMode, state.statusBySession, state.lastActivityBySession, state.relations, state.pendingPermissions, state.pendingQuestions), + ...buildGraph(sessions, state.viewMode, state.statusBySession, state.lastActivityBySession, state.relations, state.pendingPermissions, state.pendingQuestions, state.taskInvocations), } }) return @@ -670,7 +698,7 @@ export const useAgentStore = create((set, get) => ({ return { sessions, - ...buildGraph(sessions, state.viewMode, state.statusBySession, state.lastActivityBySession, state.relations, state.pendingPermissions, state.pendingQuestions), + ...buildGraph(sessions, state.viewMode, state.statusBySession, state.lastActivityBySession, state.relations, state.pendingPermissions, state.pendingQuestions, state.taskInvocations), } }) return @@ -678,10 +706,18 @@ export const useAgentStore = create((set, get) => ({ case 'todo.updated': { if (!sessionId) return + const todos = Array.isArray(properties.todos) ? properties.todos : [] set((state) => ({ todosBySession: { ...state.todosBySession, - [sessionId]: (properties.todos ?? []) as Array<{ id: string; description: string; status: string }>, + [sessionId]: todos.map((todo, index) => { + const item = todo as { id?: string; content?: string; description?: string; status?: string } + return { + id: item.id ?? `${sessionId}-${index}`, + description: item.description ?? item.content ?? '', + status: item.status ?? 'pending', + } + }), }, })) return @@ -731,7 +767,7 @@ export const useAgentStore = create((set, get) => ({ todosBySession, diffBySession, selectedSessionId: state.selectedSessionId === deletedSessionId ? null : state.selectedSessionId, - ...buildGraph(sessions, state.viewMode, statusBySession, lastActivityBySession, state.relations, pendingPermissions, pendingQuestions), + ...buildGraph(sessions, state.viewMode, statusBySession, lastActivityBySession, state.relations, pendingPermissions, pendingQuestions, state.taskInvocations), } }) } From b0a06b0b20a94a1bd5ba17805932f80348102b64 Mon Sep 17 00:00:00 2001 From: StatPan Date: Thu, 9 Apr 2026 18:36:59 +0900 Subject: [PATCH 3/5] chore: add CI, branch protection setup, issue/PR templates, README demo GIF - GitHub Actions CI: tsc + vitest on every PR targeting main - PR template enforcing issue reference (Closes #N) - Issue templates for bug reports and feature requests - README: replace 3 separate GIFs with single demo.gif (full flow) - Fix: agentStore missing projects/appView/activeProjectKey state - Fix: App.tsx prefetch /api/tree on mount so HomeScreen loads projects --- .github/ISSUE_TEMPLATE/bug_report.yml | 35 +++ .github/ISSUE_TEMPLATE/feature_request.yml | 23 ++ .github/pull_request_template.md | 16 ++ .github/workflows/ci.yml | 29 ++ README.md | 315 ++++++++++++++++++--- assets/demo.gif | Bin 0 -> 266590 bytes src/client/App.tsx | 44 +-- src/client/main.tsx | 5 + src/client/store/agentStore.ts | 38 ++- 9 files changed, 448 insertions(+), 57 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.yml create mode 100644 .github/ISSUE_TEMPLATE/feature_request.yml create mode 100644 .github/pull_request_template.md create mode 100644 .github/workflows/ci.yml create mode 100644 assets/demo.gif diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000..eed07a4 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,35 @@ +name: Bug report +description: Something isn't working as expected +labels: [bug] +body: + - type: textarea + id: description + attributes: + label: What happened? + description: A clear description of the bug. + validations: + required: true + + - type: textarea + id: reproduction + attributes: + label: Steps to reproduce + placeholder: | + 1. Start opencode + 2. Open Agentree + 3. ... + validations: + required: true + + - type: textarea + id: expected + attributes: + label: Expected behavior + validations: + required: true + + - type: input + id: version + attributes: + label: opencode version + placeholder: e.g. 1.3.13 diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 0000000..6c6853f --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,23 @@ +name: Feature request +description: Suggest an improvement or new capability +labels: [enhancement] +body: + - type: textarea + id: problem + attributes: + label: Problem or motivation + description: What are you trying to do that you can't do today? + validations: + required: true + + - type: textarea + id: solution + attributes: + label: Proposed solution + validations: + required: true + + - type: textarea + id: alternatives + attributes: + label: Alternatives considered diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000..2ab4112 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,16 @@ +Closes # + +## What + + + +## Why + + + +## Test plan + + +- [ ] `pnpm test` passes +- [ ] `pnpm exec tsc --noEmit` passes +- [ ] Manually verified in browser diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..3559766 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,29 @@ +name: ci + +on: + pull_request: + branches: [main] + +jobs: + ci: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: pnpm/action-setup@v4 + with: + version: 9 + + - uses: actions/setup-node@v4 + with: + node-version: 20 + cache: pnpm + + - name: Install dependencies + run: pnpm install + + - name: Type check + run: pnpm exec tsc --noEmit + + - name: Test + run: pnpm test diff --git a/README.md b/README.md index 0e9d7e4..edb385c 100644 --- a/README.md +++ b/README.md @@ -1,72 +1,307 @@ # Agentree -> Figma-like infinite canvas for visualizing and controlling AI agent trees in real-time. +A Figma-like infinite canvas for supervising live [opencode](https://opencode.ai) agent session trees in real time. -Agentree lets you see your agent processes the way Figma lets you see design objects โ€” on an infinite canvas, live, with full control. +Agentree sits on top of opencode and adds a visual layer: see all your running sessions at a glance, inspect message threads, approve permissions, send prompts, and trace fork/subtask lineage โ€” without leaving a single browser tab. -## What it does +![Agentree demo](assets/demo.gif) -- **Infinite canvas** โ€” zoom in/out, drag, explore your entire agent process tree -- **Live tree** โ€” subprocess and thread nodes appear as they spawn, connected by animated edges -- **Real-time control** โ€” click any node, chat with that agent directly from the panel -- **Approval flows** โ€” when an agent needs permission or asks a question, the edge lights up and you approve/deny inline -- **Event-driven** โ€” no polling, everything reacts to opencode SSE events +--- ## How it works -Agentree sits on top of [opencode](https://opencode.ai) and uses its session tree as the source of truth. - ``` -opencode session (root process) - โ””โ”€ /session/{id}/children โ†’ subprocess nodes - โ””โ”€ forked sessions โ†’ thread nodes +opencode (Docker) Agentree server (Node/Hono) Agentree client (React) + | | | + sessions, <-- proxy --> | -- SSE stream --> canvas, panel, approvals + messages, | + events SQLite overlay + (node positions, + project metadata, + session relations) ``` -Each node on the canvas = one opencode session. The canvas just visualizes what opencode already knows, plus stores node positions locally in SQLite. +- **opencode** is the source of truth for sessions, messages, and execution state. +- **Agentree server** proxies opencode, rebroadcasts its SSE event stream, and persists canvas layout in a local SQLite database. +- **Agentree client** renders the canvas and panel, consuming SSE for live updates. -## Stack +--- -- **Canvas** โ€” React + React Flow (infinite canvas, custom nodes/edges) -- **Layout** โ€” dagre `rankdir: BT` (roots at bottom, branches grow upward) -- **Backend** โ€” Hono + opencode SDK -- **DB** โ€” SQLite (canvas layout only โ€” opencode owns session state) -- **Real-time** โ€” opencode `GET /global/event` SSE +## Prerequisites -## Status +| Tool | Version | +|------|---------| +| Node.js | 20+ | +| pnpm | 9+ | +| Docker | any recent | -Early development. +--- -## Run opencode with Docker +## Setup -Agentree expects a running `opencode serve` instance at `http://localhost:6543`. +### 1. Install dependencies -1. Copy the example env file. -2. Start the container. -3. Run Agentree locally with `pnpm run dev`. +```bash +pnpm install +``` + +### 2. Configure opencode ```bash -cd agentree cp .env.opencode.example .env.opencode -# edit .env.opencode โ€” set OPENCODE_SERVER_PASSWORD to a strong secret -docker compose --env-file .env.opencode -f docker-compose.opencode.yml up -d --build -export OPENCODE_SERVER_USERNAME=opencode -export OPENCODE_SERVER_PASSWORD= -pnpm run dev ``` -Useful checks: +Edit `.env.opencode` as needed: + +| Variable | Default | Description | +|----------|---------|-------------| +| `OPENCODE_IMAGE` | `ghcr.io/anomalyco/opencode:latest` | Docker image for opencode | +| `OPENCODE_PORT` | `6543` | Port opencode listens on | +| `OPENCODE_WORKSPACE_DIR` | `..` | Host path mounted as `/workspace` inside the container | +| `OPENCODE_CONFIG_HOST_DIR` | `~/.config/opencode` | opencode config persistence | +| `OPENCODE_DATA_HOST_DIR` | `~/.local/share/opencode` | opencode session data persistence | +| `OPENCODE_SERVER_USERNAME` | `opencode` | HTTP basic auth username (optional) | +| `OPENCODE_SERVER_PASSWORD` | _(empty)_ | HTTP basic auth password โ€” set this to secure access | +| `TZ` | `Asia/Seoul` | Timezone inside the container | + +> **Tip:** `OPENCODE_WORKSPACE_DIR=..` mounts the parent of the `agentree` directory as the workspace. If your repo root is elsewhere, set this to an absolute path. + +### 3. Start opencode + +```bash +docker compose --env-file .env.opencode -f docker-compose.opencode.yml up -d +``` + +Check it is healthy: ```bash +docker compose --env-file .env.opencode -f docker-compose.opencode.yml ps +# or curl -u opencode: http://localhost:6543/global/health -docker compose --env-file .env.opencode -f docker-compose.opencode.yml logs -f opencode ``` -Notes: +### 4. Run database migrations + +```bash +pnpm run db:migrate +``` + +### 5. Start Agentree + +```bash +pnpm run dev +``` + +| Service | URL | +|---------|-----| +| Agentree UI | http://localhost:5174 | +| Agentree API | http://localhost:3001 | +| opencode | http://localhost:6543 | + +--- + +## UI walkthrough + +### Home screen + +When you open the app you land on the **Home screen** โ€” a grid of project cards. + +- Projects are **auto-created** from the working directory of each session (e.g. sessions running inside `apps/foo` all map to one project card). +- Project names are **editable inline** โ€” click the name to rename. +- Click a project card to open its canvas. +- **View All** opens a canvas with every session regardless of project. + +### Canvas + +The canvas shows sessions as nodes connected by edges. + +#### Node status colors + +| Color | Meaning | +|-------|---------| +| Green | Session is actively running | +| Yellow | Waiting for a permission grant | +| Orange | Waiting for an answer to a question | +| Blue | Idle (waiting for a prompt) | +| Gray | Completed / done | +| Red | Failed or errored | + +#### Interactions + +| Action | How | +|--------|-----| +| Select a session | Click its node | +| Pan | Click and drag the canvas background | +| Zoom | Scroll wheel | +| Reposition a node | Drag the node โ€” position is saved automatically | +| Create a relation | Draw an edge from one node's handle to another, then choose `linked` or `detached` | +| New session | Click **+ New Session** in the top toolbar | + +#### Toolbar + +- **+ New Session** โ€” opens a dialog to create a new opencode session with an optional title. +- **View: Recent / All** โ€” toggle between the 8 most-recently-active root sessions and every session. +- **Compat info** โ€” shows opencode SDK/server version compatibility status. A warning here means some features may not work. +- **โ† Projects** โ€” return to the Home screen. + +### Session panel + +Click any node to open the **Session panel** on the right. + +#### What you can see + +- Session ID, parent session, working directory, timestamps. +- Full message thread with rendered parts: + - **Text** โ€” assistant prose. + - **Reasoning** โ€” model chain-of-thought (if available). + - **Tool** โ€” tool calls with input/output, running / completed / error states. + - **Patch** โ€” unified diffs of file changes. + - **Subtask** โ€” linked child session spawned by this session. + - **File** โ€” file references. +- Latest provider/model/cost metadata. + +#### Approval queue + +When a session is paused waiting for approval, the panel shows an inline queue: + +- **Permission requests** โ€” choose *Once*, *Always*, or *Reject*. +- **Questions** โ€” select from offered answers or reject. + +The floating **ApprovalQueue** badge at the bottom of the canvas also shows pending counts across all sessions. Click it to jump to the oldest unanswered request. + +#### Actions + +- **Send prompt** โ€” type and submit a message to the session. +- **Create subtask** โ€” spin up a child session with a prompt, description, agent, and model. +- **Abort** โ€” cancel the current running operation. + +--- + +## Project structure + +``` +src/ + client/ + HomeScreen.tsx # Project cards grid + App.tsx # Root: HomeScreen โ†” Canvas routing + canvas/ + AgentCanvas.tsx # React Flow canvas + toolbar + AgentNode.tsx # Session node renderer + AgentEdge.tsx # Custom edge renderer + ProjectTabBar.tsx # Per-project tab strip + SessionListSidebar.tsx # Collapsible session list + panel/ + SessionPanel.tsx # Right-side detail + message thread + ApprovalQueue.tsx # Floating approval badge + SubtaskDialog.tsx # Create subtask modal + store/ + agentStore.ts # Zustand store + SSE event handling + + server/ + index.ts # Hono server entry point + db/ + schema.ts # Drizzle ORM table definitions + index.ts # DB instance + helpers + routes/ + session.ts # /api/session/* โ€” CRUD + prompt/subtask + canvas.ts # /api/canvas/* โ€” node position persistence + tree.ts # /api/tree โ€” full graph snapshot + project.ts # /api/project/* โ€” project management + system.ts # /api/health + opencode/ + types.ts # Normalized AgentreeSession / Message types + compat-1.3.ts # Adapter for @opencode-ai/sdk 1.3.x + sse/ + broadcaster.ts # SSE fan-out to all connected clients +``` + +--- + +## Database + +SQLite file is created at `agentree.db` in the project root on first run. + +| Table | Purpose | +|-------|---------| +| `project` | One row per project; stores name and directory key | +| `canvas_node` | Per-session canvas position, pin state, detach state | +| `session_fork` | Fork lineage (auto-detected from opencode) | +| `session_relation` | User-drawn edges between sessions (linked / detached) | +| `task_invocation` | Subtask โ†’ child session linkage | + +To regenerate migrations after schema changes: + +```bash +pnpm run db:generate +pnpm run db:migrate +``` + +--- + +## Development + +```bash +# Run all unit tests +pnpm test + +# Run opencode integration tests (requires live opencode) +pnpm run test:opencode + +# Build for production +pnpm run build + +# Preview production build +pnpm run preview +``` + +--- + +## API reference + +The Agentree server exposes a REST API at `http://localhost:3001/api`. + +| Method | Path | Description | +|--------|------|-------------| +| `GET` | `/api/health` | Health check + opencode connection status | +| `GET` | `/api/tree` | Full session graph (nodes, edges, status, relations) | +| `GET` | `/api/events` | SSE stream for real-time canvas updates | +| `POST` | `/api/session` | Create a new session | +| `GET` | `/api/session/:id` | Get session details | +| `GET` | `/api/session/:id/messages` | Fetch message thread | +| `GET` | `/api/session/:id/diff` | File diffs | +| `GET` | `/api/session/:id/tasks` | Task invocations | +| `POST` | `/api/session/:id/prompt` | Send a prompt | +| `POST` | `/api/session/:id/subtask` | Create a subtask session | +| `PATCH` | `/api/canvas/:id` | Update node position / pin state | +| `POST` | `/api/permission/:requestID/reply` | Approve or reject a permission | +| `POST` | `/api/question/:requestID/reply` | Answer a question | +| `GET` | `/api/project` | List projects | +| `PATCH` | `/api/project/:id` | Rename a project | +| `DELETE` | `/api/project/:id` | Delete a project | + +--- + +## Troubleshooting + +**Canvas is empty / no sessions appear** + +1. Confirm opencode is running: `docker compose --env-file .env.opencode -f docker-compose.opencode.yml ps` +2. Check `http://localhost:3001/api/health` โ€” should return `{ "opencode": "ok" }`. +3. Check the browser console and server logs for SSE connection errors. + +**Session stuck on yellow / orange** + +The session is waiting for a permission grant or question answer. Open the session panel and respond in the Approval queue, or click the floating ApprovalQueue badge. + +**Node positions reset on restart** + +Positions are only persisted once you drag a node. Nodes you have never dragged are laid out by dagre on each page load. + +**opencode version mismatch warning** + +Agentree is tested against `@opencode-ai/sdk 1.3.x`. If the compat banner shows warnings, some features (e.g. certain event types) may not work as expected. Pin `OPENCODE_IMAGE` to a known-good tag in `.env.opencode`. -- The compose file uses the official image `ghcr.io/anomalyco/opencode:latest` and runs `opencode serve --hostname 0.0.0.0 --port 6543`. -- Host `~/.config/opencode` and `~/.local/share/opencode` are mounted into the container so auth, config, and session history persist. -- `OPENCODE_WORKSPACE_DIR` defaults to `..`, so the repo root is mounted at `/workspace`. -- If you expose the port beyond localhost, set `OPENCODE_SERVER_PASSWORD` in `.env.opencode` so the server is not left unsecured. +--- ## License diff --git a/assets/demo.gif b/assets/demo.gif new file mode 100644 index 0000000000000000000000000000000000000000..4a12332329acff4fab2b7b51d25b6cda79c94a4f GIT binary patch literal 266590 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%0DV+qf@u}`Wid1On!GlAr6*R9Hn1#I^ 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�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

w#J61k$`FZP@sn0q4XCT6V67S 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 McNzZwJp=Lo1KP(=dH?_b literal 0 HcmV?d00001 diff --git a/src/client/App.tsx b/src/client/App.tsx index 4e1fbc6..3d0a7ba 100644 --- a/src/client/App.tsx +++ b/src/client/App.tsx @@ -1,8 +1,10 @@ -import { Component, type ReactNode } from 'react' +import { Component, useEffect, type ReactNode } from 'react' import { AgentCanvas } from './canvas/AgentCanvas' import { SessionPanel } from './panel/SessionPanel' import { ApprovalQueue } from './panel/ApprovalQueue' import { SubtaskDialog } from './panel/SubtaskDialog' +import { SessionListSidebar } from './canvas/SessionListSidebar' +import { HomeScreen } from './HomeScreen' import { useAgentStore } from './store/agentStore' // C5: Error Boundary โ€” catches render errors and shows recovery UI @@ -45,6 +47,7 @@ class ErrorBoundary extends Component<{ children: ReactNode }, { error: Error | } export default function App() { + const appView = useAgentStore((s) => s.appView) const selectedSessionId = useAgentStore((s) => s.selectedSessionId) const subtaskTargetSessionId = useAgentStore((s) => s.subtaskTargetSessionId) const setSubtaskTargetSession = useAgentStore((s) => s.setSubtaskTargetSession) @@ -56,24 +59,33 @@ export default function App() { applySessionTree(data) } + useEffect(() => { + void refreshTree() + }, []) + return ( -

-
- + {appView === 'home' ? ( + + ) : ( +
+ +
+ +
+ {selectedSessionId && } + + {subtaskTargetSessionId && ( + setSubtaskTargetSession(null)} + onCreated={() => { + void refreshTree() + }} + /> + )}
- {selectedSessionId && } - - {subtaskTargetSessionId && ( - setSubtaskTargetSession(null)} - onCreated={() => { - void refreshTree() - }} - /> - )} -
+ )} ) } diff --git a/src/client/main.tsx b/src/client/main.tsx index be4ff18..3fba072 100644 --- a/src/client/main.tsx +++ b/src/client/main.tsx @@ -2,6 +2,11 @@ import React from 'react' import ReactDOM from 'react-dom/client' import './index.css' import App from './App' +import { useAgentStore } from './store/agentStore' + +if (import.meta.env.DEV) { + (window as unknown as Record).__agentStore = useAgentStore +} ReactDOM.createRoot(document.getElementById('root')!).render( diff --git a/src/client/store/agentStore.ts b/src/client/store/agentStore.ts index 1101041..57b18c0 100644 --- a/src/client/store/agentStore.ts +++ b/src/client/store/agentStore.ts @@ -3,8 +3,25 @@ import dagre from '@dagrejs/dagre' import { create } from 'zustand' export type NodeStatus = 'running' | 'needs-permission' | 'needs-answer' | 'idle' | 'done' | 'failed' + +export const STATUS_COLORS: Record = { + running: '#22c55e', + 'needs-permission': '#eab308', + 'needs-answer': '#f97316', + idle: '#60a5fa', + done: '#6b7280', + failed: '#ef4444', +} export type ViewMode = 'recent' | 'all' export type RelationType = 'fork' | 'linked' | 'detached' +export type AppView = 'home' | 'canvas' + +export type Project = { + id: string + name: string + directoryKey: string + createdAt: string +} export type SessionRelation = { id: number @@ -50,6 +67,7 @@ type SessionInfo = { title: string parentID: string | null directory: string + projectId?: string | null time: { created: number; updated: number } forkedFromSessionID?: string | null canvas?: { @@ -79,6 +97,7 @@ type TreePayload = { compat?: CompatInfo | null relations?: SessionRelation[] taskInvocations?: TaskInvocation[] + projects?: Array<{ id: string; name: string; directory_key: string; created_at: string }> } type AgentEvent = { @@ -483,11 +502,18 @@ type AgentStore = { taskInvocations: TaskInvocation[] todosBySession: Record> diffBySession: Record + projects: Project[] + appView: AppView + activeProjectKey: string | null + pendingScrollToSessionId: string | null addRelation: (fromSessionId: string, toSessionId: string, relationType: string) => Promise removeRelation: (id: number) => Promise setSelectedSession: (id: string | null) => void setSubtaskTargetSession: (id: string | null) => void setViewMode: (mode: ViewMode) => void + setAppView: (view: AppView) => void + setActiveProjectKey: (key: string | null) => void + setPendingScrollToSessionId: (id: string | null) => void onNodesChange: (changes: NodeChange[]) => void pinNode: (sessionId: string, position: { x: number; y: number }) => void applySessionTree: (payload: TreePayload) => void @@ -511,6 +537,10 @@ export const useAgentStore = create((set, get) => ({ taskInvocations: [], todosBySession: {}, diffBySession: {}, + projects: [], + appView: 'home', + activeProjectKey: null, + pendingScrollToSessionId: null, addRelation: async (fromSessionId, toSessionId, relationType) => { const res = await fetch('/api/relation', { @@ -534,6 +564,9 @@ export const useAgentStore = create((set, get) => ({ setSelectedSession: (id) => set({ selectedSessionId: id }), setSubtaskTargetSession: (id) => set({ subtaskTargetSessionId: id }), + setAppView: (view) => set({ appView: view }), + setActiveProjectKey: (key) => set({ activeProjectKey: key }), + setPendingScrollToSessionId: (id) => set({ pendingScrollToSessionId: id }), setViewMode: (mode) => set((state) => ({ @@ -568,13 +601,16 @@ export const useAgentStore = create((set, get) => ({ } }), - applySessionTree: ({ sessions, statusBySession = {}, compat = null, relations = [], taskInvocations = [] }) => + applySessionTree: ({ sessions, statusBySession = {}, compat = null, relations = [], taskInvocations = [], projects }) => set((state) => ({ sessions, statusBySession: { ...state.statusBySession, ...statusBySession }, compat, relations, taskInvocations, + projects: projects + ? projects.map((p) => ({ id: p.id, name: p.name, directoryKey: p.directory_key, createdAt: p.created_at })) + : state.projects, ...buildGraph(sessions, state.viewMode, { ...state.statusBySession, ...statusBySession }, state.lastActivityBySession, relations, state.pendingPermissions, state.pendingQuestions, taskInvocations), })), From a297f8ea74c0d00916194288aef13fc66030fdce Mon Sep 17 00:00:00 2001 From: StatPan Date: Thu, 9 Apr 2026 18:57:44 +0900 Subject: [PATCH 4/5] =?UTF-8?q?fix:=20address=20PR=20review=20=E2=80=94=20?= =?UTF-8?q?client=20type=20coverage=20in=20CI=20and=20type=20correctness?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - CI: add separate 'Type check (client)' step for tsconfig.client.json; previously tsc --noEmit only checked src/server, leaving all client errors invisible - agentStore: export TaskInvocation and ActiveProjectKey; add hasParent, detached, taskCount, pendingTaskCount, incomingTask to AgentNodeData; populate them in buildGraph (detach/reattach button was always hidden because hasParent/detached were never set); add detached to SessionInfo.canvas so session.canvas?.detached is not always undefined - SessionPanel: remove { type: string } catch-all from MessagePart union; it was a supertype of all variants, blocking TypeScript narrowing in every if (part.type === '...') branch; replace with explicit step-start and snapshot variants - App: add try/catch to refreshTree so initial-load errors are logged --- .github/workflows/ci.yml | 5 ++++- src/client/App.tsx | 10 +++++++--- src/client/panel/SessionPanel.tsx | 3 ++- src/client/store/agentStore.ts | 18 ++++++++++++++++-- 4 files changed, 29 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3559766..a975bf7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -22,8 +22,11 @@ jobs: - name: Install dependencies run: pnpm install - - name: Type check + - name: Type check (server) run: pnpm exec tsc --noEmit + - name: Type check (client) + run: pnpm exec tsc --noEmit -p tsconfig.client.json + - name: Test run: pnpm test diff --git a/src/client/App.tsx b/src/client/App.tsx index 3d0a7ba..cf71c5f 100644 --- a/src/client/App.tsx +++ b/src/client/App.tsx @@ -54,9 +54,13 @@ export default function App() { const applySessionTree = useAgentStore((s) => s.applySessionTree) async function refreshTree() { - const response = await fetch('/api/tree') - const data = await response.json() - applySessionTree(data) + try { + const response = await fetch('/api/tree') + const data = await response.json() + applySessionTree(data) + } catch (err) { + console.error('[App] refreshTree failed', err) + } } useEffect(() => { diff --git a/src/client/panel/SessionPanel.tsx b/src/client/panel/SessionPanel.tsx index 253f346..ac050eb 100644 --- a/src/client/panel/SessionPanel.tsx +++ b/src/client/panel/SessionPanel.tsx @@ -31,7 +31,8 @@ type MessagePart = | { id: string; type: 'agent'; name: string } | { id: string; type: 'retry'; attempt: number; error: unknown } | { id: string; type: 'compaction'; auto: boolean } - | { id: string; type: string } + | { id: string; type: 'step-start' } + | { id: string; type: 'snapshot' } type SessionMessage = { info: { diff --git a/src/client/store/agentStore.ts b/src/client/store/agentStore.ts index 57b18c0..252f54a 100644 --- a/src/client/store/agentStore.ts +++ b/src/client/store/agentStore.ts @@ -15,6 +15,7 @@ export const STATUS_COLORS: Record = { export type ViewMode = 'recent' | 'all' export type RelationType = 'fork' | 'linked' | 'detached' export type AppView = 'home' | 'canvas' +export type ActiveProjectKey = string | null export type Project = { id: string @@ -50,6 +51,11 @@ export type AgentNodeData = { groupKey: string lastActivity: string childPendingCount: number + hasParent: boolean + detached: boolean + taskCount: number + pendingTaskCount: number + incomingTask: TaskInvocation | undefined [key: string]: unknown } @@ -75,10 +81,11 @@ type SessionInfo = { x?: number y?: number pinned?: boolean + detached?: boolean } | null } -type TaskInvocation = { +export type TaskInvocation = { id: number parent_session_id: string message_id: string | null @@ -406,9 +413,13 @@ function buildGraph( taskInvocations: TaskInvocation[] = [], ): Pick { const taskCountByParent = new Map() + const pendingTaskCountByParent = new Map() const incomingTaskByChild = new Map() for (const t of taskInvocations) { taskCountByParent.set(t.parent_session_id, (taskCountByParent.get(t.parent_session_id) ?? 0) + 1) + if (!t.child_session_id) { + pendingTaskCountByParent.set(t.parent_session_id, (pendingTaskCountByParent.get(t.parent_session_id) ?? 0) + 1) + } if (t.child_session_id) incomingTaskByChild.set(t.child_session_id, t) } const rawNodes: Node[] = sessions.map((session) => { @@ -433,7 +444,10 @@ function buildGraph( groupKey: projectGroupFromDirectory(session.directory), lastActivity: lastActivityBySession[session.id] ?? '', childPendingCount, - taskCount: taskCountByParent.get(session.id), + hasParent: Boolean(session.parentID), + detached: Boolean(session.canvas?.detached), + taskCount: taskCountByParent.get(session.id) ?? 0, + pendingTaskCount: pendingTaskCountByParent.get(session.id) ?? 0, incomingTask: incomingTaskByChild.get(session.id), }, } From 4cac1c438396607401fe9bb29acd6306993a2df5 Mon Sep 17 00:00:00 2001 From: StatPan Date: Thu, 9 Apr 2026 19:02:15 +0900 Subject: [PATCH 5/5] feat: projects, home screen, session list, broadcaster tests, migrations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Commit the complete working state that was on disk but never staged: - HomeScreen, ProjectTabBar, SessionListSidebar (new client components) - src/server/routes/project.ts (was imported by app.ts but missing from git) - drizzle migrations 0003โ€“0005 (task_invocation, detach, projects) - broadcaster.test.ts, real-opencode integration test, vitest.opencode.config - Updated AgentCanvas, AgentEdge, AgentNode, SubtaskDialog, agentStore - Updated server db schema/index, session/canvas/tree/system routes, compat adapter, types, index --- drizzle/0003_task_invocation.sql | 12 + drizzle/0004_detach_from_parent.sql | 1 + drizzle/0005_projects.sql | 8 + drizzle/meta/_journal.json | 21 ++ package.json | 1 + src/client/HomeScreen.tsx | 256 ++++++++++++++++++ src/client/canvas/AgentCanvas.tsx | 55 +++- src/client/canvas/AgentEdge.tsx | 46 +++- src/client/canvas/AgentNode.tsx | 80 +++++- src/client/canvas/ProjectTabBar.tsx | 92 +++++++ src/client/canvas/SessionListSidebar.tsx | 200 ++++++++++++++ src/client/panel/SubtaskDialog.tsx | 49 +++- src/client/store/agentStore.test.ts | 42 +++ src/server/db/index.test.ts | 141 +++++++++- src/server/db/index.ts | 142 +++++++++- src/server/db/schema.ts | 25 ++ src/server/index.ts | 37 +-- src/server/opencode/adapters/compat-1.3.ts | 7 + .../real-opencode.opencode-integration.ts | 194 +++++++++++++ src/server/opencode/types.ts | 12 +- src/server/routes/canvas.ts | 2 +- src/server/routes/project.ts | 24 ++ src/server/routes/session.test.ts | 61 ++++- src/server/routes/session.ts | 24 +- src/server/routes/system.ts | 4 + src/server/routes/tree.ts | 51 +++- src/server/sse/broadcaster.test.ts | 110 ++++++++ src/server/sse/broadcaster.ts | 36 ++- vitest.config.ts | 3 +- vitest.opencode.config.ts | 11 + 30 files changed, 1671 insertions(+), 76 deletions(-) create mode 100644 drizzle/0003_task_invocation.sql create mode 100644 drizzle/0004_detach_from_parent.sql create mode 100644 drizzle/0005_projects.sql create mode 100644 src/client/HomeScreen.tsx create mode 100644 src/client/canvas/ProjectTabBar.tsx create mode 100644 src/client/canvas/SessionListSidebar.tsx create mode 100644 src/server/opencode/real-opencode.opencode-integration.ts create mode 100644 src/server/routes/project.ts create mode 100644 src/server/sse/broadcaster.test.ts create mode 100644 vitest.opencode.config.ts diff --git a/drizzle/0003_task_invocation.sql b/drizzle/0003_task_invocation.sql new file mode 100644 index 0000000..c0dbafe --- /dev/null +++ b/drizzle/0003_task_invocation.sql @@ -0,0 +1,12 @@ +CREATE TABLE `task_invocation` ( + `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL, + `parent_session_id` text NOT NULL, + `message_id` text, + `part_id` text, + `child_session_id` text, + `agent` text NOT NULL, + `description` text NOT NULL, + `prompt_preview` text NOT NULL, + `created_at` text DEFAULT (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')) NOT NULL, + `updated_at` text DEFAULT (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')) NOT NULL +); diff --git a/drizzle/0004_detach_from_parent.sql b/drizzle/0004_detach_from_parent.sql new file mode 100644 index 0000000..818615f --- /dev/null +++ b/drizzle/0004_detach_from_parent.sql @@ -0,0 +1 @@ +ALTER TABLE `canvas_node` ADD `detached` integer DEFAULT 0 NOT NULL; diff --git a/drizzle/0005_projects.sql b/drizzle/0005_projects.sql new file mode 100644 index 0000000..c08c3fe --- /dev/null +++ b/drizzle/0005_projects.sql @@ -0,0 +1,8 @@ +CREATE TABLE `project` ( + `id` text NOT NULL PRIMARY KEY, + `name` text NOT NULL, + `directory_key` text NOT NULL UNIQUE, + `created_at` text NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')) +); +--> statement-breakpoint +ALTER TABLE `canvas_node` ADD `project_id` text REFERENCES project(id); diff --git a/drizzle/meta/_journal.json b/drizzle/meta/_journal.json index f6221c3..f8bb545 100644 --- a/drizzle/meta/_journal.json +++ b/drizzle/meta/_journal.json @@ -22,6 +22,27 @@ "when": 1775600000000, "tag": "0002_session_relation", "breakpoints": true + }, + { + "idx": 3, + "version": "6", + "when": 1775601000000, + "tag": "0003_task_invocation", + "breakpoints": true + }, + { + "idx": 4, + "version": "6", + "when": 1744070400000, + "tag": "0004_detach_from_parent", + "breakpoints": true + }, + { + "idx": 5, + "version": "6", + "when": 1744416000000, + "tag": "0005_projects", + "breakpoints": true } ] } diff --git a/package.json b/package.json index 916ea2f..0567e02 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "build": "tsc -p tsconfig.json && vite build", "preview": "vite preview", "test": "vitest run", + "test:opencode": "dotenv -e .env.opencode -- env AGENTREE_OPENCODE_INTEGRATION=1 AGENTREE_OPENCODE_LLM=1 vitest run --config vitest.opencode.config.ts", "db:generate": "drizzle-kit generate", "db:migrate": "drizzle-kit migrate" }, diff --git a/src/client/HomeScreen.tsx b/src/client/HomeScreen.tsx new file mode 100644 index 0000000..b747a14 --- /dev/null +++ b/src/client/HomeScreen.tsx @@ -0,0 +1,256 @@ +import { useState } from 'react' +import { useAgentStore, STATUS_COLORS } from './store/agentStore' +import type { Project } from './store/agentStore' + +function ProjectCard({ + project, + sessionCount, + runningCount, + pendingCount, + onEnter, +}: { + project: Project + sessionCount: number + runningCount: number + pendingCount: number + onEnter: () => void +}) { + const [editing, setEditing] = useState(false) + const [nameValue, setNameValue] = useState(project.name) + + async function saveName() { + const trimmed = nameValue.trim() + if (!trimmed || trimmed === project.name) { + setNameValue(project.name) + setEditing(false) + return + } + await fetch(`/api/project/${project.id}`, { + method: 'PATCH', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ name: trimmed }), + }) + setEditing(false) + } + + return ( +
{ (e.currentTarget as HTMLDivElement).style.borderColor = '#334155' }} + onMouseLeave={(e) => { (e.currentTarget as HTMLDivElement).style.borderColor = '#1f2937' }} + > +
+ {editing ? ( + setNameValue(e.target.value)} + onBlur={() => void saveName()} + onKeyDown={(e) => { + if (e.key === 'Enter') void saveName() + if (e.key === 'Escape') { setNameValue(project.name); setEditing(false) } + }} + style={{ + background: '#1e293b', + border: '1px solid #38bdf8', + borderRadius: 6, + color: '#e2e8f0', + fontSize: 15, + fontWeight: 600, + padding: '3px 8px', + outline: 'none', + flex: 1, + }} + /> + ) : ( + setEditing(true)} + title="Click to rename" + > + {project.name} + + )} +
+ +
+ + {project.directoryKey} + +
+ +
+ + {sessionCount} session{sessionCount !== 1 ? 's' : ''} + + {runningCount > 0 && ( + + + {runningCount} running + + )} + {pendingCount > 0 && ( + + + {pendingCount} pending + + )} +
+ + +
+ ) +} + +export function HomeScreen() { + const projects = useAgentStore((s) => s.projects) + const sessions = useAgentStore((s) => s.sessions) + const statusBySession = useAgentStore((s) => s.statusBySession) + const setActiveProjectKey = useAgentStore((s) => s.setActiveProjectKey) + const setAppView = useAgentStore((s) => s.setAppView) + + const projectStats = projects.map((project) => { + const projectSessions = sessions.filter((s) => s.projectId === project.id) + const runningCount = projectSessions.filter((s) => + statusBySession[s.id] === 'running', + ).length + const pendingCount = projectSessions.filter((s) => + statusBySession[s.id] === 'needs-permission' || statusBySession[s.id] === 'needs-answer', + ).length + return { project, sessionCount: projectSessions.length, runningCount, pendingCount } + }) + + function enterProject(projectId: string) { + setActiveProjectKey(projectId) + setAppView('canvas') + } + + function viewAll() { + setActiveProjectKey(null) + setAppView('canvas') + } + + return ( +
+ {/* Header */} +
+
+ + agentree + + โ€” + + {projects.length} project{projects.length !== 1 ? 's' : ''}, {sessions.length} session{sessions.length !== 1 ? 's' : ''} + +
+ +
+ + {/* Project grid */} +
+ {projectStats.length === 0 ? ( +
+ No projects yet + Sessions will appear here once opencode is connected +
+ ) : ( +
+ {projectStats.map(({ project, sessionCount, runningCount, pendingCount }) => ( + enterProject(project.id)} + /> + ))} +
+ )} +
+
+ ) +} diff --git a/src/client/canvas/AgentCanvas.tsx b/src/client/canvas/AgentCanvas.tsx index b60a4bb..339c5f4 100644 --- a/src/client/canvas/AgentCanvas.tsx +++ b/src/client/canvas/AgentCanvas.tsx @@ -16,6 +16,7 @@ import { useAgentStore } from '../store/agentStore' import { AgentNode } from './AgentNode' import { AgentEdge } from './AgentEdge' import { GroupHeaderNode } from './GroupHeaderNode' +import { ProjectTabBar } from './ProjectTabBar' type ConnRelationType = 'linked' | 'detached' @@ -141,10 +142,17 @@ export function AgentCanvas() { const edges = useAgentStore((s) => s.edges) const groupHeaders = useAgentStore((s) => s.groupHeaders) const compat = useAgentStore((s) => s.compat) + const sessions = useAgentStore((s) => s.sessions) + const projects = useAgentStore((s) => s.projects) + const activeProjectKey = useAgentStore((s) => s.activeProjectKey) + const pendingScrollToSessionId = useAgentStore((s) => s.pendingScrollToSessionId) const applySessionTree = useAgentStore((s) => s.applySessionTree) const applyEvent = useAgentStore((s) => s.applyEvent) const setSelectedSession = useAgentStore((s) => s.setSelectedSession) const setViewMode = useAgentStore((s) => s.setViewMode) + const setActiveProjectKey = useAgentStore((s) => s.setActiveProjectKey) + const setAppView = useAgentStore((s) => s.setAppView) + const setPendingScrollToSessionId = useAgentStore((s) => s.setPendingScrollToSessionId) const onNodesChange = useAgentStore((s) => s.onNodesChange) const pinNode = useAgentStore((s) => s.pinNode) const addRelation = useAgentStore((s) => s.addRelation) @@ -158,6 +166,8 @@ export function AgentCanvas() { setPendingConn({ source: connection.source, target: connection.target }) }, []) const previousViewMode = useRef(viewMode) + const previousActiveKey = useRef(activeProjectKey) + const hasTabBar = true // always show project header bar const reactFlowRef = useRef | null>(null) async function reloadTree() { @@ -203,7 +213,13 @@ export function AgentCanvas() { if (cancelled) return es = new EventSource('/api/events') es.onmessage = (e) => { - try { applyEvent(JSON.parse(e.data)) } catch (err) { console.warn('[sse] failed to parse event:', err) } + try { + const event = JSON.parse(e.data) + applyEvent(event) + if (event.type === 'session.created' || event.type === 'message.part.updated') { + reloadTree().catch(console.error) + } + } catch (err) { console.warn('[sse] failed to parse event:', err) } } es.onerror = () => { console.warn('[sse] connection lost, reconnecting in 3s...') @@ -224,7 +240,9 @@ export function AgentCanvas() { useEffect(() => { if (nodes.length === 0 || !reactFlowRef.current) return - const shouldFrame = !hasFramedInitialView.current || previousViewMode.current !== viewMode + const shouldFrame = !hasFramedInitialView.current + || previousViewMode.current !== viewMode + || previousActiveKey.current !== activeProjectKey if (!shouldFrame) return reactFlowRef.current.fitView({ @@ -236,10 +254,39 @@ export function AgentCanvas() { }) hasFramedInitialView.current = true previousViewMode.current = viewMode - }, [nodes, viewMode]) + previousActiveKey.current = activeProjectKey + }, [nodes, viewMode, activeProjectKey]) + + useEffect(() => { + if (!pendingScrollToSessionId || !reactFlowRef.current) return + const node = nodes.find((n) => n.id === pendingScrollToSessionId) + if (!node) return + reactFlowRef.current.setCenter( + node.position.x + 100, + node.position.y + 30, + { zoom: 1.0, duration: 400 }, + ) + setPendingScrollToSessionId(null) + }, [pendingScrollToSessionId, nodes]) return (
+ setAppView('home')} + onSelectAll={() => setActiveProjectKey(null)} + /> + {nodes.length === 0 && sessions.length > 0 && ( +
+ No sessions in this project +
+ )} {treeError && (
+ <> + + {label && ( + +
+ TASK {label} +
+
+ )} + ) } diff --git a/src/client/canvas/AgentNode.tsx b/src/client/canvas/AgentNode.tsx index 5bfa43c..56964d1 100644 --- a/src/client/canvas/AgentNode.tsx +++ b/src/client/canvas/AgentNode.tsx @@ -1,21 +1,12 @@ import { useState } from 'react' import { Handle, Position, type NodeProps } from '@xyflow/react' -import type { AgentNodeData, NodeStatus } from '../store/agentStore' -import { useAgentStore } from '../store/agentStore' +import type { AgentNodeData } from '../store/agentStore' +import { useAgentStore, STATUS_COLORS } from '../store/agentStore' import { fetchJson } from '../utils/fetchJson' -const STATUS_COLOR: Record = { - running: '#22c55e', - 'needs-permission': '#eab308', - 'needs-answer': '#f97316', - idle: '#3b82f6', - done: '#6b7280', - failed: '#ef4444', -} - export function AgentNode({ data, selected }: NodeProps) { const d = data as AgentNodeData - const color = STATUS_COLOR[d.status] ?? '#6b7280' + const color = STATUS_COLORS[d.status] ?? '#6b7280' const [showActivity, setShowActivity] = useState(false) const [showActions, setShowActions] = useState(false) const isRunning = d.status === 'running' @@ -45,6 +36,16 @@ export function AgentNode({ data, selected }: NodeProps) { if (forked?.id) setSelectedSession(forked.id) } + async function toggleDetach(event: React.MouseEvent) { + event.stopPropagation() + await fetch(`/api/canvas/${d.sessionId}`, { + method: 'PATCH', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ detached: !d.detached }), + }) + await refreshTree() + } + async function deleteSession(event: React.MouseEvent) { event.stopPropagation() if (!window.confirm(`Delete "${d.label}"?`)) return @@ -106,6 +107,19 @@ export function AgentNode({ data, selected }: NodeProps) { > Fork + {d.hasParent && ( + + )}
)} + {d.taskCount > 0 && ( +
0 ? '#2563eb' : '#0f766e', + color: '#eff6ff', + borderRadius: 999, + padding: '2px 6px', + fontSize: 9, + fontWeight: 800, + letterSpacing: '0.04em', + boxShadow: '0 0 0 2px #1a1a1a', + zIndex: 1, + }} + title={`${d.taskCount} task${d.taskCount !== 1 ? 's' : ''}${d.pendingTaskCount > 0 ? `, ${d.pendingTaskCount} pending child` : ''}`} + > + TASK {d.taskCount} +
+ )} + {d.incomingTask && !d.forkedFromSessionId && ( +
+ TASK +
+ )}
diff --git a/src/client/canvas/ProjectTabBar.tsx b/src/client/canvas/ProjectTabBar.tsx new file mode 100644 index 0000000..684b1b9 --- /dev/null +++ b/src/client/canvas/ProjectTabBar.tsx @@ -0,0 +1,92 @@ +import type { ActiveProjectKey, Project } from '../store/agentStore' + +type Props = { + projects: Project[] + activeProjectKey: ActiveProjectKey + totalSessionCount: number + onBack: () => void + onSelectAll: () => void +} + +export function ProjectTabBar({ projects, activeProjectKey, totalSessionCount, onBack, onSelectAll }: Props) { + const activeProject = activeProjectKey ? projects.find((p) => p.id === activeProjectKey) : null + + return ( +
+ +
+ {activeProject ? ( + + {activeProject.name} + + ) : ( + + All Sessions + ({totalSessionCount}) + + )} + {activeProject && ( + <> +
+ + + )} +
+ ) +} diff --git a/src/client/canvas/SessionListSidebar.tsx b/src/client/canvas/SessionListSidebar.tsx new file mode 100644 index 0000000..21dbc3f --- /dev/null +++ b/src/client/canvas/SessionListSidebar.tsx @@ -0,0 +1,200 @@ +import { useMemo, useState } from 'react' +import { useAgentStore, STATUS_COLORS } from '../store/agentStore' + +export function SessionListSidebar() { + const sessions = useAgentStore((s) => s.sessions) + const nodes = useAgentStore((s) => s.nodes) + const projects = useAgentStore((s) => s.projects) + const statusBySession = useAgentStore((s) => s.statusBySession) + const selectedSessionId = useAgentStore((s) => s.selectedSessionId) + const setSelectedSession = useAgentStore((s) => s.setSelectedSession) + const setActiveProjectKey = useAgentStore((s) => s.setActiveProjectKey) + const setPendingScrollToSessionId = useAgentStore((s) => s.setPendingScrollToSessionId) + + const [collapsed, setCollapsed] = useState(true) + const [search, setSearch] = useState('') + + const visibleNodeIds = useMemo(() => new Set(nodes.map((n) => n.id)), [nodes]) + + const filteredSessions = useMemo(() => { + const q = search.toLowerCase().trim() + if (!q) return sessions + return sessions.filter((s) => + (s.title ?? s.id).toLowerCase().includes(q) || + s.directory.toLowerCase().includes(q), + ) + }, [sessions, search]) + + const projectNameById = useMemo( + () => new Map(projects.map((p) => [p.id, p.name])), + [projects], + ) + + const grouped = useMemo(() => { + const map = new Map() + for (const s of filteredSessions) { + const k = s.projectId ?? 'unknown' + const arr = map.get(k) ?? [] + arr.push(s) + map.set(k, arr) + } + return [...map.entries()] + .sort(([a], [b]) => (projectNameById.get(a) ?? a).localeCompare(projectNameById.get(b) ?? b)) + .map(([key, items]) => ({ + key, + label: projectNameById.get(key) ?? key, + sessions: [...items].sort((a, b) => b.time.updated - a.time.updated), + })) + }, [filteredSessions, projectNameById]) + + function handleClick(sessionId: string) { + setSelectedSession(sessionId) + if (!visibleNodeIds.has(sessionId)) { + setActiveProjectKey(null) + } + setPendingScrollToSessionId(sessionId) + } + + if (collapsed) { + return ( +
setCollapsed(false)} + title="Open session list" + > + + โ–ถ + +
+ ) + } + + return ( +
+ {/* Header */} +
+ + Sessions + + +
+ + {/* Search */} +
+ setSearch(e.target.value)} + placeholder="Search..." + style={{ + width: '100%', + background: '#1e293b', + border: '1px solid #334155', + borderRadius: 6, + color: '#e2e8f0', + fontSize: 11, + padding: '5px 8px', + outline: 'none', + boxSizing: 'border-box', + }} + /> +
+ + {/* Session list */} +
+ {grouped.map(({ key, label, sessions: groupSessions }) => ( +
+
+ {label} ({groupSessions.length}) +
+ {groupSessions.map((session) => { + const status = statusBySession[session.id] ?? 'idle' + const isVisible = visibleNodeIds.has(session.id) + const isSelected = session.id === selectedSessionId + return ( +
handleClick(session.id)} + style={{ + display: 'flex', + alignItems: 'center', + gap: 7, + padding: '5px 10px', + cursor: 'pointer', + background: isSelected ? 'rgba(56,189,248,0.12)' : isVisible ? 'rgba(56,189,248,0.05)' : 'transparent', + borderLeft: isSelected ? '2px solid #38bdf8' : '2px solid transparent', + }} + > +
+ + {session.title ?? session.id.slice(0, 8)} + +
+ ) + })} +
+ ))} + {grouped.length === 0 && ( +
+ No sessions found +
+ )} +
+
+ ) +} diff --git a/src/client/panel/SubtaskDialog.tsx b/src/client/panel/SubtaskDialog.tsx index 584ebd0..ae712bc 100644 --- a/src/client/panel/SubtaskDialog.tsx +++ b/src/client/panel/SubtaskDialog.tsx @@ -1,4 +1,4 @@ -import { useState } from 'react' +import { useEffect, useMemo, useState } from 'react' type SubtaskDialogProps = { sessionId: string @@ -6,6 +6,14 @@ type SubtaskDialogProps = { onCreated?: () => void } +type AgentInfo = { + name: string + description?: string + mode: 'subagent' | 'primary' | 'all' + hidden?: boolean + native?: boolean +} + const fieldStyle = { width: '100%', background: '#0b0b0b', @@ -21,9 +29,31 @@ export function SubtaskDialog({ sessionId, onClose, onCreated }: SubtaskDialogPr const [prompt, setPrompt] = useState('') const [description, setDescription] = useState('') const [agent, setAgent] = useState('build') + const [agents, setAgents] = useState([]) const [submitting, setSubmitting] = useState(false) const [error, setError] = useState(null) + useEffect(() => { + let cancelled = false + fetch('/api/agents') + .then((res) => (res.ok ? res.json() : [])) + .then((data) => { + if (cancelled || !Array.isArray(data)) return + setAgents(data) + const preferred = data.find((item: AgentInfo) => !item.hidden && item.mode === 'subagent') + ?? data.find((item: AgentInfo) => !item.hidden && item.mode === 'all') + ?? data.find((item: AgentInfo) => item.name === 'build') + if (preferred?.name) setAgent(preferred.name) + }) + .catch(() => {}) + return () => { cancelled = true } + }, []) + + const sortedAgents = useMemo(() => [...agents].sort((left, right) => { + const rank = (agentInfo: AgentInfo) => agentInfo.mode === 'subagent' ? 0 : agentInfo.mode === 'all' ? 1 : 2 + return rank(left) - rank(right) || left.name.localeCompare(right.name) + }), [agents]) + async function submit() { const trimmedPrompt = prompt.trim() if (!trimmedPrompt || submitting) return @@ -81,7 +111,22 @@ export function SubtaskDialog({ sessionId, onClose, onCreated }: SubtaskDialogPr
{sessionId}
{error &&
{error}
}
- setAgent(e.target.value)} placeholder="Agent name" style={fieldStyle} /> + {sortedAgents.length > 0 ? ( + + ) : ( + setAgent(e.target.value)} placeholder="Agent name" style={fieldStyle} /> + )} + {sortedAgents.find((item) => item.name === agent)?.description && ( +
+ {sortedAgents.find((item) => item.name === agent)?.description} +
+ )} setDescription(e.target.value)} placeholder="Short description" style={fieldStyle} />