Vincent Koc
7642b38cfe
fix(ci): classify snapshot SQLite maintenance
2026-07-13 06:46:41 +08:00
Peter Steinberger
e261fa60ce
feat(cloud-workers): gateway inference proxy for worker model turns ( #105719 )
...
* refactor: clarify prepared auth value
* feat(cloud-workers): add inference proxy protocol
* feat(cloud-workers): persist inference turns
* feat(cloud-workers): execute gateway inference turns
* fix(cloud-workers): support adaptive inference reasoning
* fix(gateway): constrain worker inference policy options
* test(gateway): cover worker inference SQLite store
2026-07-12 15:35:50 -07:00
Peter Steinberger
c9ec723546
fix(ui): prevent New Session input loss during creation ( #105702 )
...
* fix(ui): lock pending new-session drafts
* chore: defer changelog to release generation
2026-07-12 15:28:39 -07:00
Peter Steinberger
4a05a087a1
refactor(config): retire flat streaming keys from the last six channel schemas via doctor migration ( #105709 )
...
* refactor(config): retire flat streaming keys from the last six channel schemas
signal, irc, nextcloud-talk, whatsapp, googlechat, and mattermost now accept
only the nested streaming.{chunkMode,block.enabled,block.coalesce} shape
(mattermost also drops scalar/boolean streaming); flat spellings migrate via
each channel's defineChannelAliasMigration doctor contract with root seeding
for their wholesale-replace account merges.
* feat(channels): warn once per key when the deprecated flat streaming fallback is used
Bundled schemas now reject the flat delivery keys, so the streaming.ts
fallback only serves external SDK plugin configs; emit a once-per-process
per-key subsystem warning and pin the removal plan to the next release train.
* chore(config): regenerate bundled channel config metadata for nested-only streaming
* docs: describe nested-only channel streaming config and the SDK flat-key deprecation window
* fix(whatsapp): seed migrated named-account streaming from the accounts.default layer
WhatsApp resolution layers accounts.default shared config between root and
named accounts, so doctor-materialized account streaming objects now inherit
default-account settings over root ones; mattermost schema test moves to the
nested-only shape with explicit rejection coverage; scope flat-key deprecation
notes to the pending Matrix/Feishu migrations.
* fix(whatsapp): resolve the default account case-insensitively when seeding migrated streaming
* chore(plugin-sdk): repin API baseline for nested-only channel streaming types
2026-07-12 15:27:28 -07:00
Vincent Koc
2f25e9cba3
feat(backup): add verified SQLite snapshots ( #105718 )
...
* feat(backup): expose verified SQLite snapshots
Co-authored-by: Gio Della-Libera <giodl73@gmail.com >
* feat(sqlite): add verified snapshot repository (#105525 )
Co-authored-by: Gio Della-Libera <giodl73@gmail.com >
* test(sqlite): use canonical snapshot schemas
* fix(backup): restrict SQLite snapshot roles
* fix(sqlite): harden snapshot staging paths
Co-authored-by: Gio Della-Libera <giodl73@gmail.com >
* fix(sqlite): pin snapshot repository paths
Co-authored-by: Gio Della-Libera <giodl73@gmail.com >
* fix(sqlite): secure Windows snapshot staging
Co-authored-by: Gio Della-Libera <giodl73@gmail.com >
* fix(sqlite): validate macOS ACL captures
* test(sqlite): preserve stat uid type
* style(sqlite): satisfy snapshot lint
---------
Co-authored-by: Gio Della-Libera <giodl73@gmail.com >
2026-07-13 06:27:14 +08:00
Peter Steinberger
95f142bf0c
fix(ui): isolate retained test modules ( #105711 )
...
* fix(ui): isolate retained test elements
* test(ui): share terminal mock across retained modules
* refactor(ui): trim private search exports
* test(ui): type retained terminal mock
* test(ui): narrow terminal mock contract
* test(ui): isolate approval page modules
---------
Co-authored-by: Vincent Koc <vincentkoc@ieee.org >
2026-07-12 15:10:15 -07:00
Vincent Koc
2c06dfdd2f
fix(ci): keep unused exports advisory ( #105704 )
...
* fix(ci): preserve frozen deadcode contracts
* fix(ci): keep unused exports advisory
2026-07-13 05:47:05 +08:00
Alix-007
7c72fef247
fix(signal): add timeouts to container REST requests ( #104122 )
...
* fix(signal): add timeouts to container REST requests
* fix(signal): use idle timeouts for container response bodies
* fix(signal): remove redundant timeout release
Signed-off-by: sallyom <somalley@redhat.com >
---------
Signed-off-by: sallyom <somalley@redhat.com >
Co-authored-by: sallyom <somalley@redhat.com >
2026-07-12 16:59:14 -04:00
Peter Steinberger
238c7973ad
feat(chat): native session scroll-back with offset paging and import-aware history ( #105688 )
...
* feat(chat): native session scroll-back with import-aware history paging
* fix(chat): page imported session history
* fix(chat): restore terminal import snapshots
* fix(chat): gate cli import resolver on ignore flag to stop history recursion
* fix(chat): correct scroll-back types and drop orphaned recent-messages reader
2026-07-12 13:58:40 -07:00
Vincent Koc
e3163d1e1f
refactor(routing): trim private exports ( #105691 )
2026-07-13 04:50:44 +08:00
Shakker
b640718204
fix: segment localized settings queries ( #104675 )
2026-07-12 21:46:50 +01:00
Shakker
89ccb5a90d
fix: complete recursive settings search
2026-07-12 21:46:50 +01:00
Shakker
7d2694d7fc
fix: contain settings config load failures
2026-07-12 21:46:50 +01:00
Shakker
378862e575
style: format settings search changes
2026-07-12 21:46:50 +01:00
Shakker
7d8b24a55f
test: cover precise settings deep links
2026-07-12 21:46:50 +01:00
Shakker
8754e43dcc
fix: guard settings search config loading
2026-07-12 21:46:50 +01:00
Shakker
327ec31d23
fix: search unconfigured array settings
2026-07-12 21:46:50 +01:00
Shakker
c14582f87d
fix: tolerate malformed settings deep links
2026-07-12 21:46:50 +01:00
Shakker
763ea3ea6a
fix: localize settings search blocks
2026-07-12 21:46:50 +01:00
Shakker
1b3ed0f670
refactor: separate settings navigation targets
2026-07-12 21:46:50 +01:00
Shakker
94f2b63d9f
fix: preserve precise settings search results
2026-07-12 21:46:50 +01:00
vyctorbrzezowski
d5102107dc
fix(ui): satisfy config section return lint
2026-07-12 21:46:50 +01:00
vyctorbrzezowski
f69219f768
feat(ui): search settings blocks
2026-07-12 21:46:50 +01:00
Vincent Koc
c25cd32c28
refactor(plugins): trim private helper exports ( #105687 )
2026-07-12 22:26:14 +02:00
Peter Steinberger
d287c9b414
refactor(mac): make app node a CLI capability superset ( #105642 )
...
* refactor(mac): reuse CLI node-host runtime
* fix(mac): prefer checkout CLI in debug builds
* chore: leave release notes to release automation
* chore(mac): sync native string inventory
* chore(mac): refresh native locale artifacts
* fix(node): satisfy native and deadcode gates
2026-07-12 13:16:07 -07:00
Peter Steinberger
f15a5e566b
fix(ui): serialize Skills operations ( #105671 )
...
* refactor(ui): clarify skill edit value naming
* refactor(ui): clarify skill credential draft naming
* fix(ui): serialize Skills operations
2026-07-12 13:13:17 -07:00
Vincent Koc
1d0cc7e09c
refactor(ui): trim private helper exports ( #105663 )
2026-07-12 22:09:24 +02:00
qingminlong
bf642ef287
fix(signal): surface daemon errors split across output chunks ( #104152 )
...
* fix(signal): preserve daemon log lines across chunks
* test(signal): cover split utf-8 daemon output
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-12 13:02:40 -07:00
Vincent Koc
bf81e589ac
fix(ci): bound Telegram gateway diagnostics ( #105645 )
2026-07-12 22:02:22 +02:00
yourslewis
9ee9f3e544
fix(slack): prevent duplicate reply controls ( #101474 )
...
* fix(slack): dedupe mirrored reply controls
Co-authored-by: yourslewis <5415708+yourslewis@users.noreply.github.com >
Co-authored-by: Chloe <chloe@openclaw.ai >
* fix(slack): avoid spread in control row keys
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
Co-authored-by: yourslewis <5415708+yourslewis@users.noreply.github.com >
Co-authored-by: Chloe <chloe@openclaw.ai >
2026-07-12 13:01:31 -07:00
Peter Steinberger
1b281de6df
perf(agents): reuse gateway plugin preparation ( #105646 )
...
* perf(agents): reuse gateway plugin preparation
* chore: keep release notes out of PR
2026-07-12 12:59:26 -07:00
AnthonyStainer
e3c338f664
fix(cron): keep memory search available with agent overrides ( #104196 )
...
* fix(cron): preserve memory search defaults
* test(cron): fix resolved agent config fixture
* refactor(cron): clarify agent config ownership
* test(cron): use redacted credential fixture
* test(cron): normalize redacted credential fixture
* chore(changelog): append cron memory fix
* chore(pr): defer release note ownership
---------
Co-authored-by: AnthonyStainer <18058056+AnthonyStainer@users.noreply.github.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-12 12:55:07 -07:00
Peter Steinberger
5e45ebe82b
feat(ios): add private HealthKit summaries ( #105616 )
...
* feat(ios): add private HealthKit summaries
* fix(ios): satisfy Health settings lint
* chore(ios): sync Health localization artifacts
* chore(ios): refresh generated localization and docs
* fix(ios): reject partial Health history
* chore(ios): sync Health string catalogs
* fix(ios): bridge Health authorization dates
* fix(ios): scope Health summaries to today
2026-07-12 12:52:38 -07:00
Peter Steinberger
29a7654b29
feat(ui): search session transcripts ( #105635 )
...
* feat(ui): add session transcript search
* chore(ui): keep release notes in pull request
* chore(ui): sync session search locales
* fix(ui): localize session transcript search
* chore(ui): refresh merged locale metadata
2026-07-12 12:49:06 -07:00
Vincent Koc
6f3caf2020
refactor(sessions): trim SQLite internals ( #105639 )
2026-07-12 21:43:52 +02:00
qingminlong
056e89d887
fix(clawhub): ignore malformed retry-after headers ( #105479 )
...
* fix(clawhub): ignore malformed retry-after headers
* fix(clawhub): keep retry helper source-resolved
* docs(changelog): note ClawHub retry fix
Co-authored-by: qingminlong <0668001063@xydigit.com >
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-12 12:42:33 -07:00
Peter Steinberger
5ab07fde4a
fix(openai): preserve authored openai-completions through provider normalization ( #105539 )
2026-07-12 12:37:33 -07:00
Peter Steinberger
a1c4ef189b
fix(ui): explain grayed-out rows in the new-session folder picker ( #105605 )
...
* fix(ui): explain grayed-out rows in the new-session folder picker
Disabled device rows now carry a reason tooltip (device offline vs. no
folder-browsing support), the admin-gated folder trigger says it needs an
admin connection, and dimmed dot-directories are labeled as hidden folders.
* chore(i18n): sync locale bundles for new-session picker tooltips
2026-07-12 12:32:05 -07:00
Peter Steinberger
6556d1d173
refactor(config): declarative doctor alias-migration DSL with inheritance-aware account seeding ( #105636 )
...
* fix(config): seed inherited root streaming into doctor-materialized account streaming objects
* feat(plugin-sdk): add defineChannelAliasMigration doctor alias-migration DSL
* refactor(plugins): migrate channel doctor contracts onto the alias-migration DSL
* refactor(config): drop the prod-unused offMode legacy notice option
* fix(config): make account streaming seeding opt-in for wholesale-replace channels
* test(imessage): keep account streaming account-local for deep-merge runtime
2026-07-12 12:28:42 -07:00
Eden
5fd7b5c40a
fix(line): skip confirm/buttons templates with blank required fields ( #105520 )
...
* fix(line): skip confirm/buttons templates with blank required fields
* test(line): cover surrounding-text preservation when skipping blank directives
* fix(line): omit optional blank button titles
Co-authored-by: 許元豪 <146086744+edenfunf@users.noreply.github.com >
* fix(line): reject blank button action labels
Co-authored-by: 許元豪 <146086744+edenfunf@users.noreply.github.com >
* docs(changelog): note LINE template fix
Co-authored-by: 許元豪 <146086744+edenfunf@users.noreply.github.com >
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-12 12:25:52 -07:00
qingminlong
2db82eb243
fix(sessions): derive list channels from agent keys ( #104274 )
...
* fix(sessions): derive list channels from agent keys
* refactor(sessions): reuse canonical channel parser
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-12 12:24:06 -07:00
Peter Steinberger
bf44810139
refactor(deadcode): privatize banner and menu internals ( #105628 )
2026-07-12 12:22:32 -07:00
WhatsSkiLL
5d61d97a33
fix(android): autofocus command palette search ( #105471 )
...
Co-authored-by: IWhatsskill <284122573+IWhatsskill@users.noreply.github.com >
2026-07-12 15:20:14 -04:00
zw-xysk
71accce06a
fix(slack): keep dm metadata reads read-only ( #103468 )
...
Co-authored-by: Peter Steinberger <steipete@gmail.com >
Co-authored-by: zw-xysk <zw-xysk@users.noreply.github.com >
2026-07-12 12:18:50 -07:00
qingminlong
8a595dafe4
fix(matrix): preserve UTF-8 bootstrap output tails ( #105475 )
...
* fix(matrix): preserve UTF-8 in bootstrap output tails
* fix(matrix): satisfy deps output tail types
* docs(changelog): note Matrix UTF-8 tail fix
Co-authored-by: qingminlong <0668001063@xydigit.com >
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-12 12:12:55 -07:00
destire-mio
ca90a59370
fix(retry): avoid status code substring matches ( #105258 )
...
* fix(retry): avoid status code substring matches
* fix(retry): parse leading HTTP statuses
* style(retry): format status classifier
* test(retry): cover session retry behavior
* test(retry): emit error stream events
* fix(retry): share rate-limit window classification
Co-authored-by: destire-mio <248462155+destire-mio@users.noreply.github.com >
* docs(changelog): note session retry fix
Co-authored-by: destire-mio <248462155+destire-mio@users.noreply.github.com >
* refactor(retry): keep window type internal
Co-authored-by: destire-mio <248462155+destire-mio@users.noreply.github.com >
---------
Co-authored-by: destire-mio <248462155+destire-mio@users.noreply.github.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-12 12:12:32 -07:00
pick-cat
840f349d5d
fix(terminal): keep C1 CSI and BEL-terminated OSC-8 links intact when wrapping table cells ( #103717 )
...
* fix(terminal): keep C1 CSI and BEL-terminated OSC-8 links intact when wrapping table cells
* fix(terminal): close and reopen OSC-8 links at table wrap boundaries
* fix(terminal): carry leading OSC-8 state through table wrap state machine
A cell shaped like `${link} after` left the OSC-8 opener in `prefixAnsi`
(prepended to every wrapped line) while its closer sat inside `coreTokens`.
Continuation lines got an opener with no matching closer, reopening the
hyperlink onto trailing plain text and padding and bleeding link state past
the cell border.
Exclude OSC-8 tokens from `prefixAnsi`/`suffixAnsi` (SGR-only, unchanged)
and seed leading openers / trailing closers into `coreTokens` so the
`flushAt` close/reopen logic owns hyperlink state end to end. Adds a
`${link} after` regression across BEL, ESC-backslash, and C1-ST terminators.
Addresses the ClawSweeper P2 finding on #103717 : carry leading OSC-8 state
into wrapped lines.
* chore: trigger CI re-run
* chore: trigger CI re-run
* fix(terminal): preserve ANSI state across table wraps
Co-authored-by: Pick-cat <huang.ting3@xydigit.com >
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-12 12:10:35 -07:00
Vincent Koc
e45f2f6ca6
refactor(agents): trim private export surface ( #105631 )
2026-07-12 21:08:56 +02:00
Peter Steinberger
31b9f21a1a
fix(ui): lock worktree create draft during save ( #105626 )
2026-07-12 12:07:54 -07:00
Peter Steinberger
67d7bf1037
ci(release): deduplicate Telegram routing proofs ( #105613 )
2026-07-12 21:07:24 +02:00