Commit Graph

7222 Commits

Author SHA1 Message Date
Peter Steinberger
6de618315a refactor: centralize isolated agent test ownership (#115340) 2026-07-28 14:07:02 -04:00
Peter Steinberger
3aae420337 fix: prevent changed checks from expanding into full lint (#115322) 2026-07-28 13:27:26 -04:00
Peter Steinberger
2aa79e4aaa fix: prevent cron and gateway stress-run timeouts (#115241)
* fix: make cron and gateway stress tests deterministic

* test: update focused agent project expectations

* fix: preserve focused agent glob isolation
2026-07-28 13:23:35 -04:00
Peter Steinberger
3506f36555 fix(macos): signed rebuild no longer stalls on app shutdown (#103957)
* fix(macos): prevent restart termination hangs

* fix(macos): keep restart failsafe off main queue

* refactor(macos): drop superseded failsafe changes
2026-07-28 12:13:22 -04:00
Vincent Koc
6726404c18 fix(i18n): include shared discovery copy in macOS catalog 2026-07-28 23:48:57 +08:00
Vincent Koc
9b63702543 fix(macos): localize privacy permission prompts 2026-07-28 23:48:01 +08:00
Vincent Koc
7e0f43a5b3 fix(ui): detect composed accessibility copy 2026-07-28 23:47:14 +08:00
Vincent Koc
8f40fac955 fix(ci): run localization checks for UI changes 2026-07-28 23:47:14 +08:00
Vincent Koc
498a7fec28 test(ui): catch untranslated accessibility labels 2026-07-28 23:47:14 +08:00
Vincent Koc
2f5c70ec24 fix(docs): preserve localized navigation parity 2026-07-28 23:45:40 +08:00
Peter Steinberger
3224005c82 fix(ci): bound Telegram Mantis proof cleanup (#115253)
* test(mantis): bound Telegram proof cleanup

* test(mantis): enforce cleanup deadline in wrapper

* test(mantis): supervise cleanup through bash
2026-07-28 11:44:28 -04:00
Vincent Koc
cbe19ed3be fix(scripts): materialize PR worktrees before gates (#115120)
* fix(scripts): materialize PR worktrees before gates

* test(agents): stabilize failed local service fixture

* test(ui): isolate config route location
2026-07-28 15:38:17 +00:00
Peter Steinberger
a8f088e50a perf(pr): cache complete small file lists (#115199) 2026-07-28 11:20:56 -04:00
Vincent Koc
285cee7a48 fix(docs): preserve pure fenced translation chunks (#115204) 2026-07-28 15:40:06 +02:00
Bryan Tegomoh, MD, MPH
15866acef5 Refresh macOS skills after node reconnect (#107660)
* Refresh macOS skills after node reconnect

* fix(macos): queue skills refresh during reconnect

* chore(i18n): refresh native skills inventory

* fix(macos): refresh skills from gateway invalidations

Co-authored-by: Bryan Tegomoh <bryan.tegomoh@gmail.com>

* fix(android): update gateway event catalog

Co-authored-by: Bryan Tegomoh <bryan.tegomoh@gmail.com>

* refactor(skills): keep remote eligibility helper bounded

Co-authored-by: Bryan Tegomoh <bryan.tegomoh@gmail.com>

* ci(test): pin model shard worker budget

Co-authored-by: Bryan Tegomoh <bryan.tegomoh@gmail.com>

* ci(test): isolate network-sensitive agent suites

Co-authored-by: Bryan Tegomoh <bryan.tegomoh@gmail.com>

* test: align isolated prefix routing expectation

Co-authored-by: Bryan Tegomoh <bryan.tegomoh@gmail.com>

* test(macos): isolate gateway process test port

Co-authored-by: Bryan Tegomoh <bryan.tegomoh@gmail.com>

* fix(macos): recover skills after failed refresh

Co-authored-by: Bryan Tegomoh <bryan.tegomoh@gmail.com>

* fix(ci): avoid duplicate agent test routing

Co-authored-by: Bryan Tegomoh <bryan.tegomoh@gmail.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-28 09:10:45 -04:00
Peter Steinberger
0cb56ace62 fix(ui): harden browser, session, permissions, and media lifecycles (#115110)
* fix(ui): harden browser, session, and gateway lifecycles

* fix(ui): satisfy browser lifecycle and control UI CI gates

* fix(ui): satisfy type-aware browser and cron lint

* fix(ci): isolate model and UI test workloads

* fix(ui): reject superseded browser and session page races

* fix(ui): settle superseded background-tab refreshes

* fix(ui): reconcile committed navigation and terminal pages

* fix(ui): preserve canonical cron permission contracts
2026-07-28 05:48:35 -07:00
Peter Steinberger
981a3dfad3 fix(packaging): require the code mode worker in shipped tarballs (#115178) 2026-07-28 08:26:30 -04:00
Peter Steinberger
699315e7d7 feat(ui): redesign Ask OpenClaw — mascot, shared surface, dockable panel (#115123)
* refactor(ui): share custodian chat surface

* feat(ui): add dockable custodian panel

* refactor(ui): drop write-only panel-close latch from custodian store

* feat(ui): demo custodian in mock gateway

* chore(ui): update raw-copy baseline for custodian strings

* fix(ui): clean custodian surface/page/mock lint debris
2026-07-28 08:05:38 -04:00
wanyongstar
89b6d85cdd fix(scripts): bound android-release-signing exec operations (#110822)
* fix(scripts): bound android-release-signing exec operations

* fix(scripts): test Android signing timeouts

Co-authored-by: wanyongstar <wan.yong@xydigit.com>

* fix(scripts): keep signing timeout internal

* docs(scripts): clarify signing timeout scope

* test(agents): isolate transport timeout proof

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-28 07:51:38 -04:00
Peter Steinberger
fe035de4d6 fix(ci): compare env ratchet at branch fork (#115149) 2026-07-28 07:06:00 -04:00
ToToKr
d57e228c3a docs(mistral): fix broken adjustable reasoning docs URL (#114867)
* docs(mistral): fix broken adjustable reasoning docs URL

The linked Mistral page 404s; the reasoning docs now live one path segment up. Verified: old URL returns HTTP 404, new URL returns HTTP 200 and documents reasoning_effort. oxfmt --check passed on the changed file.

* fix(ci): audit links inside docs components

* test(cli): isolate root help exit fixture

* test(ci): split embedded agent shard

* fix(ci): harden docs link projection

* test(ci): satisfy docs audit strict types

* test(ci): isolate incomplete-turn harness

* test(cli): document root help fixture boundary

* test(ci): isolate overflow compaction harness

* test(ci): isolate contaminated agent model tests

* test(ci): update isolated prefix routing

* test(ci): bound loaded streaming HTTP cases

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-28 06:55:02 -04:00
Peter Steinberger
7cf14c12c8 fix(release): accept advisory runtime gaps (#115140) 2026-07-28 06:42:10 -04:00
Vincent Koc
f8ed8ecf4f fix(security): harden CodeQL-reported boundaries (#115055)
* fix(security): harden CodeQL-reported boundaries

* style(android): fix WebMessage listener indentation
2026-07-28 16:47:12 +08:00
Peter Steinberger
c141496217 fix: full release validation avoids embedded-agent shard stalls (#115019)
* ci: use scoped embedded-agent timeouts

* ci: align frozen-target test watchdogs

* ci: align embedded-agent timeout assertions
2026-07-28 04:38:32 -04:00
Peter Steinberger
97c19a98e3 fix(ci): keep fork embedded-agent shard alive on cold runners (#115035)
* fix(ci): unstick fork embedded-agent shard

* test(ci): allow cold embedded harness setup
2026-07-28 04:04:38 -04:00
Vito Cappello
accc6ccaa2 improve(sqlite): reuse synchronous prepared statements (#114777)
* perf(sqlite): cache synchronous prepared statements

* fix(sqlite): refresh cached statement metadata

* fix(sqlite): bound cached statement retention

* fix(sqlite): close statement cache lifecycle gaps

* test: suppress SQLite warning in retention child

* test(sqlite): make transcript-load counter statement-cache-aware and allowlist raw test SQL

* test(sessions): type the wrapped iterate against its overloaded signature

* test: share a statement-cache-aware SQLite execution counter across prepare-count tests

* fix(pr): validate head SHA with bash regex so fork-CI runners without ripgrep pass the artifacts-init guard

---------

Co-authored-by: VACInc <3279061+VACInc@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-28 03:53:16 -04:00
Peter Steinberger
0d7fb8eb39 refactor(fs): adopt fs-safe 0.5 core primitives (#113705)
* refactor(fs): unify exclusive file publication

* fix(fs): fence stale lock reclamation

* refactor(fs): bound wiki scans and secret reads

* chore(fs): finalize fs-safe 0.5 compatibility

* fix(fs): preserve publication ownership and legacy mode

* fix(fs): fail closed on unverifiable lock owners

* fix(fs): preserve concurrent backup publications

* refactor(fs): preserve ambiguous backup outputs

* fix(fs): preserve mixed-version lock coordination

* refactor(file-transfer): adopt fs-safe archive extraction

* refactor(fs): add bounded walk and secret seams

* refactor(auth): replace proper-lockfile with fs-safe

* fix(fs): honor Windows mode override casing

* refactor(snapshot): adopt fs-safe publication

* refactor(memory-wiki): adopt prunable root walks

* refactor(fleet): adopt bounded archive restore

* fix(fs): preserve post-publication ownership receipts

* refactor(fs): harvest final fs-safe primitives

* style(fs): clean harvest lint

* chore(plugin-sdk): refresh move helper API baseline

* refactor(snapshot): adopt native Windows ACL facts

* refactor(fs): adopt hardened atomic outputs

* fix(fs): scope lock reentrancy to logical owners

* chore(config): lower env var count budget

* fix(deps): adopt published fs-safe 0.5.0

* fix(ci): align SDK surface ratchets

* fix(ci): regenerate SDK API baseline after rebase

* fix(fs): preserve owner-scoped file lock nesting

* fix(ci): refresh SDK API baseline for file locks

* fix(fs): separate SQLite and file lock reentrancy

* fix(imessage): bound pinned attachment reads

* fix(agents): narrow session-key lock options

* fix(fs): preserve fs-safe 0.5 compatibility contracts

* fix(windows): retain private SQLite directory owner

* refactor(sqlite): centralize exclusive coordinator

* refactor(snapshot): isolate Windows ACL policy

* fix(windows): retain snapshot ACL inspector

* chore(config): realign env budget after rebase

* test(agents): accept canonical sandbox escape error

* docs(changelog): defer fs-safe release note
2026-07-28 03:41:47 -04:00
Peter Steinberger
6b255f1f74 improve(gateway): reduce plugin startup memory (#115020)
* perf(gateway): reduce plugin startup memory

* test(plugins): cover effective alias order caching
2026-07-28 03:33:03 -04:00
Peter Steinberger
add9205d1a fix(ui): explain every channel setting and link its docs (#114844)
* feat(config): give shared channel settings help text

* fix(ui): space the settings tiers and stop repeating help on list items

* feat(ui): link each channel detail to its docs page

* test(ui): mirror production channel hints in the mock dev server

* docs: note the shared channel help inheritance for plugin authors

* fix(config): let a channel suppress shared help with an empty string

* chore(config): regenerate bundled channel metadata for the new WhatsApp hints

* fix(ci): check bundled channel metadata locally

* chore(release): keep changelog release-owned

* chore(release): keep changelog release-owned

* fix(ui): keep shared channel help contract-neutral
2026-07-28 05:25:58 +00:00
Peter Steinberger
258cc84965 test(cli): isolate process exit coverage (#114903) 2026-07-28 00:41:49 -04:00
Peter Steinberger
f036ed43a2 fix(codex): prevent long conversations slowing on thread resume (#114882)
* fix(codex): reduce native thread resume overhead

* test(codex): register native attempt connection shard

* fix(codex): keep oversized rollouts on bounded fast path
2026-07-27 23:56:44 -04:00
Peter Steinberger
cba26e3b68 fix(pr): bind review artifacts to the PR being landed (#114897)
scripts/pr review artifacts carried no PR identity, so a review authored for
another PR validated clean and could gate someone else's landing. Stamp both
review.json and review.md with the reviewed PR number and head, anchor
pr-meta.json to the guarded pr-meta.env, and re-stamp foreign artifacts on init
instead of silently adopting them. review-claim now works in the PR worktree so
no subcommand writes review state to the shared canonical checkout.
2026-07-27 23:55:21 -04:00
Peter Steinberger
938749180e refactor(nodes)!: retire arming leases for durable capability enablement (#114892)
* refactor(nodes): retire phone control leases

* fix(doctor): clean retired phone control state

* docs(nodes): document durable capability enablement

* docs(changelog): defer node enablement note

* fix(doctor): harden retired phone control cleanup

* fix(doctor): fail closed on unreadable lease state

* fix(doctor): validate retired lease journals

* fix(doctor): preserve deny-shadowed consent

* docs: refresh node authorization map

* fix(doctor): keep retirement helpers private
2026-07-27 23:51:30 -04:00
Peter Steinberger
577a0642fa fix(plugin-sdk): classify loopback hosts consistently (#114832)
* fix(plugin-sdk): expose loopback host classifier

* fix(ollama): remove stale host normalizer import

* chore: keep release notes in PR context
2026-07-27 22:55:44 -04:00
Peter Steinberger
4273ca9dbd refactor(sessions): remove file-era transcript runtime (#113233)
* refactor(sessions): keep helper transcripts in memory

* refactor(sessions): remove file-era transcript storage

* test(sessions): use SQLite identity in attempt persistence

* test(codex): isolate legacy transcript fixtures

* fix(sessions): preserve SQLite transcript identity

* fix(sessions): harden transcript lifecycle invariants

* fix(sessions): validate transcript identities

* fix(sessions): close identity compatibility gaps

* fix(sessions): preserve leaf and plugin identities

* fix(sessions): retain dispatch transcript targets

* fix(sessions): preserve active transcript context

* fix(sessions): isolate artifact accounting

* fix(sessions): bound SQLite usage accounting

* fix(sessions): retain bounded latest usage

* fix(sessions): align rebased transcript targets

* test(sessions): align accessor scope fixture

* fix(telegram): derive SQLite transcript identity

* refactor(sessions): remove file-era compaction residue

* chore(sessions): lower max-lines baseline

* fix(sessions): preserve structured transcript identity

* test(sessions): align doctor identity assertions

* fix(sessions): isolate default SDK database

* refactor(sessions): remove dead file-era exports

* fix(sessions): reconcile SQLite transcript identity

* fix(sessions): pass checkpoint identity explicitly

* test(sessions): make entry field probe explicit

* test(sessions): satisfy transcript cleanup lint

* test(sessions): align diagnostics identity proof

* fix(sessions): finish transcript runtime teardown

* fix(sessions): preserve transcript identity invariants

* fix(sessions): harden transcript compatibility edges

* fix(sessions): preserve checkpoint transcript anchors

* fix(sessions): preserve SQLite lifecycle invariants

* fix(sessions): retarget compaction successors

* test(sessions): preserve transcript fixture semantics

* feat(plugin-sdk): add command transcript targets

* fix(sessions): serialize transcript rewrites

* fix(sessions): validate legacy successor identity

* fix(sessions): normalize compaction ownership

* fix(sessions): validate successor identity before adoption

* fix(sessions): preserve plugin transcript ownership

* fix(sessions): carry transcript identity through commands

* fix(sessions): import legacy checkpoint artifacts into SQLite

* fix(sessions): preserve successor transcript ownership

* fix(sessions): align transcript consumers with target identity

* fix(sessions): scope transcript token estimates

* fix(sessions): retain agent identity across lifecycle hooks

* fix(sessions): resolve scoped SQLite targets

* fix(sessions): isolate lifecycle transcript targets

* fix(sessions): validate compaction agent ownership

* fix(sessions): preserve reset and cleanup lifecycle

* fix(sessions): serialize prompt cleanup lifecycle

* fix(sessions): remove stale lock import

* fix(sessions): preserve reset target context

* fix(sessions): fence prompt reload takeover

* fix(sessions): unblock abort and default lifecycle reads

* fix(sessions): validate legacy successor scope

* fix(sessions): reject metadata-only runtime rows

* fix(sessions): propagate custom transcript stores

* fix(sessions): preserve adopted retry targets

* fix(sessions): allow unkeyed usage reads

* fix(sessions): harden runtime target boundaries

* fix(sessions): serialize retry transcript writes

* fix(sessions): bound prompt reload disposal

* fix(sessions): complete retry marker identity

* fix(sessions): keep legacy marker identity minimal

* test(sessions): tighten teardown fixture types

* fix(sessions): preserve compatibility target identity

* test(sessions): persist post-checkpoint boundary turn

* test(sessions): align runtime store mock contracts

* style(sessions): simplify persisted identity guard

* fix(sessions): prefer complete typed targets

* fix(sessions): recover legacy marker targets

* test(sessions): align marker lookup fixture scope

* fix(sessions): validate partial transcript targets

* fix(sessions): reconcile partial transcript identities

* fix(sessions): canonicalize compatibility identities

* test(sessions): cover compatibility aliases

* fix(sessions): adopt legacy successor identity

* fix(sessions): preserve usage read identity

* fix(sessions): preserve partial marker compatibility

* fix(sessions): validate legacy successor mappings

* fix(sessions): reconcile marker store mappings

* fix(sessions): preserve legacy fallback identity

* fix(sessions): harden marker alias resolution

* fix(sessions): prefer verified successor aliases

* fix(sessions): resolve preferred marker aliases

* fix(sessions): serialize cleanup admission

* fix(sessions): align marker lookup scopes

* fix(codex): type marker alias summaries

* style(sessions): satisfy changed lint

* test(sessions): align structured target assertions

* fix(sessions): reconcile latest identity contracts

* fix(sessions): validate transcript identity boundaries

* docs(sessions): explain stable registry keys

* fix(sessions): harden compatibility target round trips

* fix(sessions): port usage identity to split modules

* test(sessions): align subagent transcript identity

* fix(sessions): finish transcript identity migration

* fix(agents): route subagent completion capture through transcript targets

* fix(agents): settle SQLite prompt handoff during cleanup

* chore: shrink max-lines baseline after teardown

* fix(sessions): port teardown across split runtime owners

* fix(sessions): carry transcript targets through split owners

* test(agents): use SQLite compaction target in abort coverage

* chore: retain unrelated max-lines suppressions

* chore: shrink max-lines baseline after main splits

* style(agents): const compaction checkpoint locals

* fix(sessions): harden SQLite teardown boundaries

* test(sessions): use typed metadata in predicate isolation fixture

* test(agents): cover malformed settlement rejections lint-safely

* fix(sessions): close remaining SQLite identity races

* fix(agents): fail closed on incomplete successor targets

* fix(sessions): preserve transcript identity fallbacks

* fix(agents): preserve session-key abort admission

* fix(trajectory): validate incomplete export targets

* test(sessions): drop retired pricing cache imports

* fix(sessions): validate partial transcript identities

* fix(sessions): close transcript identity edge cases

* fix(plugins): reserve retired transcript locator slot

* fix(sessions): scope transcript locks by target

* style(sessions): simplify SDK initialization error

* fix(sessions): preserve initialized transcript state

* fix(codex): verify mirrored history session keys

* fix(sessions): reject stale transcript ownership

* fix(sessions): anchor asynchronous transcript ownership

* fix(sessions): measure active transcript state

* fix(sessions): preserve scoped transcript compaction

* fix(sessions): harden transcript identity and lifecycle

* fix(sessions): resolve scoped command transcript stores

* fix(sessions): make transcript appends failure-atomic

* fix(sessions): enforce scoped transcript ownership

* fix(sessions): reject cross-owner transcript handoffs

* fix(sessions): fence cleanup transcript ownership

* fix(sessions): retire stale write ownership contexts

* fix(sessions): preserve pending session migration state

* fix(sessions): validate migrated transcript ownership

* fix(sessions): validate usage transcript targets

* fix(sessions): clear predecessor transcript metadata

* fix(sessions): align durable session event targets

* fix(sessions): fence late prompt handoffs

* fix(sessions): fence lifecycle transcript fallbacks

* fix(sessions): bound zero-length memory capture

* fix(sessions): preserve transcript teardown ownership

* fix(sessions): reject duplicate cleanup ownership

* fix(sessions): serialize runtime writes with sqlite leases

* fix(sessions): close sqlite teardown concurrency gaps

* fix(sessions): preserve nested lifecycle failures

* fix(sessions): canonicalize sqlite transcript ownership

* fix(sessions): settle disposed prompt handoffs

* fix(sessions): resolve canonical attempt lock targets

* test(sessions): align canonical target fixtures

* test(sessions): retire redundant jsonl parser coverage

* refactor(sessions): split active transcript cursors

* test(memory): retire legacy marker fixture

* fix(sessions): preserve canonical transcript access after rebase

* fix(sessions): fence prompt lease and return transcript targets

* fix(sessions): colocate transcript leases with target store

* fix(sessions): canonicalize transcript lease and worker targets

* fix(sessions): preserve plugin and fork identity markers

* fix(sessions): complete sqlite transcript target migration

* fix(sessions): integrate canonical followup identity

* fix(sessions): preserve bounded transcript topology

* fix(sessions): validate transcript identity boundaries

* fix(context): separate caller and successor targets

* test(sessions): split persistence compatibility coverage

* test(sessions): preserve fixture topology efficiently

* chore(sdk): refresh plugin api baseline

* test(agents): align compaction lock target mocks

* test(sessions): seed malformed transcript fixtures directly

* fix(agents): canonicalize transcript compatibility inputs

* fix(agents): type optional tool result ids

* test(ci): stabilize loaded process timing

* test(tui): wait for collect queue admission
2026-07-27 22:33:24 -04:00
Peter Steinberger
5ae4a8fb8e fix(release): trust corrected beta runtime evidence (#114838)
* fix(release): trust corrected beta runtime evidence

* style(test): format runtime evidence cases
2026-07-27 21:14:41 -04:00
Peter Steinberger
d5e46646f2 refactor(gateway-protocol): derive schema registries from owner fragments (#114817)
* refactor(protocol): share schema owner barrel

* refactor(protocol): extract ordered schema fragments

* refactor(protocol): compose public schema registry

* docs(protocol): document schema fragments

* ci(protocol): guard schema registry structure

* style(protocol): satisfy registry guard lint
2026-07-27 21:08:20 -04:00
Peter Steinberger
1e2f918c29 chore(sdk): record flushLogger in the deprecated surface budgets (#114827) 2026-07-27 21:00:45 -04:00
Peter Steinberger
0bfe7dd357 feat(plugins): deliver sessions.changed to plugin services (#114813)
* feat(plugins): deliver sessions.changed to plugin services

* docs: regenerate docs map

* refactor(clickclack): split reconcile scheduler and history formatting out of the discussion service

* style: format discussion service
2026-07-27 20:56:44 -04:00
Peter Steinberger
6125edfb76 fix(pr): require ripgrep consistently (#114809) 2026-07-27 20:23:25 -04:00
Peter Steinberger
a1e0c9ea09 refactor(packages): DM-policy contract suite, dead routes, package folds (#114776)
* test(channels): share DM policy contract suite

* refactor(memory): remove dead host CLI routes

* refactor(acp): use canonical normalization helpers

* refactor(web): fold provider runtime into core

* refactor(packages): remove dead runtime exports

* chore(knip): drop retired ACP entry roots
2026-07-27 20:20:13 -04:00
Peter Steinberger
1cbbda18c3 perf(logging): flush file transport asynchronously off the request path (#114769)
* perf(logging): flush file transport asynchronously off the request path

* fix(ci): record flushLogger surface growth and drain before log reads

- +1 public export/callable budget with annotation: logger file-transport
  flush for graceful shutdown drains; regenerate SDK API baseline
- three tests that read the log file right after logging now drain the
  async file transport first (flushLogger) instead of racing the flusher

* test: drain async log transport before reading talk and request-trace logs

* test: drain async log transport in CLI logger file tests

* test: drop unused withTempDirSync import
2026-07-27 19:40:43 -04:00
Peter Steinberger
0fdc825b29 fix(ui): make the Control UI e2e suite green and gate merges on it (#114554)
* fix(ui): restore chat flow e2e coverage

(cherry picked from commit 16a094eaec4ae121db09f67c094a41262aa9cefc)

* test(ui): align browser Talk mocks with voice sessions

(cherry picked from commit ef0649334539954b253ab8c51ff436bd8ce757c6)

* test(ui): wait for chat startup in update E2E

(cherry picked from commit 586e1046320dd56398fd8a3b995a1a465f6c6fe2)

* test(ui): update sidebar session route expectation

(cherry picked from commit 9692985027556fad7bb7819c8e140a101e181c47)

* test(ui): update session management e2e contracts

(cherry picked from commit 4e99348dabf08fb8886d55e25a9f9eda1dfe1056)

* test(ui): align Codex session E2E contracts

Update the catalog layout assertion for reorderable sibling sections, expose advanced plugin settings explicitly, and make adopted sessions resolvable through the current path router.

(cherry picked from commit 1a03f924a32facb23302c5618a2b15004feeccff)

* test(ui): align composer e2e with metadata hydration

(cherry picked from commit eca1902e773be32c993ddb22594925f7da82f98f)

* fix(ui): restore usage hint click behavior

(cherry picked from commit ea63b5dab7c3c54048a04d60703e529e5b900df6)

* fix(ui): give reveal-only tooltips an explicit click-to-open opt-in

#112602 made the shared tooltip dismiss on pointer activation so an action
button never strands one open. The usage summary hint exists only to be read,
so clicking it did nothing on touch or in browsers that skip focus on click.
Opt that trigger in rather than bouncing focus through blur/focus, which
briefly drops focus for assistive tech.

(cherry picked from commit 16d165857a4006ae0a0df42168f34a40f4cc9117)

* test(ui): follow sidebar dock resize ownership

(cherry picked from commit fd4792a2dd9fc81fc63f8c9e25291ff2246d235a)

* test(ui): prove the dock resize persists off its clamp

Asserting the post-End width equals SIDEBAR_MIN_WIDTH_PX compared the clamp
to itself across reload, so the check would pass even if the persisted width
were dropped and the column fell back to its minimum. Step off the clamp
first and assert that value survives.

(cherry picked from commit 3636124c326a93b80006ccc4064415ec1a6c2c9f)

* test(ui): align native link routing e2e contracts

Use a non-link bubble hit target after flat assistant styling, assert modified clicks at the routing boundary instead of relying on Chromium tab creation, and preserve native context menus for internal anchors.

(cherry picked from commit 55fbd3052a40c5c03f00f0bf595ef356ac0d1f10)

* test(ui): align native catalog host assertions

(cherry picked from commit 9db9a2fcd5633675a88296b2ccd874563a00cb80)

* test(ui): target tool outcome rollup at dashboard session

Completed-work groups are dashboard-only, so the legacy main session never rendered the disclosure exercised by this test.

(cherry picked from commit ba84b617ef038866451ad03491298349d966a54f)

* test(ui): track discussion panel close action

The flexible multi-sidebar layout replaced the generic Close sidebar action with a panel-specific Close Discussion action. Keep the E2E toggle proof aligned with that intentional accessible-name contract.

(cherry picked from commit 422b1f2bd8fae2a7571881d0455c3040c2ef2de9)

* test(ui): mock pairing list in WhatsApp logout e2e

(cherry picked from commit 3730de075bbb50071fc0cb57c007ab894688a7a1)

* test(ui): open build info from identity menu

(cherry picked from commit b1626a6a723ec13c2cf50444b4c7a65fec289213)

* fix(ui): let the board fixture host page own its theme

The fixture module unconditionally re-added `wa-dark` at import time, which
runs after the host page's inline theme script. #111998 gave that page the
real prefers-color-scheme contract, leaving the line from #112076 stale: in
light mode the root ended up with both `wa-light` and `wa-dark`, so Web
Awesome rendered dropdowns dark.

(cherry picked from commit 43e50de9728f3d5feac9609142d28821896b4f77)

* test(ui): align approval E2E with scoped errors

(cherry picked from commit 6435fe995491c6bae2c28fa374d06cd77f3c46ac)

* test(ui): use radio role in Set Default E2E

(cherry picked from commit acc8d5a487aac4d56515ae35d976fd347efa0be5)

* ci: gate merges on the Control UI e2e suite

test/vitest/vitest.ui-e2e.config.ts was referenced only by package.json and
mantis-web-ui-chat-proof.yml, so nothing in the merge gate ever ran it and 39
failures accumulated across 21 files (#114438). Give it its own job: the suite
runs one file at a time because each owns a Chromium context and a mocked
Gateway, ~21 min measured, which does not fit checks-ui's 20-minute budget.
Also route the config file itself through the Control UI changed-scope so a
change to it triggers the job.

* test(ui): isolate MCP app conformance from sidecars

(cherry picked from commit c2bfd0a00edad804474ebb23449d3150557c7f78)

* test(ui): list newly created E2E sessions

(cherry picked from commit e1a2188699011e818e040358d4eaf6ce26eb0732)

* test(ui): synchronize full-suite e2e setup

* test(ui): drop implied-eval module import and align the e2e workflow guard

* test(ui): wait for pin editor roving focus before keyboard nav

* test(ui): read the startle class in one in-page step

* test(ui): synchronize transient e2e assertions
2026-07-27 19:31:31 -04:00
chenyangjun-xy
15ae1ddb93 fix(plugin-sdk): reject malformed UTF-8 in live provider model catalog responses (#111766)
* fix: reject malformed UTF-8 in live provider model catalog responses

Add { fatal: true } to TextDecoder in readLiveModelCatalogJson so
invalid UTF-8 bytes throw a TypeError before JSON.parse instead of
silently becoming U+FFFD.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* test(plugin-sdk): add fallback proof for malformed UTF-8 in live catalog

Adds a focused test that constructs raw bytes with an invalid 0xFE byte
inside a JSON string value and validates that buildLiveModelProviderConfig
catches the Typeerror and falls back to the static catalog rows.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(pr): classify auto-merge failures without ripgrep

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-27 18:03:09 -04:00
Peter Steinberger
69b54cf13c chore(docs): harden external link audit results (#114746) 2026-07-27 17:37:02 -04:00
Peter Steinberger
7e8afba703 feat(plugins): mirror local coding sessions to a remote Beam receiver (#114735)
* feat(plugins): mirror local coding sessions to a remote Beam receiver

* fix(plugins): satisfy static gates for the Beam mirror seam

* fix(plugins): import the config type from the narrow contracts subpath

* fix(plugins): require catalog consent and loopback-only plaintext for the Beam mirror
2026-07-27 17:31:34 -04:00
Zakaria Rahali
a04ba3a468 fix(config): compaction.enabled is rejected as invalid config (#114118)
* fix(config): compaction.enabled is rejected as invalid config

Setting agents.defaults.compaction.enabled in openclaw.json made the
whole config fail to load with "agents.defaults.compaction: Invalid
input", so auto-compaction could not be turned off.

The runtime already reads the field (SettingsManager.getCompactionEnabled
returns settings.compaction?.enabled ?? true, and setCompactionEnabled
writes it), and the documented config example in
docs/reference/session-management-compaction.md already shows
"enabled: true". Only the zod schema was missing the key, and the
compaction object is .strict(), so the unknown key rejected the config.

Adds enabled to AgentDefaultsSchema and to AgentCompactionConfig.

Closes #110065

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* fix(config): wire compaction enablement through runtime

Align the accepted compaction.enabled contract across runtime precedence, help, labels, docs, and generated schema baselines.

Co-authored-by: Zakaria Rahali <zakariarahali288@gmail.com>

* test(config): preserve omitted compaction setting

Document the reload lifecycle and lock in project-setting precedence when the OpenClaw config key is absent.

Co-authored-by: Zakaria Rahali <zakariarahali288@gmail.com>

* refactor(config): centralize compaction runtime override

* fix(config): preserve compaction safety guards

* fix(scripts): avoid ripgrep in merge fallback

* docs(config): refresh current main baseline

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-27 17:23:35 -04:00
Peter Steinberger
6f7edb3695 fix: make auto-review and PR triage fail safely (#114745)
* fix: make auto-review and PR triage fail safely

* test: cover fail-closed PR merge review gates

* fix: preserve GitHub pending-check review semantics
2026-07-27 17:11:28 -04:00
Peter Steinberger
f0e81b97e8 refactor(model-picker): centralize session apply contracts (#114739)
* refactor(model-picker): centralize session apply contracts

* fix(ci): keep model apply helper result internal

* fix(model-picker): require channel codec opt-in
2026-07-27 16:58:23 -04:00
Jason (Json)
62baf451c1 fix(deepinfra): remove deprecated embedding provider warning (#114727)
* fix(deepinfra): migrate embedding provider registration

* fix(deepinfra): preserve embedding index identity
2026-07-27 14:53:34 -06:00