Commit Graph

16697 Commits

Author SHA1 Message Date
Wynne668
5bb969f7de fix(tlon): preserve shutdown when body cancellation fails (#111106)
* fix(tlon): observe shutdown body cancellation failures

* test(tlon): streamline shutdown cleanup proof

* test(tlon): narrow shutdown fixtures

---------

Co-authored-by: ZengWen-DT <290981215+ZengWen-DT@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-18 19:32:04 -07:00
sunlit-deng
4dbeb84c25 fix(tlon): account checks leave streaming responses open (#111081)
* fix(tlon): release account probe response bodies

* test(tlon): assert probe cleanup ordering

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-18 19:18:30 -07:00
xingzhou
69aeba9d86 fix(discord): sustained gateway bursts stop growing memory (#110954)
* fix(discord): sustained gateway bursts stop growing memory

* fix(discord): contain gateway queue overflow

* fix(discord): drop oldest saturated gateway sends

Co-authored-by: 张贵萍0668001030 <zhang.guiping@xydigit.com>

* fix(discord): surface gateway overflow warnings

Co-authored-by: 张贵萍0668001030 <zhang.guiping@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-18 19:14:16 -07:00
Wynne668
ead8f691ea fix(matrix): preserve redirects when body cancellation fails (#111105)
* fix(matrix): observe redirect body cancellation failures

* test(matrix): verify rejection listener cleanup

---------

Co-authored-by: ZengWen-DT <290981215+ZengWen-DT@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-18 19:06:46 -07:00
tiffanychum
feb6da25f5 fix(googlechat): keep accounts.default streaming when doctor migrates named accounts (#106018)
* fix(googlechat): keep accounts.default streaming when doctor migrates named accounts

* fix(googlechat): canonicalize migrated streaming

Replace the layered doctor migration with canonical root/default/account materialization and prove runtime resolution matches the stored config.\n\nCo-authored-by: tiffanychum <71036662+tiffanychum@users.noreply.github.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-18 19:05:57 -07:00
Peter Steinberger
ced95b3fce refactor(discord): split message process runtime (#111119) 2026-07-18 19:04:30 -07:00
Jason (Json)
047232bd16 fix(telegram): fall back for web apps outside DMs (#111116) 2026-07-18 19:52:19 -06:00
Peter Steinberger
0a8c485395 fix(browser): make copilot runtime bundle deterministic (#111109) 2026-07-18 18:49:38 -07:00
wahaha1223
ecc56749e1 fix(anthropic): guard invalid timestamps in history imports (#110536)
* fix(anthropic): guard invalid timestamps in history imports

* fix(anthropic): reject pre-epoch history timestamps

* fix(anthropic): preserve valid transcript dates

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-18 18:45:10 -07:00
Marcus Castro
f2137f41b8 fix(whatsapp): serialize source runtime loading (#111094) 2026-07-18 22:40:19 -03:00
Eden
2e16660f18 fix(line): retry inbound media through the ingress drain on transient download failure (#110921)
* fix(line): retry inbound media through the ingress drain on transient download failure

* fix(line): retry all transient inbound media failures

Co-authored-by: 許元豪 <146086744+edenfunf@users.noreply.github.com>

* style(line): format media retry test

* test(line): use scanner-safe quote token

* fix(line): narrow durable media retries

* fix(line): preserve status after body cleanup

* chore(changelog): avoid concurrent entry conflict

* style(line): format retry helper signature

* test(line): assert rejected media chunk

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-18 18:26:33 -07:00
Ted Li
50e81ce493 fix(diagnostics-otel): classify model calls as client spans (#104211)
Model-call spans wrap outbound provider inference requests, so classify them as CLIENT independently of the optional GenAI naming convention. Generic tool spans remain unchanged because their shared events can represent local work.

Release note: operators filtering dashboards or alerts on span kind will see model-call spans move from INTERNAL to CLIENT.

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-18 18:21:45 -07:00
mushuiyu886
c3adaa3195 fix(nostr): report relay connections only after they succeed (#110878)
* fix(nostr): report relay connections only after they succeed

* test(nostr): exercise relay callback during subscription

* test(nostr): reuse resolved account fixture

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-18 18:18:39 -07:00
Peter Steinberger
968f9ad0f3 test(codex): split event projector suites (#111097) 2026-07-18 18:17:25 -07:00
Peter Steinberger
b96d5cf554 fix(qa): resume channel cursor after gateway restart (#111096) 2026-07-18 18:16:14 -07:00
Peter Steinberger
03c3c4b978 fix(browser): keep copilot runtime bundle in sync (#111089) 2026-07-18 18:15:21 -07:00
Peter Steinberger
47afe8f88f refactor(discord): split message process tests (#111066)
* refactor(discord): split message process tests

* test(discord): register split suite lifecycle

* test(discord): keep process harness internals private
2026-07-18 17:49:19 -07:00
qingminlong
fc30a6c67d fix(oc-path): reject oversized multibyte JSONC input (#104140)
* fix(oc-path): enforce JSONC byte limit for multibyte input

* fix(oc-path): surface JSONC size diagnostics in CLI

* fix(oc-path): classify oversized JSONC as parse error

* test(oc-path): cover JSONC byte cap boundaries

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-18 17:47:15 -07:00
Kris Wu
e5b2ca3c6b feat(config): add compaction.thinkingLevel to override thinking level during compaction (#98074)
* feat(config): add compaction.thinkingLevel to override thinking during compaction

* fix: make compaction.thinkingLevel override inherited session thinking

* fix: warn on compaction.thinkingLevel ignored by Codex native runtime

* feat(config): add compaction thinking override

Co-authored-by: wu.duozhen@xydigit.com <wu.duozhen@xydigit.com>

* test(agents): remove duplicate compaction harness

Co-authored-by: wu.duozhen@xydigit.com <wu.duozhen@xydigit.com>

* test(plugin-sdk): account for thinking level export

Co-authored-by: wu.duozhen@xydigit.com <wu.duozhen@xydigit.com>

* chore: keep release note in PR metadata

* chore: reconcile plugin SDK surface budgets

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-18 17:18:28 -07:00
mushuiyu886
9fe92cf5ce fix(nostr): profile imports no longer crash on invalid fields (#110684)
* fix(nostr): profile imports no longer crash on invalid fields

* test(nostr): define invalid profile import policy

* test(nostr): cover invalid imported URL types

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-18 17:18:23 -07:00
Peter Steinberger
b4187ced90 feat: add live-validated Zoom meeting guest plugin (#111048)
* feat(zoom-meetings): add browser guest transport

* fix(zoom-meetings): type reusable refresh result

* test(meeting-bot): bind reusable refresh callback

* chore(zoom-meetings): use existing plugin label

* chore(zoom-meetings): defer changelog to release

* test(zoom-meetings): cover node setup through public host
2026-07-18 17:17:26 -07:00
NIO
86b5e279fb fix(voice-call): clamp continue poll RPCs to remaining deadline (#109053)
* fix(voice-call): clamp continue poll RPCs to remaining deadline

* test(voice-call): prove continue deadline bound

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-18 17:01:59 -07:00
Ted Li
10f5a7ac58 fix(groq): keep default Llama agent turns within TPM limit (#104904)
* fix(groq): recover oversized requests safely

* fix(groq): clear parallel tool aliases on fallback

* fix(groq): require provenance-aware host

* fix(groq): preserve configured request budgets

---------
authored-by: @MonkeyLeeT
Co-authored-by: Colin <colin@solvely.net>
2026-07-18 20:00:12 -04:00
lsr911
3d03b60da9 fix(litellm): guard loopback hostname auto-allow with isIP to prevent DNS SSRF bypass (#110693)
* fix(litellm): guard loopback hostname auto-allow with isIP to prevent DNS bypass

The isAutoAllowedLitellmHostname helper auto-enables private-network access
for loopback-style hosts. Before this fix, lowered.startsWith("127.")
matched DNS hostnames like 127.evil.com, letting remote endpoints bypass
the explicit allowPrivateNetwork opt-in — a SSRF risk.

Add isIP(host)===4 guard so only literal IPv4 loopback addresses qualify.
Same canonical pattern as extensions/slack/src/monitor/relay-source.ts:271
and the codex loopback fix.

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

* test(litellm): cover loopback endpoint policy

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-19 00:51:50 +01:00
Omar Shahine
8b720729d2 fix(imessage): keep fast progress out of chat (#110052)
* fix(imessage): keep fast progress out of chat

* test(imessage): require fast progress callback

---------

Co-authored-by: Omar Shahine <10343873+omarshahine@users.noreply.github.com>
2026-07-18 16:45:10 -07:00
Peter Steinberger
7562b79465 refactor(channels): share durable ingress monitor (#111017)
* refactor(channels): share durable ingress monitor

* fix(channels): harden ingress monitor shutdown

* docs: refresh SDK documentation map
2026-07-19 00:42:08 +01:00
Alexzhu
e5e93e8169 fix(whatsapp): evaluate mention patterns when other members are @-mentioned (#110412)
* fix(whatsapp): evaluate mention patterns when other members are @-mentioned

isBotMentionedFromTargets returned false as soon as a group message
carried native @-mentions that did not include the bot, so the
configured mentionPatterns were never evaluated and a message like
'marlow, look at @SomeoneElse's message' was silently dropped by the
requireMention gate (#109488).

Fall through to the configured text mentionPatterns when the native
@-mention JIDs do not include the bot. The loose self-number digit
fallback stays suppressed in that shape: an @-tag of another member
injects that member's number into the body, so substring digit
matching is unreliable there.

Fixes #109488

* refactor(whatsapp): unify mention pattern gating

---------

Co-authored-by: Marcus Castro <mcaxtr@openclaw.ai>
2026-07-18 20:40:34 -03:00
Peter Steinberger
941ed4fd4a fix(memory-wiki): preserve unavailable source pages (#111034)
Preserve imported unsafe-local wiki pages and human annotations while configured source scopes are temporarily unreadable.
2026-07-19 00:39:23 +01:00
mushuiyu886
d411559dfb fix(acp): reject malformed session list cursors (#107895)
* fix(acp): reject malformed session list cursors

* fix(session-catalog): validate pagination cursors exactly

Co-authored-by: 杨浩宇0668001029 <yang.haoyu@xydigit.com>

* refactor(session-catalog): align search normalization owner

* refactor(session-catalog): keep parsing helpers private

Co-authored-by: 杨浩宇0668001029 <yang.haoyu@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-19 00:38:02 +01:00
Peter Steinberger
14a714901b docs(imessage): align recovery with durable ingress (#111002) 2026-07-19 00:09:44 +01:00
Miorbnli
9d0836ee25 fix(thread-ownership): bound 409 response read and preserve cancel semantics (#98941)
* fix(thread-ownership): bound 409 response read and preserve cancel semantics

The thread-ownership 409 conflict path still used unbounded resp.json(),
inconsistent with the bounded readers shipped across the other channel/provider
success paths. A compromised or buggy forwarder returning a multi-GB 409 body
would buffer the entire body before JSON.parse, OOMing the agent.

Bound the 409 body via readResponseTextLimited (8 KiB cap; a 409 owner field is
~30 bytes). Wrap the parse in try/catch so a truncated or malformed 409 body
still cancels the send (owner logged as "unknown") — the 409 status itself
means another agent owns this thread, independent of body parseability.

The discord webhook and huggingface /v1/models success reads from the original
PR were superseded upstream by #98098 and #101079 (readProviderJsonResponse),
so this branch now carries only the thread-ownership fix.

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

* fix(thread-ownership): bound forwarder conflict handling

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-07-19 00:01:09 +01:00
Peter Steinberger
333a3297af refactor(plugin-sdk): consolidate persistent dedupe claim loop (#110984) 2026-07-18 23:36:59 +01:00
Dallin Romney
56915896bc fix(qa): bound Matrix E2EE sends (#110968) 2026-07-18 15:32:44 -07:00
Peter Steinberger
a5ec26fa3c fix: prevent LINE channel reloads from hanging on stalled deliveries (#110971)
* fix(channels): bound ingress shutdown and document retention

* docs(channels): note ingress shutdown behavior

* chore: keep release notes in pull request

* docs: refresh documentation map

* fix(line): preserve deferred claims during shutdown

* fix(line): handle late abandonment failures
2026-07-18 23:25:33 +01:00
Peter Steinberger
264a7b0d12 refactor(channels): consolidate manifest descriptors (#110985) 2026-07-18 23:18:28 +01:00
Yiğit ERDOĞAN
ee37c840f3 fix(reef): contain startup friend reconcile failures (#110918)
* fix(reef): contain startup friend reconcile failures

The periodic reconcile treats a transient relay failure as non-fatal, but
the startup reconcile was a bare await outside the lifecycle. A relay 429
there rejects startAccount, and the supervisor restart that follows is
itself what escalates relay rate limiting -- so Reef gives up permanently
after MAX_RESTARTS while the relay is still throttling.

Move the startup reconcile into runReefChannelLifecycle so both paths
share one failure policy, and activate through an onReady hook to preserve
the existing ordering: refresh peer keys, activate, then start the inbox.

* fix(reef): harden reconcile recovery

Co-authored-by: Yigtwxx <yigiterdogan023@gmail.com>

* docs(changelog): credit Reef reconcile fix

* test(reef): satisfy exact-head validation

* test(reef): satisfy lint contract

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-18 23:18:20 +01:00
Yiğit ERDOĞAN
01c6479311 fix(discord): long code-fence replies can exceed the message length limit (#110148)
* fix(discord): reopening a long code fence overflows maxChars

When a chunk is flushed mid code-fence, the next chunk reopens the fence
with the full original opening line (info string included), but the
reserve accounting only budgets the closing marker. A long fence opening
line therefore pushed reopened continuation chunks past maxChars, which
Discord rejects with HTTP 400.

Reopen continuation chunks with a bare marker when the full opening line
would not leave room for the close and body, and size split segments
against the reopen prefix so no chunk exceeds maxChars. This mirrors the
existing closing-fence-overflow guard on the opening/reopen side.

* fix(discord): preserve code after fence reopen

Co-authored-by: Yigtwxx <yigiterdogan023@gmail.com>

* fix(discord): preserve limits when fences cannot fit

Co-authored-by: Yigtwxx <yigiterdogan023@gmail.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-18 23:06:46 +01:00
Peter Steinberger
f3f6eb2321 fix(codex): stop fallback for superseded sessions (#110980) 2026-07-18 23:02:03 +01:00
Peter Steinberger
4d683904df fix(agents): restore ask_user roundtrip in Gateway chats (#110961)
* fix(agents): restore ask_user channel roundtrip

* test(qa): derive ask_user proof from answers

* test(qa): isolate mock reply directives

* test(qa): wait for complete ask_user reply

* fix(agents): fail closed on stale ask_user prompts

* chore: remove release-owned changelog entry

* fix(agents): satisfy ask_user CI contracts
2026-07-18 22:55:46 +01:00
Peter Steinberger
7a551bff0c fix(vault): aggregate provider outage diagnostics (#110908)
* fix(vault): aggregate provider outage diagnostics

* fix(vault): classify revoked token outages

* fix(vault): preserve scoped ACL failures

* fix(vault): keep token probes advisory

* test(vault): satisfy gateway proof gates

* fix(secrets): attribute web provider outages

* test(secrets): prove web outage fan-out in owner suite

* fix(vault): scope malformed responses per secret

* test(secrets): harden exec fanout fixtures
2026-07-18 22:44:06 +01:00
Wynne668
7e4a76a6d0 fix(amazon-bedrock): ignore blank region env overrides (#110676)
* fix(amazon-bedrock): ignore blank region env overrides

* fix(amazon-bedrock): normalize region envs across runtimes

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

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-18 22:38:51 +01:00
Peter Steinberger
fc777a35bb test(telegram): mock core turn dispatcher (#110967) 2026-07-18 22:35:56 +01:00
NIO
848dbcabba fix(signal): keep REST timeout through slow-drip response bodies (#109047)
* fix(signal): keep REST timeout through slow-drip response bodies

* fix(signal): share REST operation deadlines

Co-authored-by: NIO <hu.genshen@xydigit.com>

* test(signal): preserve REST deadline errors

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-18 22:33:26 +01:00
NIO
598f13a5f3 fix(zai): keep probe deadline through stalled error-body reads (#109026)
* fix(zai): keep probe deadline through stalled error-body reads

Fixes an issue where Z.AI endpoint detection could hang indefinitely
when a probe returned error headers and then stalled on the error
response body. The previous helper cleared the AbortSignal as soon as
fetch resolved headers, so a never-chunking error body bypassed the
probe deadline.

Keep one AbortController deadline across the probe request and the
bounded error-body read, and pass a clamped chunkTimeoutMs into
readResponseWithLimit so a stalled error body fails closed inside the
remaining budget. The chunkTimeoutMs is clamped to the remaining
deadline after fetch returns headers, so the idle timeout does not
outlast the overall probe deadline.

Tighten the stalled-body test timing assertion from 5s to 2x timeoutMs
to verify the deadline is actually respected.

* fix(zai): enforce probe body deadline

Co-authored-by: NIO <noreply@github.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: NIO <noreply@github.com>
2026-07-18 21:51:15 +01:00
tzy-17
09c46fb682 fix(stt-live-audio): cancel ElevenLabs error response body (#110759)
Avoid buffering unbounded provider error streams and cover the resource lifecycle with a deterministic cancellation contract.

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-18 21:48:04 +01:00
Wynne668
6646719c05 fix(thread-ownership): ignore blank forwarder URL env overrides (#110675) 2026-07-18 21:45:35 +01:00
Wynne668
a9fb5b4e3f fix(diagnostics-otel): ignore blank protocol env overrides (#110674) 2026-07-18 21:38:44 +01:00
mushuiyu886
331eb0d439 fix(huggingface): discover models when HTTP proxy is required (#110924) 2026-07-18 21:31:24 +01:00
Peter Steinberger
b6f905b410 test(codex): repair app-server extension shard fixtures (#110951) 2026-07-18 21:29:36 +01:00
Wynne668
37b0b12eb7 fix(tlon): release failed upload response bodies (#110442)
* fix(tlon): release failed upload response bodies

* fix(tlon): settle guarded upload responses

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

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-18 21:19:03 +01:00