docs(changelog): refresh recent product changes

This commit is contained in:
Bryan Helmkamp 2026-05-11 23:49:12 -04:00
parent ed602a1ad3
commit 5d227dadc2
No known key found for this signature in database
6 changed files with 200 additions and 6 deletions

View file

@ -1 +1 @@
9a3ab8bbba2e71d72ff7703a68e9892e8ce94d8d
a19f6dd03a2ed2b690161476b562462590d78790

View file

@ -1,5 +1,5 @@
---
title: "Run Events, artifacts, and typed interviews"
title: "Run Events, sandbox lifecycle, and typed interviews"
date: "2026-05-08"
---
@ -18,21 +18,26 @@ Run detail sidebars now include dedicated `Run Events` and `Artifacts` pages. `R
This gives you a direct path to the two things users usually need after a run: the complete audit trail and the files produced by stages.
## Run-owned sandbox lifecycle
Run sandboxes now belong to the run lifecycle instead of being detached provider resources that require manual cleanup. Terminal runs stop their sandboxes by default, resumes reconnect to persisted sandboxes, and run deletion either removes the sandbox or returns preserved provider details according to the run's preserve settings.
The run settings page now shows `stop_on_terminal` alongside sandbox preservation, so you can tell whether cleanup is automatic before launching or deleting a run.
## Typed interview answers
Human-in-the-loop answers now have explicit API shapes for yes/no, single-select, multi-select, and text responses. The web UI and CLI attach flow use those shapes consistently, which removes ambiguity around which field should be present for each question type.
`fabro attach` also handles interview edge cases better. Invalid input re-prompts instead of dropping the interaction, and attach no longer blocks when a question was already answered from another client.
## API client coverage for the web app
The web app now uses the generated TypeScript API client for the auth, workflow, run, artifact, settings, and human-in-the-loop calls that can be generated from OpenAPI. The API reference now documents the browser auth and workflow routes the app relies on, which keeps the UI and public contract aligned as routes evolve.
## More
<Accordion title="API">
- `DELETE /api/v1/runs/{id}` can now return preserved sandbox details when deletion leaves a provider resource alive
- `RunSandboxSettings` now includes `stop_on_terminal`
- `RunStage` now includes a canonical `handler` field so clients can choose agent, command, or debug renderers without guessing from names
- Run summaries now include stored pull request records with `html_url`
- The web app now uses the generated TypeScript API client for auth, workflow, run, artifact, settings, and human-in-the-loop calls generated from OpenAPI
- OpenAPI now documents browser auth config, current user, demo toggle, and development-token login endpoints
- OpenAPI now documents workflow list, workflow detail, and workflow runs endpoints
- `GET /api/v1/runs/{id}/graph` now documents the optional `direction` query parameter
@ -49,6 +54,8 @@ The web app now uses the generated TypeScript API client for the auth, workflow,
<Accordion title="Improvements">
- Added a Profile page to the user menu
- Run titles now render inline Markdown in run lists and run detail headers
- Run Files sidebar now shows the whole tree instead of filtering to changed files only
- Run cards now show a pull request icon and number only when a stored pull request exists
- Run cards now show repository names without repeating the owner prefix
- Archived runs now have a Delete action in the web app
@ -56,6 +63,8 @@ The web app now uses the generated TypeScript API client for the auth, workflow,
</Accordion>
<Accordion title="Fixes">
- Fixed provider token usage normalization so OpenAI, Gemini, and Anthropic totals match provider billing semantics
- Fixed terminal sandbox regressions after run-owned sandbox lifecycle changes
- Fixed prompt-only stages missing completed responses in the Thread view
- Fixed stage interrupt events missing from the Thread view
- Fixed OpenAI reasoning metadata being lost across stateless round trips

View file

@ -0,0 +1,78 @@
---
title: "Sparse inputs, sandbox terminals, and run file diffs"
date: "2026-05-09"
---
<Warning>
**Automatic retros have been removed.** Workflow runs now go directly from execution to finalization and optional pull request creation. The retro crate, retro events, retro docs page, PR retro section, `--no-retro`, `[run.execution].retros`, `features.retros`, and retro projection fields are no longer part of the product surface.
To migrate:
1. Use Run Events, Stages, Turns, logs, and dumps for post-run analysis.
2. Remove retro-specific CLI flags, config keys, API field reads, and docs links.
</Warning>
<Warning>
**Public local worktree mode has been removed.** Local sandbox runs now execute directly in the resolved working directory, and `--in-place` plus `run.sandbox.local.worktree_mode` are no longer supported.
To migrate:
1. Run with `--sandbox local` from the checkout you want Fabro to use.
2. Create a separate clone or Git worktree yourself when you want local isolation.
3. Use Docker or Daytona for managed sandbox isolation.
</Warning>
## Sparse input overrides
Workflow inputs can now be overridden one key at a time from the CLI. Repeat `-I` or `--input` on `fabro run`, `fabro create`, and `fabro preflight` to replace specific inputs while preserving unrelated inherited values from settings and workflow config.
```bash
fabro run .fabro/workflows/check/workflow.toml -I repo_name=fabro-2 --input language=rust
```
Input-driven prompt paths, imports, and child workflow paths are rendered with the effective inputs before bundling, so sparse overrides work even when they change which files a workflow references.
## Sandbox access from run detail
Run detail now has a dedicated Sandbox tab and terminal route. You can inspect the run sandbox from the web app, open an interactive terminal, copy Docker exec access commands, and see sandbox identity information without switching to a separate CLI session.
This also gives long-running debug sessions a clearer place to live. Terminal framing, scroll behavior, Daytona proxying, and terminal error states were tightened so the terminal stays usable inside the run UI.
## Run file diff controls
The Files Changed view can now compare committed run history and sandbox file scopes from the same toolbar. You can switch diff scope next to the file count, pick commits from the run history, and refresh patch diffs when the selected scope changes.
This makes the file browser useful both during active sandbox work and after a run has committed checkpoints.
## More
<Accordion title="API">
- Run file APIs now expose commit lists and diff scope metadata for committed history and sandbox comparisons
- Run payloads, events, and mutations now support explicit run titles
- Billing projections now include live per-stage token usage while a run is active
- Sandbox details now expose control-plane metadata used by the run Sandbox tab
</Accordion>
<Accordion title="CLI">
- Added repeatable `-I, --input <key=value>` to `fabro run`, `fabro create`, and `fabro preflight`
- Added Docker host preflight checks for Docker-based deployment and sandbox diagnostics
</Accordion>
<Accordion title="Improvements">
- Run titles can now be edited inline from the run header
- Run title fields now preserve explicit titles across create, fork, archive, unarchive, and attach flows
- Added a demo-only Start tab for app-shell demos
- Docker Compose deployment defaults now include safer sandbox-facing defaults
- Added Thread DNA timeline strips to debug events and agent stage views
- Added specialized stage renderers for non-agent workflow handlers
- The Billing tab now shows an empty state when no models were used
</Accordion>
<Accordion title="Fixes">
- Fixed deletion of unreadable runs
- Fixed CLI verification failure handling
- Fixed Daytona terminals to use the toolbox proxy and hide control frames
- Fixed terminal dock spacing, bottom-row clipping, and overlap with the steer bar
- Fixed run file diffs refreshing when the selected scope changes
- Fixed scoped run file diffs to only include tracked files
- Fixed deprecated project directory settings being applied to workflow discovery
- Fixed embedded build Git metadata being stale on branch commits
</Accordion>

View file

@ -0,0 +1,57 @@
---
title: "Sandbox tools, auth sessions, and Live Events"
date: "2026-05-10"
---
<Warning>
**Run API responses now use the canonical `Run` payload.** Run list, board, create, retrieve, and lifecycle endpoints now return the same public run shape. Archive state moved out of `status.kind = "archived"` and into run lifecycle metadata, sandbox fields distinguish planned settings from runtime state, and pull request records are separate from live pull request details.
To migrate:
1. Regenerate API clients from the current OpenAPI spec.
2. Replace `RunSummary`, `RunListItem`, and `RunStatusResponse` assumptions with the canonical `Run` shape.
3. Read archive state from lifecycle metadata instead of treating `archived` as a terminal status.
</Warning>
## Sandbox tools in one place
The run Sandbox tab now includes a read-only filesystem browser, Daytona VNC previews, discovered sandbox services, and terminal access from the same page. Empty files render cleanly, large file previews are virtualized, and directory sentinel files are hidden from the browser.
Daytona sandboxes can start a signed noVNC preview from the web UI, and discovered listening TCP services are listed with their ports, bind addresses, process summaries, and preview support.
## Auth sessions and Live Events
Profile now includes a Sessions page for the current browser session and active CLI session chains. CLI sessions can be revoked from the same surface, while browser sessions are listed as non-revocable in this API version.
Settings now includes a Live Events page for watching server events in the web app. The page reuses the event debugger and adds the filtering and navigation needed for operational inspection.
## Automations navigation
The web app now uses Automations as the product label for workflow definitions and runs. Routes, nav labels, and run pages were updated together so the main app shell reads as Automations, Runs, Settings, and Profile instead of mixing workflow terminology into the navigation.
## More
<Accordion title="API">
- New `GET /api/v1/auth/sessions` endpoint lists browser and CLI auth sessions for the authenticated user
- New `DELETE /api/v1/auth/sessions/{id}` endpoint revokes active CLI session chains
- New `GET /api/v1/runs/{id}/sandbox/services` endpoint lists listening TCP services inside a run sandbox
- New `POST /api/v1/runs/{id}/sandbox/vnc` endpoint creates signed noVNC preview URLs for Daytona sandboxes
- Run list, board, create, retrieve, and lifecycle endpoints now return canonical `Run` objects
</Accordion>
<Accordion title="Improvements">
- Added Profile sub-navigation with Overview and Sessions pages
- Added Settings sub-navigation with Overview and Live Events pages
- Added a full-screen terminal route and an "Open in new tab" action for embedded terminals
- Added read-only filesystem and Daytona VNC modes to the run Sandbox tab
- Added a Services tab to the run Sandbox page
- Virtualized sandbox file previews and improved empty-file handling
- Renamed the Workflows tab to Automations
</Accordion>
<Accordion title="Fixes">
- Fixed sandbox service discovery so listening services are detected more reliably
- Fixed sandbox VNC previews to open the noVNC viewer page
- Fixed full-screen terminal toast notifications by wrapping the route in the Toast provider
- Fixed filesystem directory sentinels showing in the sandbox file browser
- Fixed projection cache hydration before appending later events
</Accordion>

View file

@ -0,0 +1,47 @@
---
title: "Fabro MCP server"
date: "2026-05-11"
---
## Fabro MCP server
Fabro now ships a stdio-based Model Context Protocol server, so MCP clients can manage workflow runs through the authenticated `fabro` CLI. It reuses normal CLI server targeting, OAuth refresh, dev-token and local-server handling, proxy behavior, and storage configuration instead of requiring a separate MCP authentication flow.
```bash
fabro mcp init claude
```
You can also print client configuration JSON or start the server directly:
```bash
fabro mcp config
fabro mcp start
```
## Run management from MCP clients
The MCP server exposes structured tools for creating runs, searching runs, reading run events, interacting with pending human questions, and waiting for runs to finish. MCP-created runs use the same manifest construction and override semantics as CLI-created runs, so workflow paths, goals, inputs, labels, model settings, sandbox settings, and dry-run options behave consistently.
This lets agent tools orchestrate Fabro runs without scraping CLI output or hand-rolling HTTP clients.
## More
<Accordion title="CLI">
- Added `fabro mcp start` to launch the MCP server over stdio
- Added `fabro mcp config` to print MCP client configuration JSON
- Added `fabro mcp init <agent>` for Claude, Cursor, and Windsurf client setup
</Accordion>
<Accordion title="Workflows">
- Added a bundled `daytona-medium` workflow for verifying the Daytona Medium sandbox starts with standard tooling
</Accordion>
<Accordion title="Improvements">
- MCP run tools can create multiple runs, apply scalar input overrides, attach labels, start or stage runs, and return structured run summaries
- MCP event tools support category, event type, text, timestamp, direction, and pagination filters
- MCP interact tools support cancelling, archiving, unarchiving, inspecting questions, answering questions, and sending run messages
</Accordion>
<Accordion title="Fixes">
- Fixed deleting terminal runs so successful completions are not followed by cancelled failure events
</Accordion>

View file

@ -250,6 +250,9 @@
"group": "May 2026",
"icon": "clock-rotate-left",
"pages": [
"changelog/2026-05-11",
"changelog/2026-05-10",
"changelog/2026-05-09",
"changelog/2026-05-08",
"changelog/2026-05-07",
"changelog/2026-05-06",