From f2a37a329e8925c083bba3240ffb22812482a95f Mon Sep 17 00:00:00 2001 From: Bryan Helmkamp Date: Fri, 8 May 2026 14:44:18 -0700 Subject: [PATCH] docs(changelog): refresh recent product changes --- .claude/skills/changelog/watermark | 2 +- docs/public/changelog/2026-05-06.mdx | 30 ++++++++++++- docs/public/changelog/2026-05-07.mdx | 66 ++++++++++++++++++++++++++++ docs/public/changelog/2026-05-08.mdx | 64 +++++++++++++++++++++++++++ docs/public/docs.json | 2 + 5 files changed, 162 insertions(+), 2 deletions(-) create mode 100644 docs/public/changelog/2026-05-07.mdx create mode 100644 docs/public/changelog/2026-05-08.mdx diff --git a/.claude/skills/changelog/watermark b/.claude/skills/changelog/watermark index 314f69ee9..09876abd5 100644 --- a/.claude/skills/changelog/watermark +++ b/.claude/skills/changelog/watermark @@ -1 +1 @@ -5a9f568e4630751d4ebfa06595bced73f07eb24e +9a3ab8bbba2e71d72ff7703a68e9892e8ce94d8d diff --git a/docs/public/changelog/2026-05-06.mdx b/docs/public/changelog/2026-05-06.mdx index 88b4f9ea7..cbefd824e 100644 --- a/docs/public/changelog/2026-05-06.mdx +++ b/docs/public/changelog/2026-05-06.mdx @@ -1,5 +1,5 @@ --- -title: "Refreshable GitHub workflow tokens" +title: "Run events, raw logs, and refreshable GitHub tokens" date: "2026-05-06" --- @@ -11,6 +11,21 @@ To migrate: 2. In GitHub App mode, request scoped run tokens with `[run.integrations.github.permissions]`. +## Separate run events and raw logs + +`fabro events` now focuses on structured workflow events, while `fabro logs` prints the raw worker tracing output for a run. Use events when you want the run timeline, assistant messages, tool activity, or follow-mode output; use logs when you need low-level worker diagnostics. + +```bash +fabro events --pretty --follow +fabro logs --tail 200 +``` + +The split makes the CLI match the product model more closely: events are the durable run history, and logs are the debugging stream. + +## Better foreground server logs + +`fabro server start --foreground` now writes server logs to stdout by default, and interactive terminals get a compact colored one-line format with date-bearing timestamps. Piped stdout and file logs keep the plain tracing format, so scripts and saved logs do not need to change. + ## Refreshable GitHub tokens during workflows Long-running workflows that used GitHub App installation tokens could outlive the first token minted for the run. Fabro now keeps GitHub credentials as a refreshable token source and resolves `GITHUB_TOKEN` lazily before command and API agent stages, so GitHub operations can continue after token rollover. @@ -19,6 +34,14 @@ Tokens refresh when they are close to expiry. If a refresh fails while the cache ## More + +- Added `fabro events` for structured run event history with `--follow`, `--pretty`, `--since`, and `--tail` +- `fabro logs` now prints raw worker tracing output with `--tail` +- Foreground logs now show the run ID on run-scoped log lines +- Failed API commands now preserve server response details instead of collapsing to a status-only error +- CLI help output now wraps angle-bracket placeholders in backticks + + - Command stages and API agent stages resolve `GITHUB_TOKEN` from a refreshable source before use - GitHub App installation tokens refresh when they are within 15 minutes of expiry @@ -26,10 +49,15 @@ Tokens refresh when they are close to expiry. If a refresh fails while the cache +- Interactive foreground server logs now use a compact colored TTY format +- Worker processes preserve the terminal color environment passed by the foreground server +- `--watch-web` now ignores non-source watcher events and responds faster during local development - Agent file reads now parallelize `read_many_files` work - Fixed long-running GitHub App workflows losing GitHub access after the initial installation token expired - Fixed static configuration accepting short-lived `ghs_*` installation tokens +- Fixed foreground server logs defaulting away from stdout +- Fixed repeated `cargo dev` rebuilds during generated CLI reference refreshes diff --git a/docs/public/changelog/2026-05-07.mdx b/docs/public/changelog/2026-05-07.mdx new file mode 100644 index 000000000..580556516 --- /dev/null +++ b/docs/public/changelog/2026-05-07.mdx @@ -0,0 +1,66 @@ +--- +title: "Run debugger, sticky steering, and run filters" +date: "2026-05-07" +--- + + +**Command output streams are now merged.** Command stages expose one ordered output log instead of separate stdout and stderr streams. + +To migrate: +1. Replace `/api/v1/runs/{id}/stages/{stageId}/logs/{stream}` with `/api/v1/runs/{id}/stages/{stageId}/logs/output`. +2. Replace command outcome fields such as `stdout`, `stderr`, `stdout_bytes`, and `stderr_bytes` with `output` and `output_bytes`. + + +## Stage threads and debug events + +The run stages view is now a stage debugger with a `Thread` view for readable agent activity and a `Debug` view for raw stage events. You can search and filter events, inspect tool calls in a side panel, see token and duration metrics, and open formatted JSON or Markdown details without leaving the stage. + +Command stages now get a `Logs` tab with the real command output, so command-heavy workflows no longer require jumping to raw run logs to see what happened. Consecutive calls to the same tool are grouped together, which keeps long agent stages scannable while preserving the underlying details. + +## Steering stays attached to the run + +The web app now keeps steering and interview controls in a bottom-attached run dock. You can move between stages, logs, source, and billing while keeping the current human action available at the bottom of the screen. + +Steering actions are also available from the run menu, including interrupt steering. That makes it easier to redirect a running agent from whichever run view you are already using. + +## More useful run lists + +The runs page now supports URL-backed filters for search, repository, workflow, created time, archived runs, and list-versus-column view. Run rows split repository, workflow, and created time into separate columns, and archived runs can be shown explicitly instead of disappearing from the board. + +Run cards now surface pull request diff counts when available, and each terminal column can archive all archivable runs in that column from its actions menu. + +## More + + +- Board run listing now accepts `include_archived=true` and can return an `archived` column +- Run projections and summaries now expose `last_event_at` for activity-aware run views +- Run projections and summaries now expose `diff_summary` with changed-file, addition, and deletion counts +- Command stage log responses now return a single ordered output log instead of separate stdout and stderr fields + + + +- Raw run logs are now kept free of ANSI escape sequences +- Colored run span fields are parsed correctly when reading server-backed run logs + + + +- Command stages now persist one merged output stream for ordered stdout/stderr display +- Workflow breadcrumbs stay visible on run detail pages +- The Graph tab has moved to the run sidebar as `Graph Source` + + + +- Run Logs now support level filtering, text search, copied output, and live refresh while a run is active +- Run stage rows show model, duration, token counts, and absolute timestamp tooltips +- Run Billing hides stages with no billing usage while keeping active stages visible +- Run headers now show workflow metadata and recent activity +- The run detail action buttons are collapsed into a menu + + + +- Fixed active SSE streams blocking server shutdown +- Fixed the synthetic start node being included in billing rollups +- Fixed the Billing tab losing its anchored layout on run detail pages +- Fixed full-height run stage layouts collapsing in the browser +- Fixed the degraded sandbox banner appearing on the run files page after the sandbox is gone + diff --git a/docs/public/changelog/2026-05-08.mdx b/docs/public/changelog/2026-05-08.mdx new file mode 100644 index 000000000..613debc40 --- /dev/null +++ b/docs/public/changelog/2026-05-08.mdx @@ -0,0 +1,64 @@ +--- +title: "Run Events, artifacts, and typed interviews" +date: "2026-05-08" +--- + + +**Interview answer submissions now use typed request bodies.** `POST /api/v1/runs/{id}/questions/{qid}/answer` requires a `kind` discriminator instead of the previous loose answer fields. + +To migrate: +1. Send `{ "kind": "yes" }` or `{ "kind": "no" }` for yes/no answers. +2. Send `{ "kind": "selected", "option_key": "..." }` for single-choice answers. +3. Send `{ "kind": "multi_selected", "option_keys": ["..."] }` or `{ "kind": "text", "text": "..." }` for multi-choice and freeform answers. + + +## Run Events and Artifacts pages + +Run detail sidebars now include dedicated `Run Events` and `Artifacts` pages. `Run Events` shows the full event stream with category filters, search, and an event detail panel, while `Artifacts` groups downloadable files by stage and retry. + +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. + +## 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 + + +- `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` +- 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 + + + +- `fabro attach` now re-prompts after invalid interview input +- `fabro attach` now unblocks when an interview question is answered from another client + + + +- Added bundled `interview` and `sleeper` workflows for exercising human answers and interrupt handling + + + +- Added a Profile page to the user menu +- 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 +- Unknown stage handler types now open in the Debug renderer by default + + + +- 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 +- Fixed duplicate action dividers in run menus +- Fixed the steer bar not receiving focus from the actions menu + diff --git a/docs/public/docs.json b/docs/public/docs.json index f7ff620fa..721cf099c 100644 --- a/docs/public/docs.json +++ b/docs/public/docs.json @@ -251,6 +251,8 @@ "group": "May 2026", "icon": "clock-rotate-left", "pages": [ + "changelog/2026-05-08", + "changelog/2026-05-07", "changelog/2026-05-06", "changelog/2026-05-05", "changelog/2026-05-04",