Commit Graph

81379 Commits

Author SHA1 Message Date
Dallin Romney d51c83faf1 style(codex): order supervision imports 2026-08-21 18:56:22 -07:00
Dallin Romney d78ae8b700 fix(codex): trust native start effort response 2026-08-21 18:51:34 -07:00
Dallin Romney 3925bd89fa refactor(codex): keep native effort config at owner 2026-08-21 18:13:35 -07:00
Dallin Romney 915de54cb2 Merge remote-tracking branch 'origin/main' into codex/pr125707-canonical-aug21
# Conflicts:
#	src/gateway/gateway-codex-harness.live.test.ts
2026-08-21 16:33:26 -07:00
xingzhou ee79b0a49a fix(channels): retry timed-out ingress messages (#127090)
Co-authored-by: PollyBot13 <pollybot13@gmail.com>
2026-08-21 11:25:27 -07:00
Vincent Koc 52371a9972 fix(ci): align lifecycle retry fixtures with terminal replies (#127295) 2026-08-21 11:24:36 -07:00
Vincent Koc 1da74794b6 fix(release): establish immutable release plan contract (#127008)
* fix(release): define immutable release plan contract

* fix(release): harden immutable plan authority

* fix(release): tighten release plan authority

* fix(release): share plugin publication authority

* fix(release): verify plan authority remotely

* fix(release): track ClawHub publication authorities

* fix(release): trust remote tooling tag identity

* fix(release): close plugin publication authority

* fix(release): align npm authority selection

* fix(release): bind plans to validation intent

* fix(release): require qualification cadence

* fix(release): reject lossy canonical values

* fix(release): narrow qualification cadence

* fix(release): bind plan parser dependency

* fix(release): add tagless diagnostic plans

* fix(release): attest release plan parser tree

* fix(release): isolate verified plan parser snapshot

* fix(release): verify plan tooling before execution
2026-08-21 11:24:22 -07:00
Peter Steinberger f33952eca4 fix(qa): resolve time runtime in lab build (#127310)
Amp-Thread-ID: https://ampcode.com/threads/T-01a021f4-b547-7788-a916-d4a94cbd3e3b

Co-authored-by: Amp <amp@ampcode.com>
2026-08-21 11:20:47 -07:00
Peter Steinberger 887b9dd5e8 fix(macos): keep Cron run history matched to the selected job (#127266)
* fix(macos): own Cron history refreshes

* fix(macos): preserve Gateway recovery across cancellation
2026-08-21 11:13:54 -07:00
Peter Steinberger 2bd6efb919 fix(ui): restore editable map-valued settings (#127336) 2026-08-21 11:13:21 -07:00
Peter Steinberger c6d6706d8e perf(agents): reuse gateway plugin generation for prepared model runtime (#126630)
* perf(agents): reuse gateway plugin generation for prepared model runtime

The model-runtime sidecar rebuilt two broad plugin registries on gateway
startup: 167 imports across 84 plugins (83 loaded twice) with 82 forced
TypeScript transformations, ~39.6s of a ~50s source-checkout startup.

- Reuse the active gateway registry for inbound dispatch when the
  gateway-bindable subagent mode, workspace, and manifest identity of the
  requesting snapshot generation all match; fall back to isolated loading
  otherwise.
- Seed the runtime registry from the inbound registry's plugin ids instead
  of a second unscoped broad load.
- Prefer built plugin artifacts on the agents lane, matching the gateway
  loader; externally-packaged plugins no longer force source transforms.

Measured (M3 Ultra, dist build, median of 3): sidecars.model-runtime
33.93s -> 0.379s; gateway readiness 41.69s -> 7.58s; plugin imports
167 -> 18; TypeScript transformations 82 -> 0.

* fix(agents): keep source artifacts on isolated agent registry loads

The full agents lane caught ~20 Code Mode regressions from preferring
built artifacts on the agents loader lane: in a source checkout a stale
dist silently replaces edited plugin source. The gateway-generation
reuse already removes the broad re-imports that made source transforms
expensive, so the artifact preference is unnecessary for the startup
win and unsafe for dev checkouts.

* fix(agents): bind gateway registry reuse to the current metadata generation

Reuse authority is identity-based: the requesting snapshot must be the
process-current published generation. Bundled manifest records compare by
id+origin only, so an equivalence check alone could let an older or leaked
active registry serve a different generation's plugins.

* perf(agents): resolve prepared-runtime metadata through the current generation

The sidecar acquired its snapshot with loadPluginMetadataSnapshot, which
always constructs a fresh object, so the generation-identity reuse guard
could never hold in the gateway and inbound loads stayed isolated. Resolve
through the slot-probing entry instead; the published current generation
satisfies the read and registry reuse engages.

Test updates: model the current-generation identity in the reuse fixture,
drop stale preferBuiltPluginArtifacts expectations from the isolated-load
fixtures, and add a negative case proving a non-current generation refuses
reuse.

* perf(agents): inherit gateway artifact preference when extending its generation

The runtime-registry delta load re-imported teams-meetings and zoom-meetings
channel graphs through forced source transforms (~9.2s) even though the
reused gateway generation had already realized them from built artifacts.
When the inbound registry is the active gateway registry, the delta load now
inherits the generation owner's built-artifact preference; isolated loads
keep source truth, so source-executed tests and dev flows are unaffected.

Measured (M3 Ultra, dist build, 3 runs): sidecars.model-runtime
289-331ms (baseline 33,930ms); gateway ready 3.7-4.0s (baseline 41.7s);
forced source transforms 0 (baseline 82).

* test(agents): count both slot-probing metadata resolutions in static startup

The prepared cold plugin context now resolves through the canonical
slot-probing entry, joining the model-id normalization lane's existing
resolution. Both share the published generation; the eager-work
protections remain the catalog laziness assertions.

* refactor(agents): compose generation reuse with lifecycle artifact selection

Rebase over #125957, which preserves built-artifact mode for
lifecycle-selected prepared registries. Reuse of the active gateway
generation and the generation-inherited delta preference compose with
that owner's parameter instead of duplicating the forwarding.
2026-08-21 11:00:40 -07:00
Peter Steinberger 797d251c68 perf(cron): reuse resolved schedule timezone (#127311)
Co-authored-by: Amp <amp@ampcode.com>
2026-08-21 10:59:25 -07:00
Peter Steinberger 7d70895ba3 perf(ui): skip video pacing during normal browser tests (#127313) 2026-08-21 10:59:07 -07:00
Peter Steinberger 8a7bb5d147 perf(plugins): reuse lifecycle metadata on secrets hot paths (#126629) 2026-08-21 10:57:56 -07:00
pash-openai 264cc99405 fix(codex): run newly available models through native account auth (#127322) 2026-08-21 10:55:02 -07:00
Peter Steinberger 81ace374f9 fix(auth): stop advising a retry when the auth store needs migration (#127306)
Writing an auth profile on an install whose credentials still live in the
retired JSON store printed two contradictory lines: the real migration error,
followed by a generic "the auth store lock may be busy. Wait a moment and
retry." An operator reading the last line retries forever, because nothing is
locked and the write can never succeed until Doctor migrates the store.

updateAuthProfileStoreWithLock wrapped its transaction in a blanket catch that
logged a warn and returned null, erasing the failure's identity. Callers only
saw null, so the sole guess available to them was lock contention. Read paths
already let AuthProfileMigrationRequiredError and AuthProfileStoreUnreadableError
through; only the write path swallowed them.

Rethrow those two credential-boundary errors at the producer and keep null for
genuine write failures, which is what the lock hint was always describing. All
three sibling call sites (upsertAuthProfileWithLockOrThrow, models auth logout,
models auth order set) funnel through that null, so they are fixed by the one
change. Onboard now prints only the migration line, and `openclaw doctor --fix`
followed by the same onboard command succeeds.
2026-08-21 10:47:10 -07:00
Ayaan Zaidi 43c54af3ea fix(plugins): bind tool delivery to current turn (#127098)
Keep plugin-originated text and media bound to the active host-selected route and revoke authority at turn closure.

Fence Gateway-owned channels until a server-verifiable authority and media-policy contract exists.

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-08-21 23:16:04 +05:30
Dallin Romney 8dd21b0f34 fix(browser): load Playwright runtime on demand (#127049)
* fix(browser): load Playwright runtime on demand

* test(browser): use lazy Playwright accessor

* fix(worker): bind bundled Playwright runtime

* style(worker): format build regression

* style(worker): apply repository formatter
2026-08-21 10:45:18 -07:00
Dallin Romney b9dda9d740 fix(diffs): load Playwright renderer on demand (#127040)
* fix(diffs): load Playwright renderer on demand

* style(diffs): format lazy renderer construction

* fix(diffs): keep viewer mode free of Playwright

* fix(diffs): preserve viewer fallback on renderer load failure

* test(diffs): satisfy result narrowing lint

* refactor(diffs): centralize lazy renderer runtime
2026-08-21 10:45:04 -07:00
Ayaan Zaidi 10a3df4fb6 feat(mantis): let proof agents extend desktop control (#127271)
* feat(mantis): let proof agents extend desktop control

* fix(mantis): constrain desktop extensions

* docs(mantis): document desktop action authority

* fix(mantis): bind actions to recorded window
2026-08-21 23:09:17 +05:30
Peter Steinberger 0c2b224cb0 fix(qa): label execution configuration selects (#127299)
Amp-Thread-ID: https://ampcode.com/threads/T-01a021f4-b547-7788-a916-d4a94cbd3e3b

Co-authored-by: Amp <amp@ampcode.com>
2026-08-21 10:37:22 -07:00
Peter Steinberger f9b5693612 fix(ui): retire stale plugin lifecycle feedback (#127273)
Amp-Thread-ID: https://ampcode.com/threads/T-01a021f4-b547-7788-a916-d4a94cbd3e3b

Co-authored-by: Amp <amp@ampcode.com>
2026-08-21 10:32:36 -07:00
ClawSweeper 0a861b40ee fix(gateway): retain safe side-chat context (#127294)
Co-authored-by: RoboClaw <309084314+roboclaw-bot@users.noreply.github.com>
Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com>
2026-08-21 10:19:56 -07:00
Ayaan Zaidi 98ff2294a9 fix(sessions): preserve sessions when age pruning is disabled (#127277)
Non-positive plugin retention now disables age pruning instead of deleting eligible sessions. The disabled path also skips the SQLite stale-row scan and full-store load.

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
Co-authored-by: 曾令彪 0668001395 <zeng.lingbiao@xydigit.com>
2026-08-21 22:43:11 +05:30
Peter Steinberger 40151953b0 test(cli): use shared temp dir tracker (#127286) 2026-08-21 10:10:18 -07:00
Vincent Koc 081810c9be refactor(gateway): flatten HTTP request stages (#127264) 2026-08-21 10:00:52 -07:00
Josh Lehman 6448550898 fix(codex): preserve project instructions in restricted turns (#126891)
* fix(codex): preserve restricted project instructions

* fix(codex): preserve ring-zero context isolation

* docs(codex): explain restricted turns and ring zero
2026-08-21 10:00:40 -07:00
Peter Steinberger 781ded80d6 fix(plugins): register static node-host commands without activation (#127043)
The node host resolves its plugin registry via loadPluginRegistryHandle
(activate:false). Since #117587 static definition.nodeHostCommands only
registered under runFullActivationOnlyRegistrations, so headless nodes
silently lost browser.proxy (and the browser/file caps), breaking the
meeting-bot chain with 'No connected Google Meet-capable node with
browser proxy'. Register node-host commands in every load mode; each
command keeps its own isAvailable gate. reload and security audit
collectors stay activation-only.
2026-08-21 09:52:20 -07:00
Peter Steinberger 4343b38ce7 perf(googlechat): render bullet markers in one pass (#127274)
Co-authored-by: Amp <amp@ampcode.com>
2026-08-21 09:34:18 -07:00
Onur Solmaz 1319e1e606 fix(providers): report request acceptance consistently (#126028)
* fix(providers): restore provider acceptance lifecycle

* fix(providers): cancel streams on acceptance failure

* test(amazon-bedrock): split stream lifecycle coverage

* refactor(providers): keep acceptance lifecycle private

* refactor(providers): make acceptance observation synchronous

* refactor(providers): narrow private observer safely

* fix(google): keep response hook within retry deadline

* test(ui): tolerate subpixel spacing variance

* test(ui): wait for durable draft before reload
2026-08-21 19:32:07 +03:00
Eden 830196c628 fix(scripts): keep Windows lint runs from failing before any file is checked (#126274)
* fix(scripts): keep Windows lint runs from failing before any file is checked

`pnpm lint:extensions` aborts on Windows whenever the plugin SDK boundary
cache is cold: the boundary prep spawns `node_modules/.bin/tsgo` directly,
and Windows cannot execute the extensionless pnpm shim, so the run dies with
ENOENT before oxlint checks a single file. The stylelint runner reached by
`check-changed` fails the same way for the same reason.

Both now build their child process with `createManagedCommandInvocation`,
the launcher every other repo tool runner already uses, which routes the shim
through cmd.exe on Windows and returns the command unchanged everywhere else.

Off Windows the spawned command, arguments, and options are byte-identical to
before, so only the broken platform changes behavior.

* fix(scripts): stop the lint pipeline from spawning a tool shim directly

`pnpm lint` reaches stylelint through the same raw shim spawn that broke the
boundary prep, so the pipeline dies on Windows after oxlint succeeds. Route it
through the managed launcher like every other tool runner.

The remaining hazard is structural: the resolver hands out a path that only
some callers know to normalize, and the three sites that forgot were spread
across two spawn shapes. Add a static guard so a shim can only flow into a
launcher that understands the platform, and so the next occurrence fails on
Linux CI instead of on a contributor's Windows machine.

* test(scripts): trim Windows shim regression coverage

Punchcard-Session: cobalt-orchard-willow-2q

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-08-21 09:31:50 -07:00
Dallin Romney c4d07b398b fix(release): allow unreleased changelog in SHA preflight (#127019) 2026-08-21 09:28:36 -07:00
Dallin Romney 7600b2a36a test(release): honor Codex ultra request mapping (#127058) 2026-08-21 09:27:28 -07:00
Vincent Koc d993742d2c test(gateway): repair release-validation fixtures (#127263)
* test(onboard): preserve prompt defaults in inference E2E

* test(clawhub): identify skill fixture source
2026-08-21 09:20:56 -07:00
ClawSweeper 975027aee9 fix(ui): remove redundant mobile header alerts (#127235)
Co-authored-by: RoboClaw <309084314+roboclaw-bot@users.noreply.github.com>
Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com>
2026-08-21 09:18:52 -07:00
Vincent Koc a2f0b84e8a fix(release): report blockers before diagnostics finish (#127014)
* fix(release): separate decisions from diagnostic drain

* test(release): align decision drain fixtures

* fix(release): pin artifact downloads to valid v8 SHA

* fix(release): default empty evidence paths in plans

* fix(release): bind complete evidence reuse selection

* fix(release): harden retry artifact integrity

* fix(release): canonicalize reused validation evidence

* fix(release): bind manifest children to execution plan

* test(release): fix validation fixture types

* fix(release): retry transient decision artifact reads
2026-08-21 09:14:39 -07:00
Dallin Romney 8091f7ceb3 test(qa): align failed-tool recovery oracle (#127077)
* test(qa): bound OTEL runtime timeout evidence

* test(qa): identify OTEL runtime wait stage

* test(qa): align failed-tool recovery oracle

* test(qa): bound recent OTEL trace evidence

* test(qa): keep trace summary type private
2026-08-21 09:11:17 -07:00
Dallin Romney ef91c818c4 fix(agents): preserve built plugin artifacts in prepared runtimes (#125957)
* fix(agents): preserve built plugin artifacts in prepared runtimes

* test(agents): update prepared runtime loader contract

* fix(agents): preserve built preference for deferred plugins

* fix(plugins): carry artifact preference through load context

* fix(plugins): keep artifact context optional

* test(plugins): prove prepared built artifact projection

* fix(agents): scope built artifacts to gateway runtimes

* test(agents): preserve standalone loader call shape

* fix(agents): retain prepared artifact choice on reuse

* test(plugins): update prepared load context expectation

Amp-Thread-ID: https://ampcode.com/threads/T-01a023b8-1041-7686-975f-c9f3ef91755d

---------

Co-authored-by: Amp <amp@ampcode.com>
2026-08-21 09:10:48 -07:00
Dallin Romney 566b0e53d5 fix(ai): retain compaction-only replay checkpoints (#127106)
* test(gateway): publish runtime in agent E2Es

* test(gateway): leave replay fix to owner PR

* fix(ai): retain compaction-only replay checkpoints

* fix(ai): preserve empty compaction replay checkpoints
2026-08-21 09:10:10 -07:00
Peter Steinberger 7085604a26 fix(ui): correct Automations row semantics (#127252)
Amp-Thread-ID: https://ampcode.com/threads/T-01a021f4-b547-7788-a916-d4a94cbd3e3b

Co-authored-by: Amp <amp@ampcode.com>
2026-08-21 09:05:52 -07:00
Dallin Romney 8531da1993 fix(gateway): run transcript cursor E2E with full startup (#127094)
* test(gateway): publish runtime in agent E2Es

* test(gateway): leave replay fix to owner PR
2026-08-21 09:05:05 -07:00
Dallin Romney 2fe6b67871 fix(test): read migrated Codex auth from shared owner (#127097) 2026-08-21 09:04:39 -07:00
WhatsSkiLL 407930cb6a feat(wear): add direct agent, session, and model pickers (#126863)
* feat(wear): add searchable context pickers

* fix(wear): simplify context picker rows

* fix(wear): prioritize chat actions over context

* fix(wear): keep chat follow above context controls

* fix(wear): keep context labels localized

* fix(wear): refine context picker layout and close

* fix(wear): sync picker locale resources

* fix(wear): negotiate picker search support

---------

Co-authored-by: IWhatsskill <284122573+IWhatsskill@users.noreply.github.com>
2026-08-21 11:54:47 -04:00
Peter Steinberger 870f936851 perf(sessions): avoid full key tokenization (#127249)
Amp-Thread-ID: https://ampcode.com/threads/T-01a02481-e149-77dd-a132-a2797e238ef8

Co-authored-by: Amp <amp@ampcode.com>
2026-08-21 08:52:12 -07:00
Dallin Romney 9c64ed87e9 test(agents): keep fallback E2E runtime coherent (#127079) 2026-08-21 08:50:34 -07:00
Yuval Dinodia 5eb28a3b40 fix(outbound): retry queued deliveries when a channel adapter is unavailable (#126800)
* fix(outbound): retry queued deliveries when a channel adapter is unavailable

Delivery queue recovery classified "Outbound not configured for channel" as a
permanent provider rejection, so a queued message and its spooled attachment
were dead-lettered on the first attempt whenever the channel adapter was
momentarily unresolvable. That string is a local adapter-resolution failure
thrown by createChannelHandler, not a provider verdict, and the live send path
already treats it as retryable.

Remove the pattern so adapter unavailability consumes the normal retry budget.

* fix(outbound): type adapter lookup failures

---------

Co-authored-by: Altay <altay@hey.com>
2026-08-21 18:41:42 +03:00
Peter Steinberger 0095168ae6 fix(cli): render Nodes validation failures (#127223) 2026-08-21 08:38:57 -07:00
Shakker f65b7e06ea fix: persist manual Codex compactions (#127230) 2026-08-21 16:24:53 +01:00
Shakker 7b5430a2d3 test: cover durable compaction activity 2026-08-21 16:24:53 +01:00
Shakker a5bac03e51 fix: preserve Codex compaction activity 2026-08-21 16:24:53 +01:00