Commit Graph

66940 Commits

Author SHA1 Message Date
Vincent Koc
cbc087dcc5 fix(ci): pin Kova resource scope contract (#103217) 2026-07-09 18:40:25 -07:00
Peter Steinberger
66e4f4869c test(agents): stabilize MCP timeout retry coverage (#103223) 2026-07-10 02:35:45 +01:00
Peter Steinberger
f12a92d3ca fix(ui): settle canonical session refreshes in lifecycle E2Es (#103224)
* test(ui): settle canonical session refreshes

* test(ui): isolate stale session event assertions
2026-07-10 02:34:15 +01:00
colton-octaria
dc8c0aaaf2 fix(msteams): recover inbound channel and group-chat files safely (#90738)
* fix(msteams): read file attachments on Teams channel messages

Three bugs blocked reading files attached to channel messages:
- Graph /teams/{id} used channelData.team.id (the 19:..@thread.tacv2 thread id)
  instead of team.aadGroupId (the AAD group GUID) -> 400.
- The Graph fetch was gated on an <attachment id> HTML marker that channel
  @mention activities don't carry -> fetch skipped.
- A thread reply was fetched at /messages/{replyId} (404) then fell back to the
  bare thread root, returning the root's file for every reply. Replies live at
  /messages/{root}/replies/{replyId}.

Fixes #89594

* fix(msteams): gate Graph media fallback on text/html stub; run trigger tests in channel context

* fix(msteams): canonicalize Graph attachment recovery

Build one canonical Graph message URL per Teams activity, recover marker-free channel and group-chat file shares, and retain bounded current-main attachment handling.

Co-authored-by: Colton Williams <colton@coltons-apps.tech>

* fix(msteams): canonicalize Graph media recovery

Recover channel and group-chat files through one fail-closed Graph identity path, bound inbound enrichment, and remove invalid app-only Graph fallbacks.

Co-authored-by: Colton Williams <colton@coltons-apps.tech>
Co-authored-by: Joshua Packwood <joshua.packwood@gmail.com>

---------

Co-authored-by: Colton Williams <colton@coltons-apps.tech>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: Joshua Packwood <joshua.packwood@gmail.com>
2026-07-10 02:34:12 +01:00
Peter Steinberger
c07fe5fe70 chore(deps): update docs-i18n x/net (#103225) 2026-07-10 02:34:00 +01:00
Peter Steinberger
31f76b9792 fix(release): validate GitHub notes before publish (#103222) 2026-07-10 02:33:23 +01:00
Peter Steinberger
0d2db46956 fix(gateway): clean up aborted queued turns (#103194)
Co-authored-by: Ted Li <tl2493@columbia.edu>
2026-07-10 02:27:27 +01:00
Peter Steinberger
28eb9e5d29 perf(test): reduce hotspot setup costs 2026-07-09 21:17:12 -04:00
Vincent Koc
968b89defe fix(ci): remove cross-os TypeScript loader bootstrap (#103195) 2026-07-09 18:15:12 -07:00
Peter Steinberger
874e4a2d40 feat(webchat): dreams scene sleeps your seeded lobster cameo (#103167)
The dreams page's generic sleeper is replaced by the agent's own seeded
lobster (same look system as the sidebar pet) rendered with a new
sleeping option: pupils hidden, closed-lid curves inline-visible so the
cameo needs no lobster-pet CSS context. Palette vars are supplied by
the cameo wrapper. Deletes the bespoke dreams svg.
2026-07-10 02:15:10 +01:00
Peter Steinberger
aef945f847 fix(browser): require exact Playwright target identity (#103177) 2026-07-10 02:12:53 +01:00
Peter Steinberger
a5d70e114c test(copilot): align replay metadata assertion (#103182) 2026-07-09 18:07:31 -07:00
qingminlong
3f68e1b5e3 fix(media): accept matching repeated content lengths (#102939)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-10 02:03:30 +01:00
Peter Steinberger
9e6900fc9f feat(webchat): seasonal lobster pet wardrobe and anniversary dress code (#103158)
December visitors can roll a santa hat and Oct 20-31 a pumpkin (extra
weighted entries joining the accessory pool on the right dates; one
roll either way so seeds keep the rest of their look). On Nov 24 - the
repository's birthday (GitHub created_at 2025-11-24) - every visitor
dresses as the classic-logo retro with a party hat and confetti-colored
z's. Look generation takes an injectable date so seasonal behavior is
pure and testable; existing look tests pin a neutral date.
2026-07-10 02:01:01 +01:00
NianJiu
05d17289c9 fix(android): order disconnect after in-flight gateway work (#103068)
* fix(android): drain gateway events before disconnect callback

* chore(android): refresh native i18n inventory

* chore(android): refresh native i18n inventory

---------

Co-authored-by: NianJiuZst <180004567+NianJiuZst@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: Peter Steinberger <peter@steipete.me>
2026-07-10 01:51:51 +01:00
Peter Steinberger
e6a8feb9c2 refactor(pairing): move device pairing store to shared SQLite state DB (#103160)
* refactor(pairing): move device pairing store to shared SQLite state DB

Device pairing, pending requests, and bootstrap tokens now live in the
device_pairing_* / device_bootstrap_tokens tables of state/openclaw.sqlite
instead of devices/{paired,pending,bootstrap}.json. Gateways import legacy
paired records once at startup (before the node-surface fold) and archive
the JSON files with a .migrated suffix; transient pending/bootstrap rows
are dropped. The unshipped node_pairing_* tables are removed from the
schema and dropped from existing DBs. Doctor now flags un-imported legacy
store files instead of corrupt-JSON reads.

* refactor(pairing): drop stale awaits now that store persistence is synchronous

* refactor(pairing): extract leaf record types to break store/domain module cycle
2026-07-10 01:46:56 +01:00
Peter Steinberger
b0e77bbe72 feat(webchat): rare lobster pet events - molting and twin visits (#103154)
~12% of loads plan a molt: during the first idle act the pet shivers,
squashes, and pops one size tier bigger, leaving its old shell behind
as a frozen, washed-out silhouette that fades over a minute. The shell
keeps the true pre-molt size, respects dismissal and the visits
setting, and its timer resets with the seed. ~4% of loads are twin
days: a mini copycat ('<name> Jr.') tags along on the parent's trailing
side and mirrors every act a beat later via an act-delay variable
threaded through the act animations. Rare-event plans are pure
per-seed functions so tests probe them directly.
2026-07-10 01:32:42 +01:00
Peter Steinberger
d8624a4e1b fix: fail release performance when reports do not publish (#103126)
* fix(ci): harden performance report publishing

* ci: use scoped app token for reports

* ci: pin Kova readiness probe fix

* ci: pin latest Kova readiness checks

* ci: pin Kova startup sequencing fix

* ci: pin calibrated Kova release policy
2026-07-10 01:27:26 +01:00
Peter Steinberger
e26a850fbd feat(webchat): lobster pet charm bundle - names, celebrations, poke moods, night owl (#103149)
Every pet gets a seeded name shown via native hover tooltip (rare
palettes carry signature names: Goldie, Boo, Picasso, Patches, Lantern,
Blueberry, OG). A busy->idle mode flip now earns a cheer act (double hop
with a mid-air twirl, claws up) instead of a startle, so the lobster
celebrates finished runs. Three fast pokes make it grumpy for a minute
(angry brows + frown overlay); ten pokes send it off in a huff until a
later scheduled visit (offline pets are on duty and never huff).
Visits between 22:00 and 06:00 local always act sleepy regardless of
personality.
2026-07-10 01:15:20 +01:00
Peter Steinberger
8b300e57f0 fix(browser): keep remote CDP credentials out of responses (#103139)
* fix(browser): contain remote CDP credentials

* fix(browser): probe authenticated discovery before attach

* chore: keep release note in PR metadata
2026-07-10 01:12:51 +01:00
ZOOWH
e327a3dca1 fix(telegram): deliver content instead of throwing when tag overhead fills chunk (#102999)
* fix(telegram): deliver content instead of throwing when tag overhead fills chunk

When HTML tag overhead (open + close tags) exceeds the chunk limit,
appendText threw an error causing complete message delivery failure.
Instead, force the text into the chunk so the message is still delivered
even if the chunk slightly exceeds the limit.

Closes #102910

* fix(telegram): strip rich formatting when tag overhead fills chunk

When HTML tag overhead fills an empty chunk with no room for text, strip
rich formatting and retry as plain text instead of delivering an oversized
chunk or throwing. Orphan close tags from the stripped formatting are
skipped to keep the output well-formed and within the chunk limit.

This preserves the existing plain-text fallback paths in send.ts and
rich-message.ts.

Closes #102910

* fix(telegram): preserve delivery when HTML tag overhead overflows

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-10 01:05:51 +01:00
maweibin
8dd45e864e fix(ui): preserve sidebar sessions through reconnect (#102424)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-10 01:02:10 +01:00
SunnyShu
9526224f42 fix(gateway): guard thinkingLevel re-validation against only relevant patch fields (#102866)
* fix(gateway): guard thinkingLevel re-validation against only relevant patch fields

The second thinkingLevel validation block used `if (next.thinkingLevel)`,
which enters on ANY patch when the session already has a thinkingLevel
inherited from the existing entry. This caused unnecessary model catalog
loading and could silently delete or modify the existing value.

Fix: change guard to also check that the patch explicitly touches
thinkingLevel or changes the model (which may alter the effective
provider/model that thinkingLevel is validated against).

Ref: BUG-002 (local finding)
Co-Authored-By: Claude <claude@anthropic.com>

* test(gateway): prove session patch catalog isolation

---------

Co-authored-by: Claude <claude@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-10 01:01:33 +01:00
Peter Steinberger
6fd9cc92b7 fix(meta): live validation targets deployed Muse Spark 1.1 (#103163)
* fix(meta): target Muse Spark 1.1 in live checks

* chore: follow release-owned changelog policy
2026-07-10 01:00:31 +01:00
Ayaan Zaidi
f351288a0d chore(repo): remove stale repository artifacts (#103152)
* docs: remove merged cron design document
* chore(repo): remove stale planning and proof artifacts

---------

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-07-10 05:28:12 +05:30
Peter Steinberger
dc3d06c5d6 fix(ci): calibrate hosted startup memory 2026-07-09 19:54:42 -04:00
Peter Steinberger
53378459cd fix: release startup migration lease before exit (#103157) 2026-07-10 00:53:10 +01:00
NianJiu
7e20018b69 fix: count multi-failure tool summaries accurately (#102981)
* fix: count tool summary failures

* fix(agents): preserve per-call tool failures

Co-authored-by: NianJiuZst <180004567+NianJiuZst@users.noreply.github.com>

---------

Co-authored-by: NianJiuZst <180004567+NianJiuZst@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-10 00:53:06 +01:00
Vincent Koc
eaee8b7e74 chore(codex): update managed app-server to 0.144.1 (#103156) 2026-07-09 16:52:33 -07:00
llagy007
823c153577 fix(browser): reject ambiguous tab references (#103119)
* fix(browser): reject ambiguous tab references

Co-authored-by: llagy007 <0668001470@xydigit.com>

* fix(browser): close tracked tabs by raw target id

* fix(browser): harden raw tab cleanup routing

* test(browser): type raw close request mock

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-10 00:51:18 +01:00
Dallin Romney
ff0a3f2d0b docs(skills): add backporting to release maintainer (#99266)
* docs(skills): add stable backport workflow

* docs(skills): prepare complete stable patch sets

* docs(skills): align backports with extended stable

* docs(skills): fold backports into release maintainer

* docs(release): clarify plugin selector repair
2026-07-09 16:50:22 -07:00
ANIRUDDHA ADAK
991262e2e7 fix(utils): fetchWithTimeout ignores caller-provided AbortSignal in RequestInit (#102951)
* fix(utils): fetchWithTimeout ignores caller-provided AbortSignal in RequestInit

* fix(fetch): preserve caller abort through response body

* test(fetch): satisfy abort rejection lint

* test(mattermost): satisfy promise executor lint

---------

Co-authored-by: Aniruddha Adak <aniruddhaadak80@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-10 00:39:18 +01:00
lin-hongkuan
3f16718b0c fix: keep heredoc bodies out of shell stage splits (#102889)
* fix: keep heredoc bodies out of shell stage splits

* chore: refresh PR #102889 checks

* fix: handle multiple same-line heredocs

* fix: keep heredoc bodies with declaring stages

* test: cover escaped heredoc delimiters

* style: format escaped heredoc regression

* fix: distinguish here-strings from heredocs

* fix: ignore non-heredoc shell syntax

---------

Co-authored-by: lin-hongkuan <lin-hongkuan@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-10 00:35:58 +01:00
Peter Steinberger
88908d5ce6 perf(test): trim secrets and media setup 2026-07-09 19:32:12 -04:00
Vincent Koc
db71e497be fix(ci): restore live OpenAI performance evidence (#103151) 2026-07-09 16:29:22 -07:00
NianJiu
04c090fb50 fix(ios): return promptly from noncooperative timeouts (#103066)
* fix(ios): return promptly from noncooperative timeouts

* fix(apple): harden async timeout cancellation

Co-authored-by: NianJiuZst <180004567+NianJiuZst@users.noreply.github.com>

* fix(apple): preserve legacy location requests

* style(apple): format location continuation code

---------

Co-authored-by: NianJiuZst <180004567+NianJiuZst@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-10 00:29:03 +01:00
tzy-17
3dd5c1880f fix(discord): honor forum archive defaults (#103033)
Carry typed forum/media parent metadata through the message-send path so implicit thread creation uses the configured default archive duration.

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-10 00:23:34 +01:00
llagy007
910886814d fix(browser): filter non-page CDP targets (#103115)
* fix(browser): filter non-page CDP targets

* fix(browser): require page CDP targets

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-10 00:18:04 +01:00
Yuval Dinodia
beda4218af fix(secrets): reject prototype-polluting mutation paths (#102840)
* fix(secrets): reject prototype-polluting mutation paths

Co-authored-by: yetval <yetvald@gmail.com>

* docs(secrets): document blocked mutation segments

* chore(secrets): keep release notes in PR metadata

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-10 00:17:31 +01:00
wm0018
50cb0d66b8 fix(ai): replace raw require(node:fs) with loadNodeBuiltinModule in getProcEnv (#102947)
* fix(ai): replace raw require(node:fs) with loadNodeBuiltinModule in getProcEnv

* test(ai): cover browser-safe env key bundle

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-10 00:14:58 +01:00
Peter Steinberger
fe2486247b feat(ui): add settings sidebar search (#103138)
* feat(ui): add settings sidebar search

* chore: keep release notes in PR body

* fix(i18n): translate settings search labels
2026-07-10 00:08:13 +01:00
Peter Steinberger
c6d7088035 refactor(android): align talk levels and thinking state with iOS/macOS (#103130)
* refactor(android): align talk levels and thinking state with iOS/macOS

TalkAudioLevel.kt ports OpenClawKit's level scale exactly: PCM16 RMS
through the shared 50 dB window replaces mean-abs (mic/talk/playback)
and linear peak (voice notes), so Android waveforms read identically to
iOS/macOS at the same loudness. The waveform's Thinking phase now comes
from a typed awaitingAgent StateFlow set alongside every status change
in TalkModeManager instead of the UI matching status string literals;
forgetting the flag at a new status site fails safe to Listening/Idle.

* fix(android): keep awaiting-agent flag intact on no-op status republishes

* chore(i18n): resync native inventory
2026-07-09 23:59:12 +01:00
Peter Steinberger
e7a6ed8eb6 chore(pairing): retire vestigial node token plumbing and flatten cleanup claims (#103140) 2026-07-09 23:48:01 +01:00
Peter Steinberger
5a93880d7d improve(webchat): compact the model picker reasoning and speed rows (#103127)
Reasoning header drops the '(Default is Off)' reset text and the verbose
'Default (Off)' value: inherited defaults render as a muted level word with
no reset, overrides render strong with an icon-only reset. The Faster/
Smarter scale row is removed along with its i18n keys, and the menu gets
tighter dimensions (392px wide, shorter model rows). Screen readers keep the
verbose default phrasing via aria-valuetext.
2026-07-09 23:46:37 +01:00
Peter Steinberger
d185f9a0b4 fix(infra): preserve characters in truncated response snippets (#103136)
* fix(infra): preserve bounded response text characters

Co-authored-by: qingminlong <34085845+qingminglong@users.noreply.github.com>

* ci(plugin-sdk): refresh API baseline

---------

Co-authored-by: qingminlong <34085845+qingminglong@users.noreply.github.com>
2026-07-09 23:43:26 +01:00
Peter Steinberger
af3a76f320 fix(ui): refresh session windows after events (#103134)
* fix(ui): refresh session windows after events

* chore: defer session fix release note
2026-07-09 23:43:07 +01:00
qingminlong
e251bc4c2f fix(agent-core): keep file info basename on Windows paths (#102813)
* fix(agent-core): keep file info basename on Windows paths

* fix(agent-core): use platform path basenames

* chore: sync PR branch before changelog

* docs(changelog): credit Windows file metadata fix

* fix(agent-core): use platform path basenames

* test(agent-core): isolate Windows shell discovery

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: Peter Steinberger <peter@steipete.me>
2026-07-09 23:33:28 +01:00
Peter Steinberger
7c38c78f43 feat(webchat): lobster pet visits instead of living in the corner (#103111)
The sidebar pet becomes a seeded guest: ~25% of loads never get a
visit, the rest see arrivals after 15s-3min, stays of 1.5-5min, and
returns after 6-18min, all from a dedicated seeded RNG stream. Each
arrival re-rolls its perch: the classic ledge above the footer divider
or standing inside the footer bar next to the gateway status dot
(size-clamped). Gateway disconnects always summon the pet - even shy
ones - until the connection returns. Right-click shoos it away for the
rest of the page load and also beats offline summons. A new 'Lobster
visits' toggle in Settings -> Appearance (client-side UiSettings pref,
only opt-out persists, live via the theme.refresh republish channel)
disables visits entirely. New quickSettings.appearance i18n strings
synced across locale bundles.
2026-07-09 23:29:28 +01:00
Peter Steinberger
a1ce77d2a9 fix(cli): reduce plugin listing startup memory (#103132) 2026-07-09 23:28:11 +01:00
Peter Steinberger
ecad886cd1 feat(ui): redesign cron/tasks summary cards and give both nav routes distinct icons (#103122)
* feat(ui): redesign cron/tasks summary cards and give both nav routes distinct icons

* fix(i18n): translate new control-ui strings and resync raw-copy baseline
2026-07-09 23:10:02 +01:00