Commit Graph

15473 Commits

Author SHA1 Message Date
Peter Lee ef95c5d74e fix(discord): reset progress drafts across queued turns (#102341)
* fix(discord): guard progress draft collapse to prevent re-collapse on cleaned stream

Commit 86ea382 added a progressDraftStartedBeforeFinal latch that snapshots
hasStarted at markFinalReplyStarted time. This correctly preserves collapse
eligibility when an abort cancels the compositor gate before
shouldCollapseProgressDraft runs.

However the latch was never cleared. After markPreviewFinalized turned the
draft into a summary, hasProgressDraftStarted remained true permanently. In
multi-tool turns with multiple final-payload deliveries, this caused
shouldCollapseProgressDraft to re-trigger collapse on an already-cleaned or
sealed draft stream, corrupting downstream delivery state and causing tool
results to render as image content blocks instead of text.

Fix: add a progressDraftCollapsed guard set by markPreviewFinalized that
prevents hasProgressDraftStarted from returning true after the draft has been
collapsed into a summary. Reset the guard on handleAssistantMessageBoundary
so followup/queued turns start fresh.

Per Discord channel session, all tool results rendered as image content
blocks. Model received (see attached image) placeholders instead of text.

Fixes #100782

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(discord): use valid table/chunk mode literals in collapse-guard tests

* test(discord): add abort-race gate-cancellation latch survival test

* fix(discord): consume progress draft collapse once

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

* fix(discord): retain progress receipt on retry

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

* fix(discord): rearm queued progress drafts

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

* test(discord): assert progress lifecycle outcomes

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

* fix(discord): reset queued progress turn state

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

* test(discord): model recreated progress drafts

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

* fix(discord): serialize progress draft rotation

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

* fix(discord): isolate queued draft generations

Co-authored-by: Peter Lee <xialonglee@users.noreply.github.com>

* test(discord): align synchronous draft rotation

Co-authored-by: Peter Lee <xialonglee@users.noreply.github.com>

* fix(discord): distinguish draft rotation ownership

Co-authored-by: Peter Lee <xialonglee@users.noreply.github.com>

* chore: keep release notes in pull request

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-11 02:59:29 -07:00
Peter Steinberger d8bf51b462 fix(discord): single-source thread-binding default placement and guard artifact parity (#104342)
* fix(discord): single-source thread-binding default placement and guard artifact parity

* fix(tests): load thread-binding parity artifacts via sanctioned contract test helpers
2026-07-11 02:50:53 -07:00
Peter Steinberger 72cf43fa80 refactor(discord): unify custom-id value codecs into one shared module (#104334) 2026-07-11 02:12:37 -07:00
Peter Steinberger 0ef9a62eaf fix(codex): allow slower Mac session catalogs (#104332) 2026-07-11 02:05:55 -07:00
Vincent Koc 85a96409f1 feat(memory): surface llama.cpp diagnostics 2026-07-11 16:40:14 +08:00
chengzhichao-xydt a11449211a fix(inworld): add timeout to voices list request (#102965)
* fix(inworld): add timeout to voices list request

* refactor(inworld): reuse guarded timeout test helpers

* test(inworld): rely on harness timeout

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-11 01:35:25 -07:00
Vincent Koc 64a76d18ee fix(memory): tolerate minimal plugin runtimes 2026-07-11 16:22:22 +08:00
Vincent Koc 1aca83abf5 fix(lmstudio): isolate embedding alias credentials 2026-07-11 16:22:22 +08:00
Vincent Koc 105419ae5f fix(lmstudio): resolve embedding alias credentials 2026-07-11 16:22:22 +08:00
Vincent Koc 065873e5ec fix(lmstudio): preserve local service endpoint forms 2026-07-11 16:22:22 +08:00
Vincent Koc 63dbb336ca fix(ollama): preserve embedding readiness base path 2026-07-11 16:22:22 +08:00
Vincent Koc cce3fd55c4 test(lmstudio): type local service override fixture 2026-07-11 16:22:22 +08:00
Vincent Koc d2ac533c6c fix(embeddings): skip local services for remote overrides 2026-07-11 16:22:22 +08:00
Vincent Koc 5988420f89 fix(ollama): drop stale embedding config alias 2026-07-11 16:22:22 +08:00
Vincent Koc 1b3438d7ec fix(plugin-runtime): keep local service config host-owned 2026-07-11 16:22:22 +08:00
Vincent Koc 8b8e66cfa4 test(embeddings): align runtime fixture casts 2026-07-11 16:22:22 +08:00
Vincent Koc ccab708c16 fix(plugin-sdk): align local service release contract 2026-07-11 16:22:22 +08:00
Vincent Koc e62c216d75 refactor(embeddings): inject local service acquisition 2026-07-11 16:22:22 +08:00
Vincent Koc 06fbade796 fix(lmstudio): lease embedding local services 2026-07-11 16:22:22 +08:00
Vincent Koc fa5f24b021 fix(ollama): lease embedding local services 2026-07-11 16:22:22 +08:00
Peter Steinberger 20fe3f46db fix: paired Mac Codex sessions finish loading (#104299)
* fix(codex): allow cold Mac session catalogs

* chore: keep release notes in PR body
2026-07-11 01:14:36 -07:00
Pavan Kumar Gondhi 5f709cfd87 fix: isolate Synology webhook preauth throttling [AI] (#103619)
* fix: scope Synology preauth throttling by client ip

* fix: clarify Synology preauth limiter comments
2026-07-11 13:44:21 +05:30
Peter Steinberger 7128e8ea2b fix(telegram): allow 12-option polls (#104303)
* fix(telegram): allow 12-option polls

* chore: keep release notes in pr body
2026-07-11 01:11:30 -07:00
Peter Steinberger 7bf80dc2c6 chore(tooling): enforce formatting and refresh TypeScript checks (#104239)
* chore(tooling): enforce current formatter and refresh checks

* chore(tooling): keep release changelog formatter-owned

* chore(tooling): retain compatible Node type surface

* ci: enforce formatting for docs-only changes

* ci: isolate docs formatter check

* chore(tooling): apply updated lint and format rules

* chore(tooling): satisfy updated switch lint

* style(ui): apply Linux formatter layout

* test(doctor): match quiet local audio contribution

* test(doctor): assert quiet output only

* test(doctor): follow restored information contract
2026-07-11 01:09:51 -07:00
Alix-007 5219c9353d fix(tts): bound voice-list requests (#102865)
* fix(microsoft): add timeout to voices list request

* fix(tts): bound voice-list requests

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

---------

Co-authored-by: llagy009 <0668001470@xydigit.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-11 00:55:06 -07:00
Yuval Dinodia df883ab81a fix(discord): stop retrying non-idempotent sends on post-connect-ambiguous errors (#103867)
* fix(discord): stop retrying non-idempotent sends on post-connect-ambiguous errors

Discord's outbound retry runner treated every transient transport error as
retryable, including ECONNRESET, ETIMEDOUT, AbortError, and the undici
headers/body/socket timeouts. Those errors can fire after Discord has already
received and created the message but before the client reads the response, so
replaying the non-idempotent createChannelMessage POST delivers the same
message twice while reporting success.

Add a pre-connect-only classifier (isRetryableDiscordPreConnectError) covering
errors that provably never reached Discord (DNS/connect refused/connect
timeout) plus rate-limit rejections, mirroring the Telegram send-path
carve-out. The retry runner now accepts a per-call nonIdempotent option; the
message-create and thread-create call sites opt in so ambiguous post-connect
errors surface to the caller instead of double-sending. Idempotent REST calls
(reactions, edits, DM-channel lookup, uploads) keep the broader transient set.

* fix(discord): retry nonce-enforced message creates

* fix(discord): scope create retries by endpoint

* fix(discord): stabilize sticker and poll create nonce across retries

* fix(discord): tighten create retry safety

* fix(discord): preserve nonce-safe retries

* fix(discord): scope nonce fields to message creates

* test(discord): cover nonce-safe direct sends

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-11 00:54:23 -07:00
Peter Steinberger dce871540b test(qa): consolidate web search scenario (#104280)
Co-authored-by: Jimmy Puckett <jimmy.puckett@spinen.com>
2026-07-11 00:54:15 -07:00
Alix-007 18362758d0 fix(openai): add timeout to realtime client-secret requests (#102860)
* fix(openai): add timeout to realtime client-secret requests

* test(openai): prove realtime timeout through real guard

* test(openai): route realtime timeout proof through guard

* fix(openai): bound realtime client-secret requests

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

* fix(openai): align realtime secret timeout

---------

Co-authored-by: llagy009 <0668001470@xydigit.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-11 00:54:06 -07:00
Vincent Koc 597888680c feat(browser): expose managed graphics diagnostics (#104291)
* feat(browser): expose managed Chrome graphics diagnostics

* feat(browser): surface graphics facts in doctor

* docs(browser): explain managed graphics diagnostics

* fix(browser): remove unused graphics type import

* fix(browser): keep graphics facts sorting immutable

* fix(browser): bind graphics facts to owned process

* fix(browser): classify disabled graphics as software

* fix(browser): detect Windows software renderers

* fix(browser): classify disabled renderer sentinel
2026-07-11 15:41:16 +08:00
Peter Steinberger f94a7dc183 feat(codex): supervise native Codex sessions (#104045)
* feat(codex): add native session supervision

* fix(codex): harden supervision integration

* fix(codex): preserve locked harness ownership

* fix(codex): fence native session archive

* fix(codex): revalidate archive binding ownership

* feat(codex): integrate supervision runtime

* feat(sessions): preserve harness-owned execution

* feat(sessions): persist harness ownership invariants

* feat(gateway): enforce harness-owned sessions

* feat(setup): enable detected Codex supervision

* feat(mac): expose supervised Codex sessions

* feat(ui): make Codex sessions actionable

* docs(codex): document session supervision

* test(codex): cover integration ownership

* chore(i18n): refresh supervision inventories

* fix(setup): finalize Codex activation atomically

* test(codex): narrow binding store update

* fix(sessions): preserve legacy model locks

* test(macos): serialize Codex catalog fixtures

* fix(sessions): preserve legacy lock admission

* chore(i18n): reconcile supervision metadata

* test(sessions): mark legacy lock fixture

* fix(macos): drain final Codex catalog frame

* docs: leave supervision note to release

* style(macos): satisfy Codex catalog type length

* chore: record session accessor seam owners

* fix(macos): honor configured Codex supervision

* fix(codex): preserve harness-owned model locks

* fix(codex): satisfy supervision lint gates

* chore(i18n): refresh native supervision inventory

* fix(codex): align supervision validation contracts

* fix(codex): close supervision boundary gaps

* fix(codex): preserve supervision activation contracts

* fix(codex): dispose standalone supervision runtime

* fix(codex): pin supervised source connection

* fix(plugins): bind delegated runs to exact session target

* fix(codex): scope supervised sessions to configured agents

* fix(codex): fingerprint effective supervision home

* fix(codex): normalize supervision plugin policy

* fix(codex): keep supervised bindings stable across upgrades

* fix(codex): guard all supervised binding connections

* fix(codex): preserve catalog filters and pending CAS identity

* fix(codex): preserve supervision identity for diagnostics

* fix(codex): bind uncertain commits to supervision connection

* fix(codex): satisfy supervision type boundaries

* fix(macos): reconcile current main validation

* fix(codex): handle absent runtime config in supervision

* fix(doctor): own local audio acceleration check

* fix(codex): satisfy integration lint gates

* fix(codex): satisfy lifecycle safety guards
2026-07-11 00:12:08 -07:00
cxbAsDev 4fcee4f4fd fix(google-meet): force English UI when reusing existing Chrome tabs (#103719)
* fix(google-meet): force English UI when reusing existing Chrome tab

* fix(google-meet): narrow reused tab before forcing English UI

* test(google-meet): assert /navigate target id is adopted in reused tabs

* fix(google-meet): preserve active call tabs and normalize English before recovery

* fix(google-meet): preserve localized active tabs

* test(google-meet): avoid shadowing path import

* test(google-meet): align mocks with English-pinned tab reuse

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-11 00:11:00 -07:00
Peter Lee 99ddde8726 fix(voice-call): consolidate webhook logs on the injected plugin logger and assert transcript privacy boundary (#103555)
* fix(voice-call): redact transcript and AI response content from webhook logs

* fix(voice-call): wrap catch error in record for subsystem logger meta param

* fix(voice-call): consolidate webhook diagnostics on the injected logger and assert privacy boundary in tests

* fix(voice-call): restore [voice-call] attribution on shared plugin logger wrapper

* fix(voice-call): narrow optional debug callback before constructing wrapper

* test(voice-call): consolidate privacy assertions

* test(voice-call): share transcript privacy assertions

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-10 23:05:34 -07:00
Peter Lee 964a83b363 fix(voice-call): redact phone numbers in event logs via subsystem logger (#103547)
* fix(voice-call): redact phone numbers in event logs via subsystem logger

* fix(voice-call): add output-level privacy assertions that raw phone numbers are absent from event logs

* test(voice-call): consolidate privacy assertions

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-10 22:57:09 -07:00
Peter Steinberger 82abf7244d fix(codex): expose selectable node exec (#104198)
* fix(codex): expose selectable node exec

* chore: defer Codex node release note
2026-07-10 22:50:55 -07:00
Peter Steinberger 87618930db fix(google-meet): align DTMF delay metadata (#104119)
* fix(google-meet): align DTMF delay metadata

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

* chore: defer Google Meet release note

---------

Co-authored-by: llagy007 <0668001470@xydigit.com>
2026-07-10 22:43:28 -07:00
Peter Steinberger afa3212e90 fix(release): stage Telegram QA inside runtime root (#104125) 2026-07-10 22:39:09 -07:00
Peter Steinberger 81a201df26 feat: add portable table presentation blocks (#103583)
* feat(presentation): add portable table blocks

* chore(presentation): refresh generated contracts

* fix(slack): preserve table fallback payloads

* docs(changelog): note portable message tables

* fix(presentation): preserve cross-channel fallback delivery

* chore(plugin-sdk): refresh rebased contracts

* test(slack): align accessibility expectations

* fix(presentation): harden cross-channel fallback delivery

* chore(plugin-sdk): refresh rebased contracts

* docs(changelog): defer portable table release note

* fix(presentation): satisfy extension lint

* chore(plugin-sdk): refresh surface budgets

* fix(telegram): preserve reactions after progress replies

* fix(slack): preserve rendered preview fallback text

* fix(feishu): preserve oversized presentation fallbacks

* docs(changelog): note portable message tables

* docs(changelog): defer portable table release note

* chore(plugin-sdk): refresh rebased contracts

---------

Co-authored-by: Peter Steinberger <steipete@openai.com>
2026-07-10 22:29:13 -07:00
Peter Steinberger 9f53f8a256 feat(macos): import local browser login (#104177)
* feat(macos): import local browser login

* chore: leave release notes to release workflow

* chore(macos): refresh native i18n inventory

* chore(macos): refresh native i18n inventory

* chore(macos): refresh native i18n inventory

* chore: sync release summary executable bit

* chore(macos): refresh native i18n inventory

* style(macos): wrap browser import result

* chore(macos): refresh native i18n inventory

* chore(macos): refresh native i18n inventory
2026-07-10 22:14:36 -07:00
Peter Steinberger 36e0ac3576 fix(logs): clean up gateway and channel startup/shutdown log output (#104174)
* fix(logs): clean up gateway and channel startup/shutdown log output

Scope Discord slash-command deploy REST diagnostics to command routes so
concurrent startup traffic (voice-state probes, channel lookups) keeps its
owner's error handling; make per-request deploy error lines verbose-only and
drop JSON bodies that only repeat message+code. Log allowlist summaries one
line per call so unresolved lines keep their timestamp/subsystem prefix, and
skip identity lookups that resolved to themselves. Remove embedded subsystem
prefixes, demote routine signal/shutdown/force/postbuild/diag chatter to
debug or verbose, merge the duplicate Control UI build notices, drop doctor's
duplicate backup line, and name the config surface or platform limit in the
transcripts autoStart and command-limit warnings.

Fixes #104163

* fix(slack): keep bare-name allowlist resolutions in startup log summary

Only omit identity lookups where the input already is the resolved id;
name-based lookups that translated to an id stay logged even when the
display name matches the input.

* fix(telegram): keep isolated-ingress readiness marker on the runtime log

test/e2e/qa-lab telegram-bot-token-runtime waits for this line via the
injected RuntimeEnv.log; verbose-only logging would deterministically time
out that live proof. Comment the contract at the call site.
2026-07-10 22:13:33 -07:00
Alix-007 8f8aad9ae6 fix(minimax): add timeouts to OAuth HTTP requests (#102862)
* fix(minimax): add timeouts to OAuth HTTP requests

* fix(minimax): remove duplicate OAuth abort signals

* refactor(minimax): keep OAuth timeout internal

* test(minimax): make OAuth timeout proof deterministic

---------

Co-authored-by: llagy009 <0668001470@xydigit.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-10 22:02:34 -07:00
Alix-007 b09f9b0482 fix(openrouter): apply request policy to video catalog requests (#102062)
* fix(openrouter): apply request policy to video catalog requests

* fix(openrouter): key video catalog cache by request policy

* test(openrouter): preserve auth literal types

* fix(openrouter): preserve catalog auth overrides

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-10 22:01:18 -07:00
Alix-007 c4f46baec3 fix(nextcloud-talk): add timeout to room info lookup (#102859)
* fix(nextcloud-talk): add timeout to room info lookup

* test(nextcloud-talk): assert room lookup deadline

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

---------

Co-authored-by: llagy009 <0668001470@xydigit.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-10 21:59:32 -07:00
xingzhou 6595d1756b fix(discord): stream multipart uploads (#102972)
* fix(discord): bound multipart REST uploads
* Preserve Discord media upload payload limits
* fix(discord): stream multipart uploads

---------

Co-authored-by: 张贵萍0668001030 <zhang.guiping@xydigit.com>
Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-07-11 10:10:41 +05:30
Josh Avant fbd330b7aa fix(channels): honor configured read target policies (#99905)
* fix(channels): enforce configured read targets

* test(channels): align policy checks with boundaries

* fix: bind channel reads to trusted turn context

* test: satisfy gateway lint

* fix: narrow message action channel imports

* fix(feishu): authorize message reads before provider access

* fix(slack): await reaction clear authorization

* fix(channels): align provider action contracts

* fix(matrix): read direct-room account data before sync

* fix(channels): reject unsupported attachment actions early

* fix: restore trusted operator conversation reads

* fix(matrix): authorize pin actions before provider reads

* fix: preserve trusted channel read workflows

* fix(discord): resolve current channel ids consistently

* fix(agents): preserve message action turn capability

* fix(plugins): enforce host-owned read provenance

* fix(channels): harden Teams and Discord read policy

* fix(channels): preserve exact-current action compatibility

* fix(imessage): authorize trusted current chat aliases

* fix(channels): preserve normalized current aliases

* fix(channels): preserve external current target aliases

* fix: reconcile channel policy with current main

* fix(discord): isolate DM read policy

* fix(channels): enforce provider read gates

* fix(gateway): await serialized message action identity tokens

* fix(ci): refresh channel protocol contracts
2026-07-10 22:29:37 -05:00
Peter Steinberger feae1faf06 fix(release): expose Telegram launcher failures safely (#104099)
* fix(release): expose Telegram launcher failures safely

* test(release): prove namespace launcher diagnostics
2026-07-10 20:03:36 -07:00
Peter Steinberger dba64d574f chore(release): set version to 2026.7.2 2026-07-11 04:00:49 +01:00
Peter Steinberger bb26753705 fix(telegram): satisfy lint in transport-close proof test
restrict-plus-operands (Buffer + string) and no-promise-executor-return
tripped the lint shards on every PR since #101783 landed; scoped fixes
only, no behavior change.
2026-07-10 19:44:03 -07:00
ly-wang19 780f8d6f62 fix(telegram): clean up split reasoning previews (#97828)
Co-authored-by: ly-wang19 <ly-wang19@users.noreply.github.com>
2026-07-10 19:43:14 -07:00
sunlit-deng 4d55b116c6 fix(feishu): keep native-card payloads in topic threads (#102804) 2026-07-10 19:33:18 -07:00
xingzhou 85fa8af4bb fix(telegram): close evicted client-options cache transports after in-flight sends (#101783)
Long-running Telegram senders leaked HTTP transports: the client-options cache in extensions/telegram/src/send.ts created an owned undici dispatcher per account/network entry but evicted entries without closing it. Cache entries now own their transport; eviction retires the entry and closes the transport once the operation-level lease releases, so cache pressure never aborts an in-flight, retrying, or still-preparing send. Includes a real-socket e2e regression against a local Bot API server.

Co-authored-by: zhangguiping-xydt <zhangguiping-xydt@users.noreply.github.com>
Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-07-11 07:57:44 +05:30