Peter Steinberger
31425b50a8
test(worker): add cloud worker fault injection gate ( #105921 )
2026-07-13 03:17:53 -07:00
Peter Steinberger
d65ec597a1
improve(ui): restyle composer send button as filled accent circle ( #106046 )
...
* feat(ui): restyle composer send button as filled accent circle
The send button was an outline ghost (transparent bg, 1px accent border,
outlined paper plane) while every other primary action uses the solid
.btn.primary fill. Send now matches: solid accent circle, white arrow-up
glyph, accent-hover + glow on hover, muted fill when disabled. Stop and
voice variants drop their borders and escalate via fill strength instead.
* fix(ui): keep send button focus ring visible under hover
Hover rules now set box-shadow and out-specify :focus-visible, so a
box-shadow focus ring vanished for keyboard users hovering the control.
Use an offset outline instead; hover shadows cannot override it.
* chore(ui): compact arrow icons to satisfy TS LOC ratchet
icons.ts is over the 500-line ratchet cap, so the new arrowUp entry
must not grow the file; merge each arrow's two paths into one
(identical rendering) for a net -4 lines.
2026-07-13 03:17:16 -07:00
Peter Steinberger
a2da4700be
refactor: consolidate remaining bounded concurrency ( #106265 )
2026-07-13 03:16:28 -07:00
Vincent Koc
e474ba38e8
fix(sqlite): serialize offline maintenance with gateway ( #106210 )
2026-07-13 18:15:32 +08:00
Peter Steinberger
b395dfca85
improve(ui): load optional shell surfaces on demand ( #106243 )
...
* perf(ui): lazy-load optional shell surfaces
* fix(ui): align lazy shell static contracts
2026-07-13 03:15:00 -07:00
Peter Steinberger
f355f6afbb
fix(installer): pass SQLite probe over stdin ( #106252 )
2026-07-13 03:13:14 -07:00
Peter Steinberger
6bb85f177f
feat(onepassword): optional 1Password secrets broker plugin ( #106133 )
...
* feat(onepassword): add optional 1Password secrets broker plugin
Curated slug registry with per-item auto/approve/deny policy, plugin-approval
gating with expiring allow-always grants, SQLite audit history, onepassword
status/audit CLI, and a single-attempt op client (--cache=false, minimal env).
Closes #105924
* docs(plugins): refresh generated inventory count after rebase
* fix(onepassword): scope grants and field reads
* fix(onepassword): bound grant retention
* fix(onepassword): satisfy deadcode ratchet and hook allowlist contract
* fix(onepassword): honor live policy reloads
* refactor(onepassword): trim private exports
* test(onepassword): satisfy plugin boundaries
* test(onepassword): document temp directory boundary
2026-07-13 03:12:47 -07:00
Vincent Koc
5eb52493c7
refactor(config): remove dead session runtime exports ( #106197 )
2026-07-13 18:11:31 +08:00
xingzhou
c3cb1af93c
fix(transcripts): stop live capture when the agent run is canceled ( #104123 )
...
* fix(transcripts): stop live capture when the agent run is canceled
* fix(transcripts): preserve startup cleanup ownership
* fix(transcripts): keep runtime session type internal
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-13 03:11:25 -07:00
Peter Steinberger
7c9b8baa2b
refactor(gateway): consolidate TypeScript WebSocket clients ( #106113 )
...
* refactor(gateway): unify websocket clients
* fix(gateway): preserve adapter lifecycle behavior
* test(gateway): keep reconnect proof black-box
* chore(gateway): satisfy shared client lint
* refactor(gateway): keep protocol decisions internal
* refactor(gateway): preserve shared reconnect supervision
* test(gateway): use canonical browser barrel
* fix(gateway): resolve browser retry workspace source
* refactor(gateway): tighten shared protocol types
2026-07-13 03:08:21 -07:00
Peter Steinberger
581cf6601a
refactor(deadcode): trim memory-core type exports ( #106263 )
2026-07-13 03:04:08 -07:00
Peter Steinberger
380f6c8086
fix(plugin-sdk): ratchet wildcard surface budget ( #106242 )
2026-07-13 02:58:22 -07:00
Peter Steinberger
9092e59a43
refactor(agents): trim sandbox test seams ( #106257 )
2026-07-13 02:58:06 -07:00
Vincent Koc
96df5a0243
fix(ci): refresh plugin SDK API baseline ( #106253 )
2026-07-13 17:54:43 +08:00
Peter Steinberger
69710f1e88
refactor(deadcode): trim whatsapp session config exports ( #106256 )
2026-07-13 02:53:15 -07:00
Peter Steinberger
7efdd9d706
fix(ci): import oc-path limits from their defining module in security test
2026-07-13 02:47:57 -07:00
Peter Steinberger
9ea4b167fa
refactor(deadcode): trim channel auth exports ( #106247 )
2026-07-13 02:45:34 -07:00
RickLin
21c377873d
fix(agents): classify account-restricted model 400s as model_not_found ( #104878 )
...
* fix(agents): classify account-restricted model 400s as model_not_found
OpenAI-backed runtimes reject plan/account-restricted models with HTTP
400 invalid_request_error ("The '<model>' model is not supported when
using Codex with a ChatGPT account."). Without a model_not_found match
the ambiguous-400 branch collapses this into a format failure, so users
get the generic retry//new copy for a config-only problem (#104490 ).
The 'when using' qualifier keeps capability rejections ("not supported
for tool calling") out of the class, preserving the #97611 contract.
Fixes #104490
* fix(agents): narrow account model rejection match
---------
Co-authored-by: Altay <altay@hey.com >
2026-07-13 12:44:40 +03:00
Peter Steinberger
d7a2ec779a
fix(ci): retain macOS notification test observer
2026-07-13 10:39:25 +01:00
Peter Steinberger
73a0bf4b7c
refactor(apple): share chat gateway payload mapping ( #106154 )
...
* refactor(apple): share chat gateway payload mapping
* test(apple): track shared event mapping
2026-07-13 02:39:01 -07:00
zhangqueping
87e2bafe00
fix(config): clear snapshot marker on transient read error so future updates retry ( #106105 )
...
* fix(config): clear snapshot marker on transient read error so future updates retry
The pre-update config snapshot marks a config path as snapshotted
before attempting the I/O. If readFile or writeFile threw a transient
error (e.g. disk space exhaustion, file locking), the catch block kept
the in-memory marker intact, permanently blocking snapshot retries for
the lifetime of the process.
Clear the marker in the catch block so a subsequent update can attempt
the snapshot again.
Fixes #105431
* test(config): cover snapshot retry failures
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-13 02:34:51 -07:00
Peter Steinberger
6cd1133858
feat(cloud-workers): openclaw worker mode running the embedded loop on the box ( #105865 )
...
* feat(cloud-workers): add restricted worker runtime
* test(cloud-workers): cover worker runtime contracts
* docs(cloud-workers): document worker mode
* fix(worker): bound connection lifecycle
* fix(worker): serialize transcript flushes
* fix(worker): fail stop stale transcript bases
* fix(worker): degrade lossy live streaming
* test(worker): cover inference reconnect fencing
* refactor(worker): split RPC clients
* refactor(worker): split connection transport
* refactor(worker): split embedded runtime
* refactor(worker): narrow worker module exports
2026-07-13 02:34:31 -07:00
Peter Steinberger
9b565e8d50
refactor(plugins): trim long-tail dead exports ( #106230 )
...
* refactor(extensions): trim long-tail plugin exports
* refactor(whatsapp): remove dead media relay
2026-07-13 02:34:06 -07:00
Peter Steinberger
598e3092f7
refactor(deadcode): trim oc-path barrel ( #106240 )
2026-07-13 02:33:39 -07:00
Peter Steinberger
843e3c7878
improve(gateway): speed up pristine plugin-heavy startup [AI] ( #106195 )
...
* perf(gateway): skip absent core startup migrations
* fix(gateway): revalidate recovered startup config
2026-07-13 02:32:24 -07:00
Peter Steinberger
938d41014f
feat(mobile): default pairing to full node access ( #105928 )
...
* feat(mobile): default pairing to full node access
* chore: leave release notes to release workflow
* refactor(mobile): bound pairing helpers
* chore(i18n): refresh mobile access inventory
* chore(ci): lower mobile pairing LOC baseline
* fix(mobile): complete pairing validation artifacts
* ci: remove stale transcript target export baseline
* fix(ios): wrap access upgrade guidance
* fix(ios): preserve localized access key
* fix(ci): dedupe read-only SQLite guardrail
* fix(mobile): secure full-access node setup
2026-07-13 02:30:45 -07:00
Peter Steinberger
16b1bd2032
fix(android): support gateway protocol v3 ( #106205 )
2026-07-13 02:29:16 -07:00
Vincent Koc
c43c960aad
refactor(ui): trim private realtime type exports ( #106221 )
2026-07-13 17:27:01 +08:00
Peter Steinberger
d71a9e1a13
refactor(slack): use Web API response contracts ( #106234 )
2026-07-13 02:26:49 -07:00
Peter Steinberger
8c9b034480
refactor(agents): trim sandbox export seams ( #106237 )
2026-07-13 02:25:42 -07:00
Peter Steinberger
d280c20aab
fix(ui): simplify Settings titlebar controls ( #106228 )
...
* fix(ui): simplify Settings titlebar controls
* chore(ui): leave release notes to release flow
2026-07-13 02:25:17 -07:00
chengzhichao-xydt
1ed04910e2
fix(azure-speech): add timeout to voices list request ( #102984 )
...
* fix(azure-speech): add timeout to voices list request
* test(azure-speech): simplify voice timeout proof
* test(azure-speech): mark voice keys as placeholders
---------
Co-authored-by: chengzhichao-xydt <chengzhichao-xydt@users.noreply.github.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-13 02:25:13 -07:00
Peter Steinberger
95d9457465
fix(ui): preserve worktree mutation errors ( #106196 )
2026-07-13 02:24:33 -07:00
Peter Steinberger
4f287dd740
refactor(process): adopt Execa execution layer ( #105939 )
...
* refactor(process): adopt execa execution layer
* fix(process): preserve launch error semantics
* chore(process): ratchet exec size baseline
* fix(process): preserve Windows and error contracts
* chore(plugin-sdk): ratchet wildcard surface budget
* test(process): allow resolved Windows executable paths
* fix(process): preserve Windows shim completion
* test(process): isolate Execa mocks
* style(process): format Windows exec test
* style(process): apply Windows test formatting
* test(process): normalize Windows system path casing
* fix(process): harden execa edge handling
* test(tui): preserve ESM fixture semantics
* fix(process): preserve PATHEXT lookup contract
* fix(process): keep invocation type internal
2026-07-13 02:21:08 -07:00
Peter Steinberger
bc691eabbc
fix(docs-i18n): preserve split fenced blocks
2026-07-13 05:20:21 -04:00
Peter Steinberger
8e0c82ba0a
fix(ui): stroke new-session target icons instead of black fills ( #106193 )
2026-07-13 02:18:18 -07:00
Peter Steinberger
7da28f3704
fix(plugin-sdk): freeze directory compat exports ( #106222 )
2026-07-13 02:14:02 -07:00
Peter Steinberger
5daeb86570
test(ui): fix Workboard sidebar E2E timeout ( #106160 )
2026-07-13 02:13:14 -07:00
Peter Steinberger
227533c813
fix(deadcode): track maturity renderer exports ( #106225 )
2026-07-13 02:13:02 -07:00
Peter Steinberger
3261667b73
fix(ios): keep reconnect errors visible ( #105875 )
...
* fix(ios): keep reconnect errors visible
* fix(ios): clear stale errors on gateway switch
* chore(ios): keep release notes in PR
* fix(ios): reset status when switching gateways
* fix(ios): retain errors through same-target reconnect
* fix(ios): unpause explicit pairing retries
* fix(ios): isolate retained reconnect errors
* chore(i18n): resync rebased native inventory
* fix(ios): separate reconnect display state
2026-07-13 02:11:26 -07:00
Peter Steinberger
bafabba0df
fix(gateway): preserve Control UI turns across restarts ( #106151 )
...
* fix(gateway): preserve Control UI turns across restart
* perf(sessions): index restart recovery state
* fix(sessions): avoid replaying pre-admitted turns
* fix(sessions): index per-entry recovery status
* fix(sessions): guard restart failure notices
* fix(sessions): preserve terminal claims across admissions
* fix(sessions): retry failed recovery notices
* fix(sessions): harden restart retry ownership
* fix(gateway): tighten restart recovery typing
* fix(sessions): close restart recovery races
* refactor(sessions): split restart recovery ownership
* chore(sessions): clean restart recovery lint
* chore: drop release-owned changelog entry
* fix(gateway): satisfy restart recovery guards
* test(gateway): cover Control UI durable admission
2026-07-13 02:08:56 -07:00
openclaw-mantis[bot]
ea5758dd13
chore(ui): refresh control ui locales ( #106214 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-13 02:07:43 -07:00
Peter Steinberger
48e212a19a
refactor(agents): trim embedded runner exports ( #105855 )
...
* refactor(agents): trim embedded runner exports
* chore(deadcode): refresh export baseline
2026-07-13 02:07:28 -07:00
Peter Steinberger
22daf8f234
fix(pr): paginate changed file metadata ( #106217 )
2026-07-13 02:02:47 -07:00
Peter Steinberger
a8ae27fd35
fix(ui): drop duplicated runNotStarted locale blocks
...
Two UI PRs landed near-simultaneously and their generated locale syncs
each carried a runNotStarted block, breaking check-prod-types (TS1117
duplicate object keys) in all 20 generated locales. en.ts was correct.
Keep the newer block (TS last-wins, so this is the already-live text).
2026-07-13 02:01:30 -07:00
mushuiyu886
ed57c6cd88
fix(agents): honor claude-cli contextTokens setting ( #93198 )
...
* fix: honor claude-cli configured context tokens
* test: cover claude-cli native compaction budget
* test: cover ordinary claude-cli budget persistence
* test: migrate claude-cli budget fixtures to session accessor
* fix(agents): carry CLI provider into context budget
* fix(agents): guard optional CLI context metadata
* fix(agents): align Claude CLI native compaction budget
Co-authored-by: 杨浩宇0668001029 <yang.haoyu@xydigit.com >
* fix(agents): apply selected CLI context cap
Co-authored-by: 杨浩宇0668001029 <yang.haoyu@xydigit.com >
* fix(agents): preserve prepared CLI context budgets
Co-authored-by: 杨浩宇0668001029 <yang.haoyu@xydigit.com >
* fix(agents): resolve prepared CLI context ownership
Co-authored-by: 杨浩宇0668001029 <yang.haoyu@xydigit.com >
* test(agents): type CLI context budget cases
Co-authored-by: 杨浩宇0668001029 <yang.haoyu@xydigit.com >
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-13 01:58:44 -07:00
Peter Steinberger
a788617325
fix(qa-lab): report authoritative Crabline readiness artifact ( #106039 )
...
* fix(qa-lab): preserve readiness artifact path
* test(qa-lab): keep readiness fixture in generation
* docs(qa-lab): explain readiness fallback order
* style(qa-lab): format readiness fixture
* refactor(qa-lab): isolate Crabline artifact paths
* refactor(qa-lab): keep artifact path type local
* fix(qa-lab): remove stale Crabline type import
* fix(qa-lab): restore Crabline selection type import
2026-07-13 01:55:12 -07:00
Peter Steinberger
1136757174
refactor: consolidate bounded concurrency on p-limit and p-map ( #106002 )
...
* refactor: adopt p-limit and p-map for bounded concurrency
* chore: normalize lockfile ordering
* fix: preserve memory host concurrency export
* refactor: keep media apply within size budget
* fix: drain memory concurrency before failure
* fix: satisfy memory concurrency guards
* chore: scope memory host dead-code checks
* chore: lower concurrency LOC baselines
* fix: preserve concurrency API surfaces
* chore: reconcile concurrency LOC baseline
* test: keep memory concurrency gate portable
* style: simplify concurrency drain
* ci: refresh deadcode export baseline
2026-07-13 01:53:28 -07:00
Peter Steinberger
83bf0379c9
refactor(channels): share plugin contract scaffolds ( #105838 )
...
* refactor(channels): share plugin contract scaffolds
* fix: preserve channel config hint metadata
* chore: refresh Plugin SDK API baseline
* ci: refresh plugin SDK surface budget
* fix(ci): allow read-only state database boundary
* fix(ci): dedupe read-only state database boundary
2026-07-13 01:51:32 -07:00
Peter Steinberger
39cda9e548
refactor(mattermost): trim private runtime facade ( #106114 )
...
* refactor(mattermost): trim private runtime facade
* refactor(mattermost): remove stale runtime note
* fix(mattermost): preserve legacy history exports
* chore(deadcode): refresh export baseline
2026-07-13 01:49:21 -07:00