Commit Graph

16468 Commits

Author SHA1 Message Date
wangmiao0668000666
8243afc062 fix(browser): honor AbortSignal in tab discovery poll (#109617)
* fix(browser): honor AbortSignal in tab discovery poll

* fix(browser): unify abort-aware tab discovery

Apply the canonical abortable sleep to both discovery loops, reject late backend results after cancellation, and replace timing-sensitive proof with deterministic timer coverage.

Co-authored-by: wangmiao0668000666 <wang.miao86@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-17 01:39:05 -07:00
Monkey-wusky
9b238a7927 fix(msteams): cancel non-OK consent upload response body before throwing (#109701)
* fix(msteams): cancel non-OK consent upload response body before throwing

* fix(msteams): release all consent upload responses

Cancel unread response bodies after successful uploads as well as failed uploads, and fold the lifecycle assertions into the existing status-path tests.

Co-authored-by: Monkey-wusky <66244686+Monkey-wusky@users.noreply.github.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-17 01:18:40 -07:00
Wynne668
1573c78f5b fix(lmstudio): cancel model discovery response body on non-ok (#109718)
* fix(lmstudio): cancel model discovery response body on non-ok

Wire the direct-fetch release hook to cancel unread bodies so failed
model discovery releases the TCP connection instead of leaving it open.

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

* refactor(lmstudio): unify response cleanup

Co-authored-by: Zeng Wen <27948732+ZengWen-DT@users.noreply.github.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: Zeng Wen <27948732+ZengWen-DT@users.noreply.github.com>
2026-07-17 01:12:23 -07:00
Peter Steinberger
4ecd85e0b7 fix: keep healthy channel accounts running when one credential fails (#109766)
* fix(secrets): isolate channel account credentials

* fix(secrets): normalize Feishu default ownership

* fix(feishu): preserve accountless secret ownership

* fix(matrix): keep accountless top-level refs active
2026-07-17 01:12:18 -07:00
wangmiao0668000666
538263bafd fix(chutes): cancel userinfo error response body before returning null (#109677) 2026-07-17 01:11:11 -07:00
Peter Steinberger
e693d279b3 fix: Bedrock ARN region routing, Copilot device-flow pacing, TUI input fixes (#109740)
* build(deps): bump terminal UI library to 0.80.9

* fix(plugins): Bedrock ARN region routing, stop-reason detail, and Copilot device-flow pacing
2026-07-17 01:09:29 -07:00
Peter Steinberger
2bf07bdea5 perf(test): advance Matrix draft timers (#109790) 2026-07-17 01:06:27 -07:00
Peter Steinberger
6ac15970a7 feat(onboarding): unified empty-state with provider icons, websites, and recommended installs (#109681)
* feat(onboarding): unify setup recommendations

* fix(control-ui): proxy model setup icons

* fix(onboarding): refresh landing artifacts

* chore(ui): sync translated i18n catalogs

* chore(ui): keep generated locale artifacts on the refresh workflow
2026-07-17 01:01:06 -07:00
Peter Steinberger
543244e7bb perf(ci): remove the anthropic-cli jiti stall and stripe the full-plan whales (#109769)
* perf(sdk): load Claude CLI identity from a narrow plugin artifact

src/plugin-sdk/anthropic-cli.ts snapshots CLAUDE_CLI_BACKEND_ID at module
scope through the sync facade loader, which jiti-evaluates the full
anthropic api.js barrel on source checkouts: 130.86s of self time per
cold worker on CI (Testbox import profile), silently stalling every job
whose graph reaches cli-runner/prepare.ts. A narrow cli-api.js artifact
carries the two static facts; Testbox proof: the reliability+helpers
agents-core pair drops from 157.6s to 14.3s.

* perf(ci): stripe unit-fast and tooling node tests on the full plan

core-fast ran the import-bound unit-fast graph as one job (247s vitest,
181s module evaluation) and core-tooling as one serial job (241s); both
now stripe on the full plan like the compact plan, so the compact-only
expansion is deleted and the docker helper config rides with the
isolated shard on both plans. Group hints refreshed from main run
29551077288; stale per-file commands hints dropped (the consolidation
landed); cache-writer selection and the warm workflow track the stripe
names.

* fix(state): tolerate vanished sqlite sidecars in agent-db permission sweep

existsSync+chmodSync raced SQLite's own WAL/SHM cleanup: a checkpoint or
close between the two calls throws ENOENT (observed from the transcript
reconcile worker in server-startup-web-fetch-bind on CI). chmod directly
and swallow only ENOENT, which removes the TOCTOU window.
2026-07-17 00:58:32 -07:00
Peter Steinberger
0e792b6de3 refactor(channels): centralize inbound orchestration and remove internal compat (#109716)
* refactor(channels): centralize inbound turn orchestration

* refactor(runtime): remove stale compatibility paths

* chore(guards): reject internal deprecated API use

* refactor(channels): simplify core turn planning

* chore(guards): keep deprecated checks boundary-focused

* refactor(memory): keep modern config off compat barrel

* fix(msteams): preserve feedback learning

* test(channels): align modern inbound fixtures

* refactor(channels): finish modern inbound migration

* refactor(channels): tighten core inbound kernel

* fix(channels): preserve turn assembly narrowing

* test(sdk): keep runtime mock binding immutable

* test(matrix): isolate read policy runtime

* test(msteams): mock canonical reply factory

* test(slack): mock core inbound turn dispatch

* test(telegram): inject core session recorder

* test(signal): inject core session recorder

* test(googlechat): assert canonical inbound routing

* test(synology-chat): align core turn fixture

* fix(sdk): preserve direct DM runtime compat

* refactor(channels): own inbound envelope compat in core

* refactor(channels): trim inbound dispatch seams

* refactor(channels): remove redundant async wrappers

* test(synology-chat): type canonical dispatcher mock

* refactor(channels): remove remaining dead compat seams

* chore(sdk): refresh API baseline after rebase

* fix(channels): preserve direct DM identity metadata
2026-07-17 00:56:46 -07:00
Peter Steinberger
765bb37364 feat(setup): stream provider prepare progress to every surface (#109764)
* feat: stream provider preparation progress

* fix(android): refresh gateway method constants
2026-07-17 00:55:04 -07:00
Peter Steinberger
f1cb2a8f20 perf(test): poll Chrome MCP state faster (#109776) 2026-07-17 00:42:52 -07:00
Peter Steinberger
2b18ef7426 feat(codex): surface native questions and goals (#109724)
* feat(codex): bridge native questions and goals

Co-authored-by: EVA <eva@100yen.org>

* fix(ui): preserve native question text encoding

* fix(codex): keep secret answers off action paths

* fix(codex): validate native action keys exactly

* fix(codex): isolate new goals and free-form answers

* style(codex): satisfy extension lint

* fix(codex): keep goal replacement non-destructive

* fix(codex): separate native goals from continuation

* fix(codex): preserve exact native answer labels

* test(codex): assert goal continuation stays disabled

* fix(codex): remove unused bridge exports

* test(codex): refresh goal feature snapshots

---------

Co-authored-by: EVA <eva@100yen.org>
2026-07-17 00:35:39 -07:00
Peter Steinberger
264a95c664 perf(test): poll xAI realtime state faster (#109762) 2026-07-17 00:28:13 -07:00
wangmiao0668000666
e01027dd28 fix(telegram): honor abortSignal in startup probe retry loop (#109604)
* fix(telegram): honor abortSignal in startup probe retry loop

* test(telegram): isolate probe retry abort proof

* fix(telegram): abort active startup probe requests

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-17 00:19:30 -07:00
Peter Steinberger
5c86a224c0 perf(test): poll Telegram webhook state faster (#109749) 2026-07-17 00:14:16 -07:00
Peter Steinberger
a2ec3f6904 refactor: separate external conversations from local sessions (#109411)
* feat: separate external conversations from sessions

* test: cover conversation tool authorization

* chore: refresh session schema baseline

* fix: persist effective conversation delivery text

* fix: bind conversation identity to delivery target

* fix: preserve pending conversation deliveries

* fix: make conversation delivery outcomes synchronous

* refactor: make conversation delivery durable

* fix: harden durable conversation retries

* fix: close durable conversation pre-send gaps

* fix: terminally reject invalid conversation deliveries

* refactor: route external conversations through gateway

* fix: namespace conversation delivery queue intents

* refactor: remove obsolete transcript replacement path

* test: prove conversation delivery v10 migration

* test: keep conversation action mock typed

* fix: clear conversation refactor CI gates

* test: align Reef delivery coverage

* chore: refresh Android conversation strings

* fix: harden external conversation state

* fix: close conversation race edges

* fix: preserve conversation delivery identity

* fix: replay durable conversation operations

* fix: unify agent schema at version 11

* chore: move release note context to PR

* fix: make required queue persistence force core delivery

* chore: refresh plugin SDK baseline
2026-07-17 00:09:51 -07:00
Abner Shang
a33ddc9dc5 fix(openai): close OAuth callback prompts cleanly (#89491)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 23:58:41 -07:00
ooiuuii
fbfad6eb42 feat(codex): show answer candidates in Activity (#90610)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 23:58:16 -07:00
Peter Steinberger
c13925b387 fix(webhooks): keep routes cold when SecretRefs are unavailable (#109715)
* fix(webhooks): isolate unresolved route secrets

* chore(plugin-sdk): refresh API baseline

* docs(secrets): refresh credential surface
2026-07-16 23:56:59 -07:00
Peter Steinberger
a838c68dbe feat(talk): add Gemini Live video (#109719)
Stream bounded browser camera frames directly to Gemini Live and keep camera media off the Gateway. Add lifecycle, function-calling, fake-camera E2E, and live-smoke coverage.

Co-authored-by: shushushu <1064076525@qq.com>
2026-07-16 23:55:06 -07:00
Edward Abrams
8fa4867ab4 fix(memory): avoid rebuilding unchanged QMD session exports (#77158)
* perf(memory): cache qmd exports by corpus revision

Co-authored-by: Edward Abrams <zeroaltitude@gmail.com>

* test(memory): track qmd exporter temp dirs

* test(memory): use plugin SDK temp fixture

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 23:22:40 -07:00
mushuiyu886
f80c4b95ef fix(canvas): stop stalled Git blocking A2UI builds (#109476)
* fix(canvas): bound A2UI git input discovery

* build: avoid premature A2UI Git fallback

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 23:20:01 -07:00
Monkey-wusky
ea6ed38e20 fix(clawrouter): cancel non-OK usage response body before throwing (#109525)
* fix(clawrouter): cancel non-OK usage response body before throwing

When fetchClawRouterUsage receives a non-OK response, it throws
without cancelling the response body.  The finally block calls
release() which cleans up the dispatcher, but the unconsumed
body stays open.

Cancel the body before throwing, matching the pattern in
guard-adapters (#109196) and fetchOpenRouterModels.

* test: use explicit ClawRouter placeholder token

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 23:16:25 -07:00
Peter Steinberger
86e807241c perf(test): tighten Telegram polling waits (#109696) 2026-07-16 23:11:50 -07:00
Peter Steinberger
dabeae8c90 perf(test): tighten Teams lifecycle polling (#109686) 2026-07-16 22:52:25 -07:00
Arseniy Palagin
5e13f459a7 fix(telegram): preserve forward origins in debounce batches (#108985)
* fix(telegram): preserve forward origins in debounce batches

* fix(telegram): deliver batched forward origins to agent

* refactor(telegram): keep debounce forward cleanup local

Co-authored-by: Arseniy Palagin <263096044+aspalagin@users.noreply.github.com>

---------

Co-authored-by: Arseniy Palagin <263096044+aspalagin@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 22:47:44 -07:00
Peter Steinberger
630b16805c fix(providers): refresh zai/kimi/moonshot/xai catalogs against July 2026 vendor docs (#109666)
* fix(providers): refresh vendor catalogs and setup hints

* test(providers): align registration metadata expectations
2026-07-16 22:41:03 -07:00
Peter Steinberger
a1dfd47edd refactor(sdk): collapse plan updates to typed steps (#109660)
* refactor(sdk): collapse plan updates to typed steps

Per owner decision, remove the shipped steps: string[] SDK field and its unreleased planSteps replacement early. Collapse onPlanUpdate to one typed steps field. Retain wire-level string normalization for external Codex plugin version skew.

* chore(sdk): tighten rebased surface budget
2026-07-16 22:35:29 -07:00
Peter Steinberger
dfe9e55452 perf(test): remove Google Chat timeout proof sleep (#109671) 2026-07-16 22:31:24 -07:00
Alix-007
6bd15d00c4 fix(openai): prevent device-code login hangs on stalled requests (#109494)
* fix(openai): bound device code requests

* fix(openai): preserve proxy routing for device code auth

* test(openai): simplify device proxy assertions

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 22:26:56 -07:00
YangManBOBO
a7aa85293e fix(qqbot): stop misrouting mixed-case group/channel targets to the C2C API (#109008)
* fix(qqbot): accept mixed-case type tags in target parser

* refactor(qqbot): centralize target type parsing

Co-authored-by: 潘晓波0668000512 <pan.xiaobo@xydigit.com>

* style(qqbot): format target parser

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 22:25:03 -07:00
marchpure
6b4f372ff6 fix(codex): expose assistant completion idle timeout config (#97233)
* fix(codex): expose assistant completion idle timeout config

* chore: rerun codex idle timeout config checks

* docs(codex): document assistant completion idle timeout

* test(codex): cover assistant idle timeout default

* fix(codex): preserve runtime option compatibility

---------

Co-authored-by: marchpure <marchpure@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 22:22:38 -07:00
Yuval Dinodia
f6582dfb5e fix(file-transfer): denyPaths does not deny listing the denied directory itself (#109233)
* fix(file-transfer): deny listing the directory a denyPaths rule names

A denyPaths entry like "**/.ssh/**" did not deny dir.list on the denied
directory itself, so listing /home/me/.ssh returned its full contents,
including filenames such as id_rsa and authorized_keys. Only paths strictly
under the directory were denied.

The deny gate matched the requested path against the globs as a plain string,
and a trailing /** requires something after the separator, so the bare
directory never matched. Every command routes its path through
evaluateFilePolicy, but dir.list is where it is observable, since its payload
is the directory's own contents. dir.fetch was incidentally safe because it
rechecks each returned entry, and those entries do match; dir.list has no
such recheck.

Match the deny globs against the directory form of the path at that one gate.
The check stays deny-side only, so it can fail closed but never open.

* test(file-transfer): cover denied directory path forms

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 22:22:01 -07:00
Peter Steinberger
a5237fe925 feat(llama-cpp): gate Gemma default by RAM (#109585) 2026-07-16 22:17:57 -07:00
Peter Steinberger
5199bfafea fix(line): preserve webhook events through dispatch failures (#109655)
* test(line): remove obsolete replay-cache coverage

* fix(line): durably spool webhook events

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

* test(line): tighten webhook spool lifecycle proof

* fix(line): use canonical turn adoption lifecycle

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

* refactor(line): keep spool types private

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

---------

Co-authored-by: NianJiuZst <180004567+NianJiuZst@users.noreply.github.com>
2026-07-16 22:13:26 -07:00
Wynne668
f63ea72f28 fix(github-copilot): prevent failed usage checks from holding connections (#109540)
* fix(github-copilot): release failed usage responses

* test(github-copilot): preserve usage HTTP errors

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

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 22:09:53 -07:00
wahaha1223
0e96e85b19 fix(signal): release connections after failed CLI downloads (#109442)
* fix(signal): cancel failed CLI download responses

* fix(signal): close all failed installer responses

Co-authored-by: wahaha1223 <0668001153@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 22:01:53 -07:00
Peter Steinberger
e873a7f955 refactor(memory): move QMD coordination to SQLite (#109636)
* refactor(memory): move QMD coordination to SQLite

* chore: keep release notes in PR body

* chore: annotate lease SQLite primitive
2026-07-16 22:01:34 -07:00
Peter Steinberger
7be5d78fd0 feat(workspaces): add full-bleed single-widget tabs (#109627)
* feat(workspaces): add full-bleed app tabs

* fix(workspaces): harden full-bleed rendering

* fix(workspaces): eliminate full-bleed iframe gap

* fix(workspaces): keep tab layout type internal

---------

Co-authored-by: Eva <eva@100yen.org>
2026-07-16 21:56:57 -07:00
wahaha1223
0c25b52f7c fix(huggingface): release connections after failed model discovery (#109464)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 21:54:17 -07:00
Monkey-wusky
b98b8e7313 fix(googlechat): cancel non-OK cert fetch response body before throwing (#109519)
* fix(googlechat): cancel non-OK cert fetch response body before throwing

When fetchChatCerts receives a non-OK response from the Google Chat
cert endpoint, it throws without cancelling the response body.
Cancel the body before throwing, matching the pattern established
in reef guard adapters (#109196) and fetchOpenRouterModels.

* test(googlechat): cover cert response cancellation

Co-authored-by: 毛宇豪0668001457 <mao.yuhao@xydigit.com>

* test(googlechat): satisfy strict call-order types

Co-authored-by: 毛宇豪0668001457 <mao.yuhao@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 21:52:45 -07:00
Peter Steinberger
a77c0770ff refactor(speech-core): share TTS request pre-resolution across discord and voice-call (#109640) 2026-07-16 21:47:06 -07:00
Ayaan Zaidi
19b5e564d7 fix(channels): clear type-aware lint debt and re-measure the drain seam after the split 2026-07-17 10:12:54 +05:30
Ayaan Zaidi
84c8b23835 refactor(channels): drop ingress exports orphaned by the whatsapp split 2026-07-17 10:12:54 +05:30
Ayaan Zaidi
08db31f7fa test(telegram): relocate non-fence dispatch coverage
Lifecycle invariants move to core contract tests; relocated dispatch suites
keep draft finalization, status reactions, and pipeline-init cleanup coverage
without fence machinery, and polling/webhook suites assert core-drain
semantics (#108656).
2026-07-17 10:12:54 +05:30
Ayaan Zaidi
1126ffba7f test(telegram): prove drain-backed transport invariants
Transport proof for the migrated ingress path: offset-after-spool-ack,
webhook redelivery on write failure, update_id/lane mapping, and the
authorization-gated supersede suite including paired-DM, owner, topic-override
and other-bot-command cases (#108656).
2026-07-17 10:12:54 +05:30
Ayaan Zaidi
f7786a16cf refactor(telegram): drive ingress through the core drain
Both transports now enqueue durably and pump the shared drain: polling keeps
offset-after-committed-enqueue, webhook keeps 200-after-spool-write. Deletes
the reply fence, private claim-owner, retry policy, and per-transport
claim/replay/watchdog loops. Dispatch outcomes propagate: failed-retryable
releases for replay instead of tombstoning. Supersede policy stays
Telegram-owned, authorization-gated with pairing-store and owner identities
via the same resolver as normal ingress; room_event ambient pending remains
supersedable by a later user turn (#108656).
2026-07-17 10:12:54 +05:30
Ayaan Zaidi
16c14e5bbf feat(channels): expose the turn-adoption lifecycle seam
Replace the bare onTurnAdopted callback and queuedFollowupLifecycle with one
turnAdoptionLifecycle surface (onSettled guaranteed via finally; adoption-loss
aborts queued steering turns without transcript replay), threaded through the
turn kernel and agent runner, exposed to plugins via
runtime.state.openChannelIngressDrain and the channel-outbound SDK barrel,
with surface budgets re-measured against the narrowed baselines (#108656).
2026-07-17 10:12:54 +05:30
badgerbees
fedcffc4ae fix(memory-lancedb): stop forwarding embedding dimensions upstream (#69707)
* fix(memory-lancedb): truncate embeddings locally

* fix(memory-lancedb): tighten dimensions validation in config schema and manifest

* fix(memory-lancedb): require integer embedding dimensions

* fix(memory-lancedb): retry embeddings without dimensions on rejection

* fix(memory-lancedb): narrow dimensions fallback

* fix(memory-lancedb): recognize tuple-style provider rejection for dimensions

* refactor(memory-lancedb): tighten dimensions fallback

* style(memory-lancedb): format dimensions fallback

* fix(memory-lancedb): preserve embedding timeout budget

* test(memory-lancedb): type vector search mock

* fix(memory-lancedb): reject invalid dimension values

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 21:35:44 -07:00