Commit Graph

16819 Commits

Author SHA1 Message Date
Dallin Romney 32b49bf2f1 fix(qa): preserve Matrix replies across scenario config reloads (#112065)
* fix(ci): keep maturity evidence on stable provider mode

* fix(qa): preserve model policy during Matrix setup
2026-07-21 16:23:24 +09:00
mikasa 644645f4f9 fix #95291: message tool fails to deliver files/images on Feishu (400 volc-dcdn / write ECONNRESET) while same Lark SDK upload succeeds standalone (#95514)
* fix(feishu): normalize media upload multipart data

Convert Feishu SDK multipart Buffer upload parts into explicit FormData
before they reach the wrapped HTTP transport. The SDK upload helpers
pass multipart data as a plain object with Buffer media parts; relying on
implicit serialization in the timeout/proxy-aware HTTP wrapper was fragile
and caused file/image delivery failures (400 volc-dcdn / write ECONNRESET)
even though the same credentials succeeded via a standalone SDK upload.

Adds normalizeMultipartUploadData, applied on the request path of the
shared Feishu HTTP instance, plus a regression test covering the
multipart-to-FormData normalization.

Rebased onto current origin/main, which replaced the old synchronous
injectTimeout path with the async proxy-aware injectRequestOptions flow;
the multipart normalization is now applied before that flow.

* fix(feishu): scope multipart media normalization

* test(feishu): mark multipart auth fixture synthetic

* test(feishu): use field-shaped secret fixtures

* fix(feishu): validate multipart upload endpoints

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-20 23:31:03 -07:00
Peter Steinberger b4e27f8b3d refactor: move provider transports into packages/ai behind a typed host port (#111669)
* refactor(ai): invert plugin coupling behind the transport host port

* fix(ai): queue custom transport registrations until the host is configured

* refactor(ai): remove relocated transport sources from src/agents

* fix(ai): source core stream types from canonical packages and fix tarball fixtures

* fix(ai): invert plugin transport host wiring

* fix(ai): harden managed transport projection

* test(ai): register synchronous stream in transport mock

* fix(ai): lazily install transport runtime host

* fix(ai): preserve completion compat detection
2026-07-20 23:26:00 -07:00
Masato Hoshino f1205f5f0b fix(anthropic): complete transcript reverse-scan windows across short reads (#109431)
* fix(anthropic): complete transcript reverse-scan windows across short reads

readLocalClaudeTranscriptPage filled each reverse-scan window with a single
positional read and threw "Claude transcript changed while it was being read"
whenever bytesRead !== size. A positional read may return fewer bytes than
requested inside an unchanged file, so a benign short read failed the transcript
page load with a message implying the file changed. The forward metadata scan in
the same file already loops short reads; the reverse scan did not.

Fill each window across short reads, advancing both the buffer offset and the
file position. A zero-byte read before the window is filled is premature EOF and
still throws the same error.

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

* test(anthropic): tighten transcript short-read coverage

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-20 23:17:18 -07:00
QiuYuang 4a7b1d9a1c fix(qa-lab-web): guard dashboard json responses (#108943)
* fix(qa-lab-web): guard dashboard json responses

* fix(qa-lab-web): remove global json size cap

* test(qa-lab-web): cover production json routes

* fix(qa-lab-web): satisfy json guard checks

* test(qa-lab-web): cover JSON media contracts

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-20 23:12:46 -07:00
mikasa 7a73531321 fix(codex): stream sandbox file copies (#101511)
* fix(codex): cap sandbox file copy reads

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

* test(codex): use PathUri in oversized copy proof

* fix(codex): stream sandbox file copies

Co-authored-by: mikasa0818 <0668001030@xydigit.com>

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-20 23:03:04 -07:00
chengzhichao-xydt 8636fdfc09 fix(extensions/anthropic): preserve migrated model entries when inherited keys shadow converted refs (#103622)
* fix(extensions/anthropic): write migrated model entries as own properties

* test(extensions/anthropic): guard optional models value in Object.hasOwn assertions

---------

Co-authored-by: chengzhichao-xydt <chengzhichao-xydt@users.noreply.github.com>
2026-07-20 23:00:02 -07:00
TUARAN 37ac5d671f fix(feishu): fall back media replies (#98320)
* fix(feishu): fall back media replies

* test(feishu): polish media fallback coverage

* test(feishu): cover media fallback policy wiring

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-20 22:52:08 -07:00
Peter Steinberger be5e427f56 feat(dashboard): plugin-declared widget data bindings and action verbs (#112083)
* feat(dashboard): add plugin capability declarations

* docs(dashboard): describe plugin capabilities

* fix(plugins): preserve registry map cloning

* fix(dashboard): make plugin grant ids unambiguous

* fix(dashboard): align generated plugin grant ids

* chore(boards): internalize verb ids and refresh protocol snapshots
2026-07-20 22:43:04 -07:00
Chunyue Wang 752f059753 fix(github-copilot): strip encrypted_content from reasoning replay items (#95493)
* fix(github-copilot): strip encrypted_content from reasoning replay items

* refactor(github-copilot): name replay sanitizer accurately

Use one provider-boundary sanitizer name for both connection-bound IDs and session-bound encrypted reasoning, and assert the final stream payload drops ciphertext.\n\nCo-authored-by: openperf <16864032@qq.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-20 22:31:39 -07:00
Mark d9ac878ea3 fix(telegram): clear generic callback buttons after click (#90169)
* fix(telegram): clear generic callback buttons

* test(telegram): simplify callback cleanup coverage

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-20 22:28:21 -07:00
Peter Steinberger 0adc2cf606 refactor(media): consolidate parallel media-kind unions onto canonical MediaKind (#112063)
* refactor(media): consolidate parallel media-kind unions onto canonical MediaKind

One canonical MediaKind union (media-core constants) replaces ~40
duplicate/parallel kind declarations across core and channel plugins;
channel-specific narrower contracts derive via Extract/Exclude. Also
fixes a review-caught fallback bug where a stored "unknown" reply-chain
kind preempted MIME inference and relabeled images as documents.

* refactor(ui): derive attachment kinds from MediaKind

* fix(telegram): drop type-dead unknown guard in reply-context kind fallback

* style(telegram): format media kind fallback
2026-07-20 22:27:22 -07:00
Peter Steinberger 695491458e fix(providers): reject malformed UTF-8 usage responses (#112081)
Co-authored-by: wahaha1223 <304197929+wahaha1223@users.noreply.github.com>
2026-07-20 22:16:25 -07:00
Owen e2b3519ea9 fix(openai): guard Codex GPT-5.6 discovery boundary (#104335)
* fix: guard OpenAI Codex model discovery boundary

DEV-20260711-001

* docs: narrow OpenAI Codex catalog comment

DEV-20260711-002

* test(openai): remove redundant catalog assertion

The exact model-id equality already excludes every static fallback row. Keep the new hidden-only regression as the distinct coverage.\n\nCo-authored-by: owen-ever <oh.whenever@gmail.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-20 22:07:09 -07:00
mikasa 1e7318e072 fix(tlon): stop monitor tracking state from growing forever (#103658)
* fix(tlon): bound monitor tracking state

* fix(tlon): fence invite snapshot generations

* fix(tlon): simplify bounded monitor tracking

Co-authored-by: mikasa0818 <0668001030@xydigit.com>

* fix(tlon): keep thread limit internal

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-20 22:00:47 -07:00
wahaha1223 1e4e588142 fix(memory-core): guard invalid timestamps in dreaming rankings (#110537) 2026-07-20 21:59:41 -07:00
chengzhichao-xydt 828845a08a fix(feishu): honor abortSignal during app registration poll interval (#109909)
* fix(feishu): honor abortSignal during app registration poll interval

* test(feishu): prove poll abort through a real loopback server
2026-07-20 21:53:45 -07:00
Alix-007 c0d461d3c4 fix(logbook): bound snapshot subprocesses (#109042)
* fix(logbook): bound snapshot subprocesses

* test(logbook): retain timeout spy handle
2026-07-20 21:39:41 -07:00
Miorbnli 5c9cd54b40 fix(zalo): strip internal tool traces (#103377)
Sanitize assistant-visible text at the Zalo outbound boundary.

Refs #103377; credit @miorbnli.

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-20 21:36:35 -07:00
Peter Steinberger 6ef6c9a15d fix(onboard): verify imported and local inference (#112028) 2026-07-20 21:35:22 -07:00
Peter Steinberger d9cf85fa43 fix(cli): correct optional plugin guidance (#112019) 2026-07-20 21:31:30 -07:00
wahaha1223 5fd87a28e4 fix(clawrouter): reject invalid UTF-8 usage responses (#111183)
Co-authored-by: wahaha1223 <304197929+wahaha1223@users.noreply.github.com>
2026-07-20 21:31:08 -07:00
Peter Steinberger e024aa38b9 fix(tlon): cancel failed auth response bodies (#112059) 2026-07-20 21:23:00 -07:00
qingminlong 975a8ec65b fix(admin-http-rpc): time out incomplete request bodies (#104564)
* fix(admin-http-rpc): time out incomplete request bodies

* fix(admin-http-rpc): preserve timeout responses
2026-07-20 20:40:12 -07:00
Leon-SK668 88a186d1f2 fix(qa-lab): preserve emoji in Matrix timeout diagnostics (#109532) 2026-07-20 20:30:42 -07:00
ZOOWH 288ba6cfb8 fix(clickclack): redact REST error details (#106635)
* fix(clickclack): redact REST error details

Redact untrusted ClickClack REST failure details before they reach callers.

Refs #106635; credit @ZOOWH.

Co-authored-by: ZOOWH <xu.wenhan1@xydigit.com>

* style(clickclack): order SDK imports

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-20 20:17:59 -07:00
LZY3538 4e9b1f4775 fix(tlon): bound Urbit auth response body drain to prevent OOM (#109697)
* fix(tlon): bound Urbit auth response body drain to prevent OOM

Replace the unbounded response.text() body drain (discarded after reading
to finalize set-cookie headers) with a streaming reader capped at 64 KiB.
When no body stream is available, fall back to text() for compatibility.
A hostile or misconfigured Urbit endpoint could previously stream an
arbitrarily large body into memory during login.

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

* fix(tlon): add curly braces to drain loop for lint compliance

* fix(tlon): remove unbounded text() fallback, cancel reader in finally

Remove the unbounded response.text() body-less fallback path. When no body
stream is available, there is nothing to drain — cookie headers are already
finalised. Move reader.cancel() into a finally block so the reader is
released even when read() throws.

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

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-07-20 20:05:36 -07:00
RileyJJY 699a939c54 fix(synology-chat): ignore blank env fallbacks (#109495)
* fix(synology-chat): ignore blank env fallbacks

* test(synology-chat): mark token fixture synthetic

* test(synology-chat): make whitespace fixtures explicit

* test(synology-chat): use env stubs in fallback coverage

* test(synology-chat): satisfy fixture lint

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-20 19:40:45 -07:00
sunlit-deng b73600b0cb fix(canvas): reject malformed snapshot base64 (#108987)
* fix(canvas): reject malformed snapshot base64

* refactor(canvas): reuse base64 canonicalizer

* fix(canvas): avoid control regex lint

* fix(canvas): allow base64 spaces

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-20 19:32:25 -07:00
Dallin Romney 29737496a8 fix(qa): run independent evidence channels concurrently (#112008)
* fix(qa): overlap independent channel evidence

* fix(ci): pin nested maturity evidence ref

* test(qa): satisfy promise executor lint
2026-07-21 11:25:46 +09:00
NIO ff68c06769 fix(discord): cancel unread voice CDN upload bodies (#111269) 2026-07-20 19:25:11 -07:00
sunlit-deng a31f6aa10c fix(kilocode): cancel failed model discovery bodies (#109950)
* fix(kilocode): cancel failed model discovery bodies

* test(kilocode): prove failed discovery closes response
2026-07-20 19:09:34 -07:00
wahaha1223 e1ca392dfb fix(qqbot): avoid memory spikes from oversized client secret files (#110002)
* fix(qqbot): reject oversized client secret files

* test(qqbot): derive oversized fixture from shared limit

* test(qqbot): track credential fixtures for cleanup

* fix(qqbot): keep tests inside plugin boundary

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-20 19:00:28 -07:00
Alix-007 1e3b76f26b fix(microsoft): keep valid voices from malformed catalogs (#110784) 2026-07-20 18:56:52 -07:00
Monkey-wusky 17643f3850 fix(qqbot): cancel non-OK direct-upload response body before throwing (#110008) 2026-07-20 18:54:12 -07:00
SunnyShu a510a8e3a5 fix(microsoft-foundry): keep spawn pipe streams UTF-8 safe across chunk splits (#109499)
* fix(microsoft-foundry): decode spawn pipes statefully with setEncoding('utf8')

Co-Authored-By: SunnyShu0925 <sunny.shu0925@gmail.com>

child_process spawn stdout/stderr .on('data') handlers in
azLoginDeviceCodeWithOptions received raw Buffer chunks. When a
multi-byte UTF-8 code point straddled a chunk boundary, String(chunk)
produced U+FFFD (replacement characters) for the split partial
sequences.

Fix the same way as PR #108518 (provider-local-service) and #109220
(voice-call ngrok): call setEncoding('utf8') on the pipe streams before
attaching data listeners so Node's stream decoder reassembles full code
points across chunk boundaries.

Test: PassThrough stream that receives a 4-byte smiley (U+1F60A) split
mid-sequence across two Buffer writes. With setEncoding, the reassembled
output is the clean code point, not U+FFFD.

* test(microsoft-foundry): replace PassThrough test with azLoginDeviceCodeWithOptions regression

* test(microsoft-foundry): add real-spawn integration test for split-byte setEncoding proof

* fix: add :unknown to catch callback variable for oxlint

* chore: add proof script for setEncoding utf8 split-byte fix

* remove standalone proof script (proof lives in PR body + test coverage)

* test(microsoft-foundry): tighten UTF-8 stream regression

Co-authored-by: SunnyShu0925 <shu.zongyu@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-20 18:51:12 -07:00
RileyJJY 97130060df fix(discord): release PluralKit 404 bodies (#109960) 2026-07-20 18:37:36 -07:00
Josh Avant 33720886c8 fix(agents): keep sender-scoped tools in delegated runs (#110345)
* fix(agents): preserve requester policy across delegation

* fix(agents): keep policy types internal

* test(codex): cover delegated policy forwarding

* fix(agents): harden delegated policy contract

* fix(agents): preserve split-owner completion policy

* fix: version delegated requester snapshots

* fix: refresh delegated policy protocol artifacts
2026-07-20 19:42:06 -05:00
Omar Shahine e27e2d08fd feat(policy): check authored message routing (#111087)
* feat(policy): check authored message routing

* fix(policy): normalize routing probe comparisons

* Policy: keep routing evidence types internal

* Docs: refresh policy map

---------

Co-authored-by: Omar Shahine <10343873+omarshahine@users.noreply.github.com>
2026-07-20 17:31:29 -07:00
Dallin Romney cde2e71d43 fix(deps): update axios past proxy advisory (#111984) 2026-07-21 09:21:14 +09:00
Paul Campbell 9f8d81bd1a improve(mxc): document sandbox config options and flag network access as dangerous (#110256)
Add configContracts.dangerousFlags for network="default", per-field uiHints,
and configSchema/Zod field descriptions to the MXC sandbox plugin manifest.
Only network is flagged dangerous; containment "process" and "processcontainer"
currently resolve to the same Windows ProcessContainer. Align the manifest
description with the plugin entry and update the config schema test for the new
timeout description.


Copilot-Session: c299e8bd-b71c-4bb4-94a9-9c248543102a

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
2026-07-21 08:59:51 +09:00
Jason (Json) cadad3b7bd fix(acpx): verify native platform packages (#111682) 2026-07-20 12:57:54 -06:00
Shakker 49aa383dd7 fix: consume ClickClack v1 setup claim contract (#111927)
Support ClickClack v1 setup claim URLs for split-origin and path-mounted deployments while preserving legacy setup flows and private transport overrides.

Refs #111919.
Prepared head SHA: c13ce82e38
Co-authored-by: Shakker <165377636+shakkernerd@users.noreply.github.com>
Reviewed-by: @shakkernerd
2026-07-20 18:50:30 +01:00
xingzhou ee74d7b8dc fix(teams-meetings): expose listening probe timeout (#111486) 2026-07-20 23:39:27 +08:00
Peter Steinberger 5197428add feat(channels): batch 4 Telegram drops media placeholder bodies (#111855)
Final producer batch of the media-placeholder program: Telegram primary
bodies are caption-only with one aligned structured fact per native
media; the message-cache kind-parsing regex is deleted (native kind
stored directly); reply-chain, debounce/forward, group-history, and
ambient transcript lines render structured facts via the shared
formatter (removing the plugin-local duplicate of the caption-less
literal); audio-transcript and sticker-description replacements gate on
structured facts instead of exact placeholder strings. Also restores
unconditional failed-retryable recording when media resolution is
aborted for live updates, so shutdown cannot silently settle an
undispatched update.
2026-07-20 07:31:10 -07:00
ooiuuii 570f8b4d9e fix(errors): recover from Z.AI token-limit errors (#111744)
* fix(errors): classify Z.AI token-limit overflow

* fix(zai): own token overflow classification

* fix(zai): classify live prompt overflow errors

---------

Co-authored-by: Altay <altay@hey.com>
2026-07-20 17:11:40 +03:00
Alix-007 756de70e84 fix(signal): report malformed release metadata cleanly (#110824)
* fix(signal): validate release metadata before install

* refactor(signal): normalize release metadata once

Co-authored-by: Alix-007 <li.long15@xydigit.com>

* test(signal): prove normalized install version

Co-authored-by: Alix-007 <li.long15@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-20 05:19:34 -07:00
Peter Steinberger 0ac7b24d56 feat(channels): batch 3 producers drop media placeholder bodies (#111800)
* feat(channels): batch 3 producers drop media placeholder bodies

Media-placeholder program batch 3: iMessage, Signal, and WhatsApp stop
minting <media:kind> placeholder bodies. Primary bodies carry captions
only with one aligned structured fact per native attachment (type-only
for missing/rejected/oversized). Echo, quote, and pending-history
records gain structured media facts so dedupe and previews work without
rendered text. Signal media-only outbound sends drop the placeholder
body entirely (signal-cli accepts attachment-only sends; recipients now
see just the media). WhatsApp audio preflight de-stringed; qa-lab
sticker recognizer moved to structured facts; WhatsApp gif maps to
video (presentation mode, no behavioral consumer).

* test(whatsapp): keep media classifier private
2026-07-20 04:22:44 -07:00
mushuiyu886 7bac63889e fix(nostr): prefixed targets fail to send (#110881)
* fix(nostr): prefixed targets send successfully

* fix(nostr): address target normalization review

* fix(nostr): preserve invalid prefixed allowlist tokens

* test(nostr): cover prefixed npub outbound targets

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

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-20 04:21:49 -07:00
VectorPeak 3ef2d8cf05 fix(sms): trim prefixed phone number spacing (#111111)
Co-authored-by: chatgpt-codex-connector[bot] <199175422+chatgpt-codex-connector[bot]@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-20 02:29:06 -07:00