feat: add a live activity page to follow a run's agent #15

Merged
SebastienDenooz merged 1 commit from main into develop 2026-11-03 22:52:07 +00:00

Add /runs/{id}/live, reached from a "Watch live" button on every run page.
It shows a read-only feed of what the run's agent does — messages,
thinking, tool calls and results, files read or edited, commands, errors —
appended while the run is going on, then frozen with the final status.

  • run_activities table, RunActivity model, ActivityKind enum and the
    ActivityRecorder, which writes masked, capped entries as they come and
    never fails the run
  • ContainerRuntime::exec() takes an optional stdout callback, implemented
    by the container and host runtimes and by the fake
  • local adapters map the JSON events of Claude Code (now stream-json),
    Codex, OpenCode, Copilot and Grok Build to feed entries; raw_output,
    text, usage and outcome are unchanged
  • API mode records each tool call and result live, and each step's text
    through laravel/ai's StepCompleted event
  • the run page's refresh fragment moves to /runs/{id}/fragment;
    live.js gains an append mode for the feed
  • the retention purge clears feed contents; spec §16.5, §24.5, §27.2,
    §27.5 and §27.6 updated
  • unit, feature and Playwright browser tests

Refs: #11

Add /runs/{id}/live, reached from a "Watch live" button on every run page. It shows a read-only feed of what the run's agent does — messages, thinking, tool calls and results, files read or edited, commands, errors — appended while the run is going on, then frozen with the final status. - run_activities table, RunActivity model, ActivityKind enum and the ActivityRecorder, which writes masked, capped entries as they come and never fails the run - ContainerRuntime::exec() takes an optional stdout callback, implemented by the container and host runtimes and by the fake - local adapters map the JSON events of Claude Code (now stream-json), Codex, OpenCode, Copilot and Grok Build to feed entries; raw_output, text, usage and outcome are unchanged - API mode records each tool call and result live, and each step's text through laravel/ai's StepCompleted event - the run page's refresh fragment moves to /runs/{id}/fragment; live.js gains an append mode for the feed - the retention purge clears feed contents; spec §16.5, §24.5, §27.2, §27.5 and §27.6 updated - unit, feature and Playwright browser tests Refs: #11
feat: add a live activity page to follow a run's agent
All checks were successful
CI / checks (pull_request) Successful in 3m27s
CI / checks (push) Successful in 3m28s
a1c6284bc1
Add /runs/{id}/live, reached from a "Watch live" button on every run page.
It shows a read-only feed of what the run's agent does — messages,
thinking, tool calls and results, files read or edited, commands, errors —
appended while the run is going on, then frozen with the final status.

- run_activities table, RunActivity model, ActivityKind enum and the
  ActivityRecorder, which writes masked, capped entries as they come and
  never fails the run
- ContainerRuntime::exec() takes an optional stdout callback, implemented
  by the container and host runtimes and by the fake
- local adapters map the JSON events of Claude Code (now stream-json),
  Codex, OpenCode, Copilot and Grok Build to feed entries; raw_output,
  text, usage and outcome are unchanged
- API mode records each tool call and result live, and each step's text
  through laravel/ai's StepCompleted event
- the run page's refresh fragment moves to /runs/{id}/fragment;
  live.js gains an append mode for the feed
- the retention purge clears feed contents; spec §16.5, §24.5, §27.2,
  §27.5 and §27.6 updated
- unit, feature and Playwright browser tests

Refs: #11
Sign in to join this conversation.
No description provided.