Commit Graph

64340 Commits

Author SHA1 Message Date
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
Peter Steinberger
3d4db8b10c docs(changelog): credit empty-reply fix (#100464) 2026-07-05 22:25:16 +01:00
Peter Steinberger
f0093b7020 fix(auto-reply): surface empty interactive completions (#100456)
* fix(auto-reply): surface empty interactive completions

Co-authored-by: mushuiyu886 <yang.haoyu@xydigit.com>

* chore(changelog): defer empty-reply release note

---------

Co-authored-by: mushuiyu886 <yang.haoyu@xydigit.com>
2026-07-05 22:22:20 +01:00
Peter Steinberger
a4b032e5d7 fix: harden subprocess, maintenance, and output paths (#100440)
* fix(agents): contain exec output stream failures

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

* fix(tui): contain local shell stream failures

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

* fix(process): contain command output stream failures

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

* fix(skills): isolate remote bin refresh failures

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

* fix(agents): contain background subagent sweep failures

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

* fix(skills): report directory scan failures

Co-authored-by: wendy-chsy <wan.wenyan@xydigit.com>

* fix(agents): classify plugin approval gateway failures

Co-authored-by: 唐梓夷0668001293 <tang.ziyi@xydigit.com>

* fix(exec): preserve sanitized control-byte evidence

Co-authored-by: Lavya Tandel <lavya@loom.local>

* fix(shared): unwrap standalone parameter tags

Co-authored-by: nankingjing <1079826437@qq.com>

* fix(android): fail shared capture on audio read errors

Co-authored-by: NianJiuZst <3235467914@qq.com>

* docs(changelog): record small bugfix sweep

* fix(output): preserve sanitizer boundary semantics

* test: align sanitizer and sweeper regressions

* fix(terminal): preserve text after lone C1 controls

---------

Co-authored-by: 陈宪彪0668000387 <chen.xianbiao@xydigit.com>
Co-authored-by: wendy-chsy <wan.wenyan@xydigit.com>
Co-authored-by: 唐梓夷0668001293 <tang.ziyi@xydigit.com>
Co-authored-by: Lavya Tandel <lavya@loom.local>
Co-authored-by: nankingjing <1079826437@qq.com>
Co-authored-by: NianJiuZst <3235467914@qq.com>
2026-07-05 22:21:54 +01:00
Peter Steinberger
8c19dbfb62 feat(ios): export chat transcripts as Markdown via the share sheet (#100417)
* feat(ios): export chat transcripts as Markdown via the share sheet

* chore(ios): sync native i18n inventory
2026-07-05 22:14:44 +01:00
Vincent Koc
aa66581749 ci(sdk): refresh plugin api baseline hash 2026-07-05 23:13:49 +02:00
Peter Steinberger
8f9dd7af9e test: remove redundant reply concurrency warmup 2026-07-05 17:11:34 -04:00
Yuval Dinodia
89881b6611 fix(irc): long non-ASCII messages are silently truncated at the 512-byte line limit (#99138)
* fix(irc): chunk PRIVMSG by UTF-8 byte budget so long non-ASCII messages are not truncated

IRC caps a full protocol line at 512 bytes, but sendPrivmsg split outbound
text by UTF-16 code units against the 350 char default. Multi-byte text such
as CJK or emoji produced lines far beyond 512 bytes and servers silently
dropped the tail of every oversized chunk. The chunker now also enforces a
UTF-8 byte budget derived from the line framing overhead, splitting on code
point boundaries and preferring spaces, while ASCII chunking is unchanged.

* test(irc): move loopback IRC server helper to shared test helpers

The colocated node:net import tripped the network-runtime-boundary PR diff
scan for extensions/irc/src. The loopback server now lives in test/helpers,
outside the scanned network runtime paths, and the CJK, emoji, and ASCII
chunking cases keep driving the real client over a real TCP socket.

* fix(irc): decouple byte budget from character cap and move loopback helper to irc test-support

The byte budget is now derived only from the 512-byte line limit and framing
overhead, independent of messageChunkMaxChars, so low character caps with
multibyte text keep advancing instead of dropping the message. The loopback
IRC server helper moves from test/helpers to the extension-local package-root
test-support surface so extension tests stay off repo helper bridges and raw
socket use stays outside extensions/irc/src.

* fix(irc): enforce UTF-8 wire limits

* test(irc): satisfy loopback harness lint

* test(irc): avoid implicit Promise return

* test(irc): handle loopback close errors

* fix(irc): preserve boundary word splitting

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-05 22:10:59 +01:00
asock
20163ee182 [codex] fix discord missing voice state handling (#90969)
* fix(discord): treat missing voice state as absent

* fix(discord): narrow absent voice state handling

* chore: defer Discord voice changelog

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-05 22:10:46 +01:00
lsr911
e4c6ee8697 fix(agents): prevent ReDoS in MCP glob-to-regex wildcard matching (#100330)
* fix(agents): prevent ReDoS in MCP glob-to-regex wildcard matching

Collapse consecutive '*' wildcards into a single '*' before building
the regex in globMatches(). Without this, a glob like '**********-x'
tested against a non-matching string causes catastrophic backtracking
(238s for a single call with 10 stars vs 0.4ms after fix).

Affected functions:
- src/agents/agent-bundle-mcp-runtime.ts: globMatches (MCP tool name filter)
- src/agents/agent-bundle-mcp-materialize.ts: globMatches (MCP operation filter)

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

* fix(agents): make MCP filter matching linear

* style(mcp): satisfy filter lint

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-05 22:08:26 +01:00
Omar Garcia
92af54b64f fix: heartbeat survives transient filesystem read races (#100389)
* fix(heartbeat): retry transient workspace reads

* fix(heartbeat): bound transient filesystem retries

* fix(sessions): stop retrying permanent read failures

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-05 22:07:11 +01:00
github-actions[bot]
cff46028f4 chore(ui): refresh control ui locales 2026-07-05 21:06:02 +00:00
github-actions[bot]
660d752b34 chore(i18n): refresh native locales 2026-07-05 21:05:06 +00:00
Peter Steinberger
51771c3a14 feat(ui): declutter the Control UI sidebar with customizable pinned nav and a More section (#100296)
* feat(ui): declutter sidebar with pinned nav, More section, and customize menu

* test(ui): normalize sidebar e2e labels

* docs: refresh generated docs map

* fix(ui): keep tablet navigation drawer expandable

* chore(ui): refresh i18n raw-copy baseline
2026-07-05 21:56:51 +01:00
frank-beans
664464c750 Preserve provider settings during onboarding updates (#100107)
* Preserve provider settings during onboarding updates

* fix(onboarding): clear omitted request auth

* fix(onboarding): retain canonical provider keys

* fix(onboarding): canonicalize provider updates

* fix(minimax): preserve models across provider aliases

* fix(minimax): preserve secret references during onboarding

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-05 21:49:58 +01:00
Peter Steinberger
77575d74f6 feat(android): add durable offline command outbox for chat sends (#100290) 2026-07-05 21:45:36 +01:00
Peter Steinberger
bf156386aa feat(chat-ui): structured haptic feedback for chat events (#100416) 2026-07-05 21:42:44 +01:00
Peter Steinberger
5e0504aa43 feat(ui): simplify Talk settings (#100453)
Co-authored-by: Peter Steinberger <steipete@openai.com>
2026-07-05 21:31:52 +01:00