Commit Graph

74808 Commits

Author SHA1 Message Date
Vincent Koc 53d5cf370c test(ui): align model setup e2e with recovery flow 2026-08-01 16:28:48 +08:00
Vincent Koc 42dde2bf86 test(ui): align reconnect assertions with selected model 2026-08-01 16:12:36 +08:00
Vincent Koc 46598b6966 improve(ui): simplify local provider recovery 2026-08-01 15:38:41 +08:00
wahaha1223 dccb1b9013 fix(linux-canvas): report socket watcher fallback (#109502) 2026-08-01 00:36:15 -07:00
Vincent Koc 754dcb8b2f merge: preserve verified completion handoff series (#117148)
* commit '619682ed010f4e6c56c73feb4948fd7265083e10':
  fix(agents): bind completion messages to source
  fix(agents): mint completion delivery grant
  fix(agents): retain tools for direct completion delivery
  fix(agents): integrate verified completion delivery
  test(codex): use typed completion handoff fixture
  fix(agents): verify completion tool handoffs
2026-08-01 15:35:41 +08:00
Peter Steinberger 378d4ff938 fix(codex): preserve authoritative turn completion (#117185)
Retain terminal and assistant-completion facts when pre-start notifications exceed the bounded buffer. Exclude commentary from replies, accept legacy unphased final messages, and let completed terminal items own the final answer while rejecting interrupted, failed, or non-terminal outcomes.

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
Co-authored-by: Peter Steinberger <58493+steipete@users.noreply.github.com>
2026-08-01 15:34:30 +08:00
Harjoth Khara b97a214604 fix(canvas): preserve widgets across derived-name collisions (#117132)
Fixes #116945
2026-08-01 15:33:56 +08:00
Ayaan Gazali 11069c3df5 fix(channels): config validation rejects documented channels.<id>.configWrites on 13 channels (#117206) 2026-08-01 15:33:16 +08:00
Ahmed Tarek 730cf56915 fix(msteams): prevent duplicate final replies (#116398)
* fix(msteams): preserve message-tool thread routing

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>

* test(msteams): prove thread-aware final dedupe

* fix(agents): suppress duplicate source previews

* fix(agents): dedupe current-source reply previews

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-08-01 15:32:56 +08:00
Harjoth Khara 2358566c29 fix(doctor): session SQLite restore installs an empty session index over the valid archive (#117221)
* fix(doctor): restore the pre-migration session index when runs share a store

Restore picked the winning archive by manifest iteration order, newest first.
When a legacy writer recreated an empty sessions.json between migrations, the
newest run had archived that empty file, so restore installed it and then
refused the only archive holding real sessions as a conflict.

Resolve one winning archive per destination before writing anything, preferring
the earliest run whose archive is still restorable. Losing archives are never
deleted and stay visible as conflicts.

Closes #116163

* fix(doctor): fail closed on ambiguous session restores

* test(doctor): key restore conflicts by archive

* fix(doctor): narrow restored archive lookup

* fix(doctor): stream restore archive hashing

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-08-01 15:32:31 +08:00
Peter Steinberger 416d8084bc fix(plugins): preserve workspace plugins across CLI and control UI (#117265)
Co-authored-by: Peter Steinberger <steipete@macos.shared>
2026-08-01 00:32:27 -07:00
Peter Steinberger edfeec49e7 refactor(channels): centralize progress draft events (#117269) 2026-08-01 00:26:56 -07:00
Peter Steinberger 7aacd1314d fix(slack): recover bot identity after transient auth.test failure (#117253)
* fix(slack): recover bot identity after transient auth.test failure

* docs(slack): document identity selection invariant

* fix(slack): resolve startup auth fetch through plugin runtime
2026-08-01 00:23:03 -07:00
Peter Steinberger 08fc4f5a06 fix(telegram): hide disabled send actions from discovery (#117241)
Co-authored-by: Peter Steinberger <steipete@macos.shared>
2026-08-01 00:15:17 -07:00
Peter Steinberger 6b43acf062 fix(sessions): keep restart prompts on the active transcript tail (#117260)
* fix(sessions): adopt concurrent ingress user turns

* chore: leave release notes to release prep

* fix(sessions): rebase stale metadata onto active tail
2026-08-01 00:12:08 -07:00
Peter Steinberger 8ed6c98b08 fix(whatsapp): reuse hydrated group participant metadata (#117234)
Co-authored-by: Peter Steinberger <steipete@macos.shared>
2026-08-01 00:11:34 -07:00
Peter Steinberger 1f130ce61d fix(whatsapp): normalize provider self-echo identities (#117228)
Co-authored-by: Peter Steinberger <steipete@macos.shared>
2026-08-01 00:08:28 -07:00
joshavant b4636f2372 fix(agents): stream safe Claude tag prefixes 2026-08-01 02:06:43 -05:00
joshavant 0ccae508fb fix(agents): stream rejected Claude tag prefixes 2026-08-01 02:06:43 -05:00
joshavant 97f8f25f0b fix(agents): recover tagged Claude CLI reasoning 2026-08-01 02:06:43 -05:00
Peter Steinberger 02419ed199 fix(plugin-state): treat missing plugin-state table as empty on read-only fresh stores (#117257)
* fix(plugin-state): treat missing plugin-state table as empty on read-only fresh stores

Startup leases create state/openclaw.sqlite before the first plugin-state
write, so legacy-state migration detection read the file through a read-only
connection and failed on the missing plugin_state_entries table, blocking
fresh-state-dir gateway boots from reaching ready.

Fixes #117249

* test(plugin-state): split fresh-store read coverage into focused file

* fix(plugin-state): distinguish fresh stores from damaged schemas
2026-08-01 00:04:54 -07:00
zilokki-bot 0991fad3a3 fix(gateway): bound session catalog refresh pressure (#113171)
* fix(gateway): bound session catalog refresh pressure

* fix(gateway): keep session catalog coordinator types internal

* chore: rerun ci

* test(secrets): allow migration isolation shard headroom

* test(secrets): lock migration isolation profile

* chore: keep session catalog note out of changelog

* test(gateway): cover saturated session catalog admission

* fix(gateway): queue saturated session catalog loads

* test(gateway): cover session catalog pressure over rpc

* test(gateway): cover session catalog pressure over rpc

* test(gateway): keep catalog pressure proof isolated

* test(gateway): satisfy catalog pressure proof types

* fix(gateway): keep catalog admission internals private

* fix(gateway): preserve raw catalog host filters

* test(gateway): preserve session catalog host filter order

---------

Co-authored-by: probe <probe@example.invalid>
Co-authored-by: fuller-stack-dev <263060202+fuller-stack-dev@users.noreply.github.com>
2026-08-01 01:04:16 -06:00
Peter Steinberger 78486e2751 test(infra): realpath sandbox migration temp root for macOS (#117261) 2026-07-31 23:37:15 -07:00
Peter Steinberger ee320a6e41 fix(imessage): preserve outbound attachment delivery facts (#117238)
Co-authored-by: Peter Steinberger <steipete@macos.shared>
2026-07-31 23:36:48 -07:00
Peter Steinberger 51c41c25c8 fix(minimax): validate complete generated audio at producer owners (#117195)
Co-authored-by: Peter Steinberger <steipete@macos.shared>
2026-07-31 23:29:50 -07:00
Peter Steinberger 0a146d5a18 fix(line): centralize Flex alternative-text bounds (#117217)
Co-authored-by: Peter Steinberger <steipete@macos.shared>
2026-07-31 23:23:52 -07:00
Vincent Koc 619682ed01 fix(agents): bind completion messages to source 2026-08-01 14:23:46 +08:00
Vincent Koc 4c2d2d3a8f Merge pull request #117215 from openclaw/fix/talk-transcript-relay-bound 2026-08-01 14:20:00 +08:00
Anuj Bolewar b6c82f753e fix(agents): surface /new guidance for thinking-signature replay errors (#116967) (#116987)
* fix(agents): surface /new guidance for thinking-signature replay errors (#116967)

* fix(agents): keep replay-invalid classifier mock module-private in harness

* fix(agents): make replay-invalid failures terminal

* test(agents): use Bedrock replay error carrier

---------

Co-authored-by: Anuj Bolewar <anuj@kermux.dev>
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-08-01 14:17:17 +08:00
Vito Cappello fe790ab64e fix(doctor): keep repaired session rows readable (#117207)
* fix: keep repaired session delivery rows readable

* fix(doctor): settle session entry rewrites

---------

Co-authored-by: VACInc <3279061+VACInc@users.noreply.github.com>
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-08-01 14:16:39 +08:00
Peter Steinberger ad3e36ef33 fix(feishu): unify outbound delivery lifecycle (#117223)
Co-authored-by: Peter Steinberger <steipete@macos.shared>
2026-07-31 23:16:04 -07:00
Vincent Koc 52d3275d65 fix(agents): mint completion delivery grant 2026-08-01 14:12:54 +08:00
SunnyShu d75601478a docs(gateway): document llamacpp toolSchemaProfile for custom llama.cpp endpoints (#117120)
* docs(gateway): document llamacpp toolSchemaProfile for custom llama.cpp endpoints

Custom openai-completions providers pointed at a llama.cpp / llama-server
endpoint bypass the GBNF-safe schema normalization that built-in llama-cpp,
ollama, and lmstudio providers apply automatically. The toolSchemaProfile:
"llamacpp" switch activates it, but the supported value was never named in
the docs, so users hit llama.cpp 400 'failed to parse grammar' on tools with
large minLength/maxLength (e.g. cron trigger.script, maxLength 65536).

- Expand the toolSchemaProfile row to name the values recognized on a model's
  compat (llamacpp, gemini) and when llamacpp must be set explicitly;
  cross-reference the unsupportedToolSchemaKeywords escape hatch.
- Add a 'Local models (llama.cpp / llama-server)' provider example showing
  the required compat.toolSchemaProfile: "llamacpp" on a custom endpoint.

Related to #117070

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

* docs(gateway): describe llamacpp profile as stripping, not clamping

Address review feedback on #117120: the fallback sentence claimed the
llamacpp profile "also clamps" constraints, but cleanSchemaForLlamacppGbnf
only removes `pattern` outright and drops `maxLength` at or above the
2000-repetition threshold (LLAMACPP_GBNF_MAX_REPETITION_THRESHOLD). It
never clamps a value, and small bounds like `minLength: 1` are preserved
(confirmed by the projection test at src/plugin-sdk/provider-tools.test.ts).

Reword the escape-hatch sentence to describe the implemented stripping
behavior and contrast it with the unconditional keyword-list drops, so
operators do not expect a preserved bounded constraint.

No code or behavior changes; documentation only.

* docs(gateway): scope llamacpp profile description to its actual transformations

Address follow-up review on #117120: the toolSchemaProfile table row
described `llamacpp` as "rewriting tool schemas into the JSON Schema
subset llama.cpp can compile to GBNF," which overstates what
cleanSchemaForLlamacppGbnf does. The cleaner only removes `pattern`
outright and drops `maxLength` at or above the 2000-repetition threshold
(LLAMACPP_GBNF_MAX_REPETITION_THRESHOLD); it leaves every other keyword
and `minLength` untouched, and those are not guaranteed GBNF-safe.

Reword the row to state the exact transformation contract and explicitly
note it is a targeted compatibility cleaner, not a blanket GBNF-safety
guarantee. No code or behavior changes; documentation only.

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

* docs(gateway): tighten llama.cpp profile contract

* docs(gateway): order local model examples

---------

Co-authored-by: iCodeMate <noreply@anthropic.com>
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-08-01 14:11:22 +08:00
Yuval Dinodia 2364078063 fix(clickclack): thread replies stop being answered past the 100-reply thread window (#117225)
* fix(clickclack): answer thread replies past the server thread-reply window

Thread replies stopped being answered once a ClickClack thread passed 100
replies, with no reply, no transcript entry, no gateway warning, and no
replay after reconnect.

The gateway resolved a thread.reply_created event by fetching the whole
thread and searching its reply list. The ClickClack thread endpoint caps
that response at 100 earliest replies by default, so reply 101 was absent,
the lookup returned null, and the event was treated as handled while the
websocket cursor advanced past it. A DM thread reply was worse: it hit the
DM branch first, and thread replies never appear in the root DM timeline
that branch pages, so every DM thread reply was dropped.

Resolve the event's own message_id through the authoritative single-message
endpoint the plugin already uses, which collapses the three window
heuristics into one canonical path. Transient failures still propagate so
reconnect replays them; only a 404 resolves to unreadable, and that now
records an operator warning instead of counting as a handled event.

* test(clickclack): harden reply recovery proof

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-08-01 14:10:47 +08:00
Peter Steinberger 4caff51ff6 fix(agents): unify compaction successor resolution (#117250) 2026-07-31 23:07:24 -07:00
Peter Steinberger 1b8411958b fix(gateway): stop post-ready sidecar timers on close (#117242)
* fix(gateway): stop post-ready sidecar timers on close

* fix(gateway): return promise from generation timer admission callback
2026-07-31 23:03:10 -07:00
Harjoth Khara 6fb334fe84 test(gateway): pin MCP loopback drain proof to a server-side barrier (#117181)
The drain test asserted "close has not settled" after a fixed 20ms sleep.
Node only exempts a connection from close()'s idle sweep once its parser has
begun a message, so a client-side connect barrier let a loaded machine reach
close() before the server parsed the request: the socket was swept as idle,
the client saw ECONNRESET, and the drain settled inside the window.

Wait on capture admission (onRequestStart) instead, which fires server-side
after the headers are accepted, and move the assertion to just before the
successor is used so it proves the successor was minted mid-drain.
2026-08-01 14:03:02 +08:00
Vincent Koc d6f6bcf291 fix(talk): retain bounded relay close owners 2026-08-01 14:01:55 +08:00
Peter Steinberger 137050cedd perf(update): reuse dev preflight build cache (#117246) 2026-07-31 22:59:44 -07:00
xingzhou 1f40646f7e fix(board): prevent emoji corruption in event notices (#111702)
* fix(board): preserve Unicode notice boundaries

* test(board): document surrogate boundary

* test(pr): isolate wrapper command inventory
2026-07-31 22:57:11 -07:00
MasterSwords1 732c57435c fix(cli): update plugins doctor clean message (#115073) (#117160)
* fix(cli): update plugins doctor clean message (#115073)

Root cause: plugins doctor reports 'No plugin issues detected.' even when a selected context-engine plugin is quarantined at runtime, because doctor is a fast static control-plane check.
Architectural owner: plugins-cli.runtime.ts
Canonical fix: Change clean status message to direct operators to 'openclaw health' for active runtime quarantine/fallback status.
Production LOC delta: +2 LOC

* fix(cli): update plugins doctor clean message wording (#115073)

Root cause: Refine the diagnostic text message to run openclaw health directly.
Architectural owner: src/cli/plugins-cli.runtime.ts

* fix(cli): clarify plugin doctor scope

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-08-01 13:54:37 +08:00
Peter Steinberger 0cd33bad88 fix(plugin-sdk): project recorded health facts through computed account status (#117236)
* fix(plugin-sdk): project recorded health facts through computed account status

* fix(plugin-sdk): regenerate API baseline and pin ingressUnavailable literal in test
2026-07-31 22:52:48 -07:00
Vincent Koc cdf683f004 fix(talk): bound relay transcript persistence 2026-08-01 13:52:45 +08:00
Peter Steinberger 1f9ee89f25 fix(google): preserve canonical replay and provider error ownership (#117193)
* fix(google): preserve provider signatures and failure outcomes

* fix(google): satisfy SDK stream event and optional text types

* fix(google): preserve signed empty SDK response parts

---------

Co-authored-by: Peter Steinberger <steipete@macos.shared>
2026-07-31 22:52:45 -07:00
Vincent Koc fcb7338837 Merge pull request #117214 from openclaw/fix/talk-transcript-persistence-bound-clean 2026-08-01 13:49:35 +08:00
Vincent Koc 8a9b0ee4f4 fix(agents): retain tools for direct completion delivery 2026-08-01 13:47:29 +08:00
Peter Steinberger 80b0e78d62 fix(plugins): hash loader cache keys so plugin config never leaks into diagnostics (#117237) 2026-07-31 22:46:49 -07:00
Peter Steinberger ad409a8285 fix(ui): preserve session, tool, archive, and focus ownership (#117191)
* fix(ui): unify tool, session, and keyboard interaction owners

* refactor(ui): separate archived session regression coverage

* test(ui): isolate memory plugin mutation mock registries

---------

Co-authored-by: Peter Steinberger <steipete@macos.shared>
2026-07-31 22:45:53 -07:00
Vincent Koc 6922ddd936 fix(qa): isolate runner discovery facades (#117203) 2026-08-01 13:40:11 +08:00
Dallin Romney bcff3a0de3 fix(qa): bind Codex auth fixture to runtime version (#116859)
* fix(qa): update Codex auth fixture protocol version

* test(qa): bind Codex auth fixture to runtime version

* test(qa): load Codex fixture version through public surface
2026-08-01 13:36:31 +08:00