Commit Graph

7439 Commits

Author SHA1 Message Date
Peter Steinberger 3d0df74b0f fix(openshell): sandbox cleanup, workspace sync, and gateway setup failures (#129641)
* fix(openshell): harden sandbox lifecycle and workspace sync

* fix(openshell): preserve shipped workspace root layouts

* test(gateway): reset shared agent harness state between cases

* test(qa): measure channel health startup grace directly

* chore(release): leave changelog updates to release automation
2026-08-25 18:08:55 -07:00
Vincent Koc 2d465c2d75 fix(sqlite): replace synthetic stable migration fixture (#129695) 2026-08-26 09:08:21 +08:00
Patrick Erichsen 004b06b6a0 Release validation: add isolated campaign skill runner (#129726) 2026-08-25 17:58:39 -07:00
Peter Steinberger 5ce9b61ceb fix(doctor): preserve managed container services (#129527)
* fix(doctor): preserve managed container services

* fix(doctor): scope linger checks to user services

* fix(doctor): limit container repair to user services

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-08-25 17:48:32 -07:00
Vincent Koc f457c2cea1 refactor(ios): share Agent Pro detail components (#119868)
* refactor(ios): share Agent Pro detail components

* test(ios): update Agent Pro i18n source contract
2026-08-26 08:41:06 +08:00
Peter Steinberger 6a246f70d1 refactor(state): retire six dead shared-state tables at schema v10 (#129626)
* refactor(state): retire six dead shared-state tables at schema v10

agent_model_catalogs, android_notification_recent_packages,
command_log_entries, diagnostic_stability_bundles, media_blobs, and
model_capability_cache landed with the database-first squash but their
runtime writers never reached main; every stable since v2026.6.10 created
them empty (agent_model_catalogs held only rebuildable catalog cache rows
until #111173 removed its writer). State schema 10 drops all six tables
and seven indexes through both the runtime-open and doctor migration
paths, records the retirements, bumps the native reader ceiling, and
corrects stale database-first doc claims that still named these tables
as canonical stores.

* test: move cross-lane schema-version pins to v10

The v10 retirement missed current-version pins outside src/state: the
native guard vitest wrapper, placement-move and node-worker-launch
same-version assertions, and the audit outbound-progress tripwire. The
pinned pre-C04 audit reader is a v9-era build that now refuses v10
databases by the version contract, so the test projects the file back to
the exact v9 shape with the documented 10-to-9 downgrade fixture before
the reader proof; the shared fixture also seeds the v10 retirement
regression.

* test: keep only the used downgrade fixture export
2026-08-25 17:31:32 -07:00
Vincent Koc e7d66d0544 fix(ci): run isolated gateway agent methods (#129686) 2026-08-26 08:11:54 +08:00
Peter Steinberger 85611e0612 test: keep plugin metadata readers process-stable (#129680)
Co-authored-by: Dallin Romney <dallinromney@gmail.com>
2026-08-25 17:08:36 -07:00
Peter Steinberger 85d5df1d87 fix(onboarding): OpenAI setup installs mismatched Codex plugin (#129195)
* fix(onboarding): align Codex plugin with core release

Amp-Thread-ID: https://ampcode.com/threads/T-01a037b4-f621-7144-bfdf-a68df795dd57

* test(onboarding): reject unpinned Codex candidates

Amp-Thread-ID: https://ampcode.com/threads/T-01a037b4-f621-7144-bfdf-a68df795dd57

* fix(onboarding): match stable correction release plugin cohorts

Co-authored-by: 許元豪 <146086744+edenfunf@users.noreply.github.com>

* test: isolate plugin metadata and register startup retry coverage

* test: adopt upstream startup retry ownership pattern

* test: keep plugin metadata readers process-stable

* test: isolate terminal session recovery cases

* test: drop speculative gateway isolation change

* test(gateway): mock terminal transcript lifecycle decision

* fix(plugins): align correction cohorts across stable tracks

---------

Co-authored-by: Amp <amp@ampcode.com>
Co-authored-by: 許元豪 <146086744+edenfunf@users.noreply.github.com>
Co-authored-by: Dallin Romney <dallinromney@gmail.com>
2026-08-25 17:03:39 -07:00
SunnyShu 827433c6fe fix(cli): keep models --plain stdout clean of startup diagnostics (#129037)
* fix(cli): keep models --plain stdout clean of startup diagnostics

Extend the models machine-output classifier to recognize --plain and the
parent --status-plain alias so early stream routing sends state database
migration diagnostics to stderr, matching --json behavior. Plain failures
stay human-readable; only --json activates the JSON failure envelope.

The early classifier alone is undone by Commander preaction: preaction
resolves JSON mode as false for --plain and calls
applyResolvedCommandOutputMode(false), which restores stdout routing
before state bootstrap emits the migration diagnostic. Add a separate
retainStderrRouting signal so plain machine-output commands keep stderr
routing through preaction without activating the JSON failure envelope.

Fixes #127494

* fix(cli): preserve plain machine-output ownership during startup

Co-authored-by: SunnyShu0925 <shu.zongyu@xydigit.com>

* test(cli): keep model-output regression within lint limits

Co-authored-by: SunnyShu0925 <shu.zongyu@xydigit.com>

* test(cli): cover models plain stdout routing

* test(cli): preserve canonical model output in plain stdout proof

Co-authored-by: SunnyShu0925 <shu.zongyu@xydigit.com>

* test(cli): align plain output proof with runtime

* test(cli): fix status migration expectation

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: Altay <altay@hey.com>
2026-08-25 17:01:56 -07:00
Peter Steinberger b5864ba1db fix(skills): fail closed for unavailable remote Gateway (#117567)
* fix(cli): respect explicit Gateway ownership

* fix(gateway): fence offline CLI fallbacks

* fix(gateway): restrict local recovery closes

* fix(cli): preserve offline Gateway ownership and log recovery
2026-08-25 16:58:39 -07:00
Tak Hoffman b1ea61e847 fix(gateway): restore view-only macOS desktop observation (#128306)
Worked on by:
- @shakkernerd

Co-authored-by: roboclaw-bot <309084314+roboclaw-bot@users.noreply.github.com>
Co-authored-by: shakkernerd <165377636+shakkernerd@users.noreply.github.com>
2026-08-25 16:49:37 -07:00
Peter Steinberger 6ad0f79ae4 fix(codex): suppress under-development features warning in chat (#129493)
Codex 0.149 emits a session-configure warning whenever UnderDevelopment-stage
features are enabled, and OpenClaw always enables features.code_mode and
features.apply_patch_streaming_events for native code mode threads. The
warning relays into chat as a SYSTEM card telling operators to edit the
managed codex-home config.toml they should never touch.

Send suppress_unstable_features_warning: true in the same thread-config
block that enables those features. When native code mode is off, OpenClaw
does not send the flag, so warnings for user-enabled under-development
features still surface. The general warning relay is untouched.

Verified live against the pinned @openai/codex 0.149.1 app-server binary:
thread/start without the flag emits the exact warning; with it, none.
2026-08-25 16:38:48 -07:00
Josh Lehman d68ddc6fe7 fix(gateway): settle live fixtures before Codex reconnects (#128965)
* test(release): use full canonical gateway fixtures

* test(gateway): settle restart before reconnect

* test(gateway): remove retired live agent default

* test(gateway): isolate deep agent method mocks

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-25 16:32:45 -07:00
Peter Steinberger 7782e4af5c perf(test): speed up authorized beta evidence validation (#129668) 2026-08-25 16:29:48 -07:00
Peter Steinberger 702e598e68 fix(test): stop CLI process tests racing their own startup cost (#129489)
* fix(test): guard CLI process children against deadlock, not startup

`gateway-backed-exit.process.test.ts` raced a fixed 20s `execFile` deadline
against child startup. Each of its ~37 children cold-loads the whole CLI
command graph through TSX (~2.5s warm, ~16s on a cold checkout, 12-20s on a
loaded host), while every case asserts output, exit code, and state side
effects rather than latency. Under contention the deadline fired first and the
harness rethrew `execFile`'s opaque `Command failed` error with the captured
stdout/stderr discarded, so the failure named neither the deadline nor the
child's last startup step.

`help-exit.process.test.ts` already owned the correct shape: a deadlock guard
sized below the shared Vitest deadline whose failures embed both output tails.
Extract it to `cli-process-child.test-helpers.ts` and converge both suites on
one runner and one `CLI_PROCESS_DEADLOCK_GUARD_MS`, so the policy cannot drift
apart again.

Also fixes the `cron list` promptness case, which timed spawn-to-exit against
10s and therefore measured TSX startup. Its invariant is that a one-shot
command releases its Gateway socket once output is complete, so the clock now
starts at the first parseable JSON payload. That child also gains the
`NODE_DISABLE_COMPILE_CACHE` guard its siblings carry: it owns the NODE_OPTIONS
respawn, and CI's exported `NODE_COMPILE_CACHE` would stack a second detached
respawn on top whose inherited stdio pipes can outlive a killed parent.

The five two-child `it.each` cases split into one child each so a single guard
budget covers the file, and the hand-tuned per-case Vitest deadlines are gone.

* fix(test): release child pipes when the deadlock guard fires

The guard's SIGKILL reaches the launcher only. A respawning entrypoint hands its
stdio to a detached grandchild in its own process group, so that grandchild
survives the kill and keeps the runner's pipe ends open after the guard has
already rejected — the "still running with no output" stall this suite exists to
remove, reintroduced by its own guard. The cron case deliberately enables that
respawn, so the path is reachable, not hypothetical.

Release our ends of the pipes alongside the kill. Waiting for a process tree we
cannot reach would defeat a deadlock guard, so the orphan is left to die on EPIPE
or be reaped with the runner.

The regression drives the same topology: a launcher that hands stdio to a
detached grandchild which writes only after the guard fires. Pre-fix the runner
still receives that write ("expected [ 'launcher', 'launcherafter-guard' ] to
have a length of 1 but got 2"); post-fix it never arrives.

Reported by ClawSweeper on #129489.
2026-08-25 16:16:12 -07:00
Josh Avant bb8c04d537 fix(whatsapp): keep QR login owner-scoped (#129381) 2026-08-25 16:12:35 -07:00
Peter Steinberger 6a1dedb00c refactor(agents): remove redundant heartbeat system prompts (#129642)
* refactor(agents): remove redundant heartbeat system prompts

* test(agents): align heartbeat cleanup checks and prompt snapshots
2026-08-25 16:10:22 -07:00
Peter Steinberger 18fba50e84 fix(linux): keep first-run onboarding alive when the gateway restarts (#129502)
* fix(linux): preserve onboarding through gateway restarts

* refactor(ui): keep model setup below file-size limit

* test: isolate plugin metadata and register startup retry coverage
2026-08-25 15:30:16 -07:00
Peter Steinberger 0b22075d56 test(agents): keep shared runner integrations in owner lifecycle (#129528) 2026-08-25 15:06:31 -07:00
Peter Steinberger 7dd6d9452e refactor(apple): canonicalize string catalog formatting (#129592) 2026-08-25 14:23:48 -07:00
Andy Ye 6831959294 fix(installer): honor explicit git checkout targets (#128407)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-25 14:22:45 -07:00
Peter Steinberger 161a52f29b fix(maintainers): avoid skipped CI runs blocking PR landing (#129428) 2026-08-25 14:21:44 -07:00
Peter Steinberger 31542bc375 fix(i18n): refresh native locales when locale inventory changes (#129438) 2026-08-25 14:12:03 -07:00
Peter Steinberger 9b7c95a0f0 fix(anthropic): keep automated heartbeats on subscription usage (#129513)
* fix(anthropic): keep automated heartbeats on subscription usage

* test(agents): align retired heartbeat template expectations

* fix(anthropic): avoid heavyweight policy bootstrap imports

* chore(config): prune retired template assertion baseline

* test(vitest): cover Codex startup test family

* refactor(anthropic): remove obsolete thinking-profile re-export
2026-08-25 14:11:38 -07:00
Peter Steinberger c1150936c4 fix(linux): Quick Chat ignores the configured Gateway accent (#129451)
* fix(linux): sync quick chat accent with gateway preferences

* test(linux): cover live quick chat accent updates

* test(ci): avoid cold runtime discovery in focused fixtures
2026-08-25 14:06:20 -07:00
Peter Steinberger 6eaf521cff improve(ui): faster session switching and smoother chat rendering (#129548)
* perf(ui): speed up session switching and transcript rendering

* test(skills): assert canonical learn authoring standards

* test(ci): include startup retry coverage in its owning shard

* test(agents): reuse scoped metadata in alias regression
2026-08-25 14:05:20 -07:00
Josh Avant f9dbda38dc fix(mcp): revoke resource access with app authority (#129550) 2026-08-25 14:04:14 -07:00
Peter Steinberger a6ebad9964 fix(worker): honor full access on paired node sessions (#129537)
* fix(worker): honor full access on paired node sessions

* test(worker): preserve narrowed operator in live proof

* test(vitest): assign Codex startup retry to its owner shard
2026-08-25 14:01:39 -07:00
Peter Steinberger 99fbe2207f fix(ui): usage filters hide sessions when multiple providers are selected (#129482)
* fix(ui): make usage multi-select and quoted filters work

* fix(anthropic): keep provider policy artifacts lightweight

* test(vitest): assign codex startup retry to its owner shard
2026-08-25 13:19:18 -07:00
Dallin Romney 0ea03f3a3b fix(ci): apply Kova runtime-major RSS calibration (#127763)
* fix(ci): pin Kova runtime-major RSS calibration

* fix(ci): separate Kova live trust pin

* test(ci): prove Kova live trust boundary
2026-08-25 10:57:57 -07:00
Peter Steinberger de9a65c30f refactor(scripts): remove obsolete z.ai fallback reproduction (#129208) 2026-08-25 05:46:28 -07:00
Peter Steinberger 4dc7bb7411 chore(deps): refresh dependencies after seven-day cooldown (#129187)
* chore(deps): refresh dependencies after cooldown

* fix(gateway): emit append-only Responses content events

* chore(deps): retain unverified Sherpa runtime
2026-08-25 05:00:46 -07:00
Peter Steinberger 1bfaa806db fix(cli): render marketplace JSON failures (#129263) 2026-08-25 04:28:52 -07:00
Peter Steinberger fff5eb05f6 fix(release): allow ANSI in focused evidence logs (#129238)
* fix(release): allow ANSI in focused evidence logs

* test(release): exercise focused log fallback
2026-08-25 04:25:39 -07:00
Peter Steinberger 1ba243c88e fix(qa): restore paired-node worker crash recovery proof (#129241) 2026-08-25 03:54:50 -07:00
Peter Steinberger 5af05ab1a2 improve: validate built CLI with Bun 1.4 (#129192)
* ci: validate built CLI with Bun 1.4

Amp-Thread-ID: https://ampcode.com/threads/T-01a037b7-66db-71f0-91e7-1578b383afb2

* test: align Bun Docker image assertion

Amp-Thread-ID: https://ampcode.com/threads/T-01a037b7-66db-71f0-91e7-1578b383afb2

* test: tolerate cold CLI startup in CI

Amp-Thread-ID: https://ampcode.com/threads/T-01a037b7-66db-71f0-91e7-1578b383afb2

---------

Co-authored-by: Amp <amp@ampcode.com>
2026-08-25 03:44:57 -07:00
Peter Steinberger 33d8f24c99 refactor(agents): move live model policy to test owner (#129184)
* refactor(agents): move live model policy to test owner

* test(agents): retain dynamic live model policy map types
2026-08-25 03:41:36 -07:00
Peter Steinberger e33606ef10 fix(release): verify focused candidate checkout (#129201)
* fix(release): verify focused candidate checkout

* fix(release): ignore unselected historical validation children
2026-08-25 03:17:24 -07:00
Peter Steinberger 79722d2353 fix(agents): prevent invalid session filters from listing every session (#129198)
* fix(agents): preserve explicit session kind filtering

* test(agents): refresh session kind prompt snapshots
2026-08-25 02:53:07 -07:00
Peter Steinberger 33e556fe8a fix(cli): hide banners for implicit JSON output (#129204) 2026-08-25 02:46:07 -07:00
Josh Lehman 10c6be319e test(qa): use configured agent for MCP parity (#128959) 2026-08-25 02:26:52 -07:00
Josh Lehman 06e0f385f7 test(onboard): handle telemetry consent prompt (#128943) 2026-08-25 02:06:02 -07:00
Peter Steinberger bea9084913 fix(pr): avoid OS argument limits during worktree recovery (#129169) 2026-08-25 02:02:14 -07:00
Peter Steinberger afa89f03ee fix(release): preserve focused evidence lineage (#129060)
* fix(release): preserve focused evidence lineage

* fix(release): bind focused evidence to authorized tooling

* fix(release): revalidate focused evidence after Docker approval
2026-08-25 01:58:18 -07:00
Peter Steinberger 72b06b0077 fix(release): keep polling before decision artifacts exist (#129166)
Handle GitHub's current missing-artifact message without abandoning active full validation, while preserving early blocker decisions. Covers #129104.
2026-08-25 01:55:19 -07:00
tzy-17 aa3e0ae429 fix(i18n): keep surrogate pairs intact when bounding process output tail (#120114)
* fix(i18n): keep surrogate pairs intact when bounding process output tail

appendBoundedProcessOutput used nextText.slice(-maxChars) to keep the
newest maxChars of captured process output. When the boundary landed
inside a UTF-16 surrogate pair (e.g. emoji in stderr), the retained
tail began with a dangling low surrogate, corrupting downstream JSON
serialization and fatal TextDecoder paths.

Switch to sliceUtf16Safe(nextText, -maxChars) from normalization-core,
which adjusts the boundary off the surrogate pair. The helper was
already imported elsewhere in the dependency graph.

* fix(i18n): count actually-dropped units when bounding surrogate-safe tail

Address ClawSweeper P2 finding on PR #120114: sliceUtf16Safe may
return fewer than maxChars code units when it advances past a low
surrogate at the boundary, so truncatedChars must derive from the
actual retained tail length rather than maxChars. For the emoji
case ("ab😀cdef", maxChars=5) the safe slice retains "cdef" (4
units), so 4 units are dropped, not 3.

Compute truncatedChars from nextText.length - text.length and
update the regression test expectation to 4.
2026-08-25 01:51:03 -07:00
Vincent Koc 063fcaf89e improve(ci): add trusted FRV proof broker (#128966)
* improve(ci): add trusted FRV proof broker

* fix(ci): tighten FRV proof broker boundaries

* test(ci): narrow FRV broker workflow lookup

* fix(ci): renew FRV broker mutation authority

* fix(ci): bind FRV proof to broker attempt
2026-08-25 16:36:50 +08:00
Peter Steinberger 1285a08716 fix(codex): preserve native subagent gateway delivery (#129109) 2026-08-25 01:19:02 -07:00
Peter Steinberger 8759a58781 refactor(i18n): share canonical native app locales (#129100) 2026-08-25 01:12:29 -07:00