Vincent Koc
9b736a42c6
feat(models): expose tool support to clients
2026-07-31 18:43:47 +08:00
Vincent Koc
2bd9329af2
merge: sync origin/main
...
* origin/main:
fix(ai): prevent websocket cache clobber on concurrent acquire (#116216 )
test(ui): settle custodian mobile layout assertions (#116613 )
fix(agents): resume Code Mode through gateway restarts (#116605 )
2026-07-31 09:43:10 +08:00
Vincent Koc
32036c473d
fix(agents): resume Code Mode through gateway restarts ( #116605 )
...
* fix(agents): preserve Code Mode restart recovery
* chore(protocol): regenerate Swift agent params
2026-07-31 09:22:27 +08:00
Vincent Koc
94b85cba5f
feat(setup): improve local model onboarding
2026-07-31 08:53:13 +08:00
keshavbotagent
4dc90937a0
fix(session): isolate memory flush lifecycle from parent recovery ( #116198 )
...
* fix(session): isolate memory flush lifecycle
* fix(session): fence newly introduced recovery cycles
* test(qa): prove memory flush preserves parent lifecycle
* test(session): align recovery fixtures with internal state
2026-07-30 11:31:23 -07:00
Yuval Dinodia
3ffd3864ea
fix: keep reply text in session transcript when media is attached ( #116225 )
...
Preserve assistant reply text alongside stable attachment names across the shared transcript mirror path. Add direct formatter, real SQLite persistence, outbound delivery, and gateway fallback matching coverage.
2026-07-31 02:14:57 +08:00
Vincent Koc
ca1328dddb
Merge pull request #116285 from openclaw/fix/control-ui-session-dedupe
...
* origin/fix/control-ui-session-dedupe:
chore: leave release notes to release flow
fix(ui): deduplicate gateway-native session hosts
2026-07-30 22:53:53 +08:00
Omar Shahine
b82a59a798
feat(cli): add openclaw automations alias and reword cron display prose ( #114854 )
...
* feat(cli): add openclaw automations alias and reword cron display prose
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01WhJ8EiMXue6ADLmHfb7FL6
* test(doctor): update cron doctor prose assertions for automations wording
* fix(plugins): include command aliases in plugin CLI collision detection
Codex review finding on the automations alias: plugin CLI registration
seeded existingCommands from command names only, so a plugin exposing a
top-level command matching an alias-only root name (automations, terminal,
chat) would crash Commander at startup instead of being skipped. Seed from
names plus aliases; regression test covers the alias path.
* fix(cli): rename residual cron prose in CLI and gateway RPC errors
Found in combined dev-gateway E2E: automation not found / unknown automation
id errors, add/edit prose, docs tip, skills-cli mention, and the gateway RPC
not-found message. The CLI missing-get matcher accepts both message forms so
older gateways keep resolving name lookups.
* fix(gateway): keep cron.get missing wording as a wire contract for older CLI matchers
ClawSweeper rank-up: shipped CLI matchers parse 'cron job not found: <id>'
before the name-lookup fallback; the rename stays CLI-display only. Adds a
regression pinning the exact wire form.
* fix(cli): rename doctor and task-summary cron prose flagged in review
Repair-plan advisories, session-registry task summary, and the heartbeat
migration health check now say automations; recreate hints use the
openclaw automations CLI form.
---------
Co-authored-by: Omar Shahine <10343873+omarshahine@users.noreply.github.com >
Co-authored-by: Claude Fable 5 <noreply@anthropic.com >
2026-07-30 07:16:57 -07:00
Peter Steinberger
7fa95e2656
feat(ui): add composable skill references ( #116330 )
...
* feat(ui): add composable skill references
* fix(ui): align skill reference CI contracts
* fix(ui): scope skill references to WebChat
2026-07-30 04:07:02 -07:00
Peter Steinberger
cb54749df2
fix(gateway): repair node terminal and rename state ( #116355 )
2026-07-30 03:52:05 -07:00
Vincent Koc
bb68389a66
fix(ui): deduplicate gateway-native session hosts
2026-07-30 15:22:37 +08:00
Vincent Koc
e473598c2c
fix(ui): make model setup actionable before selection ( #116079 )
2026-07-30 08:34:43 +08:00
Vincent Koc
8530edb057
fix(plugins): deliver subagent completion to current requester ( #116091 )
...
* fix(plugins): deliver subagent completion to requester
Co-authored-by: ambitioncn <36698505+ambitioncn@users.noreply.github.com >
* test(qa): register current-requester plugin fixture
* fix(plugins): scope requester authority per hook
---------
Co-authored-by: ambitioncn <36698505+ambitioncn@users.noreply.github.com >
2026-07-30 07:06:17 +08:00
Peter Steinberger
b9377f6048
fix(codex): enforce native MCP tool access ( #116054 )
...
* fix(codex): enforce native MCP tool access
* chore: remove prerelease changelog entry
* chore: restore changelog to main
* refactor(codex): build MCP server patches from entries
2026-07-29 17:06:49 -04:00
salvormallow
73b5e7aab4
fix(hooks): save memory on automatic session rollover ( #61675 )
...
* fix(hooks): persist memory on session rollover
Co-authored-by: salvormallow <15044561+salvormallow@users.noreply.github.com >
* fix(hooks): persist memory on automatic session reset
* fix(hooks): keep auto-reset reason internal
* fix(hooks): retain auto-reset memory admission
* fix(hooks): make session rollover return explicit
* test(hooks): track session memory temp dirs
* fix(hooks): satisfy session memory return contract
---------
Co-authored-by: Vincent Koc <vincentkoc@ieee.org >
2026-07-30 04:13:26 +08:00
Peter Steinberger
e0ab154e5e
fix(ui): explain unavailable MCP tool catalogs ( #115994 )
...
* fix(ui): explain undiscovered MCP tools
* fix(ui): scope MCP discovery notices to the viewed connector
2026-07-29 15:12:08 -04:00
Peter Steinberger
ff72f287c3
fix(gateway): declare viewer presence explicitly instead of deriving it from subscriptions ( #116001 )
...
* fix(gateway): declare viewer presence explicitly instead of deriving it from subscriptions
* refactor(ui): isolate viewer presence lifecycle ownership
* chore(protocol): register viewer presence schema owner
* fix(ui): keep viewer presence cleared after detach
* chore: drop changelog edits from this PR
CHANGELOG.md is release-owned; release generation derives entries from merged
PRs. Release-note context stays in the PR body.
2026-07-29 13:56:54 -04:00
Peter Steinberger
dc60a9442d
feat(talk): support GPT-Live over gateway relay ( #115831 )
...
* feat(talk): add GPT-Live gateway relay peer
* fix(talk): ignore duplicate GPT-Live sideband audio
* fix(openai): harden GPT-Live relay startup
* fix(deps): replace vulnerable werift ip helper
* fix(deps): scope werift ip override version
* fix(openai): normalize relay startup errors
* test(ci): register GPT-Live gateway live shard
* fix(talk): tighten GPT-Live relay readiness
* fix(talk): keep relay override helper private
* fix(talk): resolve relay readiness with launch model
* fix(openai): preserve GPT-Live media clock
* fix(talk): align GPT-Live relay readiness and framing
* fix(openai): expire pending GPT-Live reservations
* fix(openai): harden GPT-Live delegation audio
* style(openai): satisfy RTP reorder lint
2026-07-29 12:54:23 -04:00
Peter Steinberger
d16e33e08e
fix: restore trustworthy end-to-end QA and cross-channel delivery ( #115404 )
...
* fix(qa): repair verified end-to-end and channel regressions
* fix(gateway): make interrupted restart recovery lifecycle-safe
* test(heartbeat): target the canonical recovery session store
* fix(gateway): prioritize durable restart recovery before heartbeat
* fix(qa): preserve safe restart recovery and channel expiry
* fix(qa): fail closed and fence restart recovery
* test(agents): isolate restart recovery timing
* test(agents): prove actual restart retry timing
* fix(qa): report incompatible profile scenarios
* fix(scripts): resolve symlinked docker scheduler entrypoints
* fix(qa): require fresh native test evidence
* fix(heartbeat): fence active restart recovery delivery
* fix(gateway): consume untargeted restart acknowledgements
* fix(qa): satisfy exhaustive hosted validation gates
* fix(agents): fence stopped restart recovery dispatch
* style(agents): format restart recovery lifecycle regression
* test(gateway): isolate context prewarm sidecar lifecycle
* test(qa): make scenario process timeout cleanup deterministic
* fix(qa): stamp synthetic gateway configs with current version
* fix(openai): preserve vision capabilities in stale model catalogs
* test(qa): align profile channel rejection with current main
* fix(openai): forward supported moderation for image edits
* fix: restore latest-main CI and image edit documentation
* fix(qa): retain relocated code-mode evidence validation
* fix(openai): expose GPT-5.4 vision in static catalog
* fix(pricing): honor explicit model cost overrides
* test(pricing): keep isolated provider regressions deterministic
* fix(openai): inherit transport for discovered static models
* fix(gateway): honor agent-owned static image capabilities
* test(gateway): preserve prepared-snapshot attachment races
* test(gateway): isolate subagent persistence failure injection
* test(gateway): exercise concurrent voice replay admission
* fix(gateway): restore stale model image capabilities
* fix(agents): publish configured model vision capabilities
* fix(agents): isolate detached media transcript ownership
* test(agents): preserve generic transcript lock regression
* fix(gateway): require proven static model route identity
* fix(qa): accept bounded full-size generated image attachments
* fix(qa): require fresh script producer evidence
* test(qa): prove native E2E scenario execution
2026-07-29 12:45:27 -04:00
Peter Steinberger
b4d14d7848
refactor(config): move model normalization to input owners ( #115965 )
...
* refactor(config): move model normalization to input owners
* fix(config): merge canonical doctor model rows
* fix(config): align touched model map identities
* ci(env): lower production variable budget
* chore: leave changelog to release automation
2026-07-29 12:04:07 -04:00
Peter Steinberger
5bfc65d7f4
refactor: remove 3,543 lines of redundant runtime and tests ( #115961 )
...
* refactor: remove 3,543 lines of redundant runtime and tests
* refactor: ratchet production environment variable budget
2026-07-29 11:43:41 -04:00
chengzhichao-xydt
29497b4e1e
fix(agents): keep subagent run ID mask from splitting UTF-16 surrogate pairs ( #104874 )
...
* fix(agents): keep subagent run ID mask from splitting UTF-16 surrogate pairs
* fix(agents): drop unnecessary export on run ID mask and test through warnings
* test(agents): avoid String(unknown) in run ID mask warning capture
CI check-lint (oxlint typescript/no-base-to-string) rejects String() on an
unknown-typed field; the toMatchObject assertion above already pins the
shape, so read runId as a string field directly.
Co-Authored-By: Claude <noreply@anthropic.com >
* fix(agents): refresh Unicode run-id contributor baseline
Restore the original run-id lifecycle files to the reviewed upstream baseline before preserving the contributor branch and applying the verified Unicode fix.
Co-authored-by: chengzhichao-xydt <cheng.zhichao@xydigit.com >
* fix(agents): preserve Unicode subagent run identities
Preserve valid Unicode run identifiers through subagent lifecycle masking and prove authenticated plugin Gateway admission, registry tracking, and idempotent retries.
Co-authored-by: chengzhichao-xydt <cheng.zhichao@xydigit.com >
---------
Co-authored-by: chengzhichao-xydt <chengzhichao-xydt@users.noreply.github.com >
Co-authored-by: Claude <noreply@anthropic.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-29 11:35:43 -04:00
Peter Steinberger
e27454a862
perf(gateway): serve config.get from the watcher-owned cache and collapse duplicate session listings ( #115930 )
...
* perf(gateway): cache config.get responses and collapse duplicate session listings
* perf(gateway): serve config.get from the watcher-owned snapshot cache
2026-07-29 10:21:43 -04:00
Vincent Koc
7e08953401
Merge pull request #115839 from openclaw/refactor/status-summary-owner
...
refactor(status): own summary preparation
2026-07-29 22:07:31 +08:00
Vincent Koc
4278fdfd5e
Merge pull request #115825 from openclaw/refactor/health-owner-boundary
...
refactor(gateway): own health snapshot collection
2026-07-29 22:00:59 +08:00
Colin Johnson
306c02af57
feat(ui): preview session workspace images ( #95956 )
...
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-29 09:22:46 -04:00
Peter Steinberger
adf3178ae6
feat(gateway): expose MCP tool identity in effective tools ( #115870 )
...
* feat(gateway): expose MCP tool identity in effective-tools catalog
* docs(agents): comment utility-tool pass gate invariant
2026-07-29 08:41:04 -04:00
synth
151c549494
fix(browser): uploads fail when the browser runs on a remote node ( #115291 )
...
* fix(browser): resolve upload paths on the owning browser node, not the Gateway
When a browser session is proxied to a remote node, the upload action
previously ran resolveExistingUploadPaths on the Gateway, pinning paths
to a filesystem the node cannot see and rejecting node-local files. The
node-side /hooks/file-chooser route already re-resolves paths against
its own filesystem, so skip Gateway-local resolution whenever the
request is proxied and forward the requested paths as-is.
Fixes openclaw/openclaw#115251
* fix(browser): transfer uploads to remote browser nodes
* fix(browser): normalize upload abort errors
---------
Co-authored-by: Vincent Koc <vincentkoc@ieee.org >
2026-07-29 20:31:46 +08:00
Peter Steinberger
8915f9c337
fix(gateway): prevent overlapping setup after wizard cancellation ( #115856 )
...
* fix(wizard): retain cancelled sessions until runner settles
* fix(wizard): purge cancelled sessions after settlement
* test(gateway): cover settled wizard replacement
* test(gateway): split wizard cancellation e2e
* test(gateway): fix wizard e2e env key types
* fix(gateway): forward daemon choice through wizard RPC
Co-authored-by: TheAngryPit <16145902+TheAngryPit@users.noreply.github.com >
* test(gateway): harden wizard cancellation cleanup
Co-authored-by: TheAngryPit <16145902+TheAngryPit@users.noreply.github.com >
* chore: drop changelog edit (release generation owns it)
---------
Co-authored-by: TheAngryPit <16145902+TheAngryPit@users.noreply.github.com >
2026-07-29 07:49:25 -04:00
Peter Steinberger
4c4aa2ed12
feat(gateway): manage audio and video attachments end to end ( #115842 )
...
* feat(gateway): manage audio and video attachments
* feat(gateway): preserve generated media metadata
* fix(gateway): align seeded managed media
* fix(gateway): scope pending media trust by URL
* fix(gateway): split managed media by trust
* fix(gateway): require terminal media trust unanimity
* fix(gateway): align managed media metadata types
* fix(gateway): refresh managed media contracts
* chore(ci): model managed media test seams
* test(sessions): expect canonical media kinds
2026-07-29 07:27:36 -04:00
Peter Steinberger
662abec754
feat(gateway): push session PR indicators to subscribed clients ( #115643 )
...
* feat(gateway): push session PR indicators to subscribed clients
* test(gateway): fix PR indicator drift
* chore(protocol): allowlist PR-indicator event for native apps (Control UI surface)
* test: align PR indicator lifecycle coverage
* fix(ui): scope session PR store listeners to active watchers
2026-07-29 06:30:01 -04:00
Vincent Koc
fa16b0fcf0
refactor(status): own summary preparation
2026-07-29 18:08:41 +08:00
qingminlong
0063e46069
fix(gateway): show recovery guidance when context overflow hides replies ( #114909 )
...
* fix(gateway): show overflow recovery guidance in chat display
* fix(gateway): reuse context overflow classifier
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-29 05:45:07 -04:00
Peter Steinberger
1dd28f1bca
fix(gateway): hosted setup exits no longer stop the gateway ( #115671 )
...
Keep successful and failed setup/channel wizard exits inside their owning session. Preserve the shared Gateway and existing protocol; prove both flows with authenticated WebSocket E2E.
Co-authored-by: Peter Steinberger <steipete@gmail.com >
Co-authored-by: TheAngryPit <16145902+TheAngryPit@users.noreply.github.com >
2026-07-29 05:40:45 -04:00
Vincent Koc
0211407d8a
refactor(gateway): own health snapshot collection
2026-07-29 17:36:30 +08:00
Vincent Koc
46f629882b
refactor(gateway): own health summary contract
2026-07-29 17:36:30 +08:00
Vincent Koc
5ddb84661e
test(gateway): characterize health refresh boundaries
2026-07-29 17:36:30 +08:00
Peter Steinberger
a37a5a6575
feat(agents): add per-session tool overrides ( #115785 )
...
* feat(agents): per-session tool overrides (mcp/skills/web-search)
* test(agents): use tracked MCP temp dirs
2026-07-29 05:13:56 -04:00
Peter Steinberger
c402688894
feat(media): probe duration and dimensions for playback metadata ( #115728 )
...
* feat(media): probe playback metadata
* fix(media): satisfy CI gates
* fix(media): satisfy lint rules
2026-07-29 04:52:17 -04:00
Vincent Koc
cc6b766079
fix(ui): guide users through missing or broken AI setup ( #115716 )
...
* fix(ui): block chat until inference is configured
* fix(ui): gate new sessions on configured inference
* fix(ui): gate custodian before inference starts
* fix(ui): clarify custodian setup navigation
* fix(ui): explain missing AI provider setup
* fix(ui): distinguish unavailable configured AI
* fix(ui): align inference setup fixtures
* test(ui): default mock gateway to working inference
* test(ui): align startup send gate coverage
* test(ui): inherit inference in gateway fixtures
* test(ui): normalize deferred gateway agents
* test(ui): update model setup sidebar fixture
2026-07-29 16:48:48 +08:00
Peter Steinberger
eee5e029e3
feat(agents): persist last-used session model as the agent default ( #115717 )
...
* feat(agents): persist last-used session model as the agent default
* fix(agents): gate sticky model persistence on admin authority and make it best-effort
* fix(agents): keep sticky model helper internal
* fix(agents): satisfy sticky model lint rules
* style(agents): format sticky model gateway test
2026-07-29 04:16:51 -04:00
Vincent Koc
14940edf15
feat(skills): add Skill Workshop lifecycle hooks ( #115606 )
...
* feat(skills): add lifecycle hook contracts
* feat(plugins): expose skill hook contracts
* feat(plugins): identify skill evaluators
* feat(skills): persist proposal evaluation lifecycle
* feat(skills): add agent evaluation action
* feat(skills): emit committed skill lifecycle changes
* feat(gateway): expose skill proposal evaluation lifecycle
* feat(ui): add Skill Workshop evaluations
* fix(skills): bind lifecycle state to proposal revisions
* fix(skills): preserve lifecycle events without artifacts
* feat(cli): evaluate skill proposals
* fix(ui): bind evaluations to proposal revisions
* docs(skills): document lifecycle hook primitives
* chore(plugin-sdk): refresh skill hook surface
* fix(skills): harden proposal evaluator execution
* fix(plugins): isolate skill evaluator inputs
* fix(cli): align skill lifecycle deadlines
* fix(skills): preserve evaluation replay invariants
* test(ui): capture Skill Workshop evaluation proof
* fix(skills): bind apply to evaluated target tree
* fix(skills): preserve evaluation contract edges
* fix(skills): bound evaluation event storage
* chore(skills): keep lifecycle helpers internal
* refactor(skills): isolate evaluation persistence
* fix(skills): satisfy lifecycle validation gates
* chore(protocol): refresh Skill Workshop clients
* docs: refresh Skill Workshop map
* chore: keep release notes in PR metadata
* docs: refresh merged docs map
* fix(ci): type Code Mode catch errors
* fix(skills): freeze lifecycle observation payloads
* fix(protocol): keep proposal inspect backward-decodable
* fix(skills): enforce final evaluator bundle limits
* fix(skills): preserve lifecycle caller attribution
* chore: drop subsumed Code Mode formatting
* test(plugins): adapt lifecycle hook mocks
2026-07-29 15:49:44 +08:00
David
dec3462658
fix(gateway): preserve abort after dispatch rejection ( #91000 )
...
* test(gateway): cover post-dispatch abort rejection
* fix(gateway): preserve abort after dispatch rejection
* test(gateway): avoid cleanup key coupling
* fix(gateway): snapshot abort state on dispatch rejection
* fix(gateway): clear late abort tombstone after dispatch error
* test(gateway): retry abort race temp cleanup
* test(gateway): satisfy abort race check gates
* fix(gateway): close late abort error window
* ci: re-trigger checks against current main
* ci: re-trigger checks against current main
* fix: preserve lifecycle terminal chat errors during conflict repair
* fix: release chat admission after terminal abort
* test: fix lifecycle dispatch broadcast mock typing
* test(gateway): cover dispatch abort terminal ownership
* test(gateway): complete direct chat context fixture
* fix(gateway): keep chat run cleanup single-owned
* fix(gateway): persist signal-only dispatch failures
* fix(gateway): preserve abort through setup failure
* test(gateway): cover setup failure after abort
* fix: snapshot dispatch owner after queued followup
* fix(gateway): preserve agent terminal lifecycle ownership
* test(gateway): preserve agent terminal before dispatch error
* test(gateway): defer lifecycle state import
* fix(gateway): retain pending terminal owner on dispatch error
* fix(gateway): preserve restart-safe agent terminal owner
* fix(gateway): retain explicit abort terminal owner
* test(gateway): format explicit abort owner regression
* fix(gateway): retain pre-ACK abort terminal owner
* fix(gateway): retain abort transcript root work
* fix(gateway): preserve lifecycle terminal projection
* test(gateway): align terminal owner expectations
* test(gateway): type lifecycle interruption scope
* test(gateway): drop redundant createDeferred type argument
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-29 03:41:28 -04:00
Peter Steinberger
14ad80481a
perf(gateway): prewarm dashboard data caches after startup ( #115710 )
2026-07-29 03:30:46 -04:00
Vincent Koc
dd3d1d1a8b
fix(ui): hide pre-thread changes from session diffs ( #115708 )
...
* fix(ui): scope session diffs to thread changes
* docs: refresh generated map
2026-07-29 15:17:47 +08:00
Peter Steinberger
ddd0b48673
refactor: remove 3,527 lines of runtime and test duplication ( #115626 )
...
* refactor: remove obsolete runtime and test duplication
* test: preserve typed cron and realtime fixtures
2026-07-29 02:21:20 -04:00
Peter Steinberger
802c71cb1a
refactor(gateway): deduplicate message operation routing ( #115615 )
2026-07-29 02:01:32 -04:00
Peter Steinberger
032defb172
fix(nodes): cancel paired local inference when callers disconnect ( #115624 )
2026-07-29 02:00:22 -04:00
Peter Steinberger
42dd07748b
fix(health): reduce diagnostic refresh spam ( #115602 )
2026-07-29 01:43:36 -04:00
Peter Steinberger
21b2dced63
fix(gateway): harden config patch writes ( #115579 )
...
Reject ambiguous duplicate IDs in ID-merged patches. Compare shared auth against current authored ownership so runtime-only fields and stale secret snapshots cannot skew disconnect decisions.
2026-07-29 01:26:28 -04:00