Commit Graph

68661 Commits

Author SHA1 Message Date
Peter Steinberger
fbe033214d test: speed doctor plugin install tests (#108022) 2026-07-14 22:21:26 -07:00
Peter Steinberger
1967e4c04d refactor(telegram): privatize internal plugin surfaces (#108026)
* refactor(telegram): privatize internal plugin surfaces

* chore(deadcode): refresh export baseline
2026-07-14 22:20:46 -07:00
Peter Steinberger
eebc0dbc33 refactor(auto-reply): split agent runner execution (#107985)
* refactor(auto-reply): split agent runner execution

* style(auto-reply): satisfy promise executor lint

* fix(ci): align refactor baselines and test types

* fix(ci): prune stale max-lines baseline
2026-07-14 22:20:25 -07:00
Peter Steinberger
9384a40393 build(linux): allow macOS and Windows test builds of the desktop app (#108004)
The desktop companion crate was Linux-only. All platform-specific code
lives in canvas.rs (WebKitGTK, cairo, unix sockets, SO_PEERCRED), so:
move webkit2gtk/cairo-rs/libc under linux target dependencies, gate the
canvas module, its protocol registration, invoke handler, and exit
shutdown to Linux, add a USERPROFILE home fallback and an explicit
no-op installer error for Windows, and add the multi-size icon.ico
Windows resource. Linux behavior is unchanged; macOS/Windows builds are
for testing (macOS cargo build+test green locally; Windows aarch64-msvc
built and launched in a Windows 11 ARM VM).
2026-07-14 22:17:05 -07:00
Peter Steinberger
51d85769b3 fix(ui): terminal artifacts after hide and show (#107970)
* fix(ui): repaint terminal after hide and show

* chore: leave release notes to release workflow

* fix(ui): keep terminal scrollbar hidden on repaint

* test(ui): assert terminal repaint pixels
2026-07-14 22:15:59 -07:00
Alix-007
f1778ad36b fix(ui): prevent browser screenshot fetch hangs (#107703)
* fix(ui): prevent browser screenshot fetch hangs

* test(ui): cover stalled screenshot body

* test(ui): verify screenshot timer cleanup

* test(ui): cover successful timer cleanup

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-14 22:15:03 -07:00
xydt-tanshanshan
f638cbd0f9 fix(doctor): preserve allowlist entries for version-bound runtime plugins during stale config scan (#107285)
* fix(doctor): preserve allowlist entries for version-bound runtime plugins (codex) during stale config scan

* fix(doctor): restore codex to scanner stale expectation, protect at repair-sequencing

Scanner now flags codex in plugins.allow as stale so diagnostics are visible.
Repair-sequencing preserves the entry via preservePluginIds which already
includes VERSION_BOUND_RUNTIME_PLUGIN_IDS.

* fix(doctor): scope version-bound runtime plugin preservation to allow surface only

ClawSweeper P2: VERSION_BOUND_RUNTIME_PLUGIN_IDS was applied globally
across all stale config surfaces (deny, entries, slots, channels, etc.),
but only plugins.allow needs preservation. Move to a surface-scoped
parameter surfacePreservePluginIds so codex is preserved only in allow.

* fix(doctor): harden version-bound allowlist repair

* fix(doctor): retain version-bound plugin policy

* fix(doctor): align version-bound plugin diagnostics

Co-authored-by: hailory <hailory@xydigit.com>

---------

Co-authored-by: hailory <hailory@xydigit.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-14 22:14:11 -07:00
qingminlong
7440a1ae83 fix(file-transfer): reject oversized dir.fetch preflights (#106293)
* fix(file-transfer): reject oversized dir fetch preflights

* test(file-transfer): cover real oversized dir preflight

* test(file-transfer): wrap oversized preflight fixture

* test(file-transfer): cover preflight du fallback

* ci: restore max-lines baseline entry

* fix(file-transfer): make dir preflight size check authoritative

* ci: drop stale max-lines baseline restore

* test(file-transfer): gate tar-backed preflight cases

* fix(file-transfer): preserve preflight bounds and errors

---------

Co-authored-by: Omar Shahine <10343873+omarshahine@users.noreply.github.com>
2026-07-14 22:14:08 -07:00
Peter Steinberger
e9fc23ad1f refactor(plugin-sdk): remove private testing barrel ahead of window (#108020) 2026-07-14 22:13:37 -07:00
Peter Steinberger
290836cafd refactor(config): split config I/O responsibilities (#107983)
* refactor(config): split config I/O

* fix(config): align split modules with guardrails

* fix(config): remove dead write metadata helper

* style(config): format write safety imports

* fix(config): preserve comment-loss warning on split writes
2026-07-14 22:11:22 -07:00
Peter Steinberger
5b097eb48c feat(ui): pick a repo folder and a cloud worker together in the new-session composer (#107976) 2026-07-14 22:10:58 -07:00
snowzlmbot
1eec68a6a0 fix(gateway): recover when suppressed channel secrets are unavailable (#106826)
* fix(gateway): preserve safe-mode secret recovery

* test(gateway): sanitize SecretRef fixtures

Co-authored-by: snowzlmbot <293528334+snowzlmbot@users.noreply.github.com>

* test(gateway): use inert token placeholder

Co-authored-by: snowzlmbot <293528334+snowzlmbot@users.noreply.github.com>

---------

Co-authored-by: snowzlmbot <293528334+snowzlmbot@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-14 22:08:58 -07:00
mushuiyu886
646dfd7e76 fix(plugins): preserve state on npm metadata failures (#107063)
* fix(plugins): preserve state on npm metadata failures

* fix(plugins): harden npm metadata recovery

Co-authored-by: 杨浩宇0668001029 <yang.haoyu@xydigit.com>

* refactor(plugins): adapt metadata errors to installer split

Co-authored-by: 杨浩宇0668001029 <yang.haoyu@xydigit.com>

* fix(plugins): validate preserved npm payloads

Co-authored-by: 杨浩宇0668001029 <yang.haoyu@xydigit.com>

* fix(plugins): satisfy update lint

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-14 22:05:15 -07:00
qingminlong
fc71a6c0d7 fix(matrix): parse JSON response types with mixed casing (#105470)
* fix(matrix): parse JSON content types case-insensitively

* test(matrix): require exact JSON media type

Co-authored-by: qingminlong <0668001063@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-14 22:03:17 -07:00
Peter Steinberger
aac4c16f84 refactor(doctor): split Codex route diagnostics (#107955) 2026-07-14 22:02:56 -07:00
clawsweeper[bot]
3a208a5068 fix(discord): prevent presence wake floods after reconnects (#107969)
* feat(discord): throttle online-presence events after gateway reconnects

After a Discord gateway (re)connect the presence replay burst emitted one
system event per member, waking the agent each time. Add a per-account
emission gate: a post-reconnect suppression window (default 5 min), a
sliding-window burst limit (default 8/60s, logged once per episode), and
a configurable per-user greeting cooldown (default 8h). New guild
presenceEvents knobs: cooldownSeconds, reconnectSuppressSeconds,
burstLimit, burstWindowSeconds.

* fix(discord): preserve presence throttle retries

* fix(discord): preserve presence throttle retries

* fix(discord): scope presence throttle per guild

Co-authored-by: openclaw-clawsweeper[bot] <openclaw-clawsweeper[bot]@users.noreply.github.com>

* fix(discord): keep presence gate internals private

Co-authored-by: openclaw-clawsweeper[bot] <openclaw-clawsweeper[bot]@users.noreply.github.com>

---------

Co-authored-by: openclaw-clawsweeper[bot] <openclaw-clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: Peter Steinberger <peter@steipete.me>
2026-07-14 22:02:53 -07:00
Peter Steinberger
74eea60e1b test(ci): serialize hooks process bootstraps (#107977)
* test(ci): serialize hooks process bootstraps

* fix(ci): repair main gate contracts

* fix(ci): refresh max-lines suppression baseline
2026-07-14 22:01:47 -07:00
sunlit-deng
696aeb07dd fix(logbook): reject malformed snapshot base64 (#106473)
* fix(logbook): reject malformed snapshot base64

* fix(logbook): import base64 canonicalizer from focused media-core subpath

* fix(logbook): validate hostile snapshot payloads

Co-authored-by: sunlit-deng <yang.jiajun1@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-14 22:01:44 -07:00
Peter Steinberger
56ff612606 test(worktrees): cover session liveness across gc entry points (#107989)
Co-authored-by: RickLin <83101411+ObliviateRickLin@users.noreply.github.com>
2026-07-14 21:59:49 -07:00
Peter Steinberger
cbded6808b test: speed doctor preview warnings (#108017) 2026-07-14 21:53:25 -07:00
Peter Steinberger
3ce986d526 fix(ci): restore Discord architecture and max-lines gates (#108013)
* fix(discord): break channel info cache cycle

* chore(ci): prune stale Discord max-lines baseline
2026-07-14 21:52:09 -07:00
Marcus Castro
0b565d16bc refactor(whatsapp): delegate inbound context policy to SDK (#107066) 2026-07-15 01:50:12 -03:00
Monkey-wusky
4a9a556a3a fix(config): reject zero-value resetArchiveRetention to prevent silent data loss (#104516)
* fix(config): reject zero-value resetArchiveRetention to prevent silent data loss

* fix: add braces to guard clauses for curly lint rule

* fix: normalize numeric values and cover pruneAfter fallback in migration

* fix: reject zero-value pruneAfter at schema level to close fallback gap

* fix: independently check and repair both retention fields in migration

* fix: split doctor diagnostics into field-specific rules and messages

* fix: remove unused local in migration test helper

* fix: repair 5 lint errors (curly braces, zero-fraction, narrow value)

* fix(doctor): rewrite zero resetArchiveRetention to false instead of deleting it

Deleting a zero resetArchiveRetention caused the runtime to fall back to
pruneAfter (default 30d), which contradicted the doctor output that
claimed archives would be kept indefinitely.  Only an explicit false
value produces indefinite retention per the documented schema.

- P1: Rewrite zero resetArchiveRetention to false in the doctor
  migration apply callback, matching the promised indefinite-retention
  behavior.
- P3: Update the pruneAfter rule warning to describe eligible
  stale/non-preserved session entries instead of "all sessions".

* fix(config): repair zero retention safely

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: Peter Steinberger <peter@steipete.me>
2026-07-14 21:47:40 -07:00
Erick Kinnee
067bc662fa fix(sqlite): distinguish shared system SQLite in WAL safety error (#107771)
* fix(sqlite): distinguish shared system SQLite from embedded in WAL safety error

* test(sqlite): cover shared build diagnostics

Co-authored-by: Erick Kinnee <erick@ekinnee.dev>

* style(sqlite): format shared build check

Co-authored-by: Erick Kinnee <erick@ekinnee.dev>

---------

Co-authored-by: Erick Kinnee <erick@ekinnee.dev>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-14 21:46:09 -07:00
Patrick Erichsen
ef110e9a0f fix(state): prefer SQLite plugin metadata during migration (#107961)
* fix(state): prefer SQLite plugin install metadata

* test(gateway): type hidden boundary metadata

* test(ci): prune retired QA Matrix line baseline

* test(ci): prune retired QA Matrix line baseline

* fix(state): ignore legacy plugin JSON after SQLite

* fix(state): prefer SQLite plugin install metadata

* fix(state): keep legacy JSON inert after SQLite migration

* fix(state): prefer SQLite plugin install metadata

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-14 21:41:19 -07:00
xingzhou
c508e4a2b8 fix(workspaces): array bindings can select the wrong item for malformed pointers (#107317)
* fix(workspaces): reject malformed array indices in file bindings

* test(workspaces): cover canonical array pointers

Co-authored-by: xingzhou <zhangguiping@xydigit.com>

* test(workspaces): reject zero-padded array index

Co-authored-by: xingzhou <zhang.guiping@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: xingzhou <zhangguiping@xydigit.com>
2026-07-14 21:40:39 -07:00
Peter Steinberger
4401aa7031 test: speed doctor host compatibility tests (#108008) 2026-07-14 21:40:27 -07:00
lee-xydt
6ce439da25 fix(config): warn before stripping JSON5 comments on config write (#107604)
* fix(config): warn before stripping JSON5 comments on config write

Add checkCommentLossWarning in json5-comments.ts to detect JSON5 comments
before config writes. Warn via deps.logger.warn for main config writes and
via options.warn for $include file writes. Both paths support skipOutputLogs
to suppress warnings during automated operations.

Fixes #105683

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(config): remove public warn callback, route through internal sink

Fixes #105683

- Remove warn field from exported ConfigWriteOptions (P1 merge-risk)
- Default checkCommentLossWarning to console.warn when no callback
- Move include warning after hash-conflict/rejection checks
- Update tests to spy on console.warn instead of custom callback

* fix(config): warn before stripping JSON5 comments

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: Peter Steinberger <peter@steipete.me>
2026-07-14 21:39:18 -07:00
Peter Steinberger
4a6dc1fe1d fix(ui): show New Session failures in a centered alert (#107997)
* fix(ui): center new session errors

* chore: remove release-owned changelog entry
2026-07-14 21:37:45 -07:00
Peter Steinberger
3932a6038c refactor(discord): privatize internal plugin surfaces (#108003)
* refactor(discord): privatize internal plugin surfaces

* chore(deadcode): update export baseline
2026-07-14 21:26:00 -07:00
Peter Steinberger
decdaf1718 fix(ci): restore session history types and max-lines gate (#107987)
* fix(gateway): type inline session history messages

* fix(ci): prune stale max-lines baseline
2026-07-14 21:24:40 -07:00
Peter Steinberger
6c0725e0d9 fix(release): tolerate exhausted GitHub read quota 2026-07-15 05:21:30 +01:00
Peter Steinberger
81d634be50 test: speed CLI capture suites (#107993) 2026-07-14 21:16:34 -07:00
Peter Steinberger
d61250ee7c fix(macos): keep left and right menu bar clicks reliable (#107786)
* fix(macos): stabilize menu bar click routing

* chore(macos): refresh native i18n inventory

* test(macos): avoid global menu event dispatch

* fix(macos): initialize status mouse router

* test(macos): avoid bare status button fixture

* test(macos): isolate status click routing
2026-07-14 21:12:58 -07:00
Peter Steinberger
2372c71697 fix(release): preserve candidate Node runtime 2026-07-15 05:03:43 +01:00
Peter Steinberger
5fa348f3ed fix(release): pin max-lines debt to branch merge base 2026-07-15 05:03:43 +01:00
Peter Steinberger
bac7744233 fix(qa): scope duplicate parity capture handling 2026-07-15 05:03:43 +01:00
Peter Steinberger
33e415ea6c fix(qa): keep parity helper private 2026-07-15 05:03:43 +01:00
Peter Steinberger
e23ba67142 fix(qa): reconcile duplicate parity capture rows 2026-07-15 05:03:43 +01:00
Vincent Koc
01b0989353 fix(release): allow shipped ledger metadata references 2026-07-15 05:03:43 +01:00
Peter Steinberger
cb60e0a667 ci: stabilize release validation checks (#106959) 2026-07-15 05:03:43 +01:00
Vincent Koc
11c570294a test(foundry): use approved token placeholders 2026-07-15 05:03:42 +01:00
jincheng-xydt
41aa36a6e7 fix(doctor): accept memory provider none without api key (#107778)
* fix(doctor): accept memory provider none without api key

* test(doctor): preserve FTS-only backend diagnostics

Co-authored-by: jincheng-xydt <xu.jincheng@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-14 21:01:38 -07:00
Marcus Castro
bc769663f8 fix(qa): restore WhatsApp scenario contracts (#107543) 2026-07-15 00:58:38 -03:00
Peter Steinberger
3eb8b3a0f8 refactor(plugins): split plugin installation flows (#107960)
* refactor(plugins): split plugin installation flows

* fix(plugins): keep compatibility helper private
2026-07-14 20:51:21 -07:00
Peter Steinberger
938bddddc1 refactor: privatize QA Matrix and Workspaces internals (#107973)
* refactor(qa-matrix): replace testing export facades

* refactor(workspaces): remove broadcast reset export

* chore(deadcode): shrink unused export baseline
2026-07-14 20:48:46 -07:00
Alix-007
4e24470ced fix(qa-lab): prevent Multipass Node download hangs (#107702) 2026-07-14 20:47:49 -07:00
Alix-007
e9d76ae2a7 fix(qa-lab): prevent dashboard API hangs (#107701) 2026-07-14 20:45:57 -07:00
Alix-007
1878c57a46 fix(qa-lab): prevent Slack desktop auth hangs (#107700) 2026-07-14 20:43:46 -07:00
Peter Steinberger
7748574c4b fix: stabilize flaky test shards blocking merges (#107938)
* test: stabilize flaky test shards

* style: format Feishu delivery trace types
2026-07-14 20:41:54 -07:00