Commit Graph

6791 Commits

Author SHA1 Message Date
Peter Steinberger 8c567306ba fix(openai): remove duplicate GPT-5.6 picker entry (#122178)
* fix(openai): remove duplicate GPT-5.6 picker entry

* test(gateway): split OpenAI model picker coverage

* test(openai): align canonical model fixtures

* chore(plugin-sdk): refresh agent harness API baseline
2026-08-11 12:29:36 -07:00
Ayaan Zaidi 746a188c90 refactor(media): collapse attachment byte classification into media-core (#122168)
Attachment MIME gating and extraction dispatch used nine separate byte policies across five files; the allowlist could approve one MIME while dispatch observed another after a second sniff. @openclaw/media-core/attachment-classify now owns byte sniffing, text heuristics, extension mapping, and the seven attachment classes; the cache stores one classification that gates and dispatch share. Channel-declared MIME leads with the transport Content-Type as a byte-arbitrated hint, normalizeMimeType folds YAML/XML synonyms so existing configured allowlists keep matching, and input_file API callers keep declared-MIME precedence over cosmetic filenames. Net -135 production LOC.

Proof: 2,153 focused tests across media-core/media-understanding/media plus boundary-contract and deadcode-mirror suites; ClawSweeper local review clean (round 5, zero findings); live Telegram default-turn probe green.

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-08-11 19:10:49 +00:00
Peter Steinberger 3d76246792 refactor: eliminate final export name collisions (#122083)
* refactor: resolve final export name collisions

* refactor: update remaining collision rename consumers

* style: format rebased auth helpers

* test: update remaining session entry mocks

* test: update remaining runtime mock exports

* test: update delivery info path mock

* refactor: reconcile combined collision sweeps

* chore: regenerate collision and sdk baselines
2026-08-11 11:18:24 -07:00
Vincent Koc 5bc7efe746 fix(test): keep CLI process suites in owner lane (#122160) 2026-08-12 02:07:51 +08:00
Peter Steinberger ebb2770000 refactor: eliminate export name collisions (#122084)
* refactor: eliminate export name collisions

* chore(scripts): burn resolved collision baselines

* refactor: narrow legacy session load options

* chore: refresh SDK and session debt baselines

* refactor: adopt upstream secrets collision fix

* test(plugin-sdk): mock renamed session store core

* fix(scripts): track renamed session accessor core
2026-08-11 10:41:50 -07:00
Vincent Koc 1fb715853c fix(qa): resolve Docker harness script entrypoints (#121548)
Punchcard-Session: amber-workshop-workshop-36
2026-08-12 01:23:20 +08:00
Peter Steinberger cad77fb39c refactor: consolidate remaining coercion helpers (#122020) 2026-08-11 10:22:01 -07:00
Peter Steinberger a580c2afa1 fix(windows): parse tasklist CSV for port hints (#122126) 2026-08-11 10:08:08 -07:00
Peter Steinberger 1dcac5b15f fix: open terminals no longer delay gateway updates (#121601)
* fix(gateway): allow updates with open terminals

* fix(updater): support terminal policy upgrades

* chore(plugin-sdk): refresh API baseline
2026-08-11 09:37:58 -07:00
Vincent Koc 8d3f3377da fix(ci): make Control UI artifact validation consistent (#122086) 2026-08-12 00:11:22 +08:00
Jason (Json) 94ae370bcc fix(updater): verify launchd bootstrap postcondition (#121747)
* fix(updater): verify launchd bootstrap postcondition

* test(commands): align learn prompt invariants

* test(approvals): align plugin runtime event kinds

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-11 09:02:15 -07:00
Vincent Koc afc644464d fix(ci): bound hosted Android build memory (#122088) 2026-08-11 23:57:22 +08:00
Peter Steinberger d1452fb5d1 refactor(plugin-sdk): split API baseline by entrypoint (#122082) 2026-08-11 08:54:42 -07:00
Peter Steinberger f798f9999b fix(agent-tools): expand Windows home paths (#122071) 2026-08-11 08:28:35 -07:00
Peter Steinberger db73b59c04 refactor: burn wrapper shadowing baseline entries (#122040)
* refactor: burn wrapper shadowing entries

* chore: refresh wrapper shadowing baselines

* test: update secrets runtime state mocks

* fix(ci): absorb Control UI build identity variance
2026-08-11 08:24:03 -07:00
Vincent Koc 6472d22a77 fix(ci): budget expanded survivor groups (#122058) 2026-08-11 22:44:21 +08:00
Peter Steinberger e390781534 refactor: burn cross-directory export name collisions (#121893)
* refactor: name subsystem logger exports

* refactor(test): distinguish exported test doubles

* refactor: consolidate canonical owner helpers

* refactor: give cross-domain helpers distinct names

* chore(lint): ratchet collision debt baselines

* fix(test): complete collision rename consumers

* fix(test): update remaining collision mock consumers

* fix(test): update transcript reader mock export

* refactor: keep embedded logger name at its owner

* fix(test): align embedded logger mock with owner

* refactor: name shared assistant phase extraction

* fix(ui): update assistant phase extractor import

* chore(generated): refresh collision and SDK baselines

* style(test): format merged plugin mocks

* chore(sdk): refresh API content hashes
2026-08-11 06:50:22 -07:00
Peter Steinberger 8dace97c2e perf(test): cut workflow guard overhead (#122038)
Co-authored-by: Amp <amp@ampcode.com>
2026-08-11 06:29:08 -07:00
Peter Steinberger fd8b1fb1b9 fix(windows): preserve provider local service env overrides (#122027) 2026-08-11 06:28:24 -07:00
Peter Steinberger 686294f9f8 test(sqlite): right-size reliability crash payloads (#122016)
* test(sqlite): right-size reliability crash payloads

* test(agents): replace hanging provider error integration

---------

Co-authored-by: Amp <amp@ampcode.com>
2026-08-11 05:26:07 -07:00
Peter Steinberger 2cc11aff38 test(scripts): streamline Crabbox wrapper fakes (#122007)
Co-authored-by: Amp <amp@ampcode.com>
2026-08-11 04:33:11 -07:00
Peter Steinberger 03f56cfbc3 fix(memory): accept Windows extra-file Markdown casing (#121976)
* fix(memory): accept Windows extra-file Markdown casing

* fix(memory): keep extra-file casing policy private
2026-08-11 04:21:15 -07:00
Peter Steinberger 992126e382 refactor(sessions): drop the Sqlite infix from session-accessor exports (#121536)
* refactor(sessions): drop the Sqlite infix from session-accessor exports

The storage-neutral seam completed its file->SQLite swap on 2026-07-27;
the Sqlite-infixed export names and their X-as-Y rename blocks were the
fossil of that migration, giving every accessor operation two greppable
names. Rename ~148 exports to their canonical names at the definition
sites, delete the message-cut facade (its conflict->failed mask had one
consumer, which already handles conflict), collapse the remaining pure
delegates, and keep honest SQLite-mechanics names (scope resolution,
canonical repair, in-transaction primitives, storage-row types). The main
barrel's exported surface is byte-identical. Net -203 production LOC.
Part 2 of the session-accessor dual-layer collapse (part 1: #121316).

* fix: repair main-breaking lint/type/test failures blocking PR CI

Three breakages landed on main that push CI's changed-scope never runs:
a caught-error cause missing in the release-validation script and two
type errors in the package-acceptance test (direct commit 1f591bba56),
and a memory-host regression where fs-safe 0.5.4 (#121508) started
throwing FsSafeError("not-file") for extra-path reads whose parent chain
hits a regular file, breaking the missing-file empty-text contract that
rejection unchanged.

Item 4 repairs managed-image action E2E narrowing from bad30d5a74 (#77017).
Item 5's chat-message mock repair was superseded upstream by 750d0dcd9e, whose broader fetch typing and explicit download capture preserve the same contract.
Item 6 restores #121258's cursor token contract after #77017 hard-coded pointer.
Item 7's managed-image thumbnail-path repair was superseded upstream by 750d0dcd9e, which preserves the same contract in main's reorganized URL structure.
Item 8 records #121600's explicit command-bearing lifecycle classification.
Item 9's cron assertion repair was superseded upstream by 3cd034f7a8, whose exact diagnostic rewrite includes the same redacted alert contract.
Item 10 forwards fs-safe 0.5.4 bigint lstat options through the snapshot mock.
Item 11 refreshes release-matrix test ownership after 1f591bba56.
Item 12 awaits f3e1efead48's setup-admission settlement in direct session tests.
Item 13's media FileStore-key repair was superseded upstream by cf432ec871, which fixes the same Windows root cause at the owner boundary.
Item 14 regenerates Swift approval reviewer fields added by 9935ca3b30.
2026-08-11 11:13:29 +00:00
Peter Steinberger 26d0158e50 test(packaging): speed tarball integrity checks (#121999)
Co-authored-by: Amp <amp@ampcode.com>
2026-08-11 03:56:38 -07:00
Peter Steinberger 33ce7313d7 improve: speed up plugin npm package tests (#121989)
* test(packaging): collapse duplicate plugin installs

* test(packaging): combine bundled dependency proof

* test(packaging): name packed artifact proof

---------

Co-authored-by: Amp <amp@ampcode.com>
2026-08-11 03:35:33 -07:00
Peter Steinberger 2731dc24e5 fix(plugin-sdk): keep inbound reply shim through next SDK major (#121922)
* fix(plugin-sdk): honor major-gated reply shim retirement

* fix(plugin-sdk): preserve compat code literals

* chore(plugin-sdk): refresh compatibility API baseline
2026-08-11 03:18:07 -07:00
thomas.szbay ecc6d5a9fe fix(e2e): download non-root installer before execution
Download the non-root Docker smoke installer before executing it.

- preserve the existing 30-second connection and 300-second transfer limits
- clean up the temporary installer on success or failure
- prove failed downloads cannot execute partial installer content

Co-authored-by: thomas.szbay <xydigit-zt@users.noreply.github.com>
Punchcard-Session: golden-lantern-meadow-0x
2026-08-11 18:12:52 +08:00
wangmiao0668000666 c719cbbfe9 fix(e2e): preserve Unicode in Telegram proof tails (#109940)
Punchcard-Session: ember-brook-workshop-qc

Co-authored-by: wangmiao0668000666 <290215524+wangmiao0668000666@users.noreply.github.com>
2026-08-11 18:09:29 +08:00
Peter Steinberger db33736137 test(tooling): decouple MinGit curl assertion (#121977) 2026-08-11 03:07:13 -07:00
joshavant cde0af4c60 test(auto-reply): isolate prepared harness delivery proof 2026-08-11 05:00:17 -05:00
Peter Steinberger fba9a094db test(runner): delete duplicate SQLite replay (#121983)
Co-authored-by: Amp <amp@ampcode.com>
2026-08-11 02:54:58 -07:00
Peter Steinberger 1ec893a80a fix(cli): execute mjs launcher fallback (#121963)
Align the main-module guard with the supported dist/entry.mjs launcher candidate so packaged commands cannot exit successfully without running.\n\nRefs #121949.
2026-08-11 02:52:52 -07:00
Peter Steinberger 30530ae2a3 improve: speed up test project routing tests (#121968)
* test(tooling): delete routing inventory reassertions

* test(tooling): preserve full-suite ownership guard

* test(tooling): remove dead fs scan helper

---------

Co-authored-by: Amp <amp@ampcode.com>
2026-08-11 02:40:19 -07:00
qingminlong 59799d965a fix(scripts): honor repeated response content lengths (#110126)
Punchcard-Session: clear-valley-meadow-4p
2026-08-11 17:33:57 +08:00
Peter Steinberger 53407b154d fix(agents): remove stale media completion reply mechanics (#121937)
* fix(agents): remove stale media completion reply mechanics

Make generated image, music, and video completion wakes follow the current tool-agnostic visible-reply contract, preserving every structured attachment without NO_REPLY or transport-specific instructions.

Refs #121933.

* test(agents): remove stale media helper

Delete the unused assertion helper left behind by the table-driven generated-media completion coverage.\n\nRefs #121933.

* test(tooling): wait for profiler descendant pid

Require the PID file to contain a valid positive process ID before asserting profiler descendant cleanup, closing the create-before-write CI race.\n\nRefs #121971.
2026-08-11 02:29:05 -07:00
Vincent Koc 0f6885141b fix(ci): use Node 24.16 for release workflows (#121967) 2026-08-11 17:11:35 +08:00
Peter Steinberger 2abed88c5e test(sqlite): avoid duplicate reliability proof run (#121952)
* test(sqlite): avoid duplicate reliability proof run

Amp-Thread-ID: https://ampcode.com/threads/T-019fee8d-665d-707b-a380-23f2a6a1ce03
Co-authored-by: Peter Steinberger <steipete@gmail.com>

* test(sqlite): retain restore count contract

Amp-Thread-ID: https://ampcode.com/threads/T-019fee8d-665d-707b-a380-23f2a6a1ce03
Co-authored-by: Peter Steinberger <steipete@gmail.com>

* test(sqlite): retain reliability CLI markers

Amp-Thread-ID: https://ampcode.com/threads/T-019fee8d-665d-707b-a380-23f2a6a1ce03
Co-authored-by: Peter Steinberger <steipete@gmail.com>

---------

Co-authored-by: Amp <amp@ampcode.com>
2026-08-11 01:36:48 -07:00
Peter Steinberger 248cef3646 test(gateway): remove helper self-test wrapper (#121889)
* test(gateway): remove helper self-test wrapper

* test(infra): refresh unit-fast isolation fixtures
2026-08-11 01:24:29 -07:00
Peter Steinberger df72781ed4 fix(macos): make the whole AI candidate row clickable and clear stale exhausted verdicts (#121928)
* fix(macos): make the whole AI candidate row clickable and clear stale exhausted verdicts

Live-testing pick-during-testing on 2026-08-11 showed clicks on a candidate
row's blank stretch (between the title/subtitle texts or over the spacer)
silently doing nothing: plain-style buttons only hit-test opaque label
pixels. A user trying to pick Claude Code while Codex auto-tests can click
the visually highlighted row and get no outcome. .contentShape(Rectangle())
makes the full row hit-test.

Also, after auto-candidates exhaust, a user-picked retest left the stale
"None of the found options worked" card up while the new test visibly ran;
userSelect now clears exhaustedAutoCandidates when a fresh attempt begins.

* test(tooling): drop stateless poll tests from stateful-helper fixtures

Main went red when #121923 rewrote the outbound poll tests to be
order-independent and removed their stateful helper import/file; this
lane-config test hardcoded both as stateful-helper classification
fixtures. Folded into this PR per red-main landing policy.
2026-08-11 01:10:12 -07:00
Peter Steinberger fa03d9b913 refactor: consolidate coercion helpers (#121366)
* refactor: consolidate coercion helpers

* fix: remove duplicate coercion imports

* fix: preserve serialized coercion guard

* chore: ratchet coercion helper carve-outs

* fix(test): keep gauntlet subprocess startup lean

* fix: preserve imported session timestamp semantics

* fix: preserve catalog timestamp string semantics

* chore: align plugin SDK surface ratchet

* fix: preserve trajectory and SDK string contracts

* fix(test): preserve QA record assertion semantics

* fix: complete standalone record guard rename

* refactor(cron): use canonical string coercion

* fix(acpx): preserve Pi timestamp parsing

* test(channels): adapt custody test harnesses

* test(telegram): classify media harness as test support

* test(acpx): split timestamp contract coverage

* test(channels): support generated custody contracts

* chore: ban the full coercion helper name set

Extends the declaration guard to all eleven consolidated helper names and
renames the cron schedule-identity readNumber wrapper to readScheduleInteger
so the banned generic name cannot regrow.

* fix(scripts): repair release-validation guard drift and lint cause

Restores the renamed isJsonRecord guard in assertTrustedWorkflowHarness after
main added isRecord call sites in parallel, and attaches the caught YAML error
as the thrown error cause (preserve-caught-error was red on main).

* fix: preserve Claude timestamp string semantics

* fix: preserve persisted timestamp string semantics

* fix: preserve date-first timestamp contracts

* fix(openai): harden delegation failure formatting

* chore: close coercion helper guard gaps

* test(openai): model non-error delegation rejection

* chore: refresh plugin SDK API contract

* fix(tasks): use canonical string field reader

* fix(ai): use canonical provider error field coercion

* fix(browser): migrate native bootstrap coercion

* docs(plugin-sdk): clarify text record export compatibility

* fix(gateway): normalize approval execution identity

* test(outbound): isolate message action poll harness
2026-08-11 00:02:18 -07:00
Josh Lehman 2ae316e2f3 fix(ui): session titles flicker during archive transitions (#121868)
* fix(ui): preserve session titles through archive transitions

* oc-ba3: fix archive title CI regressions
2026-08-10 23:48:02 -07:00
Peter Steinberger c8571daa2f fix(scripts): tolerate restricted PR metadata tokens (#121848)
Amp-Thread-ID: https://ampcode.com/threads/T-019feaaa-c7ed-769e-9f29-a3612bec72e7

Co-authored-by: Amp <amp@ampcode.com>
2026-08-10 23:30:59 -07:00
Peter Steinberger 9acc3beff6 test(scripts): prebundle Crabbox wrapper tests (#121891)
Amp-Thread-ID: https://ampcode.com/threads/T-019fee8d-665d-707b-a380-23f2a6a1ce03

Co-authored-by: Amp <amp@ampcode.com>
2026-08-10 23:16:26 -07:00
Vincent Koc 65d13cb80b fix(ci): retry fresh artifact metadata reads (#121876) 2026-08-11 14:01:31 +08:00
Peter Steinberger 1220a7609a refactor: consolidate promise-like guards (#121861)
* feat(normalization-core): add promise-like guard

* refactor: consolidate promise-like guards

* fix(normalization-core): keep isPromiseLike non-throwing on hostile then getters

ClawSweeper finding on #121861: the diagnostics-path local guard caught throwing
then getters; the canonical guard must classify, never throw.

* test(normalization-core): annotate intentional hostile-thenable fixture
2026-08-10 22:50:48 -07:00
Peter Steinberger e4a6ded2d3 fix(release): scope iOS version checks to native releases (#121863) 2026-08-10 21:57:02 -07:00
Peter Steinberger 98b222ded8 feat(scripts): report aliasing re-exports (#121849) 2026-08-10 21:36:22 -07:00
Peter Steinberger df3e111c91 fix(ci): run policy tests for watched source changes (#121841)
* fix(ci): route source policy tests by watched paths

* chore(ci): keep policy watch table module-private
2026-08-10 21:30:21 -07:00
Peter Steinberger 19ed7feee1 test(ci): rebalance compact Node shards (#121834)
* test(ci): rebalance compact node shards

Amp-Thread-ID: https://ampcode.com/threads/T-019fee8d-665d-707b-a380-23f2a6a1ce03
Co-authored-by: Peter Steinberger <steipete@gmail.com>

* test(ci): guard compact planner coverage

Amp-Thread-ID: https://ampcode.com/threads/T-019fee8d-665d-707b-a380-23f2a6a1ce03
Co-authored-by: Peter Steinberger <steipete@gmail.com>

* test(ci): drop obsolete shard isolation check

Amp-Thread-ID: https://ampcode.com/threads/T-019fee8d-665d-707b-a380-23f2a6a1ce03
Co-authored-by: Peter Steinberger <steipete@gmail.com>

* test(ci): stop freezing compact shard placement

Amp-Thread-ID: https://ampcode.com/threads/T-019fee8d-665d-707b-a380-23f2a6a1ce03
Co-authored-by: Peter Steinberger <steipete@gmail.com>

---------

Co-authored-by: Amp <amp@ampcode.com>
2026-08-11 04:18:34 +00:00
Josh Avant 73a9eed95b refactor(audit): add canonical admitted-run context (#120534)
* feat(audit): carry canonical admitted execution context

* fix(agents): preserve admitted context across retries

* fix(worker): fence legacy launch dialect

* test(gateway): track approval temp dirs

* fix(plugin-sdk): preserve harness attempt compatibility

* fix: close delegated run authority at owner boundaries

* fix: internalize delegated authority validators

* refactor: split delegated authority proof surfaces

* refactor: centralize command admission identity

* test: claim runtime tool authority

* fix(gateway): keep lifecycle cleanup within static budgets

* fix(agents): revalidate harness policy authority

* fix(agents): fence awaited approval capability results

* test(copilot): supply required harness capability fixtures

* fix(agent): preserve scoped embedded run admission

* fix(agent): preserve keyless and worker authority

* test(agent): bind incomplete-turn authority

* docs: preserve execution authority invariants

* chore(plugin-sdk): regenerate API baseline

* fix(gateway): notify pending claim closure

* fix(gateway): revalidate delegated tool authority

* fix(plugin-sdk): keep source guard internal

* fix: close delegated authority races

* fix: revalidate delegated side effects

* fix: close harness authority projection gaps

* fix: align authority integration types

* fix: isolate settled harness finalization

* fix: fence recovery identity finalization

* fix: preserve committed session worktrees

* fix: preserve worker placement agent identity

* fix: fence active harness tool work

* fix(plugins): restore embedded run admission owner

* chore(plugin-sdk): compose integrated surface budgets

* fix(copilot): keep finalization attempt type internal

* fix(plugins): complete admission owner type imports

* test(harness): use settled finalization attempt shape

* fix(security): retain exact side-run and approval authority

* fix(security): preserve protected authority through terminal sweep

* fix(agents): follow moved recovery store owner

* fix(ci): align integrated authority owners with gates

* fix(plugins): distinguish embedded agent adapter export

* chore(plugin-sdk): regenerate API baseline after rolling integration

* refactor(gateway): keep session authority within owner budgets

* fix(gateway): keep session helpers private

* docs(plugin-sdk): name the V2 parameter subpath

* chore(integration): reconcile worker and SDK surfaces

* docs(plugin-sdk): require the V2 host API floor

* chore(plugin-sdk): regenerate after proxy-auth integration
2026-08-10 23:15:20 -05:00