# Roadmap Each phase ends with tests, a Studio/viewer check in Edge, commit and push. ## Phase 1: engine, Studio, MCP (done) - [x] Core: projection with 4 rotations, primitives (box, prism, cylinder, frustum, face, poly, flat, openings, lines, disc, circle, stem, figures, puffs, fan, raw, groups, sequences), sprites with 90° object frames, depth sort ported from the JS views, SVG writer, tags, tooltips - [x] Theme: built-in palette, materials and rules converted from the Mooban/CNX CSS; TOML overrides - [x] Rhai runtime: drawing API, module imports from memory, errors with file:line, safety limits - [x] Prefab library: site, area, road, parking, wall, fence, lamp, marker, tree, tree row, hedge, building (storeys, windows, door, flat/gable roof, solar, AC, cut-open levels), carport, shed, car (driving), truck, motorbike, person, crowd, tank, container, generator, solar field, chimney - [x] Scene document + prefab catalog with property schemas - [x] Project folder, ops (add/update/remove/duplicate/reorder/set_cfg/replace), Workspace (save, undo, reload on outside changes), check, static HTML page, SVG export - [x] Viewer JS: port of the views' mount() (pan, pinch, wheel, declutter, tooltips, full screen) for prerendered, server and future WASM sources - [x] Studio GUI: palette, object list, placing, drag-to-move with snap, keyboard, forms from schemas, levels, undo/redo, live follow of agent edits, MCP connection panel - [x] MCP: 15 tools over stdio and HTTP (`/mcp`), validation messages for agents - [x] Demo project, 52 Rust tests, Playwright Studio + MCP test ## Web Studio (done) - [x] `isokit-wasm`: the engine in the browser (wasm-bindgen, 2.8 MB / 0.75 MB gzipped); `Store` trait (folder or memory) under the `Workspace`; Studio JSON API shared with `isokit studio` - [x] `studio.js` runs on a pluggable backend; the web shell answers it from WASM - [x] Projects in IndexedDB; new, demo copy, delete; export / import `.zip` (stored or deflated) and folders (drop or pick); two tabs on one project stay in step - [x] Folder projects (File System Access, Chrome / Edge): edits written to disk, outside changes followed live and undoable, Build page writes `dist/index.html` - [x] Code editor for scripts, prefabs, theme and manifest, with script errors by file and line - [x] MCP tools inside the page (`isokit.mcp`), WebMCP registration when the browser offers it - [x] `tools/build_web.py` (static output), `tools/check_web.py` (44 checks, Edge) - [ ] Deploy a hosted copy; render in a Web Worker for very large scenes ## Agent window (done) - [x] ✦ Agent in the Studio: chat with a model on an OpenAI-compatible endpoint (default: B4L's inference server) that edits the scene with the MCP tools + page tools (select, view); streamed answers and reasoning, tool calls with results, clickable object ids, Stop, Undo - [x] `isokit studio` relays the calls (`/api/agent/*`, key stays on the machine, no CORS); settings from `ISOKIT_LLM_*` or `agent.json` in the user's config folder - [x] Web Studio calls the endpoint from the page; isokit.buildfor.life relays `/llm/` to the inference server (Caddy) so the page needs no CORS from it - [x] `tools/mock_llm.py` + `tools/agent_checks.py` in both Studio checks - [ ] Keep the conversation per project across reloads; attach a rendered view (PNG, Phase 4) for vision models ## Phase 2: richer editing - [ ] Interior prefabs (desk, table with chairs, shelf, machine, bed, sofa, partition walls) and a building `rooms` prop, so the GF/1F levels show something - [ ] Path objects in the Studio: click points for areas, roads (polyline with width), fences, walls, pipe runs; vertex handles - [ ] Multi-select (box select, Shift-click), group move, align/distribute - [ ] Copy/paste between projects; prefab thumbnails in the palette (rendered icons) - [ ] Measure tool and grid overlay; numeric resize handles on the selection - [ ] Studio editor for `theme.toml` (colour pickers) and for project parameters ## Phase 3: embedding in the other projects - [ ] Host pages on the WASM build (`isokit-wasm` exists, see Web Studio): the same scene recomputes in the browser when a host page's calculator changes the parameters (cnx_vinyl fleet calculator) - [ ] `isokit build --fragment`: `