Commit Graph

67697 Commits

Author SHA1 Message Date
wangmiao0668000666
c155e4dbd8 fix(crabbox): preserve UTF-16 boundaries in CLI failure detail truncation (#104612)
* fix(crabbox): preserve UTF-16 boundaries in CLI failure detail truncation

commandDetail replaced raw .slice(0, MAX_ERROR_DETAIL_CHARS) with
truncateUtf16Safe on the whitespace-compressed error detail output.
A 511-code-unit prefix with an emoji at the boundary produces a lone
high surrogate (U+D83D) on current main; the shared surrogate-aware
helper backs the cut up to preserve well-formed UTF-16.

* fix(crabbox): add provider-path UTF-16 regression test for inspect boundary

The existing test exercised commandDetail directly; ClawSweeper's P1
requires proof through the real provider boundary.  The new test calls
provider.inspect() with a CLI runner that returns 511 ASCII + emoji in
stderr, proving commandDetail → truncateUtf16Safe works through the
full inspect → commandError → commandDetail chain.

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

* refactor(crabbox): keep error proof on provider path

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-11 12:50:47 -07:00
Peter Steinberger
d0152d71b4 improve(tooling): unblock scripts/pr landings and clarify crabbox fast failures (#104658)
* improve(pr): trust origin/main-matching wrappers when the canonical checkout is parked elsewhere

* improve(crabbox): hint at lease expiry when reused-lease runs fail fast

* fix(pr): pin the wrapper trust anchor to the remote-tracking ref
2026-07-11 12:47:07 -07:00
Peter Steinberger
cc4425eb4c fix(gateway): demote clean local startup closes (#104655) 2026-07-11 12:44:24 -07:00
Peter Steinberger
38edd6969a feat(macos): relocate transient app launches (#104661) 2026-07-11 12:44:00 -07:00
NIO
589f1c00de feat(security): audit open ingress control-plane tool exposure (#100965)
* fix(security): audit open control-plane exposure

Co-authored-by: NIO <nocodet@mail.com>

* chore: keep sweep changelog neutral

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: NIO <nocodet@mail.com>
2026-07-11 12:36:37 -07:00
Qiyuan Zhang
abd6cbbae1 fix: preserve tool-result text across media fallback and context pressure (#99756)
* fix: keep text tool results ahead of stale media placeholders

* fix(agents): preserve fresh results before runtime context

* fix(agents): defer fresh results during aggregate recovery

* fix(google): preserve omitted media fallback

* fix(openai): preserve omitted media fallback

* fix(agents): narrow tool-result recovery scope

* fix(agents): keep one fresh-result recovery path

* chore: keep sweep changelog neutral

---------

Co-authored-by: AcosX <AcosX@users.noreply.github.com>
Co-authored-by: Acos_X <acos_x@AcosXMacBook-Pro.local>
Co-authored-by: Colin Johnson <colin@solvely.net>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-11 12:35:19 -07:00
Shakker
57e83fb63c test: cover overflowing centered chat (#104646) 2026-07-11 20:33:52 +01:00
Shakker
94fe192efb fix: stabilize and darken chat scrollbars 2026-07-11 20:33:52 +01:00
Shakker
7ad8250e45 test: type centered layout assertion 2026-07-11 20:33:52 +01:00
Shakker
cc07451a57 docs: document centered chat layout 2026-07-11 20:33:52 +01:00
Shakker
f53106931f test: cover centered chat layouts 2026-07-11 20:33:52 +01:00
Shakker
8e91be4b6b fix: align direct messages within the chat frame 2026-07-11 20:33:52 +01:00
Shakker
4dfe677969 feat: center the chat conversation column 2026-07-11 20:33:52 +01:00
Peter Steinberger
ad3142ae85 fix(maint): enforce 24-hour hosted gate freshness (#104651)
* fix(maint): enforce 24-hour hosted gate freshness

* style(maint): avoid hosted gate run shadowing
2026-07-11 12:33:46 -07:00
Peter Steinberger
76b8550afc refactor(channels): migrate internal callers onto the message-access ingress engine (#104647) 2026-07-11 12:33:44 -07:00
Peter Steinberger
af1505df65 test(ui): make stale chunk recovery coverage deterministic (#104649) 2026-07-11 12:30:42 -07:00
Song Zhenlin
416d113a2c fix(utils): use UTF-16 safe truncation for long URL timeout logs (#104301)
* fix(utils): use UTF-16 safe truncation for long URL timeout logs

* test(utils): cover UTF-16 timeout log boundaries

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-11 12:27:03 -07:00
qingminlong
47751c117c fix(discord): bound ffmpeg stderr by bytes (#104230) 2026-07-11 12:23:32 -07:00
Peter Steinberger
2bb79d10fd feat: parents get durable state-change notices when humans interact with child sessions (#104636)
* feat(sessions): durable session state events with parent invalidation

Parents no longer act on stale child-session state: a durable, typed
signal log (session_state_events + per-agent heads) records direct human
messages to children, child spawn/terminal outcomes, goal changes, and
compaction at the seams where those facts are created. A frozen-watermark
cursor protocol (session_watch_cursors) delivers one coalesced system
notice to the parent through the existing system-event + heartbeat wake
idiom, acknowledged at the shared generic drain, with a deferred startup
sweep for restart recovery. session_status gains stateVersion and
changesSince (with exact pruned-history gap signaling); sessions_list
rows gain stateVersion.

Closes #104565

* chore: regenerate docs map and prompt snapshots for session_status changesSince
2026-07-11 12:19:02 -07:00
xingzhou
03558dc008 fix(openrouter): Fusion prompt corrupts boundary emoji in model IDs (#104433)
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-11 12:11:36 -07:00
Peter Steinberger
1879980e52 fix(qqbot): share passive reply budget (#104634)
* fix(qqbot): share passive reply budget

* chore(qqbot): leave release notes to release flow
2026-07-11 12:10:24 -07:00
dwc1997
87261fd0b1 fix(browser): keep Chrome stderr hint tail UTF-16 safe (#104603)
* fix(browser): keep Chrome stderr hint tail UTF-16 safe

* test(browser): simplify Chrome stderr failure coverage

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-11 12:10:22 -07:00
moguangyu5-design
aa12e71de7 fix(outbound): preserve attributed inline formatting (#104118)
* fix(outbound): preserve backticks on <code> tags with attributes

The plain-text sanitizer only matched bare <code> openers, so attributed
variants such as <code class="language-ts"> lost their backtick wrapping
and were stripped to raw text before channel delivery.

Allow optional attributes on the opening <code> tag, consistent with the
existing handling for <h[1-6]> and <li> in the same function.

Fixes #104117

* fix(outbound): preserve attributed inline formatting

Co-authored-by: chengzhichao-xydt <chengzhichao-xydt@users.noreply.github.com>

* test(outbound): compact attributed tag coverage

* fix(outbound): normalize attributed formatting tags

* docs(outbound): clarify attribute normalization invariant

* fix(outbound): preserve native formatting semantics

* docs(plugin-sdk): document sanitizer markup styles

* docs(plugin-sdk): refresh docs map

---------

Co-authored-by: moguangyu5-design <moguangyu5-design@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: chengzhichao-xydt <chengzhichao-xydt@users.noreply.github.com>
2026-07-11 12:03:11 -07:00
Peter Steinberger
4b751ce48a feat(tooling): complete packages/* noUncheckedIndexedAccess adoption (phase 2) (#104626)
* feat(tooling): extend strict-ratchet lane to all remaining leaf packages

* fix(packages): burn down indexed-access debt in ai and agent-core

All 196 noUncheckedIndexedAccess errors fixed behavior-identically
(iteration, .at()/slices, DataView byte math, guarded queue peeks) plus
cleanup finds: a sparse-tool diagnostic bug, deduplicated Responses
call/item ID parsing with an honest string|undefined splitter, and a
clearer local failure for redacted-thinking blocks missing signatures.
Removes all 17 remaining non-null assertions across ai, gateway-client,
and llm-core so the assertion ban aligns 1:1 with the ratchet lane.
speech-core joins memory-host-sdk as structurally deferred (imports
src/** via plugin-sdk path mappings).
2026-07-11 11:54:06 -07:00
Peter Steinberger
8fff38479e fix(ui): shift the split-view pane header beside the macOS window controls instead of reserving a titlebar band (#104628) 2026-07-11 11:51:02 -07:00
Peter Steinberger
78fca7b0c4 fix(gateway): demote startup close transport races (#104625)
* fix(gateway): demote startup close transport races

* fix(gateway): remove stale startup close import
2026-07-11 11:49:27 -07:00
Peter Steinberger
6bd14d9129 test(channels): extend bundled artifact parity and add plugin-shape contract suite (#104618) 2026-07-11 11:44:34 -07:00
Peter Steinberger
fe3884a7ad fix(telegram): keep streamed final pages on word boundaries (#104608)
* fix(telegram): align draft final pagination

* chore: drop release-owned changelog entry

* style(telegram): format pagination parity test
2026-07-11 11:44:09 -07:00
NIO
473df17bd7 fix(feishu): add 30 s request timeout to streaming-card API calls (#102948)
* fix(feishu): bound streaming-card API requests with a 30s timeout

* fix(feishu): honor configured streaming timeout

Signed-off-by: sallyom <somalley@redhat.com>

* test(feishu): declare streaming mock credentials

Signed-off-by: sallyom <somalley@redhat.com>

---------

Signed-off-by: sallyom <somalley@redhat.com>
Co-authored-by: NIO <nocodet@mail.com>
Co-authored-by: sallyom <somalley@redhat.com>
2026-07-11 14:35:42 -04:00
Peter Steinberger
1a8d9d5f15 fix(browser): allow host-local profile administration (#104616) 2026-07-11 11:28:58 -07:00
Peter Steinberger
7193d29c92 fix(gateway): demote expected startup socket aborts (#104610)
* fix(gateway): demote expected startup socket aborts

* fix(gateway): retain queued-frame startup warnings
2026-07-11 11:27:21 -07:00
Peter Steinberger
5a5424474d feat(fleet): multi-tenant hosting via openclaw fleet cell supervisor (#104527)
* feat(fleet): add openclaw fleet cell supervisor for multi-tenant hosting

* test(fleet): cover cell profile, registry, containers, and service flows

* docs(fleet): document multi-tenant hosting and the fleet CLI

* fix(fleet): verify upgrade replacements and release foreign-collision reservations

* fix(fleet): gate upgrade commit on replacement health

* docs(fleet): mark fleet experimental and pin its single-host scope

* test(fleet): make incomplete-profile casts explicit for test-type lane

* fix(state): regenerate kysely schema artifacts after rebase conflict
2026-07-11 11:24:04 -07:00
Sally O'Malley
cdb58cafb5 fix(migrations): converge recoverable legacy state (#104529)
Signed-off-by: sallyom <somalley@redhat.com>
2026-07-11 11:19:12 -07:00
Peter Steinberger
43c40a3b3e fix: recover delayed live Mac bundle restores (#104613) 2026-07-11 11:18:39 -07:00
Peter Steinberger
9ad59ae788 improve(macos): replace browser cookie-import modal with an inline dashboard banner (#104591)
* feat(macos): replace browser cookie-import modal with dashboard banner

* fix(macos): cross-browser menu identity, banner pane ownership, docs map

* chore: refresh native i18n inventory

* fix(macos): stale import status polls no longer clobber fresher banner state

* fix(macos): generation-guard stale import polls; drop dashboard-show poll trigger

* fix(macos): session-sticky dismissal and localized banner copy
2026-07-11 11:11:42 -07:00
Peter Steinberger
c648ed0299 test(release): harden prerelease timing contracts (#104606)
* test(release): harden prerelease timing contracts

* test(whatsapp): satisfy task barrier lint
2026-07-11 11:11:31 -07:00
Peter Steinberger
ea2b558e5e fix(browser): prevent stale profile resurrection (#104601)
* fix(browser): serialize profile lifecycle

* refactor(browser): tighten lifecycle cleanup

* chore(browser): keep release note in PR

* test(browser): keep temp fixtures inside plugin

* test(browser): use preferred temp root
2026-07-11 11:06:07 -07:00
Peter Steinberger
986304e540 fix(tooling): format files in changed checks (#104605) 2026-07-11 11:02:26 -07:00
Peter Steinberger
d4adddbe9c refactor(retry): add full-jitter mode and adopt it for mattermost client retries (#104594) 2026-07-11 10:56:54 -07:00
mushuiyu886
92870e5200 fix(agents): preserve UTF-16 boundaries in block chunks (#104441)
* fix(agents): preserve UTF-16 boundaries in block chunks

* refactor(agents): import UTF-16 helper from leaf module

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-11 10:56:05 -07:00
Peter Steinberger
8bebdd0d03 test(matrix): delivery trace goldens for generation-scoped edit streaming (#104596) 2026-07-11 10:55:27 -07:00
Peter Steinberger
e9b7a9a912 fix(memory): search by filenames and paths (#104449)
Co-authored-by: Pick-cat <huang.ting3@xydigit.com>
2026-07-11 10:54:34 -07:00
Vyctor H. Brzezowski
b14db9fc63 improve(ui): polish sidebar scrolling and control alignment (#104586)
* fix(ui): make sidebar session scrollbar track transparent

* feat(ui): fade overflowing sidebar sessions

* style(ui): extend sidebar session fade

* style(ui): align pinned item checks right

* style(ui): align sidebar trailing controls

* refactor(ui): trim sidebar polish noise

* fix(ui): narrow sidebar resize observer target
2026-07-11 14:54:30 -03:00
Peter Steinberger
554f253cb0 test(qqbot): delivery trace goldens for replace-mode streaming and reply budget (#104582) 2026-07-11 10:54:15 -07:00
Eave Luo
dc18b0df1e fix(gateway): allow macOS app platform version refresh without re-pairing (#89702)
* fix(gateway): allow macOS app platform version refresh without re-pairing

When macOS updates (e.g. 26.5.0 → 26.5.1), the Mac app detects a
platform mismatch against its paired record and sends a repair request.
The approval dialog enters an infinite loop because the pending request
TTL (5 min) expires before the user clicks Approve, causing "unknown
requestId" errors that trigger a new repair request ad infinitum.

iOS and Android already had silent platform version refresh via
normalizeMobileAppPlatformPin — this extends the same treatment to the
macOS native app by recognizing "macos X.Y.Z" as the same platform
family regardless of version, renaming the helper to
normalizeNativeAppPlatformPin.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(gateway): validate macOS platform version refreshes

* fix(gateway): avoid native platform family marker collisions

* test(gateway): type node client name

---------

Co-authored-by: 骆毅 <luoyifu.lyf@digital-engine.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-11 10:52:27 -07:00
qingminlong
9000c9bfe3 fix(file-transfer): audit dir fetch archive size (#104536)
* fix(file-transfer): audit dir fetch archive size

* test(file-transfer): guard dir fetch audit archive test on Windows

* test(file-transfer): format dir fetch audit guard

* fix(file-transfer): verify directory archive audit metadata

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-11 10:50:51 -07:00
NIO
18e8713b99 fix(google): stream Gemini batch JSONL output instead of res.text() (#102974)
* fix(google): stream Gemini batch JSONL output instead of res.text()

* fix(google): avoid Promise executor return in batch stream test

---------

Co-authored-by: NIO <nocodet@mail.com>
2026-07-11 13:48:13 -04:00
xingzhou
04037e35c0 fix(chat): tool titles corrupt boundary emoji in long inputs (#104464)
* fix(chat): tool titles corrupt boundary emoji in long inputs

* test(chat): simplify UTF-16 title boundary coverage

* test(chat): satisfy title boundary lint

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-11 10:45:04 -07:00
Peter Steinberger
49ff54e63a refactor(ui): unify chat icon buttons on one borderless design and align top chrome rows (#104574)
* refactor(ui): unify chat icon buttons on the compact boxed design

* refactor(ui): keep chat icon buttons borderless and align top chrome rows
2026-07-11 10:38:51 -07:00
Peter Steinberger
5d0e9ce4e8 fix(ui): keep split-view pane headers clear of the macOS traffic lights when the sidebar is collapsed (#104593) 2026-07-11 10:36:52 -07:00