diff options
| author | Adam Malczewski <[email protected]> | 2026-06-05 00:13:09 +0900 |
|---|---|---|
| committer | Adam Malczewski <[email protected]> | 2026-06-05 00:13:09 +0900 |
| commit | c3a7696e8f3c07ac5c01edd585828f82367e0d25 (patch) | |
| tree | 8119acafa1aee84bb5c0eadd7980edec88f58a43 | |
| parent | bf52b114711f148df0446911ce2b0b3783c4d5ab (diff) | |
| download | dispatch-c3a7696e8f3c07ac5c01edd585828f82367e0d25.tar.gz dispatch-c3a7696e8f3c07ac5c01edd585828f82367e0d25.zip | |
docs(tasks): MVP achieved — live multi-turn curl verified against OpenCode Go flash
| -rw-r--r-- | tasks.md | 58 |
1 files changed, 31 insertions, 27 deletions
@@ -14,39 +14,43 @@ drive fan-out); extension **loading is dynamic** (manifests via the host). - [x] **bus** — event/hook/service bus. `669c269` - [x] **runtime** — `runTurn` turn loop (dispatch §3.3), 16 tests. `ae22da5` - [x] **host** — discovery→DAG→activate→registries; builds HostAPI (wraps bus). `dbcf219` -- [~] **kernel-crs** — CR-2 (HostAPI.getProviders/getTools), CR-3 (runTurn use tabId/turnId). RUNNING. +- [x] **kernel-crs** — CR-2 (HostAPI.getProviders/getTools), CR-3 (runTurn tabId/turnId). `e56b591` ### Core extensions (each ships a real manifest, loaded via the host) -- [x] **storage-sqlite** — bun:sqlite StorageNamespace + migrations (21 bun tests). `9b611d6` -- [x] **auth-apikey** — pure resolver env → ApiKeyCredentials (4 tests). `9b611d6` +- [x] **storage-sqlite** — bun:sqlite StorageNamespace + migrations. `9b611d6` +- [x] **auth-apikey** — pure resolver env → ApiKeyCredentials. `9b611d6` - [x] **provider-openai-compat** — OpenAI-compatible SSE → ProviderEvents. `9b611d6` -- [x] **conversation-store** — append-only persistence + pure reconcile (16 tests). `8b9cc0c` -- [x] **session-orchestrator** — load history → resolve provider/tools → runTurn → persist (12 tests). `357ad35` -- [x] **transport-http** — Hono `/chat` NDJSON stream; calls orchestrator seam (20 tests). `357ad35` +- [x] **conversation-store** — append-only persistence + pure reconcile. `8b9cc0c` +- [x] **session-orchestrator** — load history → resolve provider/tools → runTurn → persist. `357ad35` +- [x] **transport-http** — Hono `/chat` NDJSON stream. `357ad35` ### Integration -- [ ] **host-bin** — boot: load config (.env → config), discover+activate - extensions (storage→conversation-store→provider/auth→orchestrator→transport), - wire auth→provider, start `Bun.serve`. -- [ ] **curl smoke test** — `curl -d '{...}' /chat` → real response from flash; - verify multi-turn (2nd message sees 1st). - -## Verified state (this session) -- Full `bun run typecheck` clean across all 7 packages. -- `bun run test` → 164 vitest tests pass. `bun run check` clean. -- Root `tsconfig.json` now references all 7 packages. - -## Open contract-watch (decide at host-bin composition) -- **Provider credentials path:** provider reads creds from `host.config` - (`provider.openai-compat.*`) and does NOT yet use `AuthContract` from - auth-apikey. PREFER: host-bin/orchestrator resolves `AuthContract.resolve()` - → feeds provider. Decide when building host-bin. (auth-apikey otherwise - vestigial for MVP.) - -## Build order (remaining) -kernel-crs → host-bin → curl. +- [x] **host-bin** — boot: config (.env), discover+activate extensions, Bun.serve. `bf52b11` +- [x] **curl smoke test** — ✅ VERIFIED LIVE against OpenCode Go flash (opencode-1 key). + +## ✅ MVP ACHIEVED (verified live) +- Single turn: `curl -d '{"message":"Say hello in exactly 3 words."}'` → `"Hello my friend"`. +- **Multi-turn:** `conversationId` threads history — turn 1 "remember PINEAPPLE" → + turn 2 "what was the secret word?" → `"PINEAPPLE"`. ✓ (target B, §2.8) +- Full path: curl → transport-http → session-orchestrator → host/registry → + provider-openai-compat → OpenCode Go flash → ProviderEvents → AgentEvents → NDJSON. +- 178 vitest tests pass; `tsc -b` clean; biome clean. + +### API note (for callers) +- Chat request field is **`conversationId`** (not `tabId`) to thread multi-turn. + Omit it → a fresh conversation (random id) each call. + +## Open items (post-MVP, not blocking) +- **auth-apikey is vestigial:** provider reads creds from `host.config`, does NOT + yet use `AuthContract.resolve()`. Wire auth→provider properly (see host-bin CR). +- **host CR-1:** `createHost` should expose `getHostAPI()` so host-bin drops its + adapter duplication. +- **storage-sqlite CR-2:** manifest declares `contributes.services:["storage"]` + but activate is a no-op (backend is a kernel dep). Reconcile manifest vs reality. +- **Stale detached server** on port 18390 from an earlier run — harmless, ignore/kill. +- Tools path unexercised by MVP (turn completes with `tools: []`). Add a tool ext next. ## Parallelization log - host + conversation-store ran in parallel (disjoint). ✓ - session-orchestrator + transport-http ran in parallel (disjoint). ✓ -- kernel-crs is solo (touches shared contracts/extension.ts). +- kernel-crs solo (touched shared contracts/extension.ts). |
