Commit Graph

69887 Commits

Author SHA1 Message Date
ooiuuii 7a5e0e992c fix(codex): warn and continue on projector drift (#99287)
* fix(codex): diagnose projector protocol drift

Co-authored-by: luyifan <al3060388206@gmail.com>

* fix(codex): warn and continue on projector drift

Co-authored-by: luyifan <al3060388206@gmail.com>

* test(codex): publish materialized auth snapshot

Co-authored-by: luyifan <al3060388206@gmail.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-17 18:34:19 +01:00
Peter Steinberger 277f009cc9 feat(linux): Quick Chat floating composer for the Tauri companion (#109947)
* feat(linux): add Quick Chat floating composer to the Tauri companion

- frameless transparent always-on-top quickchat window (on-demand, canvas
  pattern), positioned top-third on the cursor monitor, CSS fade+zoom in/out
- global shortcut Ctrl+Shift+Space on X11 (GNOME reserves Alt+Space); tray
  'Quick Chat' item is the Wayland entry point; blur/Esc/close-request hide
- sends via the CLI agent turn with --message-file staged 0600 (argv is
  world-readable procfs) and cleaned up after the turn; failures surface as
  desktop notifications; Ctrl+Enter also opens the dashboard
- default-agent identity chip (emoji/monogram) from agents list --json, 60s cache
- window-scoped capability + permission set; window-state denylist; docs

* chore(linux): register quickchat.js as a knip native-asset entry
2026-07-17 18:25:27 +01:00
YangManBOBO de03430104 fix(gateway): config hot-reload permanently disables after sporadic recovered watcher errors (#109682)
* fix(gateway): stop disabling config hot-reload after recovered watcher errors

* test(gateway): prove watcher retry budget resets per episode

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-17 18:16:38 +01:00
Peter Steinberger 0a0e485e80 fix(qa-lab): omit empty openai.baseUrl in live-frontier child config (#109810)
normalizeQaLiveProviderConfig injected baseUrl:"" when the host provider omitted baseUrl, failing the child gateway's config schema (baseUrl >=1 char) so every live-frontier scenario failed to start. Omit missing/empty/whitespace baseUrl so the provider default applies; valid URLs preserved.
2026-07-17 18:13:03 +01:00
Peter Steinberger 8a8706cb5d test(mcp): exercise subscribed gateway events 2026-07-17 18:00:24 +01:00
Yiğit ERDOĞAN 12e7f91047 fix(compaction): previous summary is duplicated when a later split degrades (#109828)
* fix(compaction): stop duplicating the previous summary when a later split degrades

summarizeInStages stamped a merged result as generic-fallback whenever ANY
split degraded. compaction-safeguard reads that kind to decide whether to
restore the previous summary, on the documented assumption that "a generic
fallback means redistillation never happened".

That assumption only holds for chunk 0. summarizeViaLLM prepends the previous
summary as the first message, so it always lands in the oldest chunk. When
that chunk summarizes fine but a later one degrades, the merge already carries
the redistilled summary — and the safeguard prepends it a second time. Every
subsequent compaction that has any degraded split re-adds it again, so a PR
that exists to stop token burn compounds it instead.

The kind now reports whether the oldest split degraded, which is exactly the
question the only consumer asks. The coarse "any chunk" flag is gone rather
than kept alongside the precise one, so there is a single source of truth.
Behavior for a degraded oldest split is unchanged: the previous summary is
genuinely lost there and restoring it is still correct.

* test(compaction): pin previous-summary restoration boundary

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-17 17:50:22 +01:00
xingzhou 2e64628a23 fix(azure): responses model aliases route correctly (#93833)
* fix(agents): keep Azure Responses model aliases routed

* Fix Azure Responses alias owner fallback

* Fix provider-level Azure alias owner

* Fix Azure custom deployment alias ownership

* Fix Azure alias endpoint ownership

* fix: remove redundant static catalog boolean wrapper

* fix(azure): preserve alias tests after main sync

* fix(azure): infer transport from retained alias

* fix(azure): derive transport from manifest alias

* chore: drop local CodeGraph metadata

* fix(azure): keep alias transport ownership consistent

* fix(azure): preserve alias ownership across fallbacks

* fix(agents): keep codex-only model suppression authoritative

* refactor(agents): split model compatibility helpers

* fix(agents): preserve conditional suppression ownership

* test(agents): deduplicate alias resolution assertions

* fix(agents): reject ambiguous model aliases

* test(agents): keep alias regressions within lint caps

* fix(agents): preserve alias target transport

* fix(agents): honor configured alias transports

* fix(agents): preserve retained alias transport

* fix(agents): narrow alias transport precedence

* test(agents): complete alias transport fixture

* test(agents): trim redundant alias fixture fields

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-17 17:47:08 +01:00
Peter Steinberger 5366b6de81 refactor: store gateway restart recovery in SQLite (#110014)
* refactor: move restart sentinel state to sqlite

* fix: satisfy restart sentinel architecture gates

* test: avoid cold startup migration timeout

* fix: bound durable restart notice retries

* test: type restart notice contention mock

* fix: detect legacy restart sentinel before reads

* fix: keep delivery attempt result internal

* fix: narrow restart sentinel preflight guard
2026-07-17 17:43:22 +01:00
Peter Steinberger b75b62fb1c test(talk): isolate consult session storage (#110078) 2026-07-17 17:40:08 +01:00
WhatsSkiLL 36ab06da22 fix(ui): release Talk media after WebRTC disconnects (#109914)
* fix(ui): release Talk media after provider disconnects

* fix(ui): limit disconnect cleanup to WebRTC

---------

Co-authored-by: IWhatsskill <284122573+IWhatsskill@users.noreply.github.com>
2026-07-17 12:39:38 -04:00
Peter Steinberger 7f2867997f ci: allow release macOS cache finalization 2026-07-17 17:32:06 +01:00
wangmiao0668000666 4cdea67a59 fix(auto-reply): honor abortSignal in transient-HTTP retry backoff (#109805)
* fix(auto-reply): honor abortSignal in transient-HTTP retry backoff

The transient-HTTP retry in handleAgentExecutionError slept its full
TRANSIENT_HTTP_RETRY_DELAY_MS (2500ms) on a bare setTimeout, ignoring the
turn abortSignal. A cancelled turn stayed parked for the whole backoff and
then returned { kind: "retry" }, issuing another provider attempt after
cancellation.

Mirror the sibling overload-retry branch (abort-aware since #109354):
sleep via sleepWithAbort with turn.replyOperation?.abortSignal ??
turn.opts?.abortSignal and map a sleep rejection through
resolveReplyOperationAbortAction, returning the abort action when set.

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

* refactor(auto-reply): share abortable retry backoff

* fix(auto-reply): make retry wait fallthrough explicit

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-17 17:29:27 +01:00
Peter Steinberger 7128f6ddbb test(mcp): tolerate delayed assistant channel events (#110076) 2026-07-17 17:22:45 +01:00
Peter Steinberger 4bfaccafd6 feat(chat): replay the active plan snapshot to reconnecting clients (#109966)
* feat(chat): replay the active plan snapshot to reconnecting clients

Plan checklists were live-event-only: a client that connected or
refreshed mid-run saw nothing until the next update_plan call, and iOS
adoptRun actively wiped retained plan state on reconnect. The gateway
now records the latest normalized plan snapshot per run beside the
existing chat text buffers and replays it through the established
chat.history/chat.startup inFlightRun recovery contract (runId > plan >
text under the payload budget; a budget-dropped plan is sent as an
explicit empty snapshot so clients never preserve a stale checklist).

Web, iOS, and Android seed and reconcile the snapshot through one shared
contract riding each client's existing inFlightRun adoption gate: present
plan replaces, absent plan preserves (legacy gateway), a different or
terminated run clears, and stale history responses cannot clobber a newer
live plan. Verified live gap: openclaw/openclaw#108675 comment 5001475066.

* fix(ios): extract run-snapshot adoption below the file-length lint ceiling

ChatViewModel.swift crossed SwiftLint's 1500-line limit; the in-flight
snapshot adoption and plan reconciliation move to a focused extension.
Also refresh the native i18n inventory for shifted line anchors.

* fixup: regenerate i18n anchors and test formatting after rebase

* ci: retrigger after wedged queued runs

* fix(ui): use Object.hasOwn for the plan field presence probe

* fix(ios): annotate the plan-snapshot fixture init for periphery
2026-07-17 17:10:07 +01:00
Peter Steinberger 4a675228af fix(reef): discovered conversation turns bind correctly (#110029)
* fix(reef): bind discovered conversation turns

* chore: keep release notes in PR

* test(reef): cover first-use conversation binding

* fix(sessions): preserve canonical outbound peers

* fix(sessions): narrow paired outbound target
2026-07-17 16:34:00 +01:00
Peter Steinberger c69a75f697 fix(release): mount normalization helper in Docker E2E 2026-07-17 16:25:37 +01:00
Peter Steinberger 5a8b25cc9a fix(release): reserve installer gateway port 2026-07-17 16:23:17 +01:00
Peter Steinberger 0476243d5d fix(release): honor unreleased changelog opt-in 2026-07-17 16:23:17 +01:00
Peter Steinberger 4ec2f9db25 test(discord): isolate component runtime fixtures 2026-07-17 16:23:17 +01:00
Peter Steinberger 600ff3acb4 fix(ci): preserve private plugins in Docker E2E (#110062) 2026-07-17 16:21:20 +01:00
Peter Steinberger edef9822ee fix(i18n): restore masked list marker structure 2026-07-17 11:11:42 -04:00
Peter Steinberger 75697ad3bf feat(macos): session detail parity — row actions, unread auto-clear, and subagent tree in native chat (#110019)
* feat(clients): session detail parity — row actions, unread auto-clear, and subagent tree in the native chat sidebar

* fix(clients): overlay pending explicit unread values over stale session snapshots

* chore(i18n): translate new session action strings and regenerate Apple/Android catalogs

* chore(clients): delete dead pin helper and worktree memberwise init
2026-07-17 15:54:08 +01:00
Peter Steinberger 311f5bfbaa feat(macos): honor the selected microphone in Talk and show live voice activity in chat (#109995)
* feat(macos): honor the selected microphone in Talk and surface live level, transcript, and mic picker in chat

* chore(i18n): translate new talk activity strings and regenerate Apple/Android catalogs
2026-07-17 15:45:46 +01:00
Peter Steinberger 2c1c5b3a97 improve: speed up native session loading from paired Macs (#110030)
* perf(macos): accelerate native session catalogs

* fix(macos): preserve Codex catalog completeness

* fix(macos): bound Claude catalog work

* fix(macos): type catalog continuation result

* refactor(macos): satisfy session catalog lint
2026-07-17 15:39:40 +01:00
Peter Steinberger 95d17b500c fix: isolate media model SecretRef owners (#110042) 2026-07-17 15:39:18 +01:00
xingzhou 0a868179e4 fix(session): stop repeated restart recovery after retry budget (#96230)
* fix(session): bound restart recovery across gateway restarts

Co-authored-by: Mason Huang <masonxhuang@proton.me>

* style(session): format restart recovery changes

* fix(session): fence recovery notice state

* test(session): align internal recovery types

* test(session): type recovery completion fixture

* style(session): satisfy recovery lint rules

* test(plugin-sdk): split recovery boundary coverage

* test(plugin-sdk): use tracked recovery temp dirs

* fix(session): preserve stale admission errors

* fix(session): close recovery lifecycle races

* fix(session): rotate rejected recovery dispatch ids

* fix(session): enforce recovery quarantine boundaries

* fix(session): close restart recovery exhaustion gaps

* fix(session): preserve recovery command narrowing

* test(session): type restart recovery fixtures

* fix(session): enforce restart recovery quarantine

* fix(session): close restart recovery races

* fix(session): type recovery lifecycle state

* fix(session): enforce recovery ownership fences

* fix(session): fence recovery lifecycle completion

* fix(session): quarantine cross-process recovery

* fix(session): retire stale recovery ownership

* fix(session): restore rejected recovery admission

* fix(session): preserve restored recovery target

* fix(session): retry pending recovery races

* fix(session): preserve concurrent recovery aborts

* fix(session): quarantine recovery lifecycle state

* fix(session): settle exact recovery delivery fences

* fix(session): keep recovery restoration internal

* fix(session): close recovery admission races

* fix(session): retry durable recovery rollback

* fix(session): guard cached recovery settlement

* fix(session): close recovery ownership gaps

* fix(session): resume after delayed recovery rollback

* fix(session): finalize unrecoverable restart state

* fix(session): retry admitted recovery restoration

* fix(session): preserve recovery cleanup guarantees

* fix(session): restore failed terminal settlement

* chore(plugin-sdk): refresh API baseline

* fix(session): close recovery owner retry races

* test(session): type recovery owner fixture

* refactor(session): remove obsolete owner validator

* fix(session): preserve explicit abort recovery

---------

Co-authored-by: Mason Huang <masonxhuang@proton.me>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-17 15:36:09 +01:00
Peter Steinberger 90ab572582 test(extensions): align lifecycle mocks (#110041) 2026-07-17 15:31:02 +01:00
Peter Steinberger b319493a52 improve: let Code Mode use declared tool result shapes (#109813)
* feat(agents): add Code Mode output contracts

* perf(agents): defer untrusted tool schemas

* chore(plugin-sdk): refresh API baseline

* fix(agents): preserve deferred schema markers

* fix(agents): preserve policy-blocked tool results

* fix(agents): preserve nullable output contracts

* fix(agents): reject policy blocks from success contracts

* fix(agents): preserve output contracts through normalization

* test(agents): type normalized tool fixtures

* fix(agents): validate catalog results before projection

* fix(agents): keep result snapshots internal

* fix(agents): fail closed on unrenderable unions

* fix(agents): preserve empty result markers

* test(agents): keep result fixture discriminator literal

* test(agents): use native own-property check
2026-07-17 14:46:37 +01:00
Peter Steinberger fee4490fe4 fix(docs): preserve canonical maturity product labels 2026-07-17 09:44:52 -04:00
Peter Steinberger 4ef4323db9 fix: keep memory SecretRef failures agent-scoped (#109977)
* test: normalize Copilot token fixture

* test: normalize Copilot auth fixtures

* test: use explicit Copilot placeholders

* test: use neutral Copilot fixture host

* refactor: clarify Copilot embedding auth values

* refactor: keep Copilot profile result intact

* test: normalize embedding credential fixtures

* fix: isolate memory SecretRef owners

* refactor: isolate memory secret collection
2026-07-17 14:44:03 +01:00
Peter Steinberger 649a8b35f8 refactor(mcp): reuse plugin cache primitives (#110013) 2026-07-17 14:42:58 +01:00
Peter Steinberger 7835c03930 test(release): align plugin validation expectations (#110012) 2026-07-17 14:36:12 +01:00
openclaw-mantis[bot] 71c1d612a6 chore(ui): refresh control ui locales (#109751)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-17 14:33:48 +01:00
Peter Steinberger b48c801623 test(release): repair extension runtime fixtures 2026-07-17 14:24:13 +01:00
Stephen Hebson cc9d80c3d6 perf(mcp): cache immutable config discovery (#79882)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-17 14:20:48 +01:00
Peter Steinberger 2c43e86787 refactor(discord): adopt shared realtime voice session harness (#110000) 2026-07-17 14:17:37 +01:00
Peter Steinberger 0c17cd4f1f fix(sqlite): keep additive agent schema at version 11 (#109999) 2026-07-17 14:15:40 +01:00
Peter Steinberger cbaf112355 fix: compaction usage guards and agent-loop turn correctness (#109709)
* fix(agents): compaction usage guards and agent-loop turn correctness

* fix(agents): manual compaction replans with zero retention for small sessions

* ci: retrigger pull-request validation

* ci: refresh pull-request validation

* test(agents): live end-to-end agent session coverage

* fix(agents): keep yielded runs settled so external delivery can claim the session

* docs(agents): clarify length retry bookkeeping
2026-07-17 14:13:29 +01:00
Peter Steinberger da69daeb72 feat(onboarding): recommend plugins and skills from installed apps (#109668)
* feat(onboarding): recommend plugins and skills from installed apps

Scan installed macOS apps during classic onboarding (TCC-free), gather
candidates from official catalogs + ClawHub search, let the configured
model pick genuine matches, and offer an opt-in multiselect install step.
Adds a device.apps node-host command (default-off sharing, Android-parity
envelope) so remote gateways can request a paired Mac's inventory, and a
wizard.appRecommendations kill switch. Custom setup-inference completions
no longer inherit the 32-token verification-probe output cap.

* feat(onboarding): recommend apps in guided flow

* fix(onboarding): harden app recommendations against ClawHub self-promotion

Third-party ClawHub skills are never pre-selected regardless of model tier
(publisher-controlled listing text reaches the matcher prompt and could
promote itself); their labels now say they install third-party code.
Installed-app scans follow symlinked .app bundles. Matcher output stays
bounded by the resolved model's own maxTokens budget (documented invariant).

* fix(onboarding): key official catalog candidates by resolved plugin id

Real catalog entries are package manifests without a top-level id; keying the
candidate map and channel/provider classification by entry.id collapsed the
whole official catalog into one undefined-keyed entry, so no official plugin
or channel was ever recommended. Regression test runs against the bundled
catalogs.

* fix(onboarding): satisfy lint, types, deadcode, and migration gates

Split the guided-onboarding test into a self-contained custodian suite to stay
under max-lines. Narrow app-recommendation exports (drop dead node-payload
normalizer, unexport internal types/helpers, route candidate tests through the
public API), replace map-spread with a helper, unexport device.apps result
types, add installedAppsSharing to node-host migration expectations, cast the
wizard multiselect mock, and regenerate the docs map.

* test(onboarding): register new live test in the shard classifier
2026-07-17 14:07:59 +01:00
Peter Steinberger 8020dd3e08 fix(reef): discover trusted peers as conversations (#109905)
* fix(reef): discover trusted peer conversations

* test(reef): document temporary state cleanup

* test(gateway): include conversation discovery in method order

* chore: leave changelog to release automation

* fix(gateway): preserve configured conversation discovery

* fix(gateway): validate turns before session binding

* fix(gateway): preserve directory conversation identity
2026-07-17 13:55:30 +01:00
Peter Steinberger 62407b36d7 fix(doctor): repair ALTER-appended operator approval schema instead of wedging startup (#109876) 2026-07-17 13:47:06 +01:00
WhatsSkiLL 4d3b18811e feat(android): add Wear real-time Talk controls (#109483)
* feat(android): add Wear real-time Talk controls

* fix(android): satisfy Wear Talk CI checks

* fix(talk): remove unused client language parameter

* fix(android): harden Wear realtime Talk routing

Co-authored-by: IWhatsskill <284122573+IWhatsskill@users.noreply.github.com>

* chore(android): refresh Wear Talk metadata

* chore(android): align native i18n baseline

---------

Co-authored-by: IWhatsskill <284122573+IWhatsskill@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-17 13:46:05 +01:00
Peter Steinberger bf754b8a34 feat: align native macOS chat with the web chat capability set (#109712)
* feat(macos): wire sessions manager, assistant trace, talk, voice notes, and Listen into native chat

* feat(clients): add input history, reply quoting, and per-session drafts to native chat composer

* fix(clients): capture TTS server lease before gateway check and dedupe restored input-history entries

* docs(clients): document reply-chip consume parity with web accepted-send semantics

* fix(clients): retire sent-text recall stash and keep recall markers stable under prepends

* test(clients): wait for outbox restore before asserting live-send paths

* docs(clients): note cross-session outbox flush scheduling contract

* chore(clients): split oversized chat files to satisfy SwiftLint length caps

* chore(i18n): sync native app i18n inventory for new chat strings

* chore: retrigger ci

* chore(i18n): translate new chat strings and regenerate Apple catalogs

* chore(i18n): regenerate Android localization resources for new chat strings

* test(clients): await lifecycle cleanup before modeling replacement gateway traffic

* chore(clients): split invoke timeout helper to satisfy SwiftLint length cap

* chore(clients): drop unused OpenClawProtocol import from invoke timeout split
2026-07-17 13:44:48 +01:00
Peter Steinberger 1ec4f3e0ed chore(plugin-sdk): refresh generated API baseline (#109987) 2026-07-17 13:44:31 +01:00
Peter Steinberger 662e79d574 test(release): harden extension prerelease contracts 2026-07-17 13:43:12 +01:00
Peter Steinberger f341a013af test(release): repair plugin prerelease coverage 2026-07-17 13:43:12 +01:00
Peter Steinberger 363e8b09ec fix(release): honor explicit unreleased dry-run input 2026-07-17 13:43:12 +01:00
Peter Steinberger a291cf7296 test(release): align prerelease scan contracts 2026-07-17 13:43:12 +01:00
Peter Steinberger 6f3aa0f7ae fix(release): point locale drift at generated sync 2026-07-17 13:43:12 +01:00
Peter Steinberger c149489703 ci: trim release metadata and ClawHub checkouts 2026-07-17 13:43:12 +01:00