fabro/apps/fabro-web/app/lib
Bryan Helmkamp 34996d630f
Give Ask Fabro sessions their own event log
Step 4 of the legacy executor deletion, second commit. Ask Fabro's
sessions were the last writer of `run_events`: a session's creation, its
turns and their messages, tool calls and endings went into the run's
legacy event log, keyed by the run's sequence. They now have a log of
their own.

- `run_session_events` (migration `2026091802`): one row per session
  event, numbered per session from 1, with the owning run, the turn, the
  event name and its properties. `RunSessionEventStore` appends under the
  write lock, lists a session from a sequence, names a session's owner
  from its creation event, deletes a run's sessions with the run, and
  publishes each committed event to its subscribers.
- `fabro_types::SessionEvent`: `seq`, `session_id`, `run_id`, `ts` and a
  flattened body (`event` naming the kind, `properties` its fields), with
  the same event names and property shapes the legacy events carried,
  so the web app and the CLI read the same JSON. The property structs
  move to `session_event`; `run_event::session` re-exports them under
  their old names until the legacy event log goes.
- The API: `GET /sessions/{id}/events` pages `PaginatedSessionEventList`
  by the session's own sequence, `GET /sessions/{id}/attach` replays and
  streams `SessionEvent` frames (subscribed before the replay, so no
  event falls between the two), the turn stream carries the same frames,
  and an interrupt answers with the recorded event. The session
  projection folds `SessionEvent`s; the legacy `find_session_owner` over
  `run_events` is gone.
- The CLI's `run ask` and the web app's session stream read
  `SessionEvent`; the web runtime no longer accepts the nested legacy
  envelope shape.

