summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAdam Malczewski <[email protected]>2026-06-05 00:13:09 +0900
committerAdam Malczewski <[email protected]>2026-06-05 00:13:09 +0900
commitc3a7696e8f3c07ac5c01edd585828f82367e0d25 (patch)
tree8119acafa1aee84bb5c0eadd7980edec88f58a43
parentbf52b114711f148df0446911ce2b0b3783c4d5ab (diff)
downloaddispatch-c3a7696e8f3c07ac5c01edd585828f82367e0d25.tar.gz
dispatch-c3a7696e8f3c07ac5c01edd585828f82367e0d25.zip
docs(tasks): MVP achieved — live multi-turn curl verified against OpenCode Go flash
-rw-r--r--tasks.md58
1 files changed, 31 insertions, 27 deletions
diff --git a/tasks.md b/tasks.md
index 4a1860d..f716026 100644
--- a/tasks.md
+++ b/tasks.md
@@ -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).