Commit graph

3637 commits

Author SHA1 Message Date
Bryan Helmkamp
85a2cdda64
fix(web): show terminal errors as a centered ErrorState panel
Replaces the stray red caption + empty terminal frame with the shared
ErrorState card so errors like "Local sandboxes do not support embedded
terminals" land in a clear, retry-able panel instead of floating above a
misleading blank terminal.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 20:21:09 -04:00
Bryan Helmkamp
06277c79f5
fix(web): balance top and bottom padding in stage renderer area
The outer scroll container had pt-2 with pb-[calc(1.5rem+dock)], so
content sat ~8px below the tab toolbar but ~24px above the dock —
visibly off. Each new renderer also re-applied its own pt-2, doubling
the top spacing. Bump the outer pt to pt-6 so it matches the 24px
baseline bottom, and drop the duplicated pt-2 from every renderer
wrapper.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 19:33:13 -04:00
Bryan Helmkamp
23924eb2b4
Add Docker host preflight checks
Some checks are pending
Rust / Format (push) Waiting to run
Rust / Clippy (push) Waiting to run
Rust / Generated Docs (push) Waiting to run
Rust / Test (Linux) (push) Waiting to run
Rust / Test (macOS) (push) Waiting to run
TypeScript / Typecheck (push) Waiting to run
TypeScript / Test (push) Waiting to run
TypeScript / Build (push) Waiting to run
2026-05-09 19:25:30 -04:00
Bryan Helmkamp
8b4442096d
refactor(web): polish stage renderer designs after visual review
Tighten the meta bar (drop redundant labels, fold timestamp into the
duration tooltip), elevate the wait card to a centered hero clock,
strengthen the conditional view with the actual chosen edge and
condition expression sourced from run-level edge.selected events,
upgrade the fan-in selected card with a trophy badge and gradient, and
redesign the parallel stat strip with toned numbers and a duration
column.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 19:16:27 -04:00
Bryan Helmkamp
ea572495f6
chore: plan 2026-05-09 19:02:03 -04:00
Bryan Helmkamp
068cafee1c
Improve Docker Compose deployment defaults 2026-05-09 18:59:25 -04:00
Bryan Helmkamp
80d3965670
feat(web): add DNA strip timeline to debug events view
Renders a full-width strip below the Debug toolbar with one bar per
event placed by elapsed time. Hover shows category/name/elapsed;
click opens the event in the side panel. Collapses event categories
to five colors (agent/command/lifecycle/human/system) and shows the
event count persistently on Debug so the strip's density has a number
next to it.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 18:51:35 -04:00
Bryan Helmkamp
b6ebe9ca50
feat(web): add specialized stage renderers for non-agent handlers
Replace the raw Debug fallback for human, conditional, parallel,
parallel.fan_in, stack.manager_loop, and wait stages with purpose-built
views — Q&A transcript, decision card, children grid, fan-in results
with reducer transcript, cycle summary, and live waiter clock. Add a
generic Summary card as the new default for any unknown handler so
future StageHandler additions get a usable view for free. Debug tab
remains as the escape hatch on every handler.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 18:35:19 -04:00
Bryan Helmkamp
f538ece6c0
fix(cli): repair verification failures
Update the sandbox SSH snapshot to match the current access-command error and bring system repair imports in line with clippy's absolute path lint.
2026-05-09 18:07:24 -04:00
Bryan Helmkamp
8cdc4a6f28
fix(runs): repair deletion of unreadable runs
Allow forced run deletion to purge durable metadata even when projection replay fails, and add a repair command path for deleting unreadable runs in batch.
2026-05-09 17:45:55 -04:00
Bryan Helmkamp
7e9edcf229
fix(web): show sandbox id in terminal status 2026-05-09 17:21:33 -04:00
Bryan Helmkamp
fb577b1fcb
fix(web): add bottom padding inside terminal frame
Give the terminal wrapper pb-3 so the active console no longer hugs
the bottom edge of the bordered frame.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 17:12:47 -04:00
Bryan Helmkamp
61ab94195e
feat(sandbox): copy Docker exec access command 2026-05-09 17:05:46 -04:00
Bryan Helmkamp
160c21c8b1
fix(web): rename run "Diff" tab back to "Files Changed"
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 16:53:47 -04:00
Bryan Helmkamp
872c81bdc7
fix(web): stop terminal bottom row from being clipped
The xterm.js renderer cell height is fontSize (13) × lineHeight (1.45)
= 18.85px — non-integer. FitAddon proposes N rows where
N × cellHeight <= available height, but sub-pixel rounding in the
renderer (and font-load timing on first paint) lets the Nth row
extend past the wrapper's content edge, so the last visible line
gets half-clipped.

