-
Notifications
You must be signed in to change notification settings - Fork 3
plat 414
github-actions[bot] edited this page Oct 3, 2026
·
1 revision
| Coordination | Value |
|---|---|
| State | fixed on main; proved on a candidate build running beside Excellence's live service; not deployed |
| Date | 2026-10-04 |
| Owner | browser |
| Related | PLAT-401 (launcher), PLAT-374 |
-
Stop browser. The browser panel (
WorkflowLiveBrowser) has no stop button: its controls are Start browser, Take control / Give back, Start/Stop recording and Reconnect. The only stop affordance is the runtime-health control, which calls the workspaceGET /api/browser/processesandPOST /api/browser/cleanup. Both found browsers withps aux | grep chromiumandpkill -f chromium, so the managed Chrome (/opt/google/chrome/chrome) was never listed or stopped, while the list also showed other accounts' processes. The owner's error text "could not stop session ... start again" is not in the code; the chat Stop button (SessionStopButton, "Could not stop the session. Please try again.") stops a chat session, not a browser. Reproduced on Excellence with the matrix: the session's Chrome was not in the list and cleanup killed 0 of 1. -
Stuck tab. After
chrome://crash,opentimed out ("Operation timed out") untilcloseplusopen. The tool already recovered "CDP response channel closed" but not timeouts or crashed tabs in headless mode. -
Tall screenshot.
screenshot --fullof a 600000 px page killed Chrome ("CDP response channel closed"). -
Side findings. A "Failed to save screenshot ... No such file or directory" error was treated as a dead session and the healthy
browser was killed and relaunched. An empty
<tmp>/.agent-browser/o/p<owner>folder and<session>.config/.targetfiles were left per closed session.
-
workspace/handlers/browser_processes.go: list and cleanup match Chromium, Chrome and the headless shell, only for the service account;allkills the listed pids instead ofpkill -f chromium. -
agent_go/pkg/browser/executor.go: headless timeout/crashed-tab recovery (close once, retry once,BROWSER_STUCKotherwise; no retry for side-effecting commands),SCREENSHOT_TOO_TALLabove 16000 px, "Failed to save" is not a dead session,.config/.targetremoved with the session files. -
workspace/browserconfig.RemoveEmptySessionSocketDirs, called after a managed session is closed (executor and workspaceclose). - Tests:
executor_stuck_test.go,browser_close_test.go,browser_processes_chrome_test.go; live checkexecutor_live_recovery_test.go(skipped withoutAW_LIVE_BROWSER_WORKSPACE_URL). - Proof on Excellence (candidate workspace build on port 24901 beside the live service, deleted afterwards): the matrix passes 55/55
including three new stop rows (process list shows the session's Chrome, cleanup kills it and the session relaunches, close leaves
no socket folder); the live executor test opens a page, opens
chrome://crash, and the nextopenlogs "Stuck session ... closing it and retrying once" and succeeds; a 600000 px full-page screenshot returnsSCREENSHOT_TOO_TALLand the browser stays usable.
- Deploy workspace and agent to Excellence, then run
verify-browser-matrix.pyagainst the live service. -
screenshotwithout a path writes under$HOME/.agent-browser/tmp/screenshots, which the sandbox does not grant; callers must pass a path (the tool brokers it through managed staging). A barescreenshotreturns the save error. - The matrix talks to
/api/executedirectly, so its crashed-tab row still needscloseplusopen; the recovery lives in the agent_browser tool and is covered by the unit and live executor tests. -
/tmp/.agent-browseris shared by every account on a host and holds old.config/.targetfiles of closed sessions; only sessions closed after this fix are cleaned.
Auto-synced from docs/ on main. Edit there, not here.