From 5570ff3bc05e1779683dd09cce055a891b4baf9d Mon Sep 17 00:00:00 2001 From: Bryan Helmkamp Date: Thu, 16 Apr 2026 08:01:59 -0400 Subject: [PATCH] =?UTF-8?q?docs:=20update=20changelog=20and=20docs=20for?= =?UTF-8?q?=20Apr=2014=E2=80=9316=20changes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.6 (1M context) --- .claude/skills/changelog/watermark | 2 +- .claude/skills/docs/watermark | 2 +- docs/changelog/2026-04-14.mdx | 38 +++++++++++++++++++++++++++ docs/changelog/2026-04-15.mdx | 40 ++++++++++++++++++++++++++++ docs/changelog/2026-04-16.mdx | 25 ++++++++++++++++++ docs/docs.json | 3 +++ docs/integrations/github.mdx | 12 ++++++++- docs/reference/cli.mdx | 42 +++++++++++++++++++++++++++--- 8 files changed, 157 insertions(+), 7 deletions(-) create mode 100644 docs/changelog/2026-04-14.mdx create mode 100644 docs/changelog/2026-04-15.mdx create mode 100644 docs/changelog/2026-04-16.mdx diff --git a/.claude/skills/changelog/watermark b/.claude/skills/changelog/watermark index 1397cc6cd..f89c399e5 100644 --- a/.claude/skills/changelog/watermark +++ b/.claude/skills/changelog/watermark @@ -1 +1 @@ -64028692e5e05f46546cd18150b1167a120a6169 +77c8ac8ed3721f06146dea858007b2d694598f7a diff --git a/.claude/skills/docs/watermark b/.claude/skills/docs/watermark index 1397cc6cd..f89c399e5 100644 --- a/.claude/skills/docs/watermark +++ b/.claude/skills/docs/watermark @@ -1 +1 @@ -64028692e5e05f46546cd18150b1167a120a6169 +77c8ac8ed3721f06146dea858007b2d694598f7a diff --git a/docs/changelog/2026-04-14.mdx b/docs/changelog/2026-04-14.mdx new file mode 100644 index 000000000..e57080c6d --- /dev/null +++ b/docs/changelog/2026-04-14.mdx @@ -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 + + +- 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 + + + +- 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 + + + +- Fixed server not restarting automatically after `fabro install` +- Fixed `server.listen` being ignored when `bind` was omitted from settings + diff --git a/docs/changelog/2026-04-15.mdx b/docs/changelog/2026-04-15.mdx new file mode 100644 index 000000000..43c2ac3b6 --- /dev/null +++ b/docs/changelog/2026-04-15.mdx @@ -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 + + +- `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 + + + +- 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 + + + +- 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 + diff --git a/docs/changelog/2026-04-16.mdx b/docs/changelog/2026-04-16.mdx new file mode 100644 index 000000000..69e02ea53 --- /dev/null +++ b/docs/changelog/2026-04-16.mdx @@ -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 + + +- `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) + + + +- 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 + diff --git a/docs/docs.json b/docs/docs.json index 8b19eb445..76fca7e7b 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -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", diff --git a/docs/integrations/github.mdx b/docs/integrations/github.mdx index b5b4b3577..201a29d72 100644 --- a/docs/integrations/github.mdx +++ b/docs/integrations/github.mdx @@ -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 `/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: diff --git a/docs/reference/cli.mdx b/docs/reference/cli.mdx index c428c21c5..43b7e5bf3 100644 --- a/docs/reference/cli.mdx +++ b/docs/reference/cli.mdx @@ -381,6 +381,22 @@ fabro server stop --timeout 30 |---|---|---| | `--timeout ` | 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 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 ` | 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 ` | GitHub auth strategy: `token` or `app` (requires `--non-interactive` on the parent) | +| `--owner ` | GitHub App owner: `personal` or `org:` (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 | |---|---| | `` | Name of the secret (required) | -| `` | Value to store (required) | +| `[VALUE]` | Value to store (omit to enter interactively) | +| `--value-stdin` | Read the secret value from stdin | ## `fabro secret list`