Commit Graph

6738 Commits

Author SHA1 Message Date
Dallin Romney
08ba5f90c8 fix(ci): detect frozen Codex binding stores (#109377) 2026-07-16 15:46:32 -07:00
Peter Steinberger
1f5299da7e fix(types): remove duplicate docs sync declaration (#109383) 2026-07-16 15:33:40 -07:00
Dallin Romney
31b3020372 fix(types): declare docs sync pruning helper (#109372) 2026-07-16 15:07:43 -07:00
Peter Steinberger
484ea309d1 fix(docs-sync): declare locale pruning export (#109358) 2026-07-16 15:00:30 -07:00
Peter Steinberger
bd9a996b78 refactor(slack): drive progress drafts through the shared compositor (#109336)
* test(slack): drop rotating loading-message fixture expectations

* refactor(slack): drive progress drafts through the shared compositor

Slack's status_final progress path now uses the shared channel compositor
(preamble headline, reasoning, tools, plan checklist, commentary
arbitration) instead of its hand-rolled gate/merge/render pipeline, and
native task cards consume compositor snapshots with stable row identity
(line ids first, fixed reasoning id, occurrence-suffixed content hashes).
Finals in progress mode post as fresh messages that follow the draft's
thread; the working draft then collapses into a compact activity receipt,
while failed or error finals leave the draft as the turn record. The
rotating native loading messages are gone in favor of the plain typing
status. Queued and assistant-boundary turns re-arm with clean delivery
state, and native completion status survives transient append failures.
2026-07-16 14:50:36 -07:00
Shakker
e6f4e27c6e test: harden generated asset coverage (#109366) 2026-07-16 22:48:03 +01:00
Shakker
8bf82d9e07 test: cover clean Discord asset generation 2026-07-16 22:48:03 +01:00
Shakker
107820b2bd fix: prevent generated asset watch loops 2026-07-16 22:48:03 +01:00
Peter Steinberger
d6e9cbd775 fix(docs-sync): preserve translated mirrored pages 2026-07-16 17:28:38 -04:00
Peter Steinberger
7bf5c772be improve: reuse Vitest transform cache across CI runs (#109330)
* ci: persist Vitest transform cache

* fix(ci): declare Vitest cache helpers

* fix(ci): serialize Vitest cache snapshots
2026-07-16 14:15:17 -07:00
Peter Steinberger
7d71d7cf6b fix(sessions): large histories no longer load entire transcripts (#108851)
* perf(sessions): bound SQLite history reads

* fix(sessions): keep history pagination gap-free

* test(sessions): use shared temp cleanup

* fix(sessions): reconcile mixed transcript projections

* fix(sessions): preserve strict schema migration

* refactor(sessions): trim internal export surface

* refactor(sessions): keep reader helpers private

* fix(sessions): reconcile transcript projections off requests

* test(sessions): await transcript projection repair

* fix(sessions): normalize projection worker failures

* fix(sessions): satisfy projection release gates
2026-07-16 14:11:33 -07:00
Peter Steinberger
0631252f4b refactor: reduce plugin SDK test import overhead (#109333)
* refactor(test): split plugin SDK test helpers

* fix(test): align plugin SDK test subpaths
2026-07-16 13:55:23 -07:00
Dallin Romney
8924e27bb6 refactor(qa): keep synthetic UX evidence out of scenario catalog (#109315)
* refactor(qa): keep UX evidence producer out of catalog

* test(qa): preserve UX producer runner integration
2026-07-16 13:51:18 -07:00
Peter Steinberger
093b8859c4 perf(test): fix env-dependent failures, stop verifier lazy-fetch, balance CI stripes (#109332)
* test: fix environment-dependent failures on built and partial-clone checkouts

Canvas A2UI fixtures now pin the resolved root through a new canvas
test-api hook: dev checkouts with a locally built a2ui.bundle.js won
candidate resolution and shadowed the fixture root. Speech-core prefs
tests resolve the canonical tmpdir (macOS /tmp symlink breaks fs-safe
store roots), and the bundled plugin install test asks discovery for
the canonical bundled path instead of hardcoding the source tree.

* fix(release): keep evidence verifier blob reads local-deterministic

git show against a forged or missing SHA lazily fetched from the
promisor remote on partial clones, hanging a security check on network
state (266s observed). GIT_NO_LAZY_FETCH pins verification to local
objects; missing blobs fail closed as before.

* perf(test): pay the command-handler barrel once and merge subagent command tests

commands-name and commands-login imported the full handler barrel
(~1,700 modules) for registration assertions; those now live in a
dedicated registration test, dropping the two files from 12.6s/4.6s to
1.4s/1.0s locally. Five subagent command test files merged into one so
the auto-reply module graph evaluates once instead of five times.

* perf(ci): stripe node test bins by measured file cost

Round-robin striping packed the whale files together, leaving
auto-reply-commands-1 at ~220s while sibling stripes idled at ~30s.
Greedy LPT over advisory per-file seconds hints balances the commands,
cli-runner, and tooling stripes deterministically; group hints for the
restriped bins are equalized at the old totals.
2026-07-16 13:38:56 -07:00
Dallin Romney
b5eb8977dc test(qa): prove Codex cold install product path (#109267) 2026-07-16 13:10:41 -07:00
Peter Steinberger
ce919593bf fix(ui): unblock rebases with generated i18n conflicts (#109279)
* fix(ui): automate i18n conflict resolution

* fix(ui): preserve i18n cache merge intent

* fix(ui): restrict resolver to generated locales

* fix(ui): prune stale locales before baseline

* fix(ui): handle removed locale conflicts
2026-07-16 12:52:28 -07:00
Peter Steinberger
6c39e713d4 refactor: move native hook relay registry to SQLite (#109289)
* refactor: store native hook relays in SQLite

* chore: satisfy relay store CI checks
2026-07-16 12:14:06 -07:00
Dallin Romney
c4b2183db6 fix(release): repair frozen validation compatibility (#109272) 2026-07-16 11:45:31 -07:00
Peter Steinberger
04c31f453c fix: reject oversized credential files in remaining readers (#109260)
* fix(security): bound remaining credential file reads

* fix(anthropic-vertex): keep ADC helper type private
2026-07-16 11:33:18 -07:00
Dallin Romney
954c77d4ef test(ci): temporarily omit Z.AI API Platform validation (#109246)
* test(ci): temporarily omit Z.AI API Platform validation

* test(ci): align disabled provider count
2026-07-16 11:16:29 -07:00
Peter Steinberger
7133305bac fix(config): reject ignored audio transcription settings (#109226)
* fix(config): reject retired audio transcription config

* fix(config): align dead audio cleanup contracts

* fix(doctor): detect retired audio config
2026-07-16 11:00:28 -07:00
Peter Steinberger
21b08f34b7 perf(ci): run the deadcode Knip scans concurrently (#109151)
* perf(ci): run the deadcode Knip scans concurrently

check-dependencies spent ~194s running seven Knip child processes
strictly serially (three package scripts, each iterating its scans).
The scans are independent processes over separate configs: both
deadcode scripts now Promise.all their scans, the CI task launches the
three package scripts concurrently with buffered logs, and the lane
moves to the 16 vCPU class for core/memory headroom. The
missing-exports-script contract violation now fails fast before
launching scans. Local: unused-files 218% CPU, 37s wall.

* test(ci): align prerelease plan with the 16 vCPU dependencies lane
2026-07-16 10:46:44 -07:00
Peter Steinberger
2cd3ee43ee refactor: store workspace setup state in SQLite (#109147)
* refactor(state): move workspace setup state to SQLite

* test(state): track workspace cleanup temp dirs

* fix(state): satisfy workspace migration gates

* docs(state): fix migration list indentation

* fix(state): verify sibling migration claims

* fix(state): remove obsolete claim probe
2026-07-16 10:28:36 -07:00
Peter Steinberger
af42fbb6f3 perf(ci): unblock parallel oxlint shards and gate the lint-lane i18n verify (#109144)
* perf(ci): unblock parallel oxlint shards and gate the lint-lane i18n verify

check-lint is the slowest static lane (median 252s): the control-UI
i18n verify runs 86s unconditionally and the three oxlint shards run
serially (89s) because the parallel gate demands 48GB of memory — a
local-Mac threshold that Blacksmith's 32GB 16 vCPU class can never
meet. CI now parallelizes shards at 8+ cores / 24GB+, and the lint case
reuses the existing run_control_ui_i18n manifest gate so diffs that
cannot affect generated catalogs skip the verify while oxlint always
runs.

* chore(ci): print oxlint shard concurrency decision

The lint-lane validation run still executed shards serially on a 16
vCPU runner; one log line exposes the resolved concurrency and the
host resources the decision saw.
2026-07-16 09:45:47 -07:00
Peter Steinberger
05dd921016 fix: shard OpenAI transport stream tests (#109181)
* test(agents): shard OpenAI transport stream suites

* chore(lint): transfer transport test baselines
2026-07-16 09:43:07 -07:00
Peter Steinberger
e363add72f fix(prompt-probe): close stalled response bodies (#109188) 2026-07-16 09:39:48 -07:00
Peter Steinberger
b3301e3212 feat(clients): show live plan checklists in web, iOS, and Android chat (#108675)
The gateway already broadcasts stream:"plan" agent events with typed
{step, status} snapshots; all three clients dropped them. Control UI now
renders an expandable checklist bar above the composer (run-scoped,
cleared on run lifecycle); the shared iOS/macOS chat UI mounts a
Liquid Glass pill (iOS 26 glassEffect, material fallback) between the
message list and composer; Android adds an expandable pill above the
composer bridged through ChatController/NodeRuntime/MainViewModel.
All parsers accept typed and legacy string steps, enforce the
single-in_progress invariant, and scope snapshots and clears to the
owning run. Locale artifacts, Android resources, and the iOS string
catalog carry generated translations for the pill strings.
2026-07-16 09:33:52 -07:00
zengLingbiao
5f4f249d88 fix(prompt-probe): bound Anthropic upstream proxy fetch requests (#108832)
* fix(prompt-probe): bound Anthropic upstream proxy fetch requests

* test(prompt-probe): exercise stalled upstream deadline

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 09:04:39 -07:00
Peter Steinberger
46c3dba537 chore: gate releases on Codex progress follow-through (#108828)
* test(release): gate Codex progress follow-through

* test(release): register Codex follow-through entry

* test(release): harden Codex follow-through proof

* test(release): preserve legacy Codex follow-through proof
2026-07-16 09:01:00 -07:00
Peter Steinberger
243beca126 ci(release): extend gateway restart harness timeout 2026-07-16 16:59:34 +01:00
Peter Steinberger
8fe4eeea9e fix(exec): stop isolated state dirs from moving live approvals (#108742)
* fix(exec): isolate approval state directories

* chore: drop release-owned changelog entry

* chore: refresh native i18n inventory

* fix(ci): pin XcodeGen for Periphery scans
2026-07-16 08:57:32 -07:00
Peter Steinberger
c46cc1e2d4 refactor(channels): unify inbound replay protection (#109117)
* refactor(channels): unify inbound replay-guard orchestration on shared factory

* fix(plugin-sdk): bind replay-guard settlement to claim handles

* fix(plugin-sdk): claim-handle settlement (rest)

* fix(discord): align skipped queue cleanup

* style(feishu): simplify bot menu claim settlement

* refactor(plugin-sdk): extract replay dedupe contracts
2026-07-16 08:46:34 -07:00
Peter Steinberger
89a16c93b5 fix(ci): give vitest no-output retries the full watchdog window
Shards that pin a short no-output timeout (agents-core stripes) die fast
on the known warm-cache stall, but a cold Vitest module cache makes the
same imports legitimately silent for minutes - the in-job retry then
re-dies at the short limit without running a single test (observed 4x
on agents-core-runner-cli-2 today). Raise the retry attempt's window to
the 300s watchdog floor while keeping the fast first kill.
2026-07-16 16:42:01 +01:00
zengLingbiao
b273fd41c4 fix(e2e): bound ClickClack fixture plugin fetch requests (#108826)
* fix(e2e): bound ClickClack fixture plugin fetch requests

* test(e2e): exercise ClickClack response deadline

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 08:35:51 -07:00
Peter Steinberger
3690f02c71 fix(build): tolerate plugin SDK dts variance (#109119) 2026-07-16 08:35:10 -07:00
Alix-007
0159f54268 fix(e2e): bound Pond gateway connections (#108973)
* fix(e2e): bound Pond gateway connections

* fix(e2e): declare Pond gateway RPC types

* fix(e2e): close Pond socket when setup fails

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 08:18:44 -07:00
Peter Steinberger
f3a2f9f8a7 perf(ci): gate prompt-snapshot regeneration on the generator's blast radius (#109083)
check-prompt-snapshots costs 200-310s per PR regenerating real prompt
stacks, but snapshots only change when the generator's import graph or
its fixtures do. The manifest now computes that reach (same pattern as
QA smoke gating: always-run surface regex incl. the codex extension
whose test API loads via a dynamic module id, plus import-graph walk
from the snapshot helper; deletions and null diffs fail safe to
running). Unaffected PR diffs skip the lane with an explicit log line;
pushes and dispatches always run.
2026-07-16 08:06:06 -07:00
ooiuuii
f12b4af021 fix(install): normalize Windows temp short paths (#108050)
* Normalize Windows installer temp paths

* fix(install): canonicalize Windows temp root

Co-authored-by: luyifan <al3060388206@gmail.com>

* fix(install): resolve Windows temp aliases with Get-Item

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 08:02:31 -07:00
Peter Steinberger
2bd1a63075 feat: add Baseten Model API provider (#108708)
* feat: add Baseten model provider

* test: satisfy Baseten provider lint

* fix: align Baseten thinking controls

* docs: refresh Baseten documentation metadata

* fix: preserve Baseten DeepSeek replay metadata

* docs: remove release-owned Baseten changelog entry
2026-07-16 07:41:33 -07:00
Peter Steinberger
44314c9451 refactor(channels): table-drive setup and control-plane helpers (#109028)
* refactor(channels): table-drive setup credentials, config schemas, doctor detectors, status issues

* refactor(channels): control-plane tables (rest)

* fix(plugin-sdk): refresh surface budgets after rebase

* style(plugin-sdk): format credential helpers

* fix(channels): preserve generic schema refinement types

* fix(channels): preserve schema input and output inference

* fix(clickclack): forward credential patch fields

* test(plugin-sdk): use redacted credential fixtures

* fix(plugin-sdk): refresh API baseline after inference fix

* fix(channels): keep multi-account envelope optional

* fix(channels): preserve policy validation invariants

* fix(extensions): remove stale awaits from file checks

* style(qqbot): format synchronous file check

* fix(config): refresh bundled channel metadata

* fix(qqbot): reject unsupported pairing policy
2026-07-16 07:17:01 -07:00
Peter Steinberger
1b2598276a Revert "fix(ci): bound agents-core no-output stalls to one minute"
This reverts commit 022a567406.
2026-07-16 06:36:11 -07:00
Peter Steinberger
022a567406 fix(ci): bound agents-core no-output stalls to one minute
The agents-core graph can stall emitting nothing after warming Vitest's
module cache; a cli-runner stripe sat silent for the full 300s watchdog
window before its retry passed in seconds (run 29499091157, +5min on a
green PR). Give the family the same 60s no-output timeout the gateway
startup-health group already uses for this stall class.
2026-07-16 06:04:23 -07:00
Sedrak Hovhannisyan
cc34a46c14 fix: prevent source builds from exhausting host memory (#108790)
* fix: reduce peak memory in source builds

* fix(build): preserve CLI no-dts fast path

* fix(build): preserve forwarded tsdown selectors

---------

Co-authored-by: openclaud11-sys <openclaud1.1@gmail.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 05:58:53 -07:00
Peter Steinberger
cf029ea29e feat(agents): screen tool drives Control UI layout 2026-07-16 05:43:02 -07:00
Peter Steinberger
771233cf94 perf(ci): trim compact packing cap to 220s for loaded-fleet headroom
Fleet-contended runners inflate measured group runtimes ~20-25% over
the serial-run hints (bins hit 300-358s on a loaded 12:1xZ run against
a 260s packed estimate). A 220s cap keeps the slowest bin near the
5-minute PR wall-clock budget under load at the cost of two extra
jobs (24 -> 26).
2026-07-16 05:29:45 -07:00
Peter Steinberger
2258d1156b refactor(protocol): unify Swift generated property naming (#108990)
* refactor(protocol): unify Swift property naming

* refactor(protocol): retain stored-name terminology
2026-07-16 05:29:01 -07:00
Alix-007
66a4205c57 fix(e2e): bound official installer download (#108937)
* fix(e2e): bound official installer download

* test(e2e): cover downloaded installer execution

* fix(e2e): harden installer download proof

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

* test(e2e): type installer fixture environment

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 05:26:00 -07:00
lybnnnn
02f494b51e fix: clarify SQLite version error message to prevent user confusion (#108382)
* fix: clarify SQLite version error message to prevent user confusion

The error message "3.44.6+" was misinterpreted by users as meaning "3.44.6 and above",
when it actually means "3.44.6+ for the 3.44.x series only". This commit clarifies the
error message to explicitly state that only specific patched versions (3.44.6+, 3.50.7+,
and 3.51.3+) are safe, and that SQLite 3.46.1 is not among them.

Changes:
- Update error message in src/infra/node-sqlite.ts to clarify version requirements
- Update test expectations in src/infra/node-sqlite.test.ts to match new error format
- Fix unnecessary template literal expressions flagged by oxlint

The code logic remains unchanged - SQLite 3.46.1 is correctly rejected as unsafe.

* fix: clarify SQLite version error message to prevent user confusion

The previous error message stated '3.44.6+' which users misinterpreted as
'3.44.6 and above', leading to confusion when versions like 3.46.1 were rejected.

The new message explicitly states '3.44.6+ in the 3.44.x series' and
'3.50.7+ in the 3.50.x series' to make it clear that only specific
minor version series received the WAL-reset bug fix.

This matches the SQLite team's actual fix announcement which only
backported the fix to 3.44.x and 3.50.x series, plus 3.51.3+.

* fix(sqlite): align unsafe version diagnostics

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 05:24:14 -07:00
Peter Steinberger
1d5479520f perf(ci): skip global declaration emission in the CI artifacts build (#108949)
* perf(ci): skip global declaration emission in the CI artifacts build

Declaration emission is ~95% of the tsdown wall clock (measured 132.5s
with dts vs 6.0s without on the main graph; 224.7s in CI). PR CI's dist
consumers only execute runtime JS, so the ciArtifacts profile now skips
global dts and the plugin-sdk export gate validates self-built scoped
declarations (write-plugin-sdk-entry-dts non-canonical mode, 45s local).
The step cache is dropped in self-build mode because its outputs depend
on the SDK source graph the canonical cache inputs do not cover.
Release and docker packaging builds keep canonical declarations.
Local end-to-end: build:ci-artifacts 92s with all gates green.

* fix(ci): pin gateway suites to the proven 2-worker Vitest budget

gateway-core and gateway-methods flaked at 6 workers (hook timeouts,
mock-state res.setHeader TypeError, waitForAssertion misses) on the
first run after the worker-budget raise while passing on two prior
validation runs — the same intermittent contention class media-ui
showed. Pin both like the other timing-sensitive groups.
2026-07-16 04:54:34 -07:00
Peter Steinberger
509f5d3409 fix: bound npm fixture upstream response bodies (#108960)
* test: bound npm fixture upstream responses

* test: auto-clean npm fixture temp dirs

* style: format npm fixture assertion test

* test: simplify plugin fixture temp cleanup
2026-07-16 04:53:43 -07:00