Commit Graph
62 Commits
Author SHA1 Message Date
ciregenzandClaude Opus 5 a982e3361f [eric] browser: an approval nobody can answer declines now instead of parking a turn for 5 minutes
The wait was a bare `timeout=300.0` at the call site: invisible, unchangeable, and
longer than WALL_BUDGET_S (180s) itself, so a single prompt could outlive the whole
run's budget.

Measured 2026-08-08. deepl bot-detected the browser profile, the agent correctly
refused to solve the challenge ("handing to the user, not solving it") and asked for
help via RequestHumanIntervention. Headless, nobody answered, so it burned the full
306s and then denied -- the identical verdict it can reach instantly. That single
wait consumed the entire 420s task budget and was the whole of what looked like a
"249s spawn stall" while profiling. Cron runs, scheduled agents, CI and benchmarks
all sit in exactly this position.

Two changes, neither of which weakens the gate:
- ws_manager.has_listener(session_id) reports whether ANY socket would receive the
  session's events, reading the same two lists send_to_session broadcasts to so it
  cannot drift from where messages actually go.
- p_request_browser_approval checks it BEFORE building a request, and declines with
  an honest reason when no UI is attached. The decision is unchanged (deny); only
  the five minutes of waiting for it are gone.

The timeout is now P_APPROVAL_TIMEOUT_S, overridable via OSW_APPROVAL_TIMEOUT_S for
automation contexts that want a different budget.

A human at the keyboard sees no change: with a socket attached the request is sent
and awaited exactly as before.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-08 09:28:53 -07:00
ciregenz 013bf663ef [eric] browser: a post that never confirmed is not a skill worth learning 2026-07-31 01:27:55 -07:00
ciregenz e989517c6c [eric] lint: de-private the wall budget, trim error_classify under cap, drop stray ws_manager 2026-07-30 20:58:16 -07:00
ciregenz f6ad6cfb91 [eric] browser: a run out of wall time delivers what it has instead of nothing 2026-07-30 20:50:37 -07:00
ciregenz 3d5c287139 [eric] merge: bring eric/browser onto eric/dev (30 conflicts resolved, gates green) 2026-07-30 13:18:11 -07:00
ciregenz f0229bef50 [eric] tests: land the 3 stranded browser capacity-retry tests from the windows-churn batch (64 green) 2026-07-29 16:38:32 -07:00
ciregenz bb31d359ee [eric] analytics: retire the old session-snapshot cloud path (sync_session_close); full transcript + classification now come from Haik's per-message product-analytics bridge, and it was 413ing the 100KB /sync edge 2026-06-25 03:40:35 -07:00
ciregenz 36626be089 [eric] backend: one-line comments + collapse blank runs across backend root + tests (AST-verified, 1 test skipped: embedded #-lines) 2026-06-25 03:04:16 -07:00
ciregenz 6721c39719 [eric] backend: leading-_ -> p_/public for remaining module-level fns/classes/consts + test helpers across apps + tests (p-private 0, 1441 green) 2026-06-23 21:30:47 -07:00
ciregenz 621a2c661f [eric] tests: leading-_ -> p_ for function-local vars/args/nested-fns + import aliases across 56 test files (scope-aware AST rename) 2026-06-23 21:22:57 -07:00
ciregenz a407e6578f [eric] dashboards+modes: leading-_ -> p_/public; promote cross-file public (load/save/load_all/migrate_if_needed/strip_orphan_session_cards), fix qualified test refs 2026-06-23 20:47:13 -07:00
ciregenz 1767389cbb [eric] browser: leading-_ -> p_/P_/public for module functions+constants+state across browser subsystem; promote cross-file symbols public (detect_loop, BROWSER_HISTORY, TRUSTED, etc.), align analyze-browser-metrics.py + tests 2026-06-23 19:37:40 -07:00
ciregenz 394dcd7492 [eric] agents: leading-_ -> p_/public in providers+core+tools (registry/pricing/seq_log/mcp_preflight/openai_passthrough/web/ssrf_guard); promote cross-module fns public, fix monkeypatch string refs 2026-06-23 18:39:11 -07:00
ciregenz 751bb77032 [eric] agents: publicize cross-mixin members (p_run_agent_loop, p_build_mcp_servers, etc.) + safe_resp_text so the decomposition passes p-private 2026-06-23 16:44:41 -07:00
ciregenz 0f94f3feaf [eric] agents: fix 6 callers of renamed p_ methods (browser_agent/agents/main) that the suite masked 2026-06-23 11:30:07 -07:00
ciregenz bfcad98b76 [eric] browser: BrowserSaveData writes a big page dataset to one sandboxed file, ending the dispatch-per-chunk waste 2026-06-09 02:05:26 -07:00
ciregenz 9eb0e2cb2b [eric] browser: new gathered data resets the spin backstop, so a page-by-page gather runs to completion instead of getting cut with partial results 2026-06-08 23:47:26 -07:00
ciregenz ba41409577 [eric] browser: spin backstop nudges a clean Done wrap-up, not a mid-thought cutoff 2026-06-08 23:26:15 -07:00
ciregenz 438d1e36d4 [eric] browser: arm the send-completion shortcut only for send tasks, not gathers (cookie click faked a send) 2026-06-08 23:02:55 -07:00
ciregenz 07f911d200 [eric] browser: a clean success needs an explicit Done; recognize gather asks, steer them to BrowserExtract 2026-06-08 22:37:33 -07:00
ciregenz 91073becec [eric] browser: finish via a Done(message) tool so the user gets a plain conversational reply, not the OUTCOME tag 2026-06-08 22:15:52 -07:00
ciregenz 8d9c75803c [eric] browser: restore the Send-button handoff (points the model at the Send index after a fill); deleting it brought the Send-hunt back, it was NOT redundant with the wait 2026-06-08 00:58:38 -07:00
ciregenz f8c812353e [eric] browser: agent writes a plain human final message (no UI jargon/OUTCOME mechanics); delete the leaky send-ready advisory, dead prefix flag, and humanize aux experiment 2026-06-08 00:09:50 -07:00
ciregenz d5fc146123 [eric] browser: never leave a tool_use unanswered (backfill mid-turn + validate both directions) so a 30s upstream reset stops 400-killing the run 2026-06-07 23:04:59 -07:00
ciregenz 7ec05613fe [eric] browser: hand the Send button to the model after a composer fill, and commit to an already-open thread instead of re-verifying 2026-06-07 19:28:51 -07:00
ciregenz 1204e733b5 [eric] browser: stall backstop only fires after a real action, never cuts short early orientation 2026-06-07 19:12:43 -07:00
ciregenz 889c7707e4 [eric] browser: a confirmed send ends the run, no more stalling to re-verify what the confirm proved 2026-06-07 18:52:20 -07:00
ciregenz a54b4c0452 [eric] browser: run the action and remind on a missing ReportProgress instead of rejecting the turn 2026-06-07 18:19:39 -07:00
ciregenz 59658ddb46 [eric] browser: strip orphan surrogates from webview text so emoji pages don't crash a turn 2026-06-06 22:06:07 -07:00
ciregenz 4664065767 [eric] browser: converge speed-lever A/B, ship the winners, cut the dead-end flags 2026-06-06 18:29:03 -07:00
ciregenz 6380480502 [eric] browser: on a recoverable error (stale index/occlusion) attach fresh page state so the model recovers in one turn, never retries the action 2026-06-06 18:03:52 -07:00
ciregenz 5741e8f946 [eric] browser: endgame helper locates Send after a composer fill (never clicks it), behind OSW_BROWSER_COMPOSE_HELPER 2026-06-06 12:41:08 -07:00
ciregenz 9972171c05 [eric] browser: cheap-model laps behind OSW_BROWSER_CHEAP_LAPS, escalate to primary at the irreversible endgame 2026-06-06 12:32:04 -07:00
ciregenz 581af5b128 [eric] browser: auto-dismiss junk interstitials (cookie/upsell/coachmark) by generic close-vocabulary, conservative 2026-06-06 12:05:37 -07:00
ciregenz e37ba6c66b [eric] browser: skill recording judges the task ask, OUTCOME boilerplate no longer blocks learning 2026-06-05 13:09:02 -07:00
ciregenz 99bd15fdb1 [eric] browser: attached page state shrinks to changed rows, unchanged indices stay valid 2026-06-05 11:14:13 -07:00
ciregenz 20e1558d70 [eric] browser: auto-settle mutating actions and attach fresh page state to results, act and see in one turn 2026-06-05 09:35:51 -07:00
ciregenz 65427f33a0 [eric] browser: reuse the parent's same-host card on re-dispatch, stacked webviews wedge each other 2026-06-05 01:38:58 -07:00
ciregenz 262d48ff6c [eric] browser: refuse zero-LLM replay of send/submit skills, the live agent confirms those instead 2026-06-05 00:54:31 -07:00
ciregenz 9b6e45f365 [eric] browser: act-and-confirm, declare the expected change and verify it instead of assuming 2026-06-04 15:14:58 -07:00
ciregenz bb422c0fe8 [eric] browser: treat a hung tab (repeated timeouts) as card-unavailable so it aborts fast, not a 20-min spin 2026-06-03 15:18:18 -07:00
ciregenz 9080f256c9 [eric] browser: log front-loaded perception reads so a read answered from them isn't flagged a ghost 2026-06-03 13:45:34 -07:00
ciregenz 61826d441a [eric] browser: BrowserRepeatFlow hands back capped per-item read data so batch-read actually delivers 2026-06-03 13:05:49 -07:00
ciregenz 50230c88c5 [eric] browser: also sample route count on evaluate (the agent's real read path), not just get_text 2026-06-03 02:11:11 -07:00
ciregenz 7175f4b27b [eric] browser: sample captured-route count on read, not navigate, so the network nudge actually fires 2026-06-03 02:05:11 -07:00
ciregenz 21b225ded4 [eric] browser: nudge the agent toward the fast captured-API tier once per host 2026-06-03 00:50:23 -07:00
ciregenz 186c6cf72e [eric] browser: smart-wait returns when the page's network settles instead of a blind fixed sleep 2026-06-03 00:46:30 -07:00
ciregenz 7572462116 [eric] browser: intra-run batch replay (BrowserRepeatFlow) with verify gate, send-gate, network-route steps 2026-06-03 00:35:48 -07:00
ciregenz 3a601ba3ad [eric] browser: calm zero-click signals so the user feels the agent recall + learn site memory 2026-06-02 23:46:49 -07:00
ciregenz fe082c492c [eric] browser: durable reflective per-site playbook (tier-2 memory, mem0-style distill+reconcile) 2026-06-02 23:11:47 -07:00