Commit Graph

67819 Commits

Author SHA1 Message Date
Peter Steinberger
2b9991c748 refactor(agents): privatize native hook relay internals (#106634)
* refactor(agents): privatize native hook relay internals

* chore(ci): shrink dead-export baseline
2026-07-13 10:27:34 -07:00
Peter Steinberger
1644bef790 fix(cloud-workers): install production dependencies for bundle workers
Live AWS E2E hit ERR_MODULE_NOT_FOUND on the box: tsdown externalizes
package.json dependencies, so the shipped dist was never self-contained
and the bundle channel installed no deps (the npm channel gets them from
npm install). Bundle staging now prunes the manifest (workspace: specs
are compiled into dist; devDependencies/scripts/pnpm never ship) and
bootstrap runs a script-free production npm install after extraction.
Portable manifests keep byte-identical staging so receipts stay stable.
Launcher failure forensics keep the stderr head where Node names the
missing module.
2026-07-13 10:24:48 -07:00
Peter Steinberger
8d9950d8ae refactor(agents): split embedded runner orchestration (#106552)
* refactor(agents): split embedded runner orchestration

* test(agents): fix skill startup fixture type

* style(agents): format runner imports

* refactor(agents): remove stale attempt import

* refactor(agents): reuse attempt result slot type

* fix(test): avoid truncating extension test inventory
2026-07-13 10:22:38 -07:00
Peter Steinberger
f4dd409765 fix(gateway): hot-reload worktrees.cleanup config instead of restarting the gateway (#106525)
* fix(gateway): hot-reload worktrees.cleanup config instead of restarting the gateway

* fix(ci): drop unused settings-ui type exports and SECTION_META re-export
2026-07-13 10:22:06 -07:00
Peter Steinberger
edbcf11451 refactor(auto-reply): privatize reply helpers (#106600) 2026-07-13 10:12:17 -07:00
Peter Steinberger
b69e0477fe improve(cloud-workers): surface the worker process stderr tail on turn failure
Failed worker turns destroy the box, so the swallowed stderr was the only
forensics; include a bounded redacted tail in the launch error.
2026-07-13 10:10:56 -07:00
Peter Steinberger
1c5e35f590 refactor(gateway): split agent runtime helpers (#106544)
* refactor(gateway): split agent runtime helpers

* fix(gateway): keep task status type internal
2026-07-13 10:07:10 -07:00
Vincent Koc
70feb13ce7 refactor(onboard): remove obsolete node manager options (#106593) 2026-07-14 00:59:49 +08:00
Peter Steinberger
16ef091cbf refactor(pty): use published node-pty contracts (#106592) 2026-07-13 09:59:06 -07:00
Peter Steinberger
e8290c699e refactor(codex): split app-server attempt helpers (#106550)
* refactor(codex): split app-server attempt helpers

* fix(codex): mark harness imports type-only
2026-07-13 09:58:01 -07:00
Peter Steinberger
fc4b6a4254 feat(codex): show the account email with app-server usage windows (#106500)
* feat(codex): read the account email with app-server usage

The Codex-harness usage snapshot now carries the account identity: the
usage fetch runs account/rateLimits/read and account/read over one
app-server session (new withCodexAppServerJsonClient seam, which the
single-request helper now delegates to), so the email is guaranteed to
belong to the same account as the windows. Identity stays best-effort;
rate limits survive an account read failure.

* style(test): scanner-safe app-server marker fixture

* test(codex): keep scanner-neutral hunks around app-server marker literals

* fix(codex): bound the best-effort account read within the usage deadline

Review P2: account/read shared the outer usage deadline, so a slow or hung
identity read could reject the whole snapshot with a timeout instead of
returning the already-fetched rate-limit windows. Race the account read
against a local timer bounded to min(4s, usageTimeoutMs/3) and drop the
identity on timeout; a regression test hangs account/read and asserts the
windows still return.

* fix(codex): send account/read params and bound identity by the remaining deadline

Second review round: account/read (GetAccount) requires a params object per
the app-server protocol, so send an empty {} (refreshToken defaults false);
without it a real app-server rejects the request. Bound the best-effort
identity read by the time left before the shared usage deadline (minus a
margin) instead of the original budget, so a slow rate-limit read can no
longer let the identity read trip the outer timeout and discard the
already-fetched windows.

* fix(codex): reserve the isolated shutdown budget in the usage deadline

Third review round: withCodexAppServerJsonClient awaits the isolated
client's closeAndWait inside the outer timeout, so a hung account/read
could reach the deadline during force-kill/exit cleanup and discard the
already-fetched windows. The usage read now passes a cheap isolatedShutdown
(force-kill 200ms + exit 300ms) and the identity bound reserves that plus a
250ms margin (750ms) of the remaining deadline, so cleanup always finishes
before the outer timeout.

* style(codex): rename scoped-request generic to avoid shadowing
2026-07-13 09:56:47 -07:00
Peter Steinberger
8814e75cd6 perf(ci): start long node shards first (#106522) 2026-07-13 09:56:30 -07:00
Peter Steinberger
2ec0299f9f fix(crabbox): keep setup runs from syncing the gateway checkout
crabbox run rsyncs the invoking repo by default, which blew the setup
budget when the gateway provisioned from a source checkout. Workspace
transfer is owned by the worker tunnel, so setup passes --no-sync.
2026-07-13 09:54:49 -07:00
Peter Steinberger
b958fb6882 refactor(gateway): extract chat send setup phases (#106590) 2026-07-13 09:53:11 -07:00
cxbAsDev
7abc6665dc fix(discord): retry reply session init conflicts to prevent silent message loss (#103562)
* fix(discord): retry session conflicts without duplicate inbound work

Co-authored-by: 陈宪彪0668000387 <chen.xianbiao@xydigit.com>

* refactor(discord): split session retry policy

* refactor(discord): keep retry error private

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-13 09:50:26 -07:00
Peter Steinberger
0665c16dd6 refactor(diagnostics): split OTEL content helpers (#106554) 2026-07-13 09:48:23 -07:00
Peter Steinberger
5d12f6bfb5 refactor(policy): remove remaining unused exports (#106591)
* refactor(policy): remove unused exports

* chore(deadcode): regenerate policy export baseline
2026-07-13 09:47:31 -07:00
Vincent Koc
1708faf85b refactor(cli): remove obsolete gateway call options export (#106549) 2026-07-14 00:38:14 +08:00
Peter Steinberger
dd4f36690a refactor: replace remaining worker pools with p-map (#106489)
* refactor: replace remaining worker pools with p-map

* test(tui): retry session rollover until accepted
2026-07-13 09:37:55 -07:00
Peter Steinberger
b036657d90 refactor(media): use native file-type lazy import (#106548) 2026-07-13 09:37:05 -07:00
Peter Steinberger
d8fb5b404e refactor(policy): split doctor evaluator modules (#106313)
* refactor(policy): split doctor evaluator modules

* refactor(policy): split runtime shape owners

* refactor(policy): split doctor policy domains
2026-07-13 09:35:11 -07:00
Peter Steinberger
c87941e523 refactor(active-memory): split recall helpers (#106539) 2026-07-13 09:33:39 -07:00
Peter Steinberger
3ffd0ac8d8 fix: show catalog pagination failures (#106518)
* fix(ui): surface catalog pagination failures

* test(ui): scope catalog retry assertion
2026-07-13 09:32:52 -07:00
Peter Steinberger
11cd600c2d refactor(qa): split WhatsApp live runtime (#106547) 2026-07-13 09:31:51 -07:00
Peter Steinberger
5a37cdbae1 feat(crabbox): run an optional profile setup command on provisioned leases
Live AWS E2E hit the designed fail-stop: worker bootstrap requires Node on
the leased host, and bare AWS leases ship without it. Implement the plan's
provider setup phase as an opt-in `setup` profile key: after the lease is
SSH-ready the provider runs the command via `crabbox run --keep=true`,
gets its own timeout budget on top of provision, and stops the lease
before surfacing a failure so no unbootstrapped box leaks. Setup runs on
every provision attempt (including replay adoption), so commands must be
idempotent.
2026-07-13 09:31:37 -07:00
mushuiyu886
b7d034d75b fix(cli): reject noncanonical trajectory export requests (#105557)
* fix(cli): reject noncanonical trajectory export requests

* fix(cli): preserve encoded request bytes

* style(cli): format trajectory alias tests

* chore: keep trajectory note in PR context

---------

Co-authored-by: Peter Steinberger <peter@steipete.me>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-13 09:29:41 -07:00
Peter Steinberger
4a84117188 refactor(telegram): split bot handler runtime (#106324)
* refactor(telegram): split bot handler runtime

* fix(telegram): keep extracted helper types local

* refactor(telegram): bound bot handler modules

* fix(telegram): name callback action results

* fix(telegram): keep inbound input types local
2026-07-13 09:28:55 -07:00
Peter Steinberger
ce1c91d1ab fix(macos): defer cookie import banner until inline browser opens (#106255)
* fix(macos): defer browser import offer

* chore(macos): sync native i18n inventory

* chore: keep release note context in PR

* fix(macos): preserve first eligible browser offer

* fix(macos): retry armed browser offer on update

* fix(macos): retry browser offer after unavailable status

* fix(macos): retain browser offer reconnect retry

* fix(macos): retry stale browser import offer

* fix(macos): retry browser offer after onboarding

* chore(macos): sync native i18n inventory

* fix(macos): cancel stale browser offer
2026-07-13 09:28:16 -07:00
Peter Steinberger
a13796bcfd fix(docs-i18n): recognize isolated indented fences 2026-07-13 12:26:18 -04:00
Peter Steinberger
8867a9da0b refactor(extensions): remove unused Discord and QA Lab exports (#106286)
* refactor(extensions): remove unused major-plugin exports

* refactor(qa-lab): preserve existing test seams

* chore(deadcode): regenerate export baseline

* refactor(qa-lab): share evidence environment resolver
2026-07-13 09:25:45 -07:00
Peter Steinberger
80bcfa1796 feat(linux): deb/AppImage packaging, claw-mark brand icons, gateway auth guidance (#106533)
* feat(linux): package deb/AppImage bundles, claw-mark icons, foreign-gateway guidance

* fix(linux): pin pnpm dlx release-age for tauri-cli in packaging paths

* fix(linux): pin exact tauri-cli version under the release-age gate

* fix(linux): conditional wording for gateway auth-rejection guidance

* docs(linux): executable square-pad step in tray icon recipe
2026-07-13 09:22:12 -07:00
Peter Steinberger
e0facfcf9a refactor(qa-lab): split web UI renderer (#106537)
* refactor(qa-lab): split web UI renderer

* refactor(qa-lab): split web UI renderer
2026-07-13 09:21:29 -07:00
lwy-2
7becac8a70 fix(ui): clear pending Talk mark timers on stop (#105805)
* fix(ui): clear pending Talk mark timers

Co-authored-by: WenyuanLee <li.wenyuan2@xydigit.com>

* refactor(ui): keep Talk relay within LOC budget

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-13 09:21:08 -07:00
Peter Steinberger
bf7131a2c2 improve(ui): redesign managed worktrees list as status-chip rows (#106514)
Replaces the Settings -> Worktrees column grid (which collapsed to unlabeled
stacked cells at common window widths) with list-item rows: name + status
chip, repo/branch/owner meta line, right-aligned last-active + actions.
Rows sort by most recent activity. Deletes the now-unused generic .table
CSS family and stale column-header i18n keys.
2026-07-13 09:20:40 -07:00
Peter Steinberger
4f86a29c98 fix(gateway): route sessions.dispatch through the lazy sessions handler table
Live cloud-worker E2E surfaced that sessions.dispatch was advertised but
dispatched as 'unknown method': the handler existed in sessions.ts but was
never added to the lazy method-to-loader table — the same class of break
terminal.attach/list/text shipped with. Add the route and broaden the
existing terminal.*-only completeness test to every core descriptor
(aux-injected and control-ui methods excluded explicitly).
2026-07-13 09:19:10 -07:00
Peter Steinberger
497daa4b8b refactor(agents): decompose embedded attempt phases (#106530)
* refactor(agents): decompose embedded attempt phases

* test(agents): use explicit absent hook runner

* fix(agents): keep phase helpers private
2026-07-13 09:18:24 -07:00
Peter Steinberger
6ec75967b0 refactor(ui): reuse shared record normalization (#106472) 2026-07-13 09:16:25 -07:00
Peter Steinberger
7a0efada74 improve: speed up lifecycle tests (#106501)
* test: remove fixed waits from lifecycle tests

* test: harden cron process liveness probe
2026-07-13 09:14:04 -07:00
Vincent Koc
9619585e85 refactor(cli): collapse npm pinning helpers (#106499) 2026-07-14 00:12:02 +08:00
Peter Steinberger
ec2f0c6861 fix(gateway): restore session attach grant revocation (#106487) 2026-07-13 09:08:51 -07:00
Peter Steinberger
8898118422 Merge pull request #106535 from openclaw/codex/privatize-ui-settings-exports 2026-07-13 17:03:33 +01:00
Peter Steinberger
21a59dfcf7 refactor(ui): privatize settings internals 2026-07-13 17:00:06 +01:00
Souvik Ghosh
da629045d9 feat(workboard): expose dispatch --max-starts to raise the per-pass start cap (#100174)
* feat(workboard): expose configurable dispatch cap

Co-authored-by: Souvik Ghosh <gshsouvik01@gmail.com>

* refactor(workboard): split gateway dispatch helpers

* docs(changelog): note Workboard dispatch cap

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: Souvik Ghosh <gshsouvik01@gmail.com>
2026-07-13 08:58:08 -07:00
Peter Steinberger
aa5cb8c423 refactor(ui): remove dead Skill Workshop handoff styles (#106486) 2026-07-13 08:56:53 -07:00
Peter Steinberger
0fe2132d5f feat(mac): gate Peekaboo Bridge on Computer Control (#106531)
Both settings grant local UI automation, so run PeekabooBridge only while
Allow Computer Control is on. The toggle now reflects the effective state and
is disabled when Computer Control is off; users drive Peekaboo via its own Mac
app in that case. Removes the confusing standalone bridge switch.
2026-07-13 08:56:27 -07:00
Peter Steinberger
2d5803a250 fix(reef): use bundled-channel-entry contract so channelConfigs surfaces load 2026-07-13 08:52:14 -07:00
Peter Steinberger
abf4e86ea6 fix(ui): align settings page headline with the content column (#106521)
The settings shell capped page headers at 1120px while narrow settings
pages use a 760px column, leaving the title floating left of the
content. The header now adopts the column width of the page below it
(760px default, 1120px for wide pages); fill-height surfaces without a
settings-page column are unchanged.
2026-07-13 08:51:42 -07:00
Peter Steinberger
f0fe068da7 refactor(agents): trim MCP runtime exports (#106520)
Related: #105595
2026-07-13 08:49:16 -07:00
Peter Steinberger
260a5c6e2b docs(triage): verify maintainer access before surfacing PRs (#106507)
* docs(triage): verify maintainer access

* docs(triage): suppress mmaps PRs
2026-07-13 08:43:45 -07:00
mushuiyu886
417543b481 fix(agents): reject invalid bundled LSP framing (#105460)
* fix(agents): reject invalid bundled LSP framing

* fix(agents): reject malformed LSP header lines

Signed-off-by: sallyom <somalley@redhat.com>

---------

Signed-off-by: sallyom <somalley@redhat.com>
Co-authored-by: sallyom <somalley@redhat.com>
2026-07-13 11:43:06 -04:00