0.16.0
0.16.0 is a rebase-the-whole-codebase release. The runtime has been migrated from TypeScript to plain JavaScript with type-only.ts stubs, the package
graph has been pruned and reorganized, and a new live-run DevTools surface
lands alongside a derived RunState model for richer run observability.
Breaking changes
-
Runtime is now JavaScript, types live in
.tsstubs. Every runtime package (smithers-orchestrator,engine,db,driver,server,cli,components,react-reconciler,agents,observability,time-travel,sandbox,scheduler,scorers,openapi,memory,vcs,graph,errors,protocol, andexamples) has been migrated to.jsfiles with.d.ts-style type-only.tsstubs next to each module. Build, test, and import paths are unchanged — but anyone patching the runtime should expect to edit.jssources rather than.ts. -
Removed packages. The following have been deleted outright:
packages/durables— no longer used by the engine.packages/ragandpackages/voice— dropped from the product surface; matching metrics have been removed from observability.packages/tools— the separate workspace package is gone. Public built-in helpers remain exported fromsmithers-orchestratorandsmithers-orchestrator/tools:tools,read,write,edit,grep,bash,defineTool, andgetDefinedToolMetadata.- Python SDK, examples, and integration code — smithers is TypeScript/JS only now.
jjhubworkflows, the IDE / GitHub bot / Pi plugin integrations docs, and the Effect-ts integration doc page.
-
Tool context is no longer supplied by a standalone tools package. Custom
tools should accept the
defineTool()context argument for retry-safe metadata such asidempotencyKey. The publicrunWithToolContext()helper still exists for integrations that execute Smithers tool helpers manually. -
observabilitymoved toapps/observability. It remains the@smithers/observabilityworkspace package, but its source now lives underapps/with the CLI and other app-owned surfaces. -
runtimepackage renamed todriver. Imports from@smithers/runtimeshould move to@smithers/driver. Runtime-adjacent helpers have been consolidated into the driver package. -
Engine control APIs return
Effect.engine.start,engine.stop,engine.resume,engine.pause, and friends now returnEffects rather than plain promises. Callers that awaited the old promise API should run the returned effect through the engine’s runtime. -
smithers diffnow targets DevTools node diffs. The old snapshot-pair shape (diff <run-a>:<frame> <run-b>:<frame>) has been replaced bysmithers diff <runId> <nodeId>with optional--iteration,--json, and--stat. -
Stale semantic memory exports removed.
createSemanticMemoryandSemanticMemoryare no longer exported. UsecreateMemoryStore,createMemoryLayer, andMemoryServicefrom the memory package surface.
New: Live-run DevTools
A first cut of live-run DevTools lands in this release. It streams per-frame JSX tree snapshots, node-level diffs, and per-node tool output over the Gateway so that a debugger UI can follow an active run in real time and scrub backwards through history.-
Snapshot serializer and delta apply/diff.
packages/devtoolsnow ships a stable serializer for React-reconciler trees, plus apply/diff helpers so clients can reconstruct any historical frame from a base snapshot and a delta stream. - Gateway DevTools stream + new HTTP routes. The server exposes a live DevTools WebSocket stream and three new routes: per-node diff, per-node output, and jump-to-frame.
- Jump-to-frame with rewind lock, audit, and rate-limit. Time-travel jumps acquire a per-run rewind lock, write an audit row, and are rate-limited so that a runaway debugger client cannot thrash an active run.
-
Protocol additions.
packages/protocolgainsdevtools,outputs, anderrorstypes for the new stream and routes. - DB: node-diffs cache + time-travel audit schema. New tables back the DevTools stream so historical frames can be reconstructed without replaying the full event log.
- Observability: DevTools + rewind metrics. New metrics cover DevTools stream fan-out, rewind lock contention, and jump-to-frame latency.
- React reconciler: devtools stop handling. The reconciler now emits clean DevTools stop events when a run ends so clients can flush their buffers.
-
CLI: new
tree,output, andrewindcommands plus repurposeddiff. The CLI ships thin clients for the new DevTools routes so you can inspect per-frame trees, per-node outputs, node DiffBundles, and rewinds from the terminal without a GUI.
New: CLI control plane
The CLI is now a fuller local control plane rather than just a workflow launcher:- Interactive TUI.
smithers tuiopens an OpenTUI dashboard with runs, logs, metrics, node detail, frames, SQL browsing, chat, and attention panes. - Workflow workspace commands.
smithers initinstalls the local.smithers/workflow pack, andsmithers workflow list|run|path|create|doctordiscovers and manages workflows under.smithers/workflows. - Run inspection commands.
ps,logs,events,node,why,watch,supervise,cancel, anddownnow share the derived RunState model and emit machine-readable JSON when requested. - Agent and integration helpers.
agents capabilities|doctor,openapi list,memory list, cron management, and the semantic MCP server surface are now part of the CLI package.
New: RunState model
A derived RunState view now lives in packages/db/src/runState. It takes
raw run rows, events, and timers and computes a single view-model with a
normalized state, block reasons, unhealthy reasons, and a heartbeat-staleness
check (RUN_STATE_HEARTBEAT_STALE_MS). The Gateway, CLI, and DevTools all
consume the same derived state, so a run looks the same from every surface.
See the RunState runtime doc for the full shape.
New: Workflow metadata
WorkflowDefinitiongainsreadableNameanddescription. Used by the CLI, Gateway, and DevTools to render workflows with a human-friendly label instead of the programmatic ID.
New: Durable alerts
Alert policy support now has a concrete storage and operator surface:- Typed
alertPolicymetadata.createSmithers(..., { alertPolicy })and workflow-level overrides carry owners, severities, runbooks, labels, and reaction metadata. - Expanded
_smithers_alertsschema. Alert rows now include fingerprint, node/iteration, owner, runbook, labels, reaction JSON, source event type, first/last fired timestamps, occurrence count, silence state, and acknowledged/resolved actor fields. - CLI alert management.
smithers alerts list|ack|resolve|silencemanages durable alert instances. - Important scope note. Built-in runtime rule evaluators and delivery transports are not bundled in 0.16. Runtime integrations should evaluate policies and write alert rows through the DB adapter.
Fixes
-
Prevent
SQLITE_IOERR_VNODEunder concurrent Worktree runs. Multiple concurrent runs sharing a worktree no longer race on the SQLite DB file. - Fix resume for workflows without a user-defined input schema. Resume used to crash when the workflow did not declare an input schema; it now resumes cleanly.
-
Fix
smithers chatto display agent tool calls and file changes. Tool calls and file changes now render in the chat transcript instead of being silently dropped. -
Default log level is now
warningforsmithers up.smithers upoutput is quiet by default; opt into verbose logging explicitly. -
Waiting-timer supervisor no longer double-resumes. Regression covered
by a new test in
apps/cli/tests(#124). - Engine runtime split. The engine’s runtime implementation has been split into a dedicated module so Effect interop helpers and control APIs can be inlined without circular imports.
-
Package naming corrected for publish. The public package is
smithers-orchestrator; the private repository root issmithers-monorepo. -
Generated workflow imports now use
smithers-orchestrator. The CLI scaffold and E2E fixtures no longer generate stalesmithersimports.
Docs
The documentation site has been rewritten end-to-end: llms-full.txt has been reduced from 250k tokens to 66k tokens making it viable to put entire smithers docs in context- New Tour, How It Works, and Recipes pages on the landing path.
- Hero pages (
start,installation,quickstart) rewritten and merged into a single JSX overview. - CLI reference converted to a TOON command catalog.
- Reference types condensed to a
.d.tsdump, with the event union extracted as its own page. - Runtime API pages slimmed; every component page compressed to props plus one example.
- Concept and guide pages consolidated —
memoryandopenapifleshed out; merged pages stubbed with redirects. - Aggressive trim across the integrations surface; the IDE, GitHub bot, Pi extension, Pi plugin, and Effect-ts integration pages are gone.
bunxinvocation normalized across examples, design docs, and changelogs.- Tickets restructured into
gui,jjhub, andsmithersdirectories. - DevTools live-run UI spec and tickets added under
docs/tickets. docs.jsonnav restructured; redirects added for merged pages.llms-*artifacts regenerated against the new MDX surface.
Internal / chore
- CI workflow files removed. The
.github/workflowsdirectory is gone; CI is managed externally. bun.lockreplaced withpnpm-lock.yaml. The monorepo uses pnpm for installs andpnpm -r testas the root test script.- Workspace package graph defined.
packages/*andapps/*now declare their dependency graph explicitly so changes propagate predictably. - Cursor rules, dev shell scripts, worktree-feature scripts, docs
generation scripts,
AGENTS.md,DEVTOOLS_HANDOFF.md,.env.example, and the Codex skill definition removed. Repo surface trimmed to what ships.