Commit Graph

66940 Commits

Author SHA1 Message Date
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
Peter Steinberger
b6e95201f8 fix(cron): retain detached manual run admission (#104595) 2026-07-11 10:36:26 -07:00
Peter Steinberger
a5aa7bc670 fix(ui): contain the native session sidebar and truncate its rows (#104587)
The Codex/Claude sidebar sections leaked long titles across the row
timestamps and past the sidebar edge because the row body was never a
flex container, so the title span stayed inline and ellipsis rules did
not apply. The sections also rendered every loaded session (Codex swept
up to 100 catalog pages per host every 30s) with no height cap, growing
past the sidebar shell and painting over the footer.

Rows now reuse the regular session-row __text anatomy so titles
ellipsize, the sidebar renders only the newest 10 sessions per host
with a derived truncation note (the full catalog stays on the sessions
page), each section shrinks and scrolls inside the sidebar body, and
the shell body clips as a final guard. The sidebar full-catalog
hydration loop and the one-off __body class are deleted.

Formatting proof: oxfmt --check clean on changed files via Testbox
tbx_01kx92cwpr1x9ccp2fgn441y8h (local hook skipped: no node_modules).

Fixes #104584
2026-07-11 10:33:32 -07:00
Peter Steinberger
de8cfd2bf2 test(slack): delivery trace goldens for buffered native streaming and block finals (#104583) 2026-07-11 10:32:54 -07:00
Peter Steinberger
444d7dfb1a test(telegram): delivery trace goldens for the edit-preview lifecycle (#104581) 2026-07-11 10:31:46 -07:00
Peter Steinberger
e686693732 feat(tooling): adopt noUncheckedIndexedAccess via a strict-ratchet lane (phase 1) (#104577)
* feat(tooling): add noUncheckedIndexedAccess strict-ratchet lane

* fix(packages): make indexed access explicit across ratchet packages

Burns down all 65 noUncheckedIndexedAccess errors in the seven ratchet
packages with behavior-identical restructuring (iteration, charAt/slice,
regex-group guards, validated hextet tuple). net-policy invariant
violations now throw instead of failing open. Adds
@openclaw/normalization-core/expect (expectDefined/first/last) with
subpath export and tests. memory-host-sdk fixes kept but the package
stays out of the lane: it re-exports core src/** so the flag would apply
transitively to all of core.

* fix(lint): keep .oxlintrc.json strict-JSON parseable for extension lint wrappers
2026-07-11 10:26:12 -07:00
Peter Steinberger
96f0983a85 fix(onboarding): skip setup for configured gateways and require inference first (#102883)
* fix(crestodian): keep onboarding RPCs restart-safe

* fix(profiles): isolate approval state migrations

* fix(crestodian): bypass configured gateway setup

* test(crestodian): type onboarding mocks

* fix(onboarding): require inference before Crestodian

* fix(onboarding): enforce verified inference handoff

* fix(macos): reset setup on gateway endpoint edits

* chore(i18n): refresh native source inventory

* fix(gateway): keep socket on request cancellation

* test(packaging): require workspace templates

* fix(onboarding): bind setup to verified inference

* fix(onboarding): align inference gate contracts

* fix(crestodian): classify concurrent policy rejection

* test(crestodian): expect registry restoration

* fix(onboarding): bind setup to configured gateways

* fix(codex): preserve startup phase deadlines

* test(crestodian): match fail-closed policy ordering

* test(onboarding): assert bound gateway handoff

* fix(codex): bind runtime resolution to spawn cwd

* test(crestodian): assert policy rejection order

* fix(cli): preserve gateway routing across restarts

* fix(macos): fail closed during gateway edits

* test(macos): cover gateway route generation races

* chore: keep release notes out of onboarding PR

* fix(ci): refresh onboarding generated checks

* style(swift): align gateway channel formatting

* fix(ci): refresh plugin SDK surface budgets

* fix(ci): resync native string inventory

* refactor(swift): split gateway channel support

* test(doctor): isolate plugin compatibility registry

* test(macos): isolate gateway onboarding fixtures

* test(macos): assert gateway lease health ordering

* fix(codex): reconcile computer-use startup changes
2026-07-11 10:25:14 -07:00
Peter Steinberger
fa0546b993 fix(ui): stop chat welcome suggestion text overflowing chips on phones (#104579)
The mobile single-column override for the welcome suggestion grid sat before
the base two-column rules with equal specificity, so it never applied; iPhone
WebKit views also inflate text via font boosting because text-size-adjust was
never locked, letting labels paint outside the chips. Move the override after
the base rules, lock text-size-adjust at the root, and harden chip wrapping
(line-height, balance, break-word).
2026-07-11 10:24:11 -07:00