Commit Graph

75574 Commits

Author SHA1 Message Date
Peter Steinberger b3da16ffbb test(apple): consolidate outbox fixtures (#118052) 2026-08-02 10:03:57 -07:00
Peter Steinberger 9bbaf433e9 test(agents): compact OpenAI transport replay fixtures (#118065) 2026-08-02 10:02:58 -07:00
clawsweeper[bot] 059a98ebfd fix(agents): preserve explicit model references in alias guidance (#117869)
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-02 10:02:23 -07:00
Peter Steinberger 4133fe925f docs(browser): note mcporter auto-detects the extension relay (#118066)
Co-authored-by: Peter Steinberger <steipete@mac-studio-sf2.local>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-02 09:51:06 -07:00
Peter Steinberger 27c04ecac4 fix(signal): preserve authorized workspace media on outbound sends (#117895) 2026-08-02 09:43:50 -07:00
Vincent Koc b84e14f222 fix(telegram): ignore commands for other bots (#118024) 2026-08-03 00:25:50 +08:00
Vincent Koc 19d213e721 merge: preserve voice lifecycle commit series (#118025)
* commit '0ec9308dc6ba80ce2e8010d14e576ef840e1536a':
  fix(talk): terminalize failed relay transcripts
  test(talk): split digest lifecycle coverage
  fix(talk): close voice lifecycle persistence gaps
  fix(talk): retain failed digests for lifecycle retry
  test(talk): prove transcript barrier survives owner reset
  fix(talk): persist unresolved transcript identities
  fix(talk): drive bounded digest retries
  fix(talk): require successful transcript close barriers
  fix(talk): terminalize failed mutation digests
  test(talk): cover bounded mutation digest delivery
  fix(talk): detach mutation digests from voice close
2026-08-03 00:14:56 +08:00
Vincent Koc 6a0eb2a168 fix(talk): detach mutation digests from voice close (#118025)
* fix(talk): detach mutation digests from voice close

* test(talk): cover bounded mutation digest delivery

* fix(talk): terminalize failed mutation digests

* fix(talk): require successful transcript close barriers

* fix(talk): drive bounded digest retries

* fix(talk): persist unresolved transcript identities

* test(talk): prove transcript barrier survives owner reset

* fix(talk): retain failed digests for lifecycle retry

* fix(talk): close voice lifecycle persistence gaps

* test(talk): split digest lifecycle coverage

* fix(talk): terminalize failed relay transcripts
2026-08-03 00:13:45 +08:00
Vincent Koc 2844876be3 fix(google): align unsupported CLI auth paths (#118034) 2026-08-03 00:13:19 +08:00
Vincent Koc 0ec9308dc6 fix(talk): terminalize failed relay transcripts 2026-08-03 00:01:49 +08:00
Vincent Koc a5c5946b94 test(talk): split digest lifecycle coverage 2026-08-02 23:48:32 +08:00
Peter Steinberger 38a5d39b33 fix(gateway): hot-reload automatic compaction settings (#118010)
* fix(gateway): hot-reload automatic compaction settings

* test(gateway): isolate compaction hot-reload e2e coverage

---------

Co-authored-by: Peter Steinberger <steipete@macos.shared>
2026-08-02 08:38:07 -07:00
Vincent Koc cd3e2204d0 fix(sqlite): wait for startup checkpoint locks (#118022) 2026-08-02 23:37:36 +08:00
Vincent Koc e75ae0c9a9 fix(release): fail fast on invalid validation state (#118021) 2026-08-02 23:32:30 +08:00
Vincent Koc 834df423e0 merge: align voice lifecycle branch with main
* origin/main:
  fix(install): reject commit-less git checkouts (#113809)
  chore(i18n): refresh native locales (#117948)
  fix(release): validate MiniMax M3 in stable lanes (#118017)
2026-08-02 23:29:34 +08:00
ooiuuii 807506381a fix(install): reject commit-less git checkouts (#113809)
* fix(install): reject commit-less git checkouts

* test(install): fix incomplete-checkout coverage

* fix(install): pin incomplete checkout validation

* test(install): update pinned checkout stub

* fix(install): require checkout HEAD commit object
2026-08-02 08:05:42 -07:00
openclaw-mantis[bot] c1e31f1784 chore(i18n): refresh native locales (#117948)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-02 23:03:59 +08:00
Dallin Romney 0ea8d565f2 fix(release): validate MiniMax M3 in stable lanes (#118017) 2026-08-02 23:02:49 +08:00
Vincent Koc 2b213dddcf merge: refresh voice lifecycle branch from main
* origin/main:
  fix(memory): permanent legacy sidecar migration warning for empty placeholder OpenClaw creates (#114661)
  fix(onboarding): report browser opener failures (#117979)
  test(ui): keep setup coverage within lint budget
  fix(ui): scope prepare confirmation labels
  chore(llama-cpp): remove changelog entry
  fix(llama-cpp): clarify local model setup
2026-08-02 23:01:25 +08:00
Vincent Koc f17f9e3b53 fix(talk): close voice lifecycle persistence gaps 2026-08-02 23:01:16 +08:00
synth 6d2ff9ef38 fix(memory): permanent legacy sidecar migration warning for empty placeholder OpenClaw creates (#114661)
* fix(memory-core): fail closed on non-ENOENT companion stat errors

Only treat ENOENT as 'sidecar is absent'. Other fs errors (EACCES, EIO,
ELOOP, EMFILE) now return null (fail-closed) instead of silently treating
the sidecar as zero-byte, preventing legacy data from being dropped on
transient or permission failures.

* fix(memory): silence self-inflicted legacy sidecar migration warning

OpenClaw can leave a zero-byte placeholder at the legacy memory sidecar
path (~/.openclaw/memory/<agentId>.sqlite) while the live memory index
is the per-agent SQLite database. The legacy-index migration check found
the empty file, attached it, saw no legacy schema, and warned on every
CLI invocation and gateway start, with no way for users to clear it.

Treat a demonstrably empty sidecar (zero-byte main file and no WAL or
journal content) as nothing to import: remove it quietly as a migration
change instead of emitting a permanent warning. Sidecars that contain
any bytes still go through the existing import and warning paths, so a
real legacy index or a genuinely unrecognized database is unaffected.

Closes #114626

* fix(memory-core): fail closed on non-ENOENT companion stat errors

Only treat ENOENT as 'sidecar is absent'. Other fs errors (EACCES, EIO,
ELOOP, EMFILE) now return null (fail-closed) instead of silently treating
the sidecar as zero-byte, preventing legacy data from being dropped on
transient or permission failures.

* test(memory-core): add ELOOP and EACCES companion stat regression coverage

Regression tests for the fail-closed fix: when a WAL/SHM/journal
companion's fs.stat fails with ELOOP (self-referential symlink) or
EACCES (permission denied), the migration must NOT remove the main
legacy sidecar file. Only ENOENT means genuinely absent.

Addresses Whatsskill Codex review P1 finding on openclaw/openclaw#114661.

* ci: retrigger after transient runner failures
2026-08-02 07:51:20 -07:00
Vincent Koc 2aa9b810f0 fix(talk): retain failed digests for lifecycle retry 2026-08-02 22:51:02 +08:00
Vincent Koc 6b1f500c5d test(talk): prove transcript barrier survives owner reset 2026-08-02 22:43:38 +08:00
WhatsSkiLL fe81123fe8 fix(onboarding): report browser opener failures (#117979)
* fix(onboarding): report browser opener failures

* test(onboarding): align browser opener fixture

* fix(dashboard): distinguish browser launch failures

* fix(onboarding): distinguish failed browser handoffs

---------

Co-authored-by: IWhatsskill <284122573+IWhatsskill@users.noreply.github.com>
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-08-02 22:41:49 +08:00
Vincent Koc 9e3c4ac389 Merge pull request #117947 from openclaw/fix-llamacpp-setup-live-20260802
fix(llama-cpp): clarify local model setup
2026-08-02 22:41:36 +08:00
Vincent Koc a18406d320 merge: update voice digest branch from main
* origin/main:
  fix(sqlite): skip slow-lock diagnostic when busyTimeoutMs is zero (#115990)
  fix(canvas): serve Content-Length on Canvas document HEAD responses (#117964)
  fix(workboard): diagnose archived cards still in an active status (#116359) (#117290)
  feat(diagnostics): configure OTEL metric name prefixes (#116687)
  fix(ui): respect UTC when filtering pending usage sessions (#118004)
2026-08-02 22:41:10 +08:00
Vincent Koc a1cc67319c fix(talk): persist unresolved transcript identities 2026-08-02 22:41:04 +08:00
SunnyShu bd486b670a fix(sqlite): skip slow-lock diagnostic when busyTimeoutMs is zero (#115990)
* [AI] fix(sqlite): skip slow-lock diagnostic when busyTimeoutMs is zero

busyTimeoutMs: 0 means "do not wait for locks, fail immediately".
The slow lock wait threshold should not collapse to 1ms in this case,
causing false-positive WARN logs for normal successful transactions.

Fixes #115972

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

* test(sqlite): add regression tests for busyTimeoutMs: 0 threshold

The existing test suite did not cover busyTimeoutMs: 0, which caused
false-positive slow-lock warnings for zero-timeout lease transactions.

Added:
  1. 'does not warn for busyTimeoutMs: 0 with fast transactions' —
     verifies the regression is fixed (0 → uses 1000ms default threshold)
  2. 'still warns for busyTimeoutMs: 0 when crossing 1000ms boundary' —
     verifies genuinely slow transactions still trigger the diagnostic

Both tests pass on the patched code (12/12 total).

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

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-08-02 07:38:16 -07:00
Vincent Koc 9fa817a286 fix(talk): drive bounded digest retries 2026-08-02 22:36:50 +08:00
zengLingbiao 568bfd0a12 fix(canvas): serve Content-Length on Canvas document HEAD responses (#117964)
* fix(canvas): serve Content-Length on Canvas document HEAD responses

* fix(canvas): measure decoded HTML representation for Content-Length
2026-08-02 22:31:19 +08:00
ruel225 f2b3d1588f fix(workboard): diagnose archived cards still in an active status (#116359) (#117290)
* fix(workboard): diagnose archived cards still in an active status

An archived card with an active status (ready/running/blocked/etc.) was
silently excluded from dispatch with no signal on any surface —
workboard show rendered it normally, dispatch returned count:0 with empty
startFailures, and computeCardDiagnostics returned [] for archived cards.
Operators could only find it by reading the database directly.

Add an archived_but_active diagnostic kind to WORKBOARD_DIAGNOSTIC_KINDS
and an unarchive action. In computeCardDiagnostics, when a card has
archivedAt set but status is not done, emit the warning so workboard show
and store.diagnostics report it. Done+archived cards stay silent (no
diagnostic) as before. The diagnostic is transient — refreshDiagnostics
still skips archived cards, so their stored metadata is not rewritten.

Fixes #116359

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

* fix(workboard): expose archived active cards

* ci: re-trigger after sqlite flip-proof e2e flake

Unrelated to workboard diagnostic changes; sqlite session/transcript
flip-proof e2e failed with array mismatch on an untouched path.

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

---------

Co-authored-by: ruel225 <ruel225@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-08-02 07:30:52 -07:00
Vincent Koc 3c4f0bbe2b fix(talk): require successful transcript close barriers 2026-08-02 22:30:18 +08:00
Vincent Koc f65dbe7d40 fix(talk): terminalize failed mutation digests 2026-08-02 22:30:15 +08:00
Jesse Merhi 0181ba67c2 feat(diagnostics): configure OTEL metric name prefixes (#116687)
* feat(diagnostics): support OTEL metric name prefixes

* feat(diagnostics): replace the default metric prefix

* docs(diagnostics): explain metric prefix migration impact

* fix(diagnostics): validate metric name prefixes
2026-08-03 00:29:05 +10:00
Vincent Koc e941bf8194 test(ui): keep setup coverage within lint budget 2026-08-02 22:27:48 +08:00
Peter Steinberger 3eba9fcd5a fix(ui): respect UTC when filtering pending usage sessions (#118004)
Co-authored-by: Peter Steinberger <steipete@macos.shared>
2026-08-02 07:27:34 -07:00
Vincent Koc 6078edcae5 merge(main): integrate current voice lifecycle
* origin/main:
  fix(ui): label Gateway connection settings for accessibility (#118000)
  ci(qa): extend profile evidence timeout (#117999)
  fix(googlechat): report a blocked account instead of a webhook path that was never bound (#117986)
  fix(line): preserve semantic indentation in fenced code (#117996)
  fix(plugins): contain rejected synchronous hook results (#117988)
  fix(cli): preserve shell profiles when completion install fails (#117987)
  fix(tui): preserve legitimate consecutive backspaces (#117989)
  fix: preserve queued messages during /compact (#117840)
  fix(talk): enforce relay lifecycle bounds
  fix(talk): enforce relay terminal precedence
  test(talk): cover relay tool-call retention overflow
  fix(talk): bound relay tool-call lifecycle state
2026-08-02 22:21:51 +08:00
Vincent Koc 10cc5b3404 test(talk): cover bounded mutation digest delivery 2026-08-02 22:20:57 +08:00
Vincent Koc 6730a51173 fix(talk): detach mutation digests from voice close 2026-08-02 22:20:55 +08:00
Vincent Koc fa22e6eab5 fix(ui): scope prepare confirmation labels 2026-08-02 22:19:51 +08:00
Peter Steinberger 9bb7a3c8fd fix(ui): label Gateway connection settings for accessibility (#118000)
Co-authored-by: Peter Steinberger <steipete@macos.shared>
2026-08-02 07:19:43 -07:00
Dallin Romney c9dc5fb339 ci(qa): extend profile evidence timeout (#117999) 2026-08-02 22:14:34 +08:00
Vincent Koc 507cec77c4 Merge pull request #117972 from openclaw/fix/talk-relay-bounded-retention
* commit 'dcf1ce8f01e2bf9bd5acf9216794f6b01511e7c0':
  fix(talk): enforce relay lifecycle bounds
  fix(talk): enforce relay terminal precedence
  test(talk): cover relay tool-call retention overflow
  fix(talk): bound relay tool-call lifecycle state
2026-08-02 22:02:46 +08:00
Masato Hoshino 570182b449 fix(googlechat): report a blocked account instead of a webhook path that was never bound (#117986)
An unparseable webhookUrl resolves to no path, and the monitor bails before it
creates ingress or registers the HTTP route. The gateway still published the
default path, and because this channel never sets connected, health evaluation
read healthy for the lifetime of the process while inbound delivery was dead.

Make resolveGoogleChatWebhookPath return string | null and have the gateway
publish lifecycle: blocked with lastError instead of a path. The status store
patch-merges, so the blocked branch clears webhookPath explicitly.
2026-08-02 07:01:24 -07:00
Peter Steinberger bd86a69d1c fix(line): preserve semantic indentation in fenced code (#117996)
Co-authored-by: Peter Steinberger <steipete@macos.shared>
2026-08-02 06:59:28 -07:00
Vincent Koc 0cddafc44c chore(llama-cpp): remove changelog entry 2026-08-02 21:55:18 +08:00
Peter Steinberger 0ac3368c8f fix(plugins): contain rejected synchronous hook results (#117988)
Co-authored-by: Peter Steinberger <steipete@macos.shared>
2026-08-02 06:42:17 -07:00
Peter Steinberger d720d78fee fix(cli): preserve shell profiles when completion install fails (#117987)
* fix(cli): publish completion profiles atomically

Closes #117980

* fix(ci): restore environment variable budget

* fix(cli): preserve dangling completion profile symlinks

* fix(cli): narrow completion readlink failures
2026-08-02 06:36:43 -07:00
Peter Steinberger 3748fcfd2c fix(tui): preserve legitimate consecutive backspaces (#117989)
Co-authored-by: Peter Steinberger <steipete@macos.shared>
2026-08-02 06:28:01 -07:00
qingminlong 860960e543 fix: preserve queued messages during /compact (#117840)
* fix: preserve queued work during compact

* fix: guard compaction against summary-elided follow-ups

* fix(sessions): preserve in-flight compact queue work

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-08-02 21:14:03 +08:00