Reserve one row of buffer in the fit calculation (proposed.rows - 1)
so xterm is never asked to render right up to the bottom edge. The
re-fit on document.fonts.ready stays in place; sendResize now reads
terminal.cols/rows directly so the server sees the same dimensions
xterm actually uses.

Trade-off: ~18px less visible terminal area. The alternative is
switching to an integer cell height (e.g. lineHeight 18/13), which
we can revisit if the lost row matters.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 16:53:33 -04:00
Bryan Helmkamp
01f33e6d50
refactor(web): polish terminal tab chrome and theme
- Replace heading + status badge with a single status pill that folds in the sandbox provider
- Make Reconnect an icon-only button with tooltip; keep SSH labeled
- Darken the terminal canvas and brighten the ANSI palette for higher contrast
- Trim the static gap above the steer-bar dock from 0.5rem to 0.25rem

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 16:41:49 -04:00
Bryan Helmkamp
0de07bbfec
refactor(web): rename Files Changed tab to Diff and reorder before Terminal
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 16:41:41 -04:00
Bryan Helmkamp
0f30150264
fix(web): show empty state on Billing tab when no models were used
Runs with only non-billable stages rendered as a header + empty body
+ all-dashes "Total" row, which looked broken. Show the existing
EmptyState panel ("No model usage") instead, keeping the original
"No stages yet" message for runs that haven't started executing.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 16:41:28 -04:00
Bryan Helmkamp
39d8e65547
fix(web): tighten terminal dock spacing 2026-05-09 16:22:19 -04:00
Bryan Helmkamp
bf6bd670ce
fix(web): keep terminal clear of steer bar 2026-05-09 16:21:04 -04:00
Bryan Helmkamp
fe77c2a688
fix(sandbox): hide Daytona terminal control frames 2026-05-09 16:18:58 -04:00
Bryan Helmkamp
66b11480d6
fix(sandbox): use Daytona toolbox proxy for terminals 2026-05-09 16:15:38 -04:00
Bryan Helmkamp
4ef239de79
fix(run-files): remove needless borrow 2026-05-09 16:06:31 -04:00
Bryan Helmkamp
db3f348fab
feat(runs): add sandbox terminal
Expose a run-scoped websocket terminal for Docker and Daytona sandboxes, and add the web terminal route so sandbox-backed runs can be inspected interactively from the run detail page.
2026-05-09 16:06:04 -04:00
Bryan Helmkamp
237318f13f
Merge remote-tracking branch 'origin/main' 2026-05-09 15:40:18 -04:00
Bryan Helmkamp
65c8a12cce
Merge remote-tracking branch 'origin/main' 2026-05-09 15:39:44 -04:00
Bryan Helmkamp
929ece9f6d
test(run-files): cover commits route envelope 2026-05-09 15:34:36 -04:00
Bryan Helmkamp
6cfed82654
refactor(run-files): rename diff selection picker 2026-05-09 15:33:54 -04:00
Bryan Helmkamp
705ea0268a
refactor(run-files): extract commit picker options 2026-05-09 15:33:19 -04:00
Bryan Helmkamp
ac07df6a66
refactor(billing): call token aggregation directly 2026-05-09 15:32:55 -04:00
Bryan Helmkamp
67decad7b5
feat(billing): project live stage token usage
Store live per-stage token counts on StageProjection, carry typed billing model identity through agent.message events, and derive billing rollups from the projection so in-flight stages can report usage before terminal events arrive.
2026-05-09 15:25:51 -04:00
Bryan Helmkamp
010828ae7a
Add run commit diff picker 2026-05-09 14:49:15 -04:00
Bryan Helmkamp
fb9ed01978
chore: plan 2026-05-09 14:22:30 -04:00
Bryan Helmkamp
685cc18156
fix(build): refresh embedded git sha on branch commits
Track the active loose HEAD ref from CLI and server build scripts so local builds refresh FABRO_GIT_SHA after normal branch commits without watching packed-refs.
2026-05-09 14:10:04 -04:00
Bryan Helmkamp
bfb633ba6e
fix(run-files): refresh patch diffs when scope changes 2026-05-09 14:00:34 -04:00
Bryan Helmkamp
8b7d5bd16c
fix(run-files): simplify scoped diffs to tracked files
Use one git diff command for working-tree scopes and exclude untracked files from all scoped run-file views. Update the API description to document the tracked-file scope semantics.
2026-05-09 13:38:44 -04:00
Bryan Helmkamp
6cc669e6be
feat(run-files): make diff scope a dropdown next to file count
Replaces the All/Uncommitted/Committed pill toggle with a Listbox
dropdown and moves it next to the "N files changed" header so the
filter sits with the count it modifies.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 13:23:49 -04:00
Bryan Helmkamp
eb2d9fae29
fix(clippy): remove stale run spec fixture field
Remove the leftover in_place field from a RunSpec test fixture after the field was intentionally removed, and clean up a raw string lint surfaced by workspace clippy.
2026-05-09 13:06:50 -04:00
Bryan Helmkamp
447b94da6d
feat(run-files): add sandbox diff scopes
Add committed, uncommitted, and all scope handling for run files with source reporting for sandbox and final patch responses.

