Commit Graph

16048 Commits

Author SHA1 Message Date
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
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
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
Peter Steinberger
4a2c381a3a test(memory): model qmd child stream encoding (#107827) 2026-07-14 16:10:44 -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
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
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
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
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
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
0000b70aa7 refactor(qa): use AIMock text extraction 2026-07-14 14:31:43 -07:00
NIO
f3c5e6880e fix(qqbot): bound gateway websocket handshake waits at 30s (#106484)
* fix(qqbot): bound gateway websocket handshake waits at 30s

* test(qqbot): replace source-inspection handshake coverage

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-14 14:23:52 -07:00
Peter Steinberger
243eecbee1 refactor(reef): use Noble byte utilities 2026-07-14 14:20:59 -07:00
Peter Steinberger
2eb9c7ebd7 refactor(extensions): privatize small plugin internals (#107774)
* refactor(llama-cpp): privatize embedding internals

* refactor(parallel): privatize MCP response helpers

* refactor(logbook): privatize analysis parsers

* refactor(crabbox): narrow worker provider exports

* refactor(acpx): privatize process reaper internals

* chore(deadcode): refresh unused-export baseline
2026-07-14 14:15:44 -07:00
Peter Steinberger
6e7a1021c8 refactor(nostr): use native EOSE subscriptions 2026-07-14 13:56:50 -07:00
Peter Steinberger
6495523a02 test(memory): model qmd child stream encoding (#107740) 2026-07-14 13:38:52 -07:00
Peter Steinberger
58cca1d98a refactor(linux-node,oc-path): trim internal exports (#107753)
* refactor(linux-node): privatize internal plugin surfaces

* refactor(oc-path): test commands through CLI registration

* chore(deadcode): refresh unused-export baseline
2026-07-14 13:34:00 -07:00
Peter Steinberger
074f07c520 refactor(irc,workboard): trim internal exports (#107749)
* refactor(irc): privatize internal plugin surfaces

* refactor(workboard): privatize internal plugin surfaces

* chore(deadcode): refresh unused-export baseline
2026-07-14 13:19:08 -07:00
Peter Steinberger
b93f4bb3ac refactor: privatize Twitch and SMS internals (#107737)
* refactor(twitch): privatize internal plugin surfaces

* refactor(sms): privatize internal plugin surfaces

* chore(deadcode): refresh unused-export baseline
2026-07-14 12:55:35 -07:00
Peter Lee
98e88ab1a6 fix(feishu): preserve line breaks in post markdown (#99394)
* fix(feishu): upgrade single newlines to paragraph breaks in post md messages

* fix(feishu): move post-md normalization out of adapter chunker, add card-mode regression test

* fix(feishu): normalize post-md newlines before chunk/limit decisions

* fix(feishu): remove post-md normalization from outbound chunker

Move newline normalization out of feishuOutbound.chunker so card and
document-comment text paths are not affected. Post-md normalization
remains scoped to sendOutboundText, buildFeishuPostMessagePayload, and
editMessageFeishu where the render mode is known.

Add regression test verifying the chunker preserves single newlines
unchanged.

Ref: https://github.com/openclaw/openclaw/pull/99394#issuecomment-4873230477

* fix(feishu): route card on raw text, add post-md expansion length guards

* fix(feishu): scope reply target to first subchunk in expanded post fanout

* fix(feishu): skip redundant post-md normalization for pre-chunked outbound and reply text

ClawSweeper review identified that subchunks from already-normalized
post-md text re-enter sendMessageFeishu which normalizes again. If a
chunk boundary falls inside a fenced code block the second chunk lacks
the opening fence, so findCodeRegions treats code newlines as prose and
expands them to paragraph breaks.

Add alreadyNormalized flag to buildFeishuPostMessagePayload and
sendMessageFeishu so pre-normalized callers (sendOutboundText overflow
path and reply-dispatcher sendChunkedTextReply) can skip the redundant
normalization pass.

* fix(feishu): convert markdown tables before post-md newline normalization in outbound path

ClawSweeper identified that sendOutboundText normalizes newlines before
sendMessageFeishu runs convertMarkdownTables. The blank lines inserted by
normalization break markdown table row contiguity, so raw-mode Feishu
accounts can lose table rendering while fixing paragraph spacing.

Convert tables before the newline upgrader so the converter sees the
original table structure. sendMessageFeishu runs convertMarkdownTables
again internally, but that is a no-op on already-converted text.
This matches the reply-dispatcher path which already converts tables
before normalization.

* chore(feishu): avoid exporting internal card builders, test through public send API

The card-mode newline preservation tests now exercise sendMarkdownCardFeishu
and sendStructuredCardFeishu instead of calling buildMarkdownCard and
buildStructuredCard directly. This keeps the SDK surface unchanged from
upstream/main.

The schema-2.0 width config and buildStructuredCard header-fallback tests
are removed because upstream/main already covers them under the sends
cards with schema-2.0 width config describe.

* fix(feishu): preserve markdown newlines in posts

* fix(feishu): preserve multiline markdown structure

* fix(feishu): preserve markdown structure while chunking

* fix(feishu): satisfy package and type gates

* fix(feishu): chunk posts within byte envelope

* fix(feishu): restore channel chunker contract

* chore(feishu): leave release notes release-owned

* chore(feishu): shrink max-lines baseline

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-14 12:46:03 -07:00
Peter Steinberger
a679cda0c9 refactor(copilot): trim internal exports (#107730)
* refactor(copilot): trim internal exports

* chore(deadcode): refresh export baseline
2026-07-14 12:23:35 -07:00
Peter Steinberger
65e2fddbee refactor(telegram): trim internal exports (#107726)
* refactor(telegram): trim internal exports

* chore(deadcode): refresh export baseline
2026-07-14 12:03:50 -07:00
Peter Steinberger
68f336e496 refactor(bonjour): privatize process error classification (#107724) 2026-07-14 12:00:55 -07:00
Peter Steinberger
61df1dbe7b refactor(zalouser): use native typing API 2026-07-14 11:42:09 -07:00
Peter Steinberger
af3d796e19 refactor(discord): trim internal exports (#107714)
* refactor(discord): trim internal exports

* refactor(discord): use canonical approval helper

* chore(deadcode): refresh export baseline
2026-07-14 11:34:02 -07:00
Shakker
e63e49b1b0 fix: prevent Bonjour probe retry loops (#107710)
Prevents duplicate Bonjour advertisement attempts by delegating probing, conflict resolution, retries, and interface republishing to ciao.

Related: #98448

Prepared head SHA: 4bd1638acf

Co-authored-by: Shakker <165377636+shakkernerd@users.noreply.github.com>
Reviewed-by: @shakkernerd
2026-07-14 19:28:47 +01:00
Peter Steinberger
0571e0ecff fix(proxy): share canonical no-proxy matching 2026-07-14 11:23:32 -07:00
Peter Steinberger
045090c2ce refactor(qa-lab): use native strict object schemas 2026-07-14 11:10:21 -07:00
Peter Steinberger
a6a0716486 feat(setup): rename Crestodian to OpenClaw system agent
User-facing name is now OpenClaw (the system speaks); internal code name is
system-agent. Gateway methods crestodian.* -> openclaw.chat/openclaw.setup.*,
agent tool -> openclaw, reserved agent ids openclaw + retired crestodian.
openclaw setup routes: onboarding flags -> onboard, -m/--yes -> system agent,
bare configured interactive -> OpenClaw chat, unconfigured -> onboarding.
Hidden crestodian CLI and /crestodian TUI aliases kept; docs moved to
docs/cli/openclaw.md with redirect stub. macOS/Android strings in lockstep.

Refs #107237
2026-07-14 11:03:02 -07:00
Peter Steinberger
8456719a90 fix(tokenjuice): preserve middleware boundaries 2026-07-14 11:00:31 -07:00
Peter Steinberger
a8bcaf9505 fix(tokenjuice): drop duplicate compacted output 2026-07-14 11:00:31 -07:00
Peter Steinberger
e20c029efd refactor(codex): split app-server event projection (#107680)
* refactor(codex): split app-server event projector

* fix(codex): preserve raw event projection ordering

* chore(codex): remove projector max-lines exemption

* refactor(codex): split stateful projector owners
2026-07-14 11:00:08 -07:00
Peter Steinberger
96eaf2be80 fix: restore recent native, browser, and audio behavior (#107631)
* fix: repair recent landed regressions

* chore: keep release changelog owned

* test(macos): align CLI fixtures with Node floor

* fix(macos): document Node runtime floor contract

* style(auto-reply): restore runtime mode formatting
2026-07-14 10:47:33 -07:00
Peter Steinberger
433656286d refactor(ws): use native socket contracts 2026-07-14 10:35:38 -07:00
Jesse Merhi
00364ee777 improve: warn before non-ClawHub plugin installs (#102197)
Merged via squash.

Prepared head SHA: e08d9e737d
Co-authored-by: jesse-merhi <79823012+jesse-merhi@users.noreply.github.com>
Co-authored-by: jesse-merhi <79823012+jesse-merhi@users.noreply.github.com>
Reviewed-by: @jesse-merhi
2026-07-15 03:25:36 +10:00
Alix-007
0c8220ebf9 fix(msteams): add timeouts to file consent upload requests (#104120)
* fix(msteams): add timeouts to file consent upload requests

* fix(msteams): share file consent upload timeout helper

* fix(msteams): size-budget file consent upload timeout

* chore(deadcode): allowlist test-only timeout constant exports

* style(msteams): format consent timeout test

* test(msteams): reject consent aborts with errors

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-14 10:14:23 -07:00
qingminlong
04e523a73b fix(logbook): reject invalid 12-hour analysis clocks (#107191)
* fix(logbook): reject invalid meridiem clocks

* test(logbook): cover invalid meridiem card output

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-14 09:43:10 -07:00
felirami
c1191cdf2f fix(memory-core): preserve canonical cache rows during legacy migration (#107243)
* fix(memory-core): preserve canonical cache rows on migration

* fix(memory-core): guard cache migration dimensions

* fix(memory-core): validate cache embedding lengths

* fix(memory-core): validate cache migration dimensions

* refactor(memory-core): keep cache guard compact

---------

Co-authored-by: felirami <felirami@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-14 09:40:35 -07:00
Peter Steinberger
f81f9d8570 chore: enforce max-lines suppression ratchet (#107315)
* ci: enforce max-lines suppression ratchet

* chore: prune stale max-lines suppression

* fix: close max-lines ratchet enforcement gaps

* fix: harden max-lines ratchet checks

* fix(ci): satisfy max-lines ratchet checks

* style: format max-lines declarations

* fix(ci): match oxlint suppression grammar

* test: isolate max-lines git fixtures

* chore: prune resolved max-lines debt

* test: skip newline path fixture on Windows

* fix: harden max-lines suppression ratchet

* chore: refresh max-lines baseline

* fix: close max-lines ratchet bypasses

* fix: derive ratchet base from PR merge tree

* fix: support older Git in staged ratchet

* fix: align max-lines declarations and baseline

* chore: refresh max-lines baseline for current main

* fix: exclude generated wizard locales from max-lines

* chore: prune resolved max-lines debt
2026-07-14 09:27:02 -07:00
Peter Steinberger
cbe012ec70 refactor(matrix): use native sdk event contracts 2026-07-14 09:25:33 -07:00
Peter Steinberger
5f13921c26 fix: preserve Fable thinking on Claude CLI routes (#107636)
* fix(anthropic): preserve Claude CLI effort on root gateways

* chore: leave release notes to release workflow
2026-07-14 09:15:21 -07:00
Francisco Novella Fletcher
c188222a08 Signal: match allowlist on either uuid or e164 alias (#78022)
* Signal: match allowlist on either uuid or e164 alias

* fix(signal): route sender aliases through ingress

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-14 08:41:58 -07:00
Alix-007
111f7cde35 fix(telegram): bound stalled diagnostic response reads (#106035)
* fix(telegram): bound stalled diagnostic response reads

* test(telegram): type timeout cancellation mock

* style(telegram): apply oxfmt to diagnostic response timeout files

* fix(telegram): share diagnostic body deadlines

Co-authored-by: Alix-007 <li.long15@xydigit.com>

* chore: leave release notes release-owned

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-14 08:27:59 -07:00
Peter Steinberger
27d5c0339b refactor(diffs): use native preload and hydration 2026-07-14 08:22:41 -07:00
Peter Steinberger
fd1ab08d35 fix(signal): keep active-run controls responsive (#107422)
* fix(signal): keep active-run controls responsive

Co-authored-by: arduano <leonid.shchurov@gmail.com>

* test(signal): satisfy control-lane lint

* fix(signal): serialize queue mutations

* fix(signal): separate control ingress lane

* fix(auto-reply): cancel queued inbound work

* fix(signal): unblock approval responses

* fix(signal): cancel group pending lanes on abort

* refactor(signal): keep ingress lane setup scoped

* docs(changelog): note Signal control ingress fix

---------

Co-authored-by: arduano <leonid.shchurov@gmail.com>
2026-07-14 07:51:18 -07:00
tzy-17
66def08d83 feat(workboard): filter cards by persisted board (#102068)
* feat(workboard): filter cards by persisted board

Co-authored-by: 唐梓夷0668001293 <tang.ziyi@xydigit.com>

* refactor(workboard): split board filter helpers

* chore(ui): refresh Workboard i18n baseline

* chore(ui): sync Workboard locale fallbacks

* chore(ui): update Workboard locale metadata

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-14 07:25:00 -07:00
Peter Steinberger
21d548a7ff fix: harden cloud worker admission and remote turns (#107043)
* fix(cloud-workers): harden worker dispatch

* fix(cloud-workers): enforce Crabbox AWS admission contract

* fix(cloud-workers): sanitize inference terminals

* fix(cloud-workers): bound inference stream work

* fix(cloud-workers): reject unresolved tool deltas

* refactor(cloud-workers): isolate terminal projection

* fix(cloud-workers): satisfy extension lint

* fix(cloud-workers): reject forbidden leases before polling

* fix(cloud-workers): keep helper types internal

* fix(gateway): reject late tool call deltas

* fix(crabbox): clean invalid inspected leases

* refactor(crabbox): extract inspect parser

* style(crabbox): format worker provider

* fix(crabbox): close worker lease cleanup gaps

* docs(cloud-workers): correct runtime contracts

* docs(cloud-workers): match runtime error
2026-07-14 07:24:43 -07:00