Commit Graph

4290 Commits

Author SHA1 Message Date
Peter Steinberger
64f3397874 fix(ci): persist warm runtime caches across runs (#110363)
* ci: make cache persistence verifiable

* test: fix cache guard CI failures

* test: narrow cache maintenance env

* fix(ci): stabilize vitest cache fingerprint

* test: stabilize lagging-history outbox check
2026-07-18 08:21:26 +01:00
Peter Steinberger
cb5070101e fix: bound live updater gateway probes (#110509) 2026-07-18 08:16:05 +01:00
Peter Steinberger
b5fb47e283 test(codex): stress resume across gateway restarts (#110486) 2026-07-18 07:50:17 +01:00
Peter Steinberger
2612728b3b fix(ci): feed candidate identity JSON to validator (#110456) 2026-07-18 07:07:00 +01:00
xingzhou
66990b207f fix(ci): bound CLI installer smoke curl with connect and max-time (#109927)
* fix(ci): bound CLI installer smoke curl with connect and max-time

The non-root CLI installer smoke pipes curl directly into bash under a
single docker-run timeout. curl has no default connect or total timeout,
so a stalled CDN connect or hung response body could pin the container
until the outer docker-run budget kills it. Bound the curl with the same
--connect-timeout 30 --max-time 300 shape already used by install-sh-smoke
and install-sh-e2e, and enable pipefail so curl failures are not masked
by the bash consumer.

* test(ci): cover bounded CLI installer pipeline

* fix(ci): bound preceding non-root installer download

* fix(ci): harden bounded installer URL handoff

Co-authored-by: zhang-guiping <zhang.guiping@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-18 06:59:29 +01:00
Shakker
f448701aa1 test: align changed-target routing expectations (#110422) 2026-07-18 06:42:27 +01:00
Shakker
e5fed572ef test: exercise metadata-driven watch exclusion (#110422) 2026-07-18 06:42:27 +01:00
Shakker
643476f24d fix: derive generated asset watch exclusions 2026-07-18 06:42:27 +01:00
wanyongstar
e6534018e1 fix(ci): bound qa-profile-evidence git fetch operations with timeout (#110282)
* fix(ci): bound qa-profile-evidence git fetch operations with timeout

* fix(ci): bound qa-profile-evidence git fetch operations with timeout

ci: retrigger checks

* test(ci): guard QA evidence fetch timeouts

Co-authored-by: wanyongstar <wan.yong@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: Peter Steinberger <peter@steipete.me>
2026-07-18 06:34:43 +01:00
wanyongstar
c1e5c1d4fa fix(ci): bound release-checks git fetch operations with timeout (#110028)
* fix(ci): bound release-checks git fetch operations with timeout

* fix(ci): bound release fetches across auth modes

Co-authored-by: wanyongstar <wan.yong@xydigit.com>

* style(ci): format release timeout guard

Co-authored-by: wanyongstar <wan.yong@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: Peter Steinberger <peter@steipete.me>
2026-07-18 06:32:19 +01:00
Peter Steinberger
700a089d3b ci(release): tolerate historical script contracts (#110365)
* ci(release): tolerate historical script contracts

* ci: escape stalled macOS retry capacity

* ci: freeze exact release-gate merge snapshot
2026-07-18 06:31:47 +01:00
Jason (Json)
db7a5c6333 fix(packaging): identify OCM adapter during prepack (#110426) 2026-07-17 23:14:35 -06:00
wanyongstar
6aee64179c fix(ci): bound ci.yml git fetch operations with timeout (#110281)
* fix(ci): bound ci.yml git fetch operations with timeout

* test(ci): scope and guard fetch timeouts

Co-authored-by: wanyongstar <wan.yong@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-18 06:11:13 +01:00
wanyongstar
e8734d837e fix(ci): bound plugin-npm-release git fetch and npm publish with timeout (#110279)
* fix(ci): bound plugin-npm-release git fetch and npm publish with timeout

* fix(ci): bound plugin-npm-release git fetch and npm publish with timeout

ci: retrigger checks

* test(ci): guard plugin release timeouts

Co-authored-by: wanyongstar <wan.yong@xydigit.com>

* docs(ci): explain npm timeout recovery

Co-authored-by: wanyongstar <wan.yong@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-18 06:06:12 +01:00
Peter Steinberger
75d0260e0c ci(release): enforce reusable permission ceiling (#110353) 2026-07-18 04:07:42 +01:00
Peter Steinberger
6a6d3465d8 improve: shorten release candidate validation (#110316)
* ci(release): shorten candidate validation critical path

* ci(test): parallelize memory extension lane

* ci(release): preserve read-only candidate validation
2026-07-18 03:39:03 +01:00
Peter Steinberger
8c17d20cd9 improve(ci): preserve complete main validation during merge bursts (#110298)
* ci: serialize main and bound sticky caches

* fix(ci): pin cache warmer to validated SHA

* fix(ci): read current sticky retirement manifest
2026-07-18 03:27:54 +01:00
Peter Steinberger
1746cea939 refactor(test): use shared temp directory cleanup (#110311) 2026-07-18 03:15:38 +01:00
Peter Steinberger
d8f2645c2c refactor(memory-wiki): move compiled cache to plugin state (#110167)
* feat(plugin-sdk): prepare memory prompts asynchronously

* refactor(memory-wiki): move compiled cache to plugin state

* fix(plugin-sdk): export memory prompt preparer type

* refactor(plugin-sdk): keep prompt preparer type private

* test(memory-wiki): isolate compiled cache state

* chore(memory-wiki): satisfy changed gates

* fix(memory): preserve prepared prompts across context engines

* docs(plugin-sdk): refresh API baseline

* fix(memory): revalidate prepared prompt ownership

* fix(codex): propagate sandboxed memory context

* test(memory-wiki): seed durable vault identity

* refactor(memory-wiki): keep cache lifecycle internal

* fix(memory-wiki): harden compiled cache publication

* style(memory-wiki): format cache lifecycle changes

* test(memory-wiki): support extension test lib target

* style(memory-wiki): remove redundant catch

* refactor(memory-wiki): keep vault generation helper private
2026-07-18 03:05:03 +01:00
Peter Steinberger
3d1b771035 fix(ci): catch script declaration drift before merge (#110248)
* fix(ci): verify script declaration contracts

* fix(ci): harden declaration export analysis

* fix(ci): cover opaque script module exports

* test(ci): cover cyclic script declaration barrels
2026-07-18 02:54:26 +01:00
Peter Steinberger
0e3afe62c6 test: remove SIGTERM fixture readiness race (#110283) 2026-07-18 02:07:02 +01:00
Peter Steinberger
a6102690dd perf(ci): cut the pre-fan-out critical path and bin canonical main runs (#110183)
* perf(ci): cut the pre-fan-out critical path on canonical runs

Two changes to the run head and matrix shape:

1. runner-admission was a hosted 90s sleep every run queued behind
(observed 1.7min hosted-queue latency before the sleep started). The
debounce now lives at the tail of preflight: heavy jobs all need
preflight, so a superseding main push still cancels the run before
fan-out while only one 4 vCPU runner has been spent, and preflight's
own work usually exceeds the window so the residual sleep is zero.
security-fast (hosted, dependency-free) starts immediately.

2. Canonical main pushes now use the compact bin plan like PRs: the
82-job named matrix drained the runner pool for ~4.5min (job starts
trickled from minute 5.2 to 9.7 in run 29592647843) with no
branch-protection consumer for per-shard names on main. Coverage is
identical; dispatch/release-gate runs keep the full named matrix.

* perf(test): boot TUI PTY suite fixtures concurrently

tsx+TUI startup dominated the harness file's wall time and the three
suite PTYs booted serially. Boot them concurrently in beforeAll
(allSettled so a failed boot still assigns survivors for afterAll
cleanup); the env-specific fixtures never receive input, so their tests
only await their own readiness output. The slow-startup test now proves
frame ordering on the append-only output, which the old sequential
waits did not. File wall 10.2s -> ~4.9s, 3/3 repeat runs green.

* docs(ci): align gate and debounce descriptions with the removed admission job

* test(tooling): wait for readiness file content, not existence

writeFileSync creates the file before its bytes land, so the existence
poll raced the child's write on loaded runners and read an empty ready
file (observed in compact-small-4, run 29615028678). Poll for non-empty
content at both readiness sites.
2026-07-18 01:05:07 +01:00
Peter Steinberger
ec8f6e5e03 feat(browser): add secure per-tab copilot panel (#109817)
* feat(browser): add copilot security contracts

* fix(gateway): expose verified client identity to handlers

* feat(browser): add secure per-tab copilot panel

Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com>

* refactor(browser): separate copilot gateway hint custody

* fix(browser): preserve legacy pairing parse shape

* fix(browser): harden copilot lifecycle custody

Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com>

* fix(browser): enforce copilot lifecycle boundaries

Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com>

* style(browser): format copilot sources

Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com>

* fix(browser): preserve copilot consent revocation

Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com>

* refactor(browser): split copilot custody owners

Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com>

* test(browser): normalize websocket array buffers

Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com>

* chore(protocol): regenerate Swift gateway models

Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com>

* refactor(browser): model copilot runtime entrypoints

Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com>

* fix(browser): honor extension build boundaries

Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com>

* test(gateway): assert targeted chat delivery

Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com>

* test(gateway): cover targeted delivery calls

Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com>

* fix(browser): declare copilot build dependencies

Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com>

* fix(ci): clear browser copilot gate failures

Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com>

* test(ci): cover copilot lint exclusion

Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com>

* fix(browser): gate copilot on relay custody

Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com>

* test(browser): bound copilot relay frames

Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com>

---------

Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com>
2026-07-18 01:00:23 +01:00
Peter Steinberger
b0a2d02427 fix(ci): make plugin SDK API manifest mergeable (#110228) 2026-07-18 00:16:39 +01:00
Dallin Romney
a9dc393f7e test(qa): prove Codex auth product migration (#109291) 2026-07-17 16:10:23 -07:00
joshavant
6a053f59cd fix(ios): keep system rsync paired during export 2026-07-17 15:51:10 -07:00
Peter Steinberger
c2a069086e ci: rotate dependency sticky snapshot (#110205) 2026-07-17 23:30:49 +01:00
Peter Steinberger
c2e9f1b278 test: relax cross-OS process startup deadline (#110111) 2026-07-17 23:13:57 +01:00
Peter Steinberger
241143262a fix(ci): script-only changes cold-start every Node job (#110158)
* fix(ci): keep sticky deps warm across script edits

* fix(ci): register dependency fingerprint entrypoint

* fix(ci): distinguish missing fingerprint inputs

* fix(ci): invalidate delegated workspace scripts

* fix(ci): harden cold install recovery

* fix(docs): escape release gate placeholder

* fix(ci): reject unaudited dependency hooks
2026-07-17 23:05:16 +01:00
Peter Steinberger
da44d52ac6 feat: ask_user — structured questions from the agent with web card, channel buttons, and text answers (#109922)
* feat(gateway): add transient question runtime (question.* methods + broadcasts)

* feat(agents): add blocking ask_user question tool with chat prompt delivery and text-reply claim

* feat(ui): interactive in-thread question cards for ask_user

* feat(channels): native tap-to-answer buttons for ask_user on Telegram, Discord, and Slack

* feat(ui): unify codex and gateway question cards with interactive gateway answering

* refactor(agents): collapse ask_user pending state to one registry; docs for ask_user

* fix(agents): include ask_user in normal gateway runs; add question-flow control-ui e2e

* test(ui): avoid credential-shaped fixture in question card test

* refactor(ui): reorder stream-group context keys

* fix(gateway,ui): validate question answers at resolve; reject secret/duplicate-label questions; UI retry and reconnect hardening

* fix(gateway,agents): canonicalize accepted option answers; bound ask_user option labels to 64 chars

* chore(ci): prune unused question exports, allowlist mobile question events, fix discord lint

* chore(ci): regenerate protocol/i18n/docs/tool-display artifacts for question surface

* fix(protocol): flatten QuestionRecord for native codegen; drop TS-only alias from schema registry

* chore(android): regenerate ask-user localization resources

* docs: regenerate docs map after rebase

* fix(ci): avoid stale read-only dependency disks

* test: remove stale reef lint suppression ratchet

* fix(ci): keep source locale drift advisory in release gates

* fix(ci): scope locale advisory handling to parity check
2026-07-17 22:24:17 +01:00
Peter Steinberger
bab9a5ede7 fix(release): keep beta Telegram advisory nonblocking 2026-07-17 22:18:10 +01:00
Peter Steinberger
84f5d6d978 fix(release): persist streamed Telegram result metadata 2026-07-17 22:11:23 +01:00
Peter Steinberger
e7801deb57 fix(release): fail fast on flaky beta QA 2026-07-17 21:55:27 +01:00
Peter Steinberger
78b489ec89 test(release): align synthetic credential assertion 2026-07-17 21:55:27 +01:00
Peter Steinberger
7d3b5f56af fix(release): harden beta validation feedback 2026-07-17 21:55:27 +01:00
Peter Steinberger
df714814c8 test: drop retired reef transport suppression from the allowlist
A landed change removed the no-useless-assignment suppression in
extensions/reef/src/transport.ts without pruning the allowlist tail,
failing checks-node-compact-small-7 on every PR (merge-skew).
2026-07-17 13:27:12 -07:00
Dallin Romney
da17178ffc fix(ci): extend frozen target hook timeout (#109564)
* fix(ci): extend frozen target hook timeout

* test(ci): align package acceptance omission default

* fix(android): refresh Japanese disable translation
2026-07-17 12:31:24 -07:00
Dallin Romney
71a02e16af test(qa): prove gateway package self-upgrade (#109399) 2026-07-17 12:26:35 -07:00
Peter Steinberger
5afda13312 fix: CI checks fail after warm dependency restores (#110135)
* ci: guard restored pnpm state before fanout

* fix(ci): preserve warm dependency snapshot speed
2026-07-17 20:16:13 +01:00
Peter Steinberger
5366b6de81 refactor: store gateway restart recovery in SQLite (#110014)
* refactor: move restart sentinel state to sqlite

* fix: satisfy restart sentinel architecture gates

* test: avoid cold startup migration timeout

* fix: bound durable restart notice retries

* test: type restart notice contention mock

* fix: detect legacy restart sentinel before reads

* fix: keep delivery attempt result internal

* fix: narrow restart sentinel preflight guard
2026-07-17 17:43:22 +01:00
Peter Steinberger
c69a75f697 fix(release): mount normalization helper in Docker E2E 2026-07-17 16:25:37 +01:00
Peter Steinberger
5a8b25cc9a fix(release): reserve installer gateway port 2026-07-17 16:23:17 +01:00
Peter Steinberger
0476243d5d fix(release): honor unreleased changelog opt-in 2026-07-17 16:23:17 +01:00
Peter Steinberger
600ff3acb4 fix(ci): preserve private plugins in Docker E2E (#110062) 2026-07-17 16:21:20 +01:00
Peter Steinberger
da69daeb72 feat(onboarding): recommend plugins and skills from installed apps (#109668)
* feat(onboarding): recommend plugins and skills from installed apps

Scan installed macOS apps during classic onboarding (TCC-free), gather
candidates from official catalogs + ClawHub search, let the configured
model pick genuine matches, and offer an opt-in multiselect install step.
Adds a device.apps node-host command (default-off sharing, Android-parity
envelope) so remote gateways can request a paired Mac's inventory, and a
wizard.appRecommendations kill switch. Custom setup-inference completions
no longer inherit the 32-token verification-probe output cap.

* feat(onboarding): recommend apps in guided flow

* fix(onboarding): harden app recommendations against ClawHub self-promotion

Third-party ClawHub skills are never pre-selected regardless of model tier
(publisher-controlled listing text reaches the matcher prompt and could
promote itself); their labels now say they install third-party code.
Installed-app scans follow symlinked .app bundles. Matcher output stays
bounded by the resolved model's own maxTokens budget (documented invariant).

* fix(onboarding): key official catalog candidates by resolved plugin id

Real catalog entries are package manifests without a top-level id; keying the
candidate map and channel/provider classification by entry.id collapsed the
whole official catalog into one undefined-keyed entry, so no official plugin
or channel was ever recommended. Regression test runs against the bundled
catalogs.

* fix(onboarding): satisfy lint, types, deadcode, and migration gates

Split the guided-onboarding test into a self-contained custodian suite to stay
under max-lines. Narrow app-recommendation exports (drop dead node-payload
normalizer, unexport internal types/helpers, route candidate tests through the
public API), replace map-spread with a helper, unexport device.apps result
types, add installedAppsSharing to node-host migration expectations, cast the
wizard multiselect mock, and regenerate the docs map.

* test(onboarding): register new live test in the shard classifier
2026-07-17 14:07:59 +01:00
Peter Steinberger
363e8b09ec fix(release): honor explicit unreleased dry-run input 2026-07-17 13:43:12 +01:00
Peter Steinberger
6f3aa0f7ae fix(release): point locale drift at generated sync 2026-07-17 13:43:12 +01:00
Peter Steinberger
c149489703 ci: trim release metadata and ClawHub checkouts 2026-07-17 13:43:12 +01:00
Peter Steinberger
cb70d7104e ci: speed up release preparation 2026-07-17 13:43:12 +01:00
Peter Steinberger
00a64f6e95 ci: bound Blacksmith sticky disk growth (#109934) 2026-07-17 12:13:28 +01:00