docs: update changelog and docs for Apr 14–16 changes

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Bryan Helmkamp 2026-04-16 08:01:59 -04:00
parent 77c8ac8ed3
commit 5570ff3bc0
No known key found for this signature in database
8 changed files with 157 additions and 7 deletions

View file

@ -1 +1 @@
64028692e5e05f46546cd18150b1167a120a6169
77c8ac8ed3721f06146dea858007b2d694598f7a

View file

@ -1 +1 @@
64028692e5e05f46546cd18150b1167a120a6169
77c8ac8ed3721f06146dea858007b2d694598f7a

View file

@ -0,0 +1,38 @@
---
title: "Vendored Graphviz, version command, and install improvements"
date: "2026-04-14"
---
## Vendored Graphviz
Fabro no longer requires a system-installed `dot` binary to render workflow graphs. The Graphviz C library is now compiled directly into the Fabro binary, so graph rendering works out of the box on every platform. Rendering runs in an isolated subprocess to contain any native library faults, so a malformed graph can't crash the main process.
## `fabro version` command
You can now check your installed version and build metadata with a dedicated command. The output includes the git SHA and build date, making it easy to identify exactly which build you're running — especially useful when reporting issues or verifying upgrades.
```bash
fabro version
```
## More
<Accordion title="CLI">
- Added `ls` alias for `list` subcommands (e.g., `fabro runs ls`, `fabro models ls`)
- Added `fabro install --github-only` to reconfigure just the GitHub App without a full reinstall
- Install now prompts for a GitHub token when the `gh` CLI is unavailable
</Accordion>
<Accordion title="Improvements">
- Doctor now shows `fabro secret set` in remediation output when a secret is missing
- Doctor check labels improved for Sandbox and Brave Search readability
- Doctor and install output now use `~` for home directory paths
- Install runs doctor in non-verbose mode after completing setup
- Install output reordered for clearer step progression
- Enabled Zstd compression for the embedded storage engine, reducing disk usage
</Accordion>
<Accordion title="Fixes">
- Fixed server not restarting automatically after `fabro install`
- Fixed `server.listen` being ignored when `bind` was omitted from settings
</Accordion>

View file

@ -0,0 +1,40 @@
---
title: "Live Web UI with real-time stage tracking"
date: "2026-04-15"
---
## Live Web UI
The Web UI now connects to real server data instead of showing static demos. The runs board updates in real time via server-sent events — new runs appear, statuses change, and timers tick without refreshing the page. Each run's detail page has a stages tab with a live sidebar that shows the currently executing stage, elapsed time, and stage history as events stream in.
## Workflow graph visualization
Run detail pages now render an interactive workflow graph with controls for switching between top-down and left-right layouts. Nodes are color-coded by status — running stages pulse, failed nodes turn red, and completed nodes are marked. The graph updates live as the workflow progresses, so you can watch execution flow through the graph in real time.
## Markdown rendering in stage output
Stage detail pages now render markdown in system prompts and assistant response blocks, making agent output much easier to read. Command and script stage output is also rendered on the stage detail page, so you can inspect what each stage produced without switching to the CLI.
## More
<Accordion title="CLI">
- `fabro secret set` now accepts the secret value via stdin or interactive prompt instead of requiring it as an argument
- Install output now shows the active auth method and dev token
- Restored Run ID display in `fabro run` output header
</Accordion>
<Accordion title="Improvements">
- Cloud sandboxes (Daytona) are now preserved after runs complete instead of being torn down immediately
- Doctor output now shows the server location URL
- Added `disk_cache` setting for S3-backed storage deployments
</Accordion>
<Accordion title="Fixes">
- Fixed workflows not using configured providers for default models
- Fixed Daytona API key not being passed through to the SDK client from vault storage
- Fixed Web UI logout producing a React Router 500 error
- Fixed Web UI redirecting to `/start` instead of `/runs` after login
- Fixed run goals displaying raw markdown heading markers in the Web UI
- Fixed stage failed events missing duration data in the sidebar display
- Fixed Web UI not handling 404 and 501 API responses gracefully
</Accordion>

View file

@ -0,0 +1,25 @@
---
title: "Server restart command and startup improvements"
date: "2026-04-16"
---
## `fabro server restart`
You can now restart the Fabro server without manually stopping and starting it. This is useful after configuration changes or when the server needs a fresh start. The command stops the running server and starts a new one in a single step.
```bash
fabro server restart
```
## More
<Accordion title="CLI">
- `fabro server start` now displays the Web UI URL and active auth methods in its output
- Added `--watch-web` flag to `fabro server start` for auto-rebuilding web assets during development (debug builds only)
</Accordion>
<Accordion title="Fixes">
- Fixed device code login output missing blank line spacing, improving readability
- Fixed Web UI login page not showing both GitHub and dev-token options when both auth methods are enabled
- Fixed install generating inconsistent web URLs for GitHub App callback and settings
</Accordion>