The two session resume tests in the server keep failing for a reason
this commit does not touch: Ask Fabro reconnects to the run's sandbox
from the projection's sandbox instance, which the Petri projection does
not carry yet (`VIEWS.md`, the `scope.acquired` gap).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-18 12:47:43 -04:00
..
api-client.test.ts feat: download latest artifacts as zip 2026-07-31 13:23:35 -04:00
api-client.ts refactor: simplify artifact ZIP download 2026-08-01 09:09:54 -04:00
ask-fabro-runtime.test.ts Give Ask Fabro sessions their own event log 2026-09-18 12:47:43 -04:00
ask-fabro-runtime.ts Give Ask Fabro sessions their own event log 2026-09-18 12:47:43 -04:00
automation.ts Align remote workflow selectors with run targets 2026-08-31 17:13:20 -04:00
board-cache.ts feat(web): upgrade Children sub-tab to use the runs list view 2026-05-25 12:48:18 -04:00
board-events.test.tsx Harden cancellation and interrupt lifecycles 2026-07-23 20:40:22 -04:00
board-events.ts Harden cancellation and interrupt lifecycles 2026-07-23 20:40:22 -04:00
build-version-contract.ts fix(web): harden build version detection 2026-07-25 15:15:25 -04:00
build-version.test.ts fix(web): harden build version detection 2026-07-25 15:15:25 -04:00
build-version.ts fix(web): harden build version detection 2026-07-25 15:15:25 -04:00
chats-runtime.test.ts Expose lithos request and response shapes through the API, server, CLI, and web 2026-09-09 17:26:57 -06:00
chats-runtime.ts Expose lithos request and response shapes through the API, server, CLI, and web 2026-09-09 17:26:57 -06:00
chats-script.ts Expose lithos request and response shapes through the API, server, CLI, and web 2026-09-09 17:26:57 -06:00
chats-store.test.tsx Expose lithos request and response shapes through the API, server, CLI, and web 2026-09-09 17:26:57 -06:00
chats-store.tsx Expose lithos request and response shapes through the API, server, CLI, and web 2026-09-09 17:26:57 -06:00
chats-types.ts Expose lithos request and response shapes through the API, server, CLI, and web 2026-09-09 17:26:57 -06:00
class-names.ts fix(web): harden collapsible run docks 2026-07-28 15:24:58 -04:00
credential-heuristics.test.ts feat: add MCP servers settings UI at /settings/mcps (#540) 2026-07-01 10:32:37 -04:00
credential-heuristics.ts feat: add MCP servers settings UI at /settings/mcps (#540) 2026-07-01 10:32:37 -04:00
cross-tab-sse.test.ts fix(web): recover cross-tab SSE coordination after fallback 2026-05-04 15:52:18 -04:00
cross-tab-sse.ts Render a Petri run's detail views from its projection and stream 2026-09-18 00:59:10 -04:00
demo-mode.test.tsx feat: wire web UI to real server with demo mode toggle 2026-04-08 04:46:08 -04:00
demo-mode.tsx refactor(web): improve React Doctor score (#405) 2026-05-25 22:41:37 -04:00
environment-providers.ts Open sandbox provider identity to plugin kinds 2026-09-09 15:17:32 -06:00
format.ts feat(web): add models table to /settings/models 2026-05-25 15:21:40 -04:00
graph-theme.ts refactor(web): drop light mode, go dark-only 2026-04-20 09:27:08 -04:00
graph-viewport.test.ts Increase LR graph zoom to 400% and remember zoom per direction (#581) 2026-07-21 16:06:25 -04:00
graph-viewport.ts Remove unsupported workflow playground 2026-09-03 12:04:35 -04:00
import-chunk.test.ts fix(web): harden build version detection 2026-07-25 15:15:25 -04:00
import-chunk.ts feat(web): tell open tabs when a new build ships 2026-07-25 14:45:26 -04:00
live-events.test.tsx feat(web): build live events page in settings 2026-05-10 14:05:10 -04:00
live-events.ts Introduce approved effect hooks and migrate direct useEffect calls (#425) 2026-05-27 10:37:29 -04:00
mcp-server-cache.ts feat: add MCP servers settings UI at /settings/mcps (#540) 2026-07-01 10:32:37 -04:00
mcp-transport-kinds.ts feat: add MCP servers settings UI at /settings/mcps (#540) 2026-07-01 10:32:37 -04:00
model-offerings.test.ts feat: make model aliases provider-aware 2026-07-23 10:12:25 -04:00
model-offerings.ts feat: make model aliases provider-aware 2026-07-23 10:12:25 -04:00
mutations.test.ts Introduce approved effect hooks and migrate direct useEffect calls (#425) 2026-05-27 10:37:29 -04:00
mutations.ts Remove the retry, rewind, fork and timeline endpoints and commands 2026-09-18 10:54:45 -04:00
petri-fixtures.ts Test the web app's Petri views over the captured scenario fixtures 2026-09-18 01:03:19 -04:00
petri-stream.test.ts Remove the engine flag: every run is a Petri run 2026-09-18 09:58:21 -04:00
petri-stream.ts Remove the engine flag: every run is a Petri run 2026-09-18 09:58:21 -04:00
pierre-diffs-worker.ts fix(web): virtualize run file diffs consistently 2026-05-05 16:41:39 -04:00
plural.ts refactor(web): improve React Doctor score (#405) 2026-05-25 22:41:37 -04:00
principal-display.tsx feat(web): add server-managed Environments CRUD settings UI (#462) 2026-06-13 08:44:38 -04:00
queries.ts Render a Petri run's detail views from its projection and stream 2026-09-18 00:59:10 -04:00
query-keys.test.ts fix(timing): simplify live timing projections 2026-07-28 14:20:59 -04:00
query-keys.ts Remove the retry, rewind, fork and timeline endpoints and commands 2026-09-18 10:54:45 -04:00
run-actions.test.ts Remove the retry, rewind, fork and timeline endpoints and commands 2026-09-18 10:54:45 -04:00
run-actions.ts Remove the retry, rewind, fork and timeline endpoints and commands 2026-09-18 10:54:45 -04:00
run-events.test.tsx Test the web app's Petri views over the captured scenario fixtures 2026-09-18 01:03:19 -04:00
run-events.ts Render a Petri run's detail views from its projection and stream 2026-09-18 00:59:10 -04:00
run-phases.test.ts fix(web): close run phase on terminal events (#427) 2026-05-27 10:38:32 -04:00
run-phases.ts fix(web): close run phase on terminal events (#427) 2026-05-27 10:38:32 -04:00
run-sandbox-lifecycle.ts Model run sandbox lifecycle explicitly (#431) 2026-05-27 12:48:56 -04:00
run-settings-snapshot.ts refactor: remove compatibility shims (#281) 2026-05-16 15:29:25 -04:00
sandbox-state.ts Put the driver's sandbox status on the API instead of a projection 2026-09-11 13:07:00 -06:00
session-stream.test.ts fix: render Ask Fabro session responses 2026-05-22 12:32:59 -04:00
session-stream.ts Give Ask Fabro sessions their own event log 2026-09-18 12:47:43 -04:00
sse.ts Runs list view: table layout, server-side sort/pagination, redesigned toolbar (#367) 2026-05-23 14:25:58 -04:00
stage-sidebar.test.ts Read Usage in the web app and rename the Billing tab to Usage 2026-09-14 12:40:04 -06:00
stage-sidebar.ts Delete fabro's own pricing: lithos-llm prices every response once 2026-09-14 14:46:44 -06:00
test-fixtures.ts Read Usage in the web app and rename the Billing tab to Usage 2026-09-14 12:40:04 -06:00
test-utils.tsx Read Usage in the web app and rename the Billing tab to Usage 2026-09-14 12:40:04 -06:00
time.ts Introduce approved effect hooks and migrate direct useEffect calls (#425) 2026-05-27 10:37:29 -04:00
unknown.ts refactor(web): narrow event property reads via shared helpers 2026-04-30 22:45:38 -04:00
usage.ts Read Usage in the web app and rename the Billing tab to Usage 2026-09-14 12:40:04 -06:00