Commit Graph

77513 Commits

Author SHA1 Message Date
Peter Steinberger efb02a0671 fix(cron): prevent jobs disappearing during paginated refreshes (#121084)
* fix(cron): keep paged consumers on one snapshot

* test(cron): type malformed UI fixture

* test(cron): update canonical list fixtures
2026-08-09 09:05:30 -07:00
Peter Steinberger b4104e29b5 fix(sessions): stop active runs before archiving (#120892)
* fix(sessions): stop active runs before archiving

Archive now fences the exact session, stops and drains active work before commit, preserves main/global-main/unknown protections and Delete behavior, and keeps patchMany per-target ordering.

* test(gateway): provide archive lifecycle context

* test(ui): expect active sessions to remain archivable

* refactor(gateway): keep archive drains internal

* fix(gateway): keep abort lifecycle contract acyclic

* fix(sessions): fence sharing across archive drains

* test(gateway): type archive lifecycle responses

* fix(sessions): reclaim cloud workers before archive

* fix(sessions): align archive request integration

* test(gateway): omit default deferred type

* docs(sessions): clarify cloud archive retries
2026-08-09 09:03:20 -07:00
Peter Steinberger 8ed072ee16 fix: bound GPT-Live buffers and preserve workspace lock ownership (#120911)
* perf(openai): bound realtime audio buffering without repeated copies

* fix(openai): publish media timer before first tick

* fix(gateway): preserve workspace receiver lock ownership

* perf(openai): transfer pending audio ownership

* test(gateway): remove duplicate receiver wait
2026-08-09 09:01:54 -07:00
Peter Steinberger 4b85d834ed fix(ci): sparse-checkout the renamed local-heavy-check-runtime.mts on the frozen shard lane (#121097) 2026-08-09 08:59:30 -07:00
Peter Steinberger 3b37d15ed4 fix(maintainers): prevent false PR closeout failures (#121101) 2026-08-09 08:58:54 -07:00
Peter Steinberger 92bacda206 refactor(telegram): reuse outbound topic preparation (#121095)
Follows #120916 by removing duplicate outbound preparation and transport harness code while preserving channel Direct Messages, forum, and bot-private routing.
2026-08-09 08:57:37 -07:00
Peter Steinberger eec454489a test(sandbox): preserve exclusive-create collision outcomes (#117026) 2026-08-09 08:53:36 -07:00
Peter Steinberger 75a454469d fix(browser): coalesce volatile tab cleanup (#114507) 2026-08-09 08:50:33 -07:00
Peter Steinberger 081a565cba perf(doctor): restore telegram doctor repairs dropped on source-run hosts (#120954)
* perf(doctor): keep telegram doctor enumeration off the runtime graph

Telegram's built doctor artifact reached execa through dist chunking, so a
source-run host (pnpm dev, tsx CLI, vitest) could not require it and silently
dropped all 9 telegram legacy config rules plus its state migration. The
artifact also pulled telegram's runtime stores, making it a 674-chunk outlier
that dominated doctor enumeration.

Root cause: `src/token.ts` took the broad `plugin-sdk/provider-auth` barrel for
`resolveDefaultSecretProviderAlias`, dragging the auth-profile store, provider
runtime, and plugin install graph (execa, kysely, commander) into the closure.
The alias now has a narrow `plugin-sdk/secret-provider-alias` leaf, and
provider-auth re-exports it so its runtime surface is unchanged.

Thread-binding, sent-message, and sticker-cache row shapes, keys, and legacy
sidecar readers move to `*.legacy-state.ts` leaves. The doctor closure keeps
the rows and drops the ACP, session-binding, send, logger, and plugin-runtime
graphs the stores also load.

The postbuild control-plane verifier only required each artifact in a plain
Node child, the one host where these graphs resolve fine, so it proved nothing
about the invariant that broke. It now also walks each built doctor artifact's
static import closure and fails when it reaches the process-spawn graph, which
is the dist-level analogue of the source closure guard.

Guard rules added for provider-auth, acp-runtime, and conversation-runtime; the
telegram boundary test became a real closure assertion instead of a string grep.

* fix(doctor): drop dead export surface from the telegram legacy-state split

Knip and oxlint caught leftovers from the split: the leaves exported helpers
only they use, the store modules re-exported constants nobody imports from them
anymore, and thread-bindings kept a `testing` barrel whose last production
caller was the migration path that now reads the leaf directly. Tests import the
constants from the leaf that owns them, and the reset helper directly.

The closure gate's failure message still interpolated a `host` field left over
from a probe-host approach that was reverted before commit; the existing verifier
test caught it. The gate now has its own coverage: a transitive chunk edge to a
forbidden dependency is reported, while dynamic imports and non-doctor contract
surfaces are not.

* fix(doctor): adopt the upstream telegram thread-binding store split

`main` landed an equivalent thread-binding leaf as `thread-bindings-store.ts`
while this branch was open, so the branch-local `thread-bindings.legacy-state.ts`
is dropped rather than kept as a second path for the same rows.

`state-migrations.ts` now reaches token.js through the lazy import `main` added,
so `token.ts` is no longer in the doctor closure at all. The narrow
`secret-provider-alias` leaf still matters: telegram's contract-api closure
reaches `provider-auth` through `token.ts` on current `main`, which is the same
execa/kysely/commander graph, so the barrel is repaired at its source instead of
being deferred a second time.

* fix(scripts): type the built doctor closure gate for the TypeScript migration

The gate was authored against the `.mjs` script and landed in the `.mts` file
`main` migrated to, so its parameters were implicitly `any` and `check:test-types`
failed. Adds the explicit signatures plus the violation type.

Regenerates the plugin-sdk API baseline: `provider-auth` re-exports the default
secret-provider alias from the new leaf, so its module hash moves while its
runtime export surface stays identical.
2026-08-09 08:50:03 -07:00
Peter Steinberger 0303af17f3 test: remove low-value implementation assertions (#121085)
* test: remove low-value implementation assertions

* test: refresh native i18n inventory
2026-08-09 08:48:48 -07:00
Peter Steinberger e750dab6d1 test(channels): consolidate regression fixtures (#114409) 2026-08-09 08:47:20 -07:00
Vincent Koc 7ea5f8fec6 fix(qa): enforce fresh Matrix state restarts (#121060)
Capture the fallback freshness boundary only after the pre-restart status read completes, immediately before the destructive restart begins.

Co-authored-by: Dallin Romney <6581799+RomneyDa@users.noreply.github.com>

Punchcard-Session: amber-workshop-workshop-36
2026-08-09 23:39:31 +08:00
WhatsSkiLL d506f604d6 feat(android): add conversation reply notifications (#120389)
* feat(android): add conversation reply notifications

* fix(android): refresh native i18n inventory

* fix(android): harden conversation notification replies

* fix:android-conversation-notification-intent-hardening

* chore:i18n-refresh-native-source-inventory

* fix(android): notify completed background sessions

* fix/android-notification-reply-gateway-readiness

---------

Co-authored-by: IWhatsskill <284122573+IWhatsskill@users.noreply.github.com>
2026-08-09 11:37:16 -04:00
Peter Steinberger d60a5f7dd4 refactor(plugins): consolidate delivery fixtures (#114464) 2026-08-09 08:30:53 -07:00
Peter Steinberger 843c145b7d fix(codex): preserve provider usage breakdown (#117013) 2026-08-09 08:30:07 -07:00
Peter Steinberger a3e79236aa fix(state): preserve rollback across additive columns (#121075)
* fix(state): tolerate compatible additive columns

Preserve same-version rollback compatibility for bare nullable SQLite columns while continuing to reject constrained schema drift. Treat the historical shared_host CHECK definition as a named compatibility boundary.\n\nRefs #121061

* fix(state): keep additive registry internal

* test(state): keep constrained preflight fixture
2026-08-09 08:29:19 -07:00
Vincent Koc 46e6f93a86 fix(qa): reset Matrix scenario config state (#120017)
* fix(qa): reset Matrix scenario config state

Punchcard-Session: amber-workshop-workshop-36

* fix(qa): preserve Matrix tombstone array intent

Punchcard-Session: amber-workshop-workshop-36

* fix(qa): restore Matrix audio scope default

Punchcard-Session: amber-workshop-workshop-36

* fix(qa): type Matrix account reset state

Punchcard-Session: amber-workshop-workshop-36
2026-08-09 23:24:03 +08:00
Peter Steinberger 8abefef5d5 fix(cron): prune scratch after durable job removal (#121024) 2026-08-09 08:23:48 -07:00
Vincent Koc 41423753e0 fix(release): normalize appended PR suffixes (#120971) 2026-08-09 23:21:32 +08:00
Peter Steinberger 9a96375e60 feat(gateway): session-catalog terminal start plans behind cliAgents gate (#121020)
* feat(gateway): add session-catalog terminal start plans

* refactor(gateway): split catalog terminal start handler

* fix(gateway): enforce catalog terminal start eligibility

* test(gateway): split session catalog snapshot coverage
2026-08-09 08:13:39 -07:00
Peter Steinberger 0fe49c5731 fix(plugins): prevent uninstalled npm plugins from coming back (#113902)
* fix(plugins): preserve retained uninstall files

* test(plugins): track retention temp dirs

* fix(plugins): retain rollback marker snapshots
2026-08-09 08:12:05 -07:00
Peter Steinberger 75e2595123 fix(slack): preserve system event occurrences and retries (#116384) 2026-08-09 08:12:02 -07:00
Peter Steinberger 9f30191ead refactor(plugins): consolidate message policy fixtures (#114428) 2026-08-09 08:09:33 -07:00
Peter Steinberger 01ca754869 fix: close task terminals after completion (#121070)
* fix(gateway): bind terminals to task owners

* fix(tasks): use task access seam for terminal ownership

* refactor(gateway): keep terminal task binding private

* refactor(gateway): preserve terminal manager contract
2026-08-09 08:02:04 -07:00
Peter Steinberger f806abf43b fix(cli): preserve Windows user argv after script entry (#121064) 2026-08-09 07:56:15 -07:00
Peter Steinberger 623866a30e fix(release): preserve SHA evidence identity (#121080) 2026-08-09 07:51:57 -07:00
Peter Steinberger ef0c9834be fix(matrix): report block typing refresh failures (#117059) 2026-08-09 07:49:22 -07:00
Pavan Kumar Gondhi e688ed6b88 fix(qqbot): confine staged voice filenames (#120188) 2026-08-09 20:18:31 +05:30
Peter Steinberger fc9905edb2 refactor(providers): consolidate streaming fixtures (#114475) 2026-08-09 07:37:52 -07:00
Masato Hoshino 3ee6c6a3e1 fix(zalo): treat a non-positive mediaMaxMb as unset, not a 0-byte cap (#120988)
`channels.zalo.mediaMaxMb: 0` (or a negative value) passes config validation
and then makes every inbound image download and every hosted outbound media
send fail, with no error naming the setting.

The monitor resolved the cap with `??`, which only replaces `null`/`undefined`,
so `0` and negatives survived into `mediaMaxMb * 1024 * 1024` and reached the
media core as a byte budget no payload can satisfy. Nothing upstream normalizes
the value: the channel schema declares `mediaMaxMb` with no range, and
`mergeAccountConfig` is a plain spread that keeps `0`.

Everywhere else a non-positive `mediaMaxMb` means unset, never reject-all: the
canonical schema is `z.number().positive()`, most bundled channels publish
`exclusiveMinimum: 0`, and the core resolvers fall back to their default. Guard
the resolver so a non-positive value falls back to `DEFAULT_MEDIA_MAX_MB`, which
is what unset already means for Zalo.

Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com>
2026-08-09 09:36:23 -05:00
Peter Steinberger e9250be4bb test(sessions): close SQLite fixtures before cleanup (#113074) 2026-08-09 07:29:03 -07:00
maweibin 6680b0faac fix(plugin-sdk): throw typed MissingPublicSurfaceError instead of generic Error (#102852)
* fix(plugin-sdk): throw typed MissingPublicSurfaceError instead of generic Error

Add MissingPublicSurfaceError for resolution failures in facade-loader
and public-surface-loader. Keep open failures as generic Error since
they represent I/O/permission issues, not missing artifacts.

- facade-loader: MissingPublicSurfaceError for resolution failures only
- public-surface-loader: import and use MissingPublicSurfaceError
- Replace string-matching catcher with instanceof check
- Tests: prove open failures are not MissingPublicSurfaceError
- Tests: prove catcher skips MissingPublicSurfaceError correctly

* test(plugin-sdk): harden missing surface coverage

* fix(plugins): preserve resolved candidate errors

* fix(plugins): satisfy resolved loader lint

* test(plugin-sdk): cover typed loader fallbacks

---------

Co-authored-by: Altay <altay@hey.com>
2026-08-09 17:24:39 +03:00
Peter Steinberger c70aee247e refactor(scripts): migrate JavaScript tools to TypeScript (#121005)
* refactor(scripts): migrate JavaScript tools to TypeScript

* fix(ci): keep changed-scope preflight zero-install

* fix(ci): preserve zero-install script owners

* fix(ci): complete script migration follow-through

* fix(release): keep stable closeout zero-install

* fix(scripts): preserve standalone execution boundaries

* fix(scripts): repair standalone loader boundaries

* fix(scripts): normalize gateway observation ids

* fix(scripts): keep Docker packager standalone

* test(scripts): preserve rebase cleanup helpers

* test(sessions): use tracked temp directory
2026-08-09 07:21:35 -07:00
Peter Steinberger 2433fa213c fix(cron): preserve canonical failure alert routes (#116933) 2026-08-09 07:17:56 -07:00
Peter Steinberger 00194139ba refactor(providers): consolidate contract fixtures (#114424) 2026-08-09 07:07:47 -07:00
Peter Steinberger 2e6c2bba19 fix(feishu): restore forwarded interactive card content (#115136) 2026-08-09 07:07:03 -07:00
Ayaan Zaidi 409fb7abca fix(telegram): enforce direct-message tool policies
Enforce configured Telegram direct-message tool policies across queued runs and native harnesses. Unsupported restricted harnesses now refuse visibly; turns without explicit policy keep existing tool access.

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-08-09 19:32:30 +05:30
Peter Steinberger 52a76313e8 refactor(gateway): consolidate interactive connection resolution (#120865)
* refactor(gateway): consolidate interactive connection resolution

* test(gateway): remove superseded auth surface coverage

* chore(plugin-sdk): refresh API baseline

* fix(tui): preserve in-process exit fallback
2026-08-09 06:57:22 -07:00
Ayaan Zaidi 6a586cd0ea fix(telegram): keep tool progress transient without drafts
Keep quiet Telegram tool progress on the transient draft lane when it exists. Preserve durable delivery for media, execution approvals, and ask-user prompts across direct and queued turns.

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-08-09 19:18:02 +05:30
Peter Steinberger 4fec524243 fix: new session finds models after fresh gateway start (#121057)
* fix(gateway): align chat metadata with prepared auth

* fix(gateway): complete prepared auth mode contract

* fix(agents): canonicalize prepared auth aliases

* test(sessions): finish temp-dir helper migration
2026-08-09 06:40:25 -07:00
Peter Steinberger 0dbce297fd test(ios): isolate TLS pin clearing (#113067) 2026-08-09 06:34:10 -07:00
Peter Steinberger 0b4c8a9fc9 fix(state): preserve additive column order (#121062)
Keep fresh shared-state table definitions aligned with SQLite ADD COLUMN ordering so current-version upgraded databases pass canonical schema validation.\n\nRefs #121061
2026-08-09 06:26:54 -07:00
Peter Steinberger cb50289e28 fix(agents): keep removed background processes alive until exit (#113860)
* fix(agents): keep removed processes live until exit

* test(agents): isolate process registry lifecycle coverage

* chore(plugin-sdk): refresh API closure baseline
2026-08-09 06:04:40 -07:00
Peter Steinberger 8616c0c374 refactor: finish shared test helper migrations (#120996)
* test: finish shared helper migrations

* test: fix helper migration CI

* style: fix test import ordering

* test(acpx): restore deferred void types

* test: fix helper migrations after rebase
2026-08-09 06:00:06 -07:00
Peter Steinberger 4ade409cf2 fix(cli): report stale binding clears accurately (#114926)
Co-authored-by: Alix-007 <li.long15@xydigit.com>
2026-08-09 05:55:21 -07:00
Peter Steinberger dfbc95e4ea fix: replies fail after transcript projection repair (#121025)
* fix(reply): rebind prepared session ownership

* test(mcp): correlate queued wait events

* fix(sessions): await transcript admission projection

* fix(recovery): distinguish admission failure stages

* refactor(sessions): split runtime transcript projection

* fix(ci): preserve transcript API baseline

* fix(sessions): await target projection only
2026-08-09 05:54:39 -07:00
Peter Steinberger 6794fc0fc8 refactor(plugins): consolidate messaging fixtures (#114423) 2026-08-09 05:48:15 -07:00
Peter Steinberger d5809b4080 test(infra): clean exec approval temp roots (#113342) 2026-08-09 05:43:55 -07:00
Peter Steinberger c48339527a fix(imessage): deliver service-qualified media to existing chats [AI-assisted] (#115006)
* fix(imessage): resolve service-qualified media chats

* test(imessage): keep custody coverage on auto handles
2026-08-09 05:42:18 -07:00
Peter Steinberger 8dad2bf0ce fix(gateway): stop completed task terminals from blocking restarts (#121055)
* fix(gateway): close task-owned terminals on completion

* test(gateway): isolate terminal task lifecycle coverage

* chore(plugin-sdk): refresh API baseline
2026-08-09 05:39:02 -07:00