Wire the run files page to persist scope in the URL and cache each scope independently.
2026-05-09 13:00:14 -04:00
Bryan Helmkamp
7b013cef7f
feat(web): inline-edit run titles in the run header
Click the title (or its hover-revealed pencil) to swap it for an input;
Enter or blur saves via PATCH /runs/{id}, Esc reverts. Trims whitespace,
no-ops blank or unchanged values, and surfaces server validation errors
through the existing toast system. The board and breadcrumb refresh from
the same SWR cache after a successful save.
2026-05-09 11:54:41 -04:00
Bryan Helmkamp
48545f4a7d
Merge remote-tracking branch 'origin/main' 2026-05-09 11:43:59 -04:00
Bryan Helmkamp
8ad14faa17
refactor(integrations): make chat integrations Slack-only 2026-05-09 11:43:16 -04:00
Bryan Helmkamp
ba790ea1e8
refactor(runs): resolve titles from run projection
Centralize legacy title fallback behind RunProjection::title() so summaries and lifecycle responses use the same resolved title behavior.
2026-05-09 11:42:50 -04:00
Bryan Helmkamp
697dc1294f
feat(runs): support explicit run titles
Persist resolved run titles on creation, expose title update events, and add the run title PATCH API. Regenerate API clients and refresh web/server invalidation so title changes are reflected across run detail and board views.
2026-05-09 11:18:12 -04:00
Bryan Helmkamp
1ff30ea03c
Merge remote-tracking branch 'origin/main' 2026-05-09 11:05:15 -04:00
Bryan Helmkamp
2a8884883a
refactor(workflow): remove local worktree mode
Make local sandbox execution direct by removing the public worktree mode and in-place controls from CLI, config, run state, API surfaces, docs, and UI. Keep worktree support only for internal parallel-node isolation.
2026-05-09 11:04:23 -04:00
Bryan Helmkamp
42fa31244a
test(server): expect project settings without directory 2026-05-09 10:55:56 -04:00
Bryan Helmkamp
5b0b1efdc2
fix(workflow): ignore deprecated project directory
Project workflows now resolve from the discovered .fabro directory instead of honoring project.directory. Keep the legacy field parse-only while removing it from resolved settings and API/client shapes.
2026-05-09 10:55:56 -04:00
Bryan Helmkamp
dae5ea4c80
feat(web): add demo-only Start tab to app shell nav
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 10:55:25 -04:00
Bryan Helmkamp
53c03a121f
chore: plans 2026-05-09 10:27:25 -04:00