View file

@ -251,6 +251,9 @@
"group": "April 2026",
"icon": "clock-rotate-left",
"pages": [
"changelog/2026-04-16",
"changelog/2026-04-15",
"changelog/2026-04-14",
"changelog/2026-04-13",
"changelog/2026-04-12",
"changelog/2026-04-11",

View file

@ -63,7 +63,7 @@ When you choose the GitHub App strategy, the CLI opens GitHub with a pre-filled
The installer:
1. Lets you choose where to register the app. If you have the `gh` CLI installed, Fabro detects your GitHub username and any organizations you administer and lets you pick. If `gh` is not available, the app is registered under your personal account.
1. Lets you choose where to register the app. If you have the `gh` CLI installed, Fabro detects your GitHub username and any organizations you administer and lets you pick. If `gh` is not available, the installer prompts for a GitHub token and uses it to look up your identity and organizations.
2. Opens GitHub in your browser so you can review the manifest and click **Create GitHub App**.
3. Receives GitHub's temporary callback on localhost, exchanges it for permanent app credentials, and writes:
- `app_id`, `client_id`, and `slug` to `~/.fabro/settings.toml`
@ -125,6 +125,16 @@ Fabro stores the GitHub App secrets in `<data_dir>/server.env` under these keys:
The private key is stored as base64-encoded PEM. Fabro also accepts raw PEM format (starting with `-----BEGIN`).
### Reconfigure GitHub after install
To switch GitHub strategies or re-register the app without re-running the full install wizard, use `fabro install github`:
```bash
fabro install github
```
This walks through just the GitHub setup steps — choosing a strategy, registering an app, or storing a token — and restarts the server when done. Stale settings and secrets from the previous strategy are cleaned up automatically.
## `token` mode
Choose **GitHub CLI** in `fabro install` to use the default local-user flow. The installer:

View file

@ -381,6 +381,22 @@ fabro server stop --timeout 30
|---|---|---|
| `--timeout <SECONDS>` | Seconds to wait for graceful shutdown before SIGKILL | `10` |
## `fabro server restart`
Stop the running server and start a fresh one. Passes through the same flags as `server start` (`--bind`, `--foreground`, `--no-web`, etc.). Works even if no server is currently running.
```bash
fabro server restart
fabro server restart --foreground
```
| Flag | Description | Default |
|---|---|---|
| `--timeout <SECONDS>` | Seconds to wait for graceful shutdown before SIGKILL | `10` |
| `--foreground` | Run in the foreground instead of daemonizing | — |
All `fabro server start` flags are also accepted.
## `fabro server status`
Show whether the server daemon is running, along with PID, bind address, and uptime.
@ -841,7 +857,22 @@ fabro install --non-interactive --llm-provider anthropic --llm-api-key-env ANTHR
| `--web-url <URL>` | Web UI base URL for OAuth callback endpoints | `http://localhost:3000` |
| `--non-interactive` | Run without prompts; supply inputs via scripted flags | — |
When configuring a GitHub App, the wizard detects your GitHub organizations (via the `gh` CLI) and lets you choose whether to register the app under your personal account or an organization. Use `--non-interactive` for headless or CI environments where no TTY is available.
When configuring a GitHub App, the wizard detects your GitHub organizations (via the `gh` CLI) and lets you choose whether to register the app under your personal account or an organization. If the `gh` CLI is not available, the installer prompts for a GitHub token directly. Use `--non-interactive` for headless or CI environments where no TTY is available.
### `fabro install github`
Reconfigure just the GitHub integration on an existing install without re-running the full setup wizard.
```bash
fabro install github
fabro install github --strategy token
fabro install github --strategy app --owner org:my-org
```
| Flag | Description |
|---|---|
| `--strategy <STRATEGY>` | GitHub auth strategy: `token` or `app` (requires `--non-interactive` on the parent) |
| `--owner <OWNER>` | GitHub App owner: `personal` or `org:<slug>` (app strategy only, requires `--non-interactive`) |
## `fabro uninstall`
@ -860,16 +891,19 @@ fabro uninstall --yes
## `fabro secret set`
Store or update a server-owned secret on the connected Fabro server.
Store or update a server-owned secret on the connected Fabro server. The value can be provided as a positional argument, piped via `--value-stdin`, or entered interactively when stdin is a TTY.
```bash
fabro secret set ANTHROPIC_API_KEY sk-ant-...
echo "sk-ant-..." | fabro secret set ANTHROPIC_API_KEY --value-stdin
fabro secret set ANTHROPIC_API_KEY # interactive prompt
```
| Argument | Description |
| Argument / Flag | Description |
|---|---|
| `<KEY>` | Name of the secret (required) |
| `<VALUE>` | Value to store (required) |
| `[VALUE]` | Value to store (omit to enter interactively) |
| `--value-stdin` | Read the secret value from stdin |
## `fabro secret list`