Commit Graph

81361 Commits

Author SHA1 Message Date
pash 9d3339b719 Let native Codex validate unknown model capabilities 2026-08-21 12:31:28 -07:00
pash d6c9885eb2 Preserve advanced reasoning for newly discovered Codex models 2026-08-21 12:15:42 -07:00
pash 0476fa9b16 Keep native Codex account discovery consistent with model availability 2026-08-21 12:12:34 -07:00
pash 62098d36f9 Keep authored provider routes ahead of native account authentication 2026-08-21 12:08:01 -07:00
pash 33b5f73b85 Let Codex run newly available account models without host credentials 2026-08-21 12:08:01 -07:00
Peter Steinberger 98c02e0112 fix(cli): tell config get apart a typo from an unset key (#127369)
config get answered identically for a real-but-unset schema path and a
path that does not exist, and pointed both at config validate, which only
reports whether the current file parses.

Use the schema runConfigGet already builds to split the two cases: a known
path reports that it is unset and offers a runnable config set command for
that exact path; an unknown path points at config schema. Exit code stays 1
for both, in text and --json.
2026-08-21 12:07:03 -07:00
Masato Hoshino 87d02a9089 fix(logs): report truncated channel tails (#123699)
Punchcard-Session: golden-timber-willow-68
2026-08-21 12:03:36 -07:00
Peter Steinberger 9de2b230e9 fix(agents): stop canceled subagents reporting timeouts (#125407)
* fix(agents): preserve cancelled subagent outcomes

* fix(agents): preserve provisional cancellation precedence

* fix(agents): scope cancellation precedence to subagents

* fix(agents): preserve provider timeout precedence

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-08-21 12:02:20 -07:00
Peter Steinberger eb502d9aef fix(claws): remove exec approvals when a Claw agent is removed (#127365)
`claws remove` deleted the agent and reported status complete while its
exec-approvals policy survived in the shared state DB, so a later agent
reusing the id silently inherited the old allowlist.

claws was the third agent-removal path and the only one that never opened
an agent-deletion journal, which withAgentExecApprovalsRemoved requires as
its fence. Open the journal around the config commit and run both commit
branches inside the approvals fence, matching the gateway and CLI paths.

Cron stays declaration-owned and unchanged.
2026-08-21 12:00:58 -07:00
Sasan 6aced3350d fix(ui): Model Providers usage cards stay empty after a failed usage.status (#120301)
* fix(ui): recover provider usage after transient gateway failures

Keep failed provider-usage Results cold across Models and Usage direct and preloaded paths. Preserve canonical Gateway lifecycle ownership, request epochs, and route provenance.

Co-authored-by: Sasan Sotoodehfar <sasan1200@gmail.com>

* test(ui): shrink provider assertion safety baseline

Drop the obsolete grandfathered non-null assertion after moving provider probe-result policy into its owner.

Co-authored-by: Sasan Sotoodehfar <sasan1200@gmail.com>

* test(ui): tolerate browser font geometry rounding

Match existing chat-layout two-pixel renderer tolerance on both completed-work spacing boundaries.

Co-authored-by: Sasan Sotoodehfar <sasan1200@gmail.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-21 11:59:55 -07:00
Peter Steinberger 3df8ba2eb1 perf(agents): avoid full roster projection for point lookups (#127384)
Co-authored-by: Amp <amp@ampcode.com>
2026-08-21 11:54:59 -07:00
Ayaan Gazali 2213d569ce fix(ui): clear terminal session activity indicators (#120327)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-21 11:52:00 -07:00
Vincent Koc 35175c314b perf(agents): reuse active gateway plugin generation (#127278)
Reuse the active Gateway registry only for the exact current metadata generation and matching runtime authority. Seed selected-runtime loading from imported inbound plugin IDs so deferred records remain eligible for their scoped load, while the generation owner continues to supply built-artifact preference.

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-21 11:51:17 -07:00
SunnyShu 9a0e11df06 fix(ui): reach identity-menu footer controls with keyboard (#122066)
* fix(ui): restore identity menu footer keyboard navigation

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

* test(ui): synchronize identity menu hide lifecycle

* test(ui): keep identity keyboard proof in one menu lifecycle

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-21 11:48:36 -07:00
Hannes Rudolph d06c0b83e3 fix(doctor): bound recovered session migrations (#126265)
* fix(doctor): bound recovered session migrations

* refactor(doctor): trim bounded migration flow

* test(doctor): strengthen migration heap regression

* test(doctor): cover media migration page boundary

---------

Co-authored-by: Josh Lehman <550978+jalehman@users.noreply.github.com>
2026-08-21 11:47:06 -07:00
Peter Steinberger a17774e9b2 perf(qa): reuse complete coverage inventory in report tests (#127376) 2026-08-21 11:41:48 -07:00
Peter Steinberger 01e8887959 refactor(providers): return prepared dynamic models directly (#126574) 2026-08-21 11:40:52 -07:00
Peter Steinberger 4324ba2f48 test: canonicalize macOS temporary workspace paths (#127366) 2026-08-21 11:39:11 -07:00
Peter Steinberger 0a20c57154 fix(sessions): preserve ownership across lifecycle and maintenance (#127344)
* fix(sessions): preserve ownership across lifecycle and maintenance

* test(gateway): recognize owner-complete session projections
2026-08-21 11:34:59 -07:00
Peter Steinberger cddc1acdf7 fix(plugins): reuse published metadata on hot paths (#127355) 2026-08-21 11:33:39 -07:00
Josh Avant ccbfa6c3a3 feat(ui): explain decision receipts in Activity (#126007)
* fix(audit): project safe decision receipt displays

* docs(agents): preserve audit display privacy

* fix(ci): satisfy audit receipt guardrails
2026-08-21 11:33:32 -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