RED->GREEN->REFACTOR cycle:
- UI node has state store (key-value), action bindings (op/var), and
local action handlers (inc/dec/set/toggle — no LLM round-trip)
- Thinker self-model: knows its environment, that ACTIONS create real
buttons, that UI handles state locally. Emits var/op payload for
stateful actions.
- Thinker's context includes UI state so it can report current values
- /api/clear resets UI state, bindings, and controls
- Test runner: action_match for fuzzy action names, persistent actions
across steps, _stream_text restored
- Counter test: 16/16 passed (create, read, inc, inc, dec, verify)
- Pub test: 20/20 passed (conversation, language switch, tool use, mood)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
6-node pipeline: Input -> Thinker -> Output (voice) + UI (screen) in parallel
- Output: text only (markdown, emoji). Never emits HTML or controls.
- UI: dedicated node for labels, buttons, tables. Tracks workspace state.
Replaces entire workspace on each update. Runs parallel with Output.
- Input: strict one-sentence perception. No more hallucinating responses.
- Thinker: controls removed from prompt, focuses on reasoning + tools.
- Frontend: markdown rendered in chat (bold, italic, code blocks, lists).
Label control type added. UI node meter in top bar.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Thinker tool results stream directly to user, skipping Output node (halves latency)
- ProcessManager process_start/process_done events render as live cards in chat
- UI controls sent before response text, not after
- Button clicks route to handle_action(), skip Input, go straight to Thinker
- Fix Thinker model: gemini-2.5-flash-preview -> gemini-2.5-flash (old ID expired)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>