Commit Graph

64357 Commits

Author SHA1 Message Date
pick-cat
ca4e8a7dc8 fix(skills): apply command description limits per channel (#99593)
* fix(skills): keep command spec descriptions UTF-16 safe at the truncation cut

* chore: fix oxlint no-unnecessary-type-assertion in test

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

* chore: fix Skill type completeness in test fixture

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

* fix(skills): prove UTF-16-safe command truncation

* fix(skills): apply description limits per channel

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-05 18:12:51 -07:00
Peter Steinberger
60cf7eaa00 feat(ui): make the sidebar session-first and minimal (#100386)
* feat(ui): bolder sidebar minimalism — pinned/chats session groups, compact icon footer, no brand header

* test(ui): align fixtures with single default pinned route; document pinned-cap invariant

* fix(ui): preserve sidebar session groups

* fix(ui): polish minimal sidebar behavior

* fix(ui): avoid duplicate pinned chat fallback

* docs(changelog): note sidebar layout refresh

* chore(i18n): preserve sidebar locale metadata

* fix(ui): reuse localized sessions label

* test(ui): follow localized sessions label

* chore(ui): trim sidebar landing churn

* docs(ui): update minimal sidebar guidance
2026-07-06 02:08:02 +01:00
Ben.Li
b170c08e6d fix(ios): reject loopback-prefix hosts for auth retry (#99859)
* fix(ios): require parsed loopback hosts for auth retry

* fix(ios): narrow device token retry loopback trust

* test(ios): cover trusted auth retry hosts

* docs(changelog): position iOS auth retry fix

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-06 02:05:21 +01:00
Daniil Artemov
733b464e1e fix: apply thread routing to plugin actions (#80293)
* fix: apply thread routing to plugin message actions

* fix(outbound): preserve plugin action threads

---------

Co-authored-by: Cortex <cortex@cortex-mac.local>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-06 02:02:06 +01:00
cxbAsDev
5a31666a06 fix(gateway): catch lazy import rejections in runtime event subscriptions (#100401)
* fix(gateway): catch lazy import rejections in runtime event subscriptions

* fix(gateway): consolidate event dispatch failures

* docs(changelog): note gateway event dispatch fix

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-06 01:53:13 +01:00
Peter Steinberger
95f12178a7 perf(ci): shorten stalled gateway retry 2026-07-05 20:40:16 -04:00
Peter Steinberger
ce294dd96b docs(changelog): note browser cookie persistence (#100507) 2026-07-06 01:34:41 +01:00
NianJiu
e7c2198722 fix: avoid English audio prompt for non-English STT hints (#99023)
* fix media audio prompt language bias

* refactor(media): narrow multilingual STT prompt handling

---------

Co-authored-by: NianJiuZst <180004567+users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-06 01:34:20 +01:00
Andy Ye
d9289a19e1 fix(browser): persist managed Chrome cookies across restarts (#98284)
* fix(browser): preserve managed Chrome cookies

* fix(browser): guard graceful close process ownership

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-06 01:32:13 +01:00
scoootscooob
7e7fc0075e [codex] Honor all ack scope for room events (#87433)
* fix(discord): honor all ack scope for room events

* fix(channels): align all ack scope for room events

* fix(channels): centralize ambient ack scope

* test(telegram): restore room-event ack fixture

* test(discord): satisfy promise executor lint

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-06 01:28:41 +01:00
Peter Steinberger
2c31af1364 refactor(auto-reply): harden empty reply delivery (#100474)
* refactor: centralize visible delivery evidence

* fix: enforce queued delivery policy

* fix: normalize queued fallback delivery

* fix: confirm queued notice delivery

* fix: track direct compaction delivery

* test: align compaction retry fallback

* test: cover terminal compaction delivery

* fix: normalize followup payload visibility

* fix: prepare empty direct reply fallbacks

* fix: align block delivery visibility

* fix: distinguish progress from reply delivery

* test: assert recovery after compaction progress

* fix: retain queued reply ownership through recovery

* fix(auto-reply): require visible messaging evidence

* refactor(auto-reply): remove duplicate empty-reply paths

* docs(changelog): clarify empty-reply guarantees

* fix(auto-reply): preserve terminal reply semantics

* test(auto-reply): type silent followup cases

* fix(auto-reply): preserve group silence policy

* fix(agents): retain rich delivery evidence
2026-07-06 01:18:27 +01:00
Peter Steinberger
04a6a31859 perf(test): isolate gateway health startup imports 2026-07-05 20:14:49 -04:00
Peter Steinberger
c9349d1fb4 fix(build): make tsdown configs self-contained (#100499)
Co-authored-by: Peter Steinberger <steipete@openai.com>
2026-07-06 01:06:02 +01:00
Peter Steinberger
5d8293c1fe feat(ios): read-only offline cache for chat sessions and transcripts (#100219)
* feat(ios): read-only offline cache for chat sessions and transcripts

Cache-first cold open for the iOS chat tab: the last known transcript and
session list render immediately from a local SQLite cache, then live gateway
history replaces them wholesale through the existing reconciliation path.
When the gateway is unreachable, recent sessions and transcripts stay
browsable read-only; sending remains gated by the existing connection state.

- New OpenClawChatTranscriptCache protocol seam plus SQLite-backed store in
  OpenClawChatUI (raw SQLite3, no new dependencies), scoped per gateway
  stableID so transcripts never leak across paired gateways.
- Bounds: 50 sessions, 50 transcripts, 200 messages per session; text rows
  only (attachment/binary payloads and tool arguments are stripped).
- Disposable cache: schema versioned via user_version; any open/schema/decode
  mismatch drops and rebuilds silently. File protection
  completeUntilFirstUserAuthentication on iOS.
- View model pre-paints from cache only until a live response applies
  (hasAppliedLiveHistory/hasAppliedLiveSessions guards); write-through is
  chained and off the render path.
- iOS wiring keys the chat view model identity on transport mode plus cache
  gateway ID so switching paired gateways rebuilds the view model.

Part of #100194

* fix(ios): harden offline transcript cache

* fix(ios): expose offline cached sessions

* fix(ios): isolate transcript caches by gateway

* chore(i18n): sync native inventory

* fix(ios): allow cache extension to replace messages
2026-07-06 01:02:15 +01:00
Ben.Li
5199f55ebe fix(gateway-protocol): trim connect error detail codes in readConnectErrorDetailCode (#99555)
* fix(gateway-protocol): trim connect error detail codes in readConnectErrorDetailCode

Co-authored-by: Cursor <cursoragent@cursor.com>

* chore: add connect error detail code trim proof script

Co-authored-by: Cursor <cursoragent@cursor.com>

* chore(gateway-protocol): drop proof-only trim script

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-06 00:59:12 +01:00
Hemant Sudarshan
bacd1c512a fix(browser): time out remote tab enumeration (#80147)
* fix(browser): time out remote tab enumeration

* chore: remove stale changelog entry

* fix(browser): isolate timed-out read cleanup

* fix(browser): isolate timed-out read cleanup

* test(browser): satisfy connection regression lint

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-06 00:56:05 +01:00
qingminlong
6a62a04f59 fix(android): synchronize realtime tool completions (#100049)
* fix(android): synchronize realtime tool completions

* refactor(android): unify realtime tool completion state

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-06 00:49:21 +01:00
pick-cat
f13ce2db96 fix(agents): bound body-less MCP HTTP text responses (#98143)
* fix(agents): bound body-less MCP HTTP text responses

* fix(agents): fail closed on unbounded MCP text fallback

* test(agents): cover lying MCP bodyless content length

* fix(agents): reject malformed MCP content length

* chore: drop unused FinalizationRegistry after rebase

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

* test(mcp): consolidate bounded response cases

Co-authored-by: Pick-cat <huang.ting3@xydigit.com>

* fix(mcp): reject unbounded bodyless responses

Co-authored-by: Pick-cat <huang.ting3@xydigit.com>

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-06 00:47:40 +01:00
Peter Steinberger
5fde96059e test(macos): remove stale Crestodian onboarding test (#100497)
Co-authored-by: Peter Steinberger <steipete@openai.com>
2026-07-06 00:47:10 +01:00
Peter Steinberger
2ded26a5d6 fix(diffs): share SSR preloads and repair language-pack hydration (#100487)
* fix(diffs): share SSR preloads and repair language-pack hydration

Render viewer and file documents from a single @pierre/diffs SSR preload
per file (mode=both previously ran the full diff+highlight pipeline
twice; 651ms -> 303ms on an 8-file patch), apply the file-mode font bump
as a document-level override, and keep hydration payloads
variant-faithful.

Fix the language-pack runtime downgrading pack-only languages to plain
text at hydration by defining a per-target build flag and forwarding it
to payload normalization.

Also: case-insensitive language hints, identical before/after
short-circuit with details.changed, patch input failures classified as
tool input errors, canonical config values now win over deprecated
aliases, hash-pinned viewer runtime served immutable, truthful
browser-vs-render errors, timing-safe artifact token compare, unref
idle browser timer.

* docs(changelog): link diffs rendering entry to PR

* test(diffs): narrow manifest validation results before value access

* test(tooling): allowlist diffs viewer-client define suppression
2026-07-06 00:34:17 +01:00
Peter Steinberger
f20159e240 perf(ci): accelerate gateway startup tests 2026-07-05 19:31:28 -04:00
Peter Steinberger
88784679ab docs(changelog): stage remote browser reliability fix (#100495) 2026-07-06 00:28:44 +01:00
Peter Steinberger
5c3e938e70 feat(android): syntax-highlighted code blocks in chat (#100217)
* feat(android): syntax-highlight fenced code blocks in chat markdown

* fix(android): handle escaped triple quotes in highlighting

* docs(changelog): note Android code highlighting

* docs(changelog): keep Android highlighting unreleased

* chore(android): sync native i18n inventory
2026-07-06 00:27:40 +01:00
Peter Steinberger
65aec96440 fix(ios): simplify development app name (#100466) 2026-07-06 00:22:14 +01:00
Kevin Lin
9d2d517296 feat: publish plugins with extended-stable releases (#100448)
* feat(release): publish plugins on extended-stable

* feat(plugins): align extended-stable with core

* docs: explain extended-stable plugin alignment

* fix(release): make plugin convergence recoverable

* fix(plugins): preserve extended-stable fallback intent

* fix(release): keep plugin tag mutation credential-isolated
2026-07-05 16:16:26 -07:00
Peter Steinberger
a4e728feca perf(test): isolate gateway memory startup imports 2026-07-05 19:16:05 -04:00
Gorkem Erdogan
e7c0673fc5 fix(slack): react action rejects emoji glyphs; member-info userId affordance unclear (#100375)
* fix(slack): normalize react emoji glyphs and clarify member-info userId param

Slack's reactions.add/remove only accept shortcode names, never a raw
Unicode glyph, but the react action's emoji param had no description
steering models away from passing one, so calls like
emoji="" failed with invalid_name. Consolidates the glyph-to-shortcode
map that already existed privately in the ack-reaction dispatch path into
the shared normalizeSlackEmojiName export in actions.ts, the layer that
owns the actual Slack API calls, so the message-tool react action gets the
same normalization.

Also tightens the generic userId param description so models stop trying
target on member-info, which has no target mode and requires userId
directly.

* fix(slack): preserve emoji reaction semantics

* fix(slack): default reactions to inbound message

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-06 00:15:32 +01:00
sunlit-deng
2525ea41fd fix(openai): bound realtime voice websocket payload at 16 MiB (#99450)
* fix(openai): bound realtime voice websocket payload at 16 MiB

* test(openai): cover realtime voice payload cap

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-06 00:12:27 +01:00
Peter Steinberger
aaf5ab910c fix: land ten small reliability fixes (#100483)
* fix(agents): harden LSP process failures

Source: #100450

Co-authored-by: morluto <williamlin1327@gmail.com>

* fix(sandbox): report effective workspace layout

Sources: #100435, #100439

Co-authored-by: Aniruddha Adak <aniruddhaadak80@users.noreply.github.com>

Co-authored-by: ZengWen-DT <ceng.wen@xydigit.com>

* fix(security): fail install checks on stream errors

Source: #100413

Co-authored-by: 陈宪彪0668000387 <chen.xianbiao@xydigit.com>

* fix(android): normalize all-day calendar events

Source: #100032

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

* fix(ios): serialize push-to-talk lifecycle

Source: #99942

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

* fix(talk): reject inherited provider names

Source: #99849

Co-authored-by: zenglingbiao <zeng.lingbiao@xydigit.com>

* fix(android): stop voice capture in background

Source: #99840

Co-authored-by: xialonglee <li.xialong@xydigit.com>

* fix(cron): preserve fallback result classification

Source: #99913

Co-authored-by: jincheng-xydt <xu.jincheng@xydigit.com>

* fix(google): bound Vertex response decompression

Source: #99812

Co-authored-by: 黄剑雄0668001315 <huang.jianxiong@xydigit.com>

* fix(plugins): report malformed discovery JSON

Source: #99892

Co-authored-by: 陈宪彪0668000387 <chen.xianbiao@xydigit.com>

* test(sandbox): configure non-default workspace fixture

* test: fix small-fix batch validation

---------

Co-authored-by: morluto <williamlin1327@gmail.com>
Co-authored-by: ZengWen-DT <ceng.wen@xydigit.com>
Co-authored-by: 陈宪彪0668000387 <chen.xianbiao@xydigit.com>
Co-authored-by: NianJiuZst <180004567+NianJiuZst@users.noreply.github.com>
Co-authored-by: zenglingbiao <zeng.lingbiao@xydigit.com>
Co-authored-by: xialonglee <li.xialong@xydigit.com>
Co-authored-by: jincheng-xydt <xu.jincheng@xydigit.com>
Co-authored-by: 黄剑雄0668001315 <huang.jianxiong@xydigit.com>
2026-07-06 00:08:51 +01:00
github-actions[bot]
366ed56a95 chore(ui): refresh control ui locales 2026-07-05 23:07:28 +00:00
Peter Steinberger
655b18c706 fix(macos): dashboard window keeps a dead SSH tunnel port after tunnel restart (#100488)
* fix(macos): follow gateway endpoint changes in the open Dashboard window

In remote SSH mode the Dashboard window baked the forwarded tunnel's
local port into the WebView URL and injected auth at open time; when
RemoteTunnelManager recreated the tunnel on a new ephemeral port the
open window reconnected to the dead port forever. DashboardManager now
subscribes to GatewayEndpointStore and, while the window is open,
re-injects auth for the new origin and reloads the WebView without
stealing focus. Dashboard log lines now strip the #token= fragment so
endpoint changes never write credentials to unified logs.

Fixes #100476

* test(macos): drop stale hasCrestodianSetupAuth assertions

OnboardingView.hasCrestodianSetupAuth was removed with the replaced
OnboardingView+CrestodianSetup source in #100288, leaving the macOS
test target failing to compile on main. Delete the test for the
removed internal helper.
2026-07-06 00:06:43 +01:00
Vincent Koc
7dfc499299 fix(agents): trim media tools in lean mode (#88881)
* fix(agents): trim media tools in lean mode

* fix(agents): preserve lean tool allowlists

* fix(agents): preserve lean tool overrides

* fix(agents): enforce lean policy at harness boundary

* fix(agents): preserve lean override provenance

* test(agents): satisfy lean harness contracts

* docs(changelog): record lean local-model tool trimming

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-06 00:06:06 +01:00
Vincent Koc
17ba497424 fix(codex): ignore missing mirrored session history (#100484)
* fix(codex): ignore missing mirrored session history

* test(codex): prove missing mirrored history stays quiet

* fix(codex): narrow missing history proof

---------

Co-authored-by: Alex Tang <alextangli@outlook.com>
2026-07-05 16:04:34 -07:00
Peter Steinberger
ff32076f78 feat(ui): add comparative cost analysis (#100432)
* feat(ui): add comparative cost analysis

* fix(usage): align cost buckets with request timezone

* test(ui): avoid shadowing cost fixture

* fix(usage): align session daily timezone buckets

* test(usage): include day offset in cache keys

* fix(ui): ship translated cost analysis strings

* fix(ui): scope cost window analysis

* chore(ui): refresh locale metadata

* chore(ui): refresh locale metadata
2026-07-05 23:58:40 +01:00
Peter Steinberger
a905eb42ac perf(test): skip fixture-only browser startup 2026-07-05 18:40:20 -04:00
Peter Steinberger
37c67b0d27 fix(macos): reduce idle CPU wakeups (#100463)
* fix(macos): reduce idle CPU wakeups

* chore(macos): sync native i18n inventory

* chore(macos): sync native i18n inventory

* chore(macos): sync native i18n inventory

* chore(macos): sync native i18n inventory

* chore(macos): sync native i18n inventory

* chore(macos): sync native i18n inventory
2026-07-05 23:35:50 +01:00
Peter Steinberger
927bbeb58c feat(chat-ui): redesign composer bottom bar with split Talk control and reasoning-effort chip (#100445)
* feat(chat-ui): redesign composer bottom bar with split Talk control and reasoning-effort chip

Removes the toolbar divider so the composer frame is the only chrome, merges
the Talk toggle and Talk settings gear into a mic+caret split control, shows
the effective reasoning level as a subtle pill next to the model name
(accent-washed only on session override), right-aligns the model/settings
cluster next to Send, and softens active/selected highlight states across the
bar. The combined model menu and reasoning fly-out now anchor right so they
stay on screen.

* fix(chat-ui): keep mobile composer controls usable

* fix(chat-ui): keep reasoning controls in mobile viewport

* fix(chat-ui): simplify composer placeholder

* chore(i18n): refresh composer locale metadata
2026-07-05 23:27:14 +01:00
Vincent Koc
c4a862ab53 fix(release): package legacy candidates without AI workspace (#100469) 2026-07-05 15:19:00 -07:00
Peter Steinberger
c40f5e0683 docs(changelog): credit voice fixes (#100473) 2026-07-05 23:15:18 +01:00
Peter Steinberger
4da855a1ff fix(slack): prefer native status by default (#100462)
Co-authored-by: Peter Steinberger <steipete@openai.com>
2026-07-05 23:10:08 +01:00
Wei Songqu
46d8e96503 fix(discord): isolate voice connections and close auto-join race (#87530)
* fix(discord): isolate voice connections by account

Co-authored-by: geekhuashan <geekhuashan@gmail.com>

* chore: defer Discord voice accounts changelog

* fix(discord): own auto-join cleanup in lifecycle

* test(discord): bind lifecycle voice mocks

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-05 23:09:57 +01:00
haruai
ff440393da fix: ignore stale approval resolve errors (#98394)
* fix(ui): scope approval decision results

Co-authored-by: haruaiclone-droid <281899875+haruaiclone-droid@users.noreply.github.com>

* docs(changelog): credit approval race fix

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: haruaiclone-droid <281899875+haruaiclone-droid@users.noreply.github.com>
2026-07-05 23:06:18 +01:00
WhatsSkiLL
978b425f98 fix(android): stabilize shell navigation layout (#100382)
* fix(android): stabilize shell navigation layout

* fix(android): target active shell navigation layout

* fix(android): initialize chat cache from preference owner

* chore(android): sync native i18n inventory

* chore(android): sync native i18n inventory

---------

Co-authored-by: IWhatsskill <IWhatsskill@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-05 23:03:30 +01:00
Omar Shahine
91f5a65df9 fix(imessage): plain-send fallback for threaded replies + db-scoped recovery cursor (#99638) (#100446)
* fix(imessage): retry unthreaded when a threaded reply is unsupported (#99638)

* fix(imessage): scope downtime-recovery cursor to the watched database (#99638)

---------

Co-authored-by: Omar Shahine <10343873+omarshahine@users.noreply.github.com>
2026-07-05 14:58:38 -07:00
Vincent Koc
1a37cafd63 ci(sdk): refresh realtime tool api baseline hash 2026-07-05 23:51:26 +02:00
Kevin Lin
5fdaa04eca feat(qa-lab): add Codex Slack approval scenarios (#91519)
* feat(qa-lab): add codex slack approval scenarios

* fix(qa-lab): harden Codex Slack approval proof

* fix(qa-lab): validate Codex approval model

* test(qa-lab): verify approved Codex operation

* fix(qa-lab): normalize Slack QA account routing

* fix(qa-lab): read Codex tool result transcripts

* fix(qa-lab): harden Codex approval cleanup

* fix(qa-lab): support Codex Mantis checkpoints

* fix(qa-lab): repair Mantis pnpm bootstrap

* fix(qa-lab): normalize Codex tool result text

* fix(qa-lab): scope Mantis pnpm fallback

* fix(qa-lab): bootstrap pinned pnpm without npm

* fix(qa-lab): terminate pnpm metadata record

* fix(qa-lab): bootstrap official node for mantis

* fix(qa-lab): make mantis pnpm shim executable

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-05 22:47:18 +01:00
github-actions[bot]
45f561ab6c chore(i18n): refresh native locales 2026-07-05 21:41:36 +00:00
Vincent Koc
170150a306 fix(talk): quarantine unreadable realtime tool names 2026-07-05 23:34:56 +02:00
Vincent Koc
7dac5c2778 fix(ci): install release packaging dependencies (#100459) 2026-07-05 14:33:10 -07:00
Vincent Koc
8ec5e06cbf fix(realtime): filter malformed provider tool names (#89175)
* fix(realtime): filter malformed provider tool names

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>

* chore: defer realtime tools changelog

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-05 22:25:24 +01:00