Commit Graph

68544 Commits

Author SHA1 Message Date
Peter Steinberger
b2fd0276aa ci(perf): pin calibrated Kova revision (#107870) 2026-07-14 17:59:43 -07:00
Peter Steinberger
525db34f80 refactor: privatize diagnostics, Meet, and QA test seams (#107869)
* refactor(diagnostics-prometheus): privatize metrics test surface

* refactor(google-meet): remove Chrome test dependency exports

* refactor(qa-lab): test retained runtime boundaries

* chore(deadcode): shrink export baseline
2026-07-14 17:42:34 -07:00
Jason (Json)
18b2c9cabd fix(ui): steer restored queued messages (#107836)
Merged via squash.

Prepared head SHA: 3f8240bdaf
Co-authored-by: fuller-stack-dev <263060202+fuller-stack-dev@users.noreply.github.com>
Co-authored-by: fuller-stack-dev <263060202+fuller-stack-dev@users.noreply.github.com>
Reviewed-by: @fuller-stack-dev
2026-07-14 18:42:00 -06:00
Josh Avant
210340fe93 fix(channels): prevent base URL credentials in status output (#107754)
* fix(channels): redact credentials in account URLs

* fix(channels): sanitize final status summaries
2026-07-14 17:32:16 -07:00
Peter Steinberger
ced61db64a fix(ci): preserve OCM workspace prepack (#107844)
* fix(ci): preserve OCM workspace prepack

* fix(ci): bind OCM prepack to pack context

* fix(ci): avoid path import shadowing
2026-07-14 17:28:45 -07:00
Jason (Json)
4be39280e6 fix(ui): align new-session composer controls (#107862)
Match the new-session composer geometry with chat, keep the model picker at the bottom right, and anchor its menu so it expands left. Add browser coverage for composer alignment and model-menu placement.
2026-07-14 18:27:57 -06:00
Peter Steinberger
9043bcf230 test: share deep archive fixture prefix (#107858) 2026-07-14 17:20:22 -07:00
Peter Steinberger
86772735ac fix: pin sessions dropped into Pinned (#107854)
* fix(ui): pin sessions dropped into pinned group

* test(ui): capture pinned session drop proof

* chore: keep release note in PR metadata
2026-07-14 17:14:39 -07:00
Peter Steinberger
d91073eb1d refactor(plugins): remove internal test exports (#107859)
* refactor(imessage): privatize reply-cache reset

* refactor(vault): privatize CLI test helpers

* refactor(voice-call): privatize test seams

* refactor(zalo): privatize monitor test seams

* refactor(zalouser): test through provider boundaries

* chore(deadcode): refresh export baseline
2026-07-14 17:13:38 -07:00
Harjoth Khara
b47c9b2e75 fix: recover managed npm lock metadata (#107294) 2026-07-14 17:08:18 -07:00
Peter Steinberger
6f8903bc4d fix(macos): distinguish app and Gateway updates (#107793)
* fix(macos): clarify app-owned gateway updates

* fix(macos): sync update ownership translations

* fix(i18n): refresh control UI fallbacks

* fix(i18n): translate new control UI copy

* fix(ui): keep update routing live
2026-07-14 17:06:45 -07:00
Peter Steinberger
e10d8051d3 test: scale provider auth preload concurrency (#107849) 2026-07-14 17:01:51 -07:00
Peter Steinberger
2dfaa852e9 fix: cloud session delete works after worker destroy (#107848) 2026-07-14 16:58:12 -07:00
Peter Steinberger
7651ef5fca fix(docs-i18n): preserve slash numeric literals 2026-07-14 19:49:02 -04:00
Peter Steinberger
92e1ad8dfa improve: speed up run-lease tests (#107838)
* test: reuse run-lease repository fixture

* test: track run-lease temp roots
2026-07-14 16:31:48 -07:00
Peter Steinberger
d3e314141f test(plugins): include linux canvas startup baselines (#107837) 2026-07-14 16:31:16 -07:00
Jason (Json)
0644956830 fix(sqlite): compaction works with memory path search enabled (#107809)
* fix(sqlite): accept canonical memory path FTS triggers

* test(sqlite): reject drifted path FTS trigger

---------

Co-authored-by: Josh Lehman <josh@martian.engineering>
2026-07-14 16:25:37 -07:00
Peter Steinberger
0b03d17ef2 refactor(agents): split session manager internals (#107822)
* refactor(agents): split session manager internals

* refactor(agents): keep session helpers private

* fix(agents): preserve opaque SQLite session rows
2026-07-14 16:25:10 -07:00
Jason (Json)
0e0754b7c3 fix(sqlite): prevent startup failure on dormant older session databases (#107803)
* fix(sqlite): migrate dormant session databases before compact

* test(sqlite): cover historical startup migration

---------

Co-authored-by: Josh Lehman <josh@martian.engineering>
2026-07-14 16:24:24 -07:00
Yuval Dinodia
1b117408a2 fix(tui): keep the newer session when a stale switch history resolves last (#104824)
* fix(tui): keep the newer session when a stale switch history resolves last

setSession set state.currentSessionKey synchronously and then awaited
loadHistory, but nothing serialized overlapping switches. When a user
switched to session A then quickly to B, if A's loadHistory RPC resolved
after B's, A's completion saw sessionInfo.key !== the now-current key and
unconditionally reverted currentSessionKey, currentSessionId, and the
chat log back to A, and adopted A's in-flight run onto activeChatRunId.
The next typed message was then routed to A while the user believed they
were on B.

Give setSession and loadHistory a monotonic generation token, mirroring
the existing refreshSessionInfo overlap guard. setSession bumps the
generation and loadHistory captures it before the RPC, so a completion
whose generation is stale no-ops instead of clobbering the newer session.

* fix(tui): ignore rejected history from a superseded session switch

Guard the loadHistory catch path with the session-switch generation so a
stale switch whose history RPC rejects no longer writes a history-failed
notice into the session the user has since moved to.

Add a fake-backend PTY rapid-switch e2e test that drives the real runTui
loop and a reject-path regression test for the superseded-switch case.

* fix(tui): guard stale session refreshes

* test(tui): cover session alias canonicalization

* fix(tui): reject stale session refresh generations

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-14 16:20:20 -07:00
Peter Steinberger
ec5a6d83ef docs: note bounded maintainer invocations (#107830)
* docs: note bounded maintainer invocations

* docs: note exact run filtering
2026-07-14 16:20:10 -07:00
Peter Steinberger
623ec0f369 improve(qa-matrix): split E2EE runtime and protect recovery keys (#107828)
* fix(autoreview): handle verified QA source references

* refactor(qa-matrix): split E2EE scenario runtime

* style(qa-matrix): format recovery scenario

* chore(qa-matrix): prune split runtime baseline

* chore: keep release note in PR
2026-07-14 16:13:41 -07:00
Josh Avant
e4e83cf813 fix(reply): preserve finals while successor waits (#107799) 2026-07-14 16:13:24 -07:00
Peter Steinberger
4a2c381a3a test(memory): model qmd child stream encoding (#107827) 2026-07-14 16:10:44 -07:00
Jason (Json)
be88c46160 fix(packaging): reject unsafe root source packs (#107794) 2026-07-14 16:09:27 -07:00
Peter Steinberger
b363d5a293 feat(linux): canvas UI via CLI-node + Tauri app IPC bridge (#107633)
* feat(linux): canvas via CLI-node + Tauri app IPC bridge

* refactor: extract gateway helper modules

* build(linux-canvas): register plugin package in lockfile

* fix(linux-canvas): move canvas advertise test out of core, regen docs/protocol/deadcode

* fix(gateway): break node-catalog/registry import cycle via leaf normalize module; add canvas glossary term

* style: oxfmt invoke.ts and runtime.ts after buildNodeEventParams extraction

* fix(linux): load Canvas WebView via dedicated data_directory context

Wry's Linux/WebKitGTK incognito mode discards Tauri's registered
WebContext (wry webkitgtk/mod.rs), so the Canvas window got a fresh
ephemeral context without the openclaw-canvas:// scheme handler — the
bundled A2UI page never committed (stayed about:blank) and every A2UI
command timed out. Use an isolated cache-backed data_directory instead,
which keeps the protocol handler while still isolating Canvas storage
from the dashboard window.

* fix(linux): keep Canvas WebView ephemeral via incognito + data_directory

Autoreview flagged that a dedicated data_directory alone persists Canvas
browser state (cookies, localStorage, IndexedDB, service workers) across
restarts, so an agent that navigates Canvas to a site could leak an
authenticated session into a later session. iOS uses a non-persistent
store; Linux should match.

Add .incognito(true) alongside .data_directory(): the distinct directory
gives Tauri a fresh WebContext key so it still attaches the
openclaw-canvas:// protocol closure, and incognito makes Wry swap in a
fresh *ephemeral* context carrying those protocols. Live-verified on a
Wayland/WebKitGTK box: the bundled page still loads
(location.href=openclaw-canvas://localhost/index.html, openclawA2UI
present, A2UI renders) and the canvas-webview dir holds no persistent
cookie/storage files.
2026-07-14 16:05:14 -07:00
Peter Steinberger
85e4a42fef refactor: privatize core dead exports (#107826)
* refactor(gateway): privatize Claude prompt candidate type

* refactor(music-generation): privatize runtime dependency type

* refactor(security): privatize install policy request type

* refactor(sessions): privatize state notice prefix

* refactor(skills): privatize upload concurrency limit

* refactor(agents): privatize Chutes and catalog constants

* test(commands): use Chutes endpoint contract literals

* refactor(llm): remove proxy error facade export

* refactor(infra): privatize proxy protocol error message

* refactor(proxy-capture): privatize environment keys

* chore(deadcode): shrink unused export baseline
2026-07-14 16:00:58 -07:00
Peter Steinberger
59dea92da1 docs: note gh pr diff stat limitation (#107819)
* docs: note gh pr diff stat limitation

* docs: note yielded exec session handling
2026-07-14 15:55:58 -07:00
openclaw-mantis[bot]
24d568b453 chore(ui): refresh control ui locales (#107806)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-14 15:44:02 -07:00
Peter Steinberger
42591653de refactor(extensions): trim provider and channel internals (#107817)
* refactor(ollama): privatize internal plugin surfaces

* refactor(openshell): privatize internal plugin surfaces

* refactor(lmstudio): privatize internal plugin surfaces

* refactor(signal): privatize internal plugin surfaces

* refactor(whatsapp): privatize internal plugin surfaces

* chore(deadcode): shrink extension export baseline
2026-07-14 15:38:39 -07:00
pick-cat
30a241c498 fix(line): strip internal tool-trace banners from outbound text (#101708)
* fix(line): strip internal tool-trace banners from outbound text

* fix(line): sanitize inbound assistant replies

* chore: retrigger PR CI

---------

Co-authored-by: Pick-cat <266665499+Pick-cat@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-14 15:38:19 -07:00
Peter Steinberger
4c03c297b2 fix: OpenAI OAuth models fail on cloud workers (#107791)
* fix(cloud-workers): project gateway auth route

* fix(cloud-workers): pin projected auth profile
2026-07-14 15:36:57 -07:00
Peter Steinberger
a197a45799 test: isolate command harness selection (#107801) 2026-07-14 15:34:29 -07:00
Peter Steinberger
352473cc36 test(nextcloud-talk): fix replay response mock typing (#107808) 2026-07-14 15:26:09 -07:00
Shakker
4887cf55b4 fix: classify Codex tool results through shared contract (#107807)
Successful Codex dynamic-tool results now use the shared failure classifier, preventing Skill Workshop and plugin lifecycle metadata from being persisted as failed calls.

Refs #107684.
Prepared head SHA: e5bfcdb085
Co-authored-by: Shakker <165377636+shakkernerd@users.noreply.github.com>
Reviewed-by: @shakkernerd
2026-07-14 23:24:36 +01:00
Peter Steinberger
75354578cf test(feishu): refresh overflow delivery trace (#107764) 2026-07-14 15:10:23 -07:00
Peter Steinberger
520e2580cb feat(control-ui): show terminal upload progress (#107789)
* feat(control-ui): add terminal upload recovery

* fix(control-ui): harden terminal upload recovery
2026-07-14 15:10:01 -07:00
Peter Steinberger
21ec1546e5 refactor(extensions): trim internal plugin surfaces (#107796)
* refactor(diffs): privatize internal plugin surfaces

* refactor(file-transfer): privatize internal plugin surfaces

* refactor(nextcloud-talk): privatize internal plugin surfaces

* refactor(synology-chat): privatize internal plugin surfaces

* chore(deadcode): shrink extension export baseline
2026-07-14 15:02:56 -07:00
Peter Steinberger
86085563be test(ci): isolate flaky shared-worker suites (#107780)
* test(ci): isolate flaky shared-worker suites

* test(ci): route isolated agent targets
2026-07-14 15:00:58 -07:00
Peter Steinberger
890f20be06 feat(macos): coordinate app and Gateway updates (#107634)
* feat(macos): coordinate app and Gateway updates

* fix(macos): harden coordinated update recovery

* fix(gateway): reject mixed wake presence events

* chore: keep release notes in PR body

* chore(i18n): sync macOS update strings

* chore(generated): sync native artifacts

* style(macos): satisfy Swift checks

* chore(i18n): refresh update source locations

* fix(macos): localize post-update status

* fix(macos): satisfy post-update Swift lint

* chore(i18n): refresh post-update source locations

* test(gateway): isolate system-event routing state

* test(gateway): document system-event authorization
2026-07-14 14:59:32 -07:00
Peter Steinberger
9e1a1f2296 test: isolate provider ownership fixture (#107762)
* test: isolate harness auth planning

* test: isolate provider ownership fixture
2026-07-14 14:56:39 -07:00
qingminlong
c94da0df6f fix(logs): preserve log tails across short reads (#105066)
* fix(logs): preserve log tails across short reads

* test(logging): track log-tail temp files

---------

Co-authored-by: Peter Steinberger <peter@steipete.me>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-14 14:47:53 -07:00
Peter Steinberger
cea0d98efb fix(ui): space compact macOS titlebar brand (#107783) 2026-07-14 14:44:40 -07:00
NIO
dd16c9e8ba fix(telegram): Mini App hangs on Opening dashboard when auth never responds (#104629)
* fix(telegram): bound Mini App auth fetch with AbortController timeout

* test(telegram): exercise generated Mini App timeout

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-14 14:44:21 -07:00
Peter Steinberger
ee7410c203 fix(ui): center external session conversations (#107781) 2026-07-14 14:42:22 -07:00
Peter Steinberger
7b9a72fc4f refactor(extensions): trim small plugin exports (#107784)
* refactor(workspaces): privatize internal plugin surfaces

* refactor(canvas): trim internal host exports

* refactor(qa-channel): privatize media URL validation

* refactor(google): remove web search test facade

* refactor(xai): remove response helper test facades

* chore(deadcode): shrink extension export baseline
2026-07-14 14:38:08 -07:00
Peter Steinberger
11eb3b50a3 fix(ui): center terminal tab close control (#107777) 2026-07-14 14:34:13 -07:00
Peter Steinberger
92fcd4ed99 fix(system-agent): reject untrusted plugin specs before proposing
The Crestodian->OpenClaw reconciliation restored a pre-#102197 `if (opts.approved)`
wrapper around the execute-time plugin-install trust check, so an unapproved
plugin-install op produced a formatted plan for an arbitrary npm/url/file
source instead of rejecting it. Validate unconditionally, matching #102197,
and restore its dropped regression test. Also fix a stale
crestodian-ring-zero-setup id in the CI compat list and a doubled
openclaw-openclaw-planner tmpdir prefix from the mechanical rename.
2026-07-14 14:33:34 -07:00
Peter Steinberger
0000b70aa7 refactor(qa): use AIMock text extraction 2026-07-14 14:31:43 -07:00
Zexu Jin
2200256ff5 fix: SQLite-backed sessions never trigger byte-based auto-compaction (#104940)
* fix(sessions): wire SQLite transcript byte size into preflight compaction guard

readSessionLogSnapshot returned {} for SQLite-backed transcripts, so
maxActiveTranscriptBytes never saw a byte count and silently degraded to
token-only compaction triggering for every migrated session. Read the
size via readTranscriptStatsSync using the identity already encoded in
the SQLite sessionFile marker.

Fixes #104762

* test(memory): cover SQLite byte-triggered flush

---------

Co-authored-by: Peter Steinberger <peter@steipete.me>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-14 14:31:00 -07:00