mirror of
https://github.com/openclaw/openclaw.git
synced 2026-08-23 10:55:31 -06:00
1096b74ab7
* fix(browser): retire durable tab rows whose browser never returns Durable cleanup defers whenever ownership cannot be proven, so a browser that never comes back at the same cdpUrl leaves its rows behind forever: each sweep re-claims them, fails the identity lookup, warns, and defers again. Nothing in the subsystem removes a row by age. The `browser.session-tabs` namespace is opened with a 5000-row cap and `reject-new`, so once those rows accumulate to the cap, tracking a new tab throws PLUGIN_STATE_LIMIT_EXCEEDED. That propagates into the compensation path in browser-tool-session-tabs.ts, which closes the tab the user just opened and rethrows -- every `browser open` on that profile then opens a tab, closes it again, and errors, with no self-healing path. Bound the retry: when a close attempt reports the target unavailable and the tab has been unused for longer than the retire window, drop the row instead of deferring again. A browser returning after that long almost always carries a fresh instance fingerprint, which retires the row through the ownership-mismatch path anyway. closeTrackedBrowserTabsForSessions now accepts `now` like the sweep does, so lifecycle cleanup can be exercised on a coherent clock. * refactor(browser): split session tab cleanup claim and test harness check-lint failed on max-lines: session-tab-registry.ts was at 699 of its 700-line budget and the durable registry test at 982 of 1000, so the retire branch and its regression test pushed both over. Extract the cleanup claim bookkeeping (claim, ownership match, delete) into session-tab-cleanup-claim.ts, and the durable registry test shapes into session-tab-registry.sqlite.test-helpers.ts, matching the existing *.test-helpers.ts convention in this directory. No behavior change. * test(browser): protect unreachable retirement races Co-authored-by: Yigtwxx <yigiterdogan023@gmail.com> --------- Co-authored-by: Peter Steinberger <steipete@gmail.com>