Commit Graph

68879 Commits

Author SHA1 Message Date
Peter Steinberger
0f7fbfa003 fix(release): bind bootstrap publish workflow identity 2026-07-15 17:41:54 +01:00
Peter Steinberger
e48427bfc8 test(ui): await terminal readiness states (#108371) 2026-07-15 09:38:45 -07:00
wings1029
771a98bb89 fix(process): report actual UTF-8 byte count in send-keys message (#104968)
* fix(process): report actual UTF-8 byte count in send-keys message

Replace string.length (UTF-16 code units) with Buffer.byteLength(data, 'utf8')
so the reported byte count matches the actual bytes sent to process stdin.

For ASCII key sequences the values are identical. For non-ASCII text
sent via literal key data, string.length underreports the actual UTF-8
byte count.

* test(process): cover UTF-8 send-keys byte count

Co-authored-by: 陈志强0668000989 <chen.zhiqiang1@xydigit.com>

* ci: prune stale max-lines baseline

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-15 09:37:55 -07:00
Leon-SK668
b9e399eec3 fix(active-memory): normalize legacy toggle timestamps (#103116)
* fix(active-memory): normalize legacy toggle timestamps

* test(active-memory): cover non-finite legacy timestamps
2026-07-15 09:25:35 -07:00
Peter Steinberger
9497450511 refactor: eliminate dead-export baseline (#108376)
Burn the grandfathered unused-export baseline to zero and enforce a hard-zero Knip gate.
2026-07-15 17:05:07 +01:00
pick-cat
d11f304519 fix(qa-channel): add timeout to qa-bus state guarded fetch (#106538)
* fix(qa-channel): add timeout to qa-bus state guarded fetch

* test(qa-channel): add executable negative control for bus-state hang

* test(qa-channel): oxfmt negative-control bus-client test

* fix(qa-channel): sync SDK facade type with getQaBusState options parameter

Co-Authored-By: nebulacoder-v8.0 <noreply@zte.com.cn>

* test(qa-channel): add standalone production-path proof for bus-state timeout

Proof exercises the real getQaBusState code path against loopback
TCP peers that accept but never return HTTP headers:

- Negative control: fetchWithSsrFGuard without timeoutMs stays pending
- Positive control: getQaBusState with timeout rejects with TimeoutError
- Valid response: normal server still resolves within the timeout floor

Co-Authored-By: nebulacoder-v8.0 <noreply@zte.com.cn>

* test(qa-channel): log node version and head SHA in bus-state timeout proof

Co-Authored-By: nebulacoder-v8.0 <noreply@zte.com.cn>

* fix(qa-channel): drop test timeout from public Plugin SDK facade type

Keep the `timeoutMs` option internal to `getQaBusState` for test-only
short floors. The public facade callers do not need it and the SDK
surface should not expose test-only parameters.

Co-Authored-By: nebulacoder-v8.0 <noreply@zte.com.cn>

* chore(qa-channel): remove standalone proof script per review

The negative, timeout, and responsive cases are already durably covered in
bus-client.test.ts. The executed live output remains in the PR body as
evidence.

Co-Authored-By: nebulacoder-v8.0 <noreply@zte.com.cn>

* chore: trigger CI after rebase onto main

* chore: trigger CI after rebase onto main

* test(qa-channel): keep state timeout internal

---------

Co-authored-by: nebulacoder-v8.0 <noreply@zte.com.cn>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: Peter Steinberger <peter@steipete.me>
2026-07-15 08:50:53 -07:00
Peter Steinberger
f41c143345 refactor(state): move skill upload staging to SQLite (#108346)
* refactor(state): move skill upload staging to sqlite

* test(skills): make archive mode assertion portable

* fix(skills): fence upload finalization by lease owner

* fix(skills): handle nullable lease expiry

* fix(skills): bound upload install leases
2026-07-15 08:40:46 -07:00
Peter Steinberger
09ce4afd16 test(codex): bound guarded shared-client requests (#108363) 2026-07-15 08:39:23 -07:00
WhatsSkiLL
4085121faa fix(android): enlarge voice note recording controls (#108307)
Co-authored-by: IWhatsskill <284122573+IWhatsskill@users.noreply.github.com>
2026-07-15 11:31:00 -04:00
WhatsSkiLL
ae2b2ed05a fix(android): keep header logo in brand colors (#108199)
Co-authored-by: IWhatsskill <284122573+IWhatsskill@users.noreply.github.com>
2026-07-15 11:30:11 -04:00
WhatsSkiLL
4bf77ca867 fix(android): wrap large segmented controls (#107574)
* fix(android): wrap large segmented controls

* fix(android): scope segmented control wrapping

---------

Co-authored-by: IWhatsskill <284122573+IWhatsskill@users.noreply.github.com>
2026-07-15 11:29:47 -04:00
WhatsSkiLL
63f6cdf5f0 fix(android): outline providers back button (#106803)
Co-authored-by: IWhatsskill <284122573+IWhatsskill@users.noreply.github.com>
2026-07-15 11:28:19 -04:00
Peter Steinberger
65188a7430 fix(agents): reject synchronous sessions_send self-targets, break down missing-cost entries, dedup usage merges (#108354)
* fix(agents): reject synchronous sessions_send self-targets, break down missing-cost entries, dedup usage merges

- sessions_send fails fast with a clear error when a synchronous send resolves
  to the calling session's own key, instead of enqueueing behind the sender's
  own lane until timeout and falling back to an empty reply; fire-and-forget
  (timeoutSeconds: 0) self-delivery keeps working (#107172)
- missingCostEntries now carries a provider/model breakdown surfaced on the
  status runtime line and gateway CLI cost line, so zero-priced usage (e.g.
  openai-codex/*) is attributable instead of an opaque counter (#98348)
- codex-synthetic-usage merge helpers share one precedence helper; behavior
  unchanged, duplicate ranking logic deleted (#107497)

* test: use a valid billing type in synthetic-usage precedence case

* test: fix billing expectation to match valid type
2026-07-15 08:23:49 -07:00
Peter Steinberger
688a129ed0 fix: keep frozen Docker planning dependency-free (#108340)
* fix(release): keep frozen Docker planning dependency-free

* fix(release): gate frozen scenario command execution
2026-07-15 08:15:13 -07:00
jincheng-xydt
b2e42e3645 fix(update): preserve pnpm and Bun global installs (#107802)
* fix(update): preserve pnpm and bun global installs

* fix(update): anchor pnpm updates to invoking install

* fix(update): recover skipped pnpm lifecycle

* fix(update): fail closed on ambiguous pnpm ownership

* fix(update): tolerate pnpm probe warnings

* fix(update): bind pnpm installs to project owners

* fix(update): isolate pnpm mutations from caller pins

* docs(changelog): credit pnpm 11 report

Co-authored-by: jincheng-xydt <xu.jincheng@xydigit.com>

* chore(changelog): defer release note ownership

* fix(update): make package-root fallback explicit

* test(update): split pnpm scenario coverage

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-15 08:03:35 -07:00
Peter Steinberger
c41f46260c test(tasks): update registry boundary seams (#108347) 2026-07-15 07:52:36 -07:00
Peter Steinberger
e4fe96983c fix(plugins): keep official plugin config across bundled-to-external moves, harden npm metadata parsing (#108336)
* fix(plugins): keep official plugin config across bundled-to-external moves, harden npm metadata parsing

- doctor --fix and plugin auto-enable treat official-catalog plugin ids as
  known configuration even when the external package is not installed yet, so
  a bundled-to-external transition (codex) no longer silently drops the
  plugins.allow entry and unregisters the agent harness; garbage ids are still
  pruned, and the codex-specific diagnostic suppression in the doctor scan is
  replaced by the generic official-catalog rule (#107226)
- npm view metadata normalization handles object and multi-version array
  output, flat dist.* keys and nested dist objects, absent openclaw blocks,
  selects the maximum satisfying semver (publication order is not semver
  order), fails closed when a recognized range has no satisfying entry, and
  names the missing fields in the error (#107842)

The #107219 register-crash fix (lazy binding-store opening so plugin
registration never touches runtime.state under the base runtime) landed with
#108311 alongside its regression test.

* style: format install-source-utils imports
2026-07-15 07:35:59 -07:00
Peter Steinberger
3d76a4af92 refactor(deadcode): privatize runtime test seams (#108338)
* refactor(sessions): privatize runtime test seams

* refactor(commitments): privatize extraction test seams

* refactor(flows): privatize doctor health seams

* refactor(tasks): privatize registry test seams

* build(commitments): bundle Docker test support

* chore(deadcode): shrink runtime export baseline
2026-07-15 07:27:10 -07:00
Shakker
8d5592548b docs: explain ClickClack post-add verification (#108332) 2026-07-15 15:20:33 +01:00
Shakker
752567dbc8 feat: verify ClickClack after channel setup 2026-07-15 15:20:33 +01:00
Shakker
3e352d6727 refactor: share ClickClack setup verification 2026-07-15 15:20:33 +01:00
Peter Steinberger
a748634aa9 test: isolate stateful unit-fast tests (#108334) 2026-07-15 07:14:35 -07:00
w33d
dd149f01ba fix: stateful plugin hooks and tools stay aligned after scoped loads (#108110)
* fix(plugins): align hook and tool registrations

Reuse gateway-owned plugin registrations for matching hooks and tools while loading only missing tool owners from narrower runtime scopes.\n\nCo-authored-by: w33d <w33d@steadholme.local>

* test(plugins): cover mixed registry tool owners

Verify gateway-pinned and compatible active registrations compose without another plugin load.

Co-authored-by: w33d <w33d@steadholme.local>

* refactor(plugins): keep pinned registry lookup internal

Reuse the existing runtime-state contract so hook and tool ownership does not expand the Plugin SDK surface or treat unpinned active registries as Gateway owners.

* test(plugins): complete hook context fixture

Supply the required tool name in the stateful hook ownership regression context.

* chore: leave contributor release note in PR

Normal contributor PRs do not modify the release-owned changelog; the PR body retains the release note and attribution.

* fix(plugins): align partial registry owners

* fix(plugins): preserve scoped tool diagnostics

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: w33d <w33d@steadholme.local>
2026-07-15 07:12:43 -07:00
Peter Steinberger
4e78d91c0f refactor(sessions): split session accessor by ownership (#108247) 2026-07-15 06:47:29 -07:00
Peter Steinberger
9d4610cbd1 fix(codex): settle plugin activation, align plugin/list with codex 0.144, bound discovery per turn (#108311)
* fix(codex): settle plugin activation, align plugin/list with codex 0.144, bound discovery per turn

- plugin/list curated queries omit cwds and marketplaceKinds (0.144 semantics:
  explicit kinds disable the automatic global remote catalog; cwds:[] never
  suppressed it), and the missing-marketplace check recognizes the current
  openai-curated-remote wire name via the shared predicate (#107305)
- curated plugin/list snapshots settle in a process-local metadata cache
  (coalesced, invalidated on install/identity change/restart, 1h freshness
  window matching the app-inventory cache) so a missing marketplace or plugin
  no longer re-runs blocking discovery RPCs on every embedded-Codex turn;
  fail-open local-only responses (upstream warns without a load error when the
  remote catalog fetch fails) are never cached, and workspace-directory
  queries stay live because external activation has no invalidation signal
- the whole plugin-config build shares one bounded startup deadline with
  remaining-budget propagation per RPC and a deny-all apps fallback, so a hung
  plugin/list cannot consume the turn (#107305)
- guarded thread requests (start/resume/fork under the native-config fence)
  must carry a finite timeout or abort signal, closing the unbounded-fence-hold
  window for raw callers (#106719 hardening)

* chore(codex): keep plugin metadata types and deadline builder module-local

Deadline behavior tests exercise the production provider composition instead
of a test-only export.
2026-07-15 06:40:29 -07:00
Peter Steinberger
674dd37cd0 refactor(deadcode): privatize core test seams (#108325)
* refactor(entry): privatize compile cache internals

* refactor(logging): privatize diagnostic test seams

* refactor(plugin-state): privatize store test seams

* refactor(skills): privatize lifecycle test seams

* refactor(node-host): privatize invoke test seam

* refactor(system-agent): privatize turn test seam

* chore(deadcode): shrink core test seam baseline
2026-07-15 06:37:40 -07:00
Peter Steinberger
20bf422cc7 fix(ui): keep fullscreen terminal loads exception-free (#108317)
* fix(ui): avoid empty terminal tab groups

* chore: keep release notes in PR
2026-07-15 06:36:32 -07:00
Peter Steinberger
4c667aac88 fix(release): harden frozen target validation (#108296)
* fix(release): harden frozen scenario planning

Co-authored-by: Dallin Romney <dallinromney@gmail.com>

* fix(release): omit unsupported scenario-only lanes

Co-authored-by: Dallin Romney <dallinromney@gmail.com>

* fix(release): fail closed on malformed target scenarios

Co-authored-by: Dallin Romney <dallinromney@gmail.com>

* fix(release): report unsupported frozen lanes

Co-authored-by: Dallin Romney <dallinromney@gmail.com>

* fix(release): defer frozen survivor inspection

Co-authored-by: Dallin Romney <dallinromney@gmail.com>

* fix(release): report partial survivor omissions

Co-authored-by: Dallin Romney <dallinromney@gmail.com>

* fix(ci): fetch shard fallback from workflow commit

Co-authored-by: Dallin Romney <dallinromney@gmail.com>

* fix(release): gate frozen scenario omissions

Co-authored-by: Dallin Romney <dallinromney@gmail.com>

* test(release): auto-clean frozen target temp dirs

Co-authored-by: Dallin Romney <dallinromney@gmail.com>

* fix(ci): satisfy frozen validation workflow lint

Co-authored-by: Dallin Romney <dallinromney@gmail.com>

---------

Co-authored-by: Dallin Romney <dallinromney@gmail.com>
2026-07-15 06:31:07 -07:00
Peter Steinberger
9cdc0c3495 test: tighten async polling intervals (#108301) 2026-07-15 06:14:54 -07:00
Peter Steinberger
e38cd62e0d refactor(state): move managed image records to SQLite (#108290)
* refactor(state): move managed image records to sqlite

* refactor(state): narrow managed image store exports

* fix(state): preserve managed image media roots

* test(state): track managed image temp directories
2026-07-15 06:14:10 -07:00
wuqxuan
610453e5fe fix: doctor should not treat loopback bind as network-accessible 0.0.0.0 (#107731)
* fix: treat loopback bind as local-only in doctor security

* test: type resolveGatewayBindHost mock for check-test-types

* fix(gateway): keep loopback bind canonical

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: Peter Steinberger <peter@steipete.me>
2026-07-15 06:13:56 -07:00
lin-hongkuan
dc23f4f255 test: preserve logging exports in startup mocks (#103582)
Co-authored-by: lin-hongkuan <lin-hongkuan@users.noreply.github.com>
2026-07-15 06:11:30 -07:00
Peter Steinberger
6a237b5d33 test: order session lock cleanup imports (#108308) 2026-07-15 06:09:39 -07:00
Peter Steinberger
3ea45589ba refactor(agents): trim CLI and transport export seams (#108309)
* refactor(agents): trim CLI and transport export seams

* chore(deadcode): shrink agents CLI transport baseline
2026-07-15 14:02:29 +01:00
QiuYuang
5642f6515e fix(web-fetch): recognize mixed-case media types (#108230)
* fix(web-fetch): recognize mixed-case media types

* fix(web-fetch): match normalized media types

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: Peter Steinberger <peter@steipete.me>
2026-07-15 05:58:31 -07:00
chengzhichao-xydt
e58dc0955f fix(tlon): add timeouts to file upload HTTP requests (#102903)
* fix(tlon): add timeouts to file upload HTTP requests

* fix(tlon): allow slow bounded uploads

---------

Co-authored-by: chengzhichao-xydt <chengzhichao-xydt@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-15 05:41:34 -07:00
Peter Steinberger
2808507c3b refactor(agents): privatize runtime test seams (#108295)
Shrinks the dead-export baseline from 156 to 151 entries.
2026-07-15 05:36:35 -07:00
marchpure
69ef3ca980 fix(codex): make loop relay optional (#97224)
Move the Codex-specific PreToolUse loop relay switch into the Codex
plugin, preserve policy relays, and cover both normal and side turns.

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: marchpure <marchpure@users.noreply.github.com>
2026-07-15 05:29:20 -07:00
Peter Steinberger
855659a1dd refactor(agents): privatize state reset seams (#108285)
* refactor(agents): privatize state reset seams

* chore(deadcode): shrink agents state seam baseline
2026-07-15 05:09:45 -07:00
Shakker
611e7ddfe3 docs: sync ClickClack secret credential registry (#108271) 2026-07-15 13:05:10 +01:00
Shakker
f281b74e49 docs: refresh ClickClack docs map (#108271) 2026-07-15 13:05:10 +01:00
Shakker
728ac14a9a test: use public ClickClack test helpers 2026-07-15 13:05:10 +01:00
Shakker
24c753ae31 fix: keep channel CLI helpers private 2026-07-15 13:05:10 +01:00
Shakker
b08b699de2 fix: accept ClickClack workspace before install 2026-07-15 13:05:10 +01:00
Shakker
d1b839eaf6 fix: preserve ClickClack setup secret refs 2026-07-15 13:05:10 +01:00
Shakker
beece7f527 test: track ClickClack temporary directories 2026-07-15 13:05:10 +01:00
Shakker
d54eb4b74d fix: preserve optional ClickClack account typing 2026-07-15 13:05:10 +01:00
Shakker
d599ac9133 fix: resolve ClickClack token secret refs 2026-07-15 13:05:10 +01:00
Shakker
b09c99dfee fix: harden ClickClack setup credentials 2026-07-15 13:05:10 +01:00
Shakker
fa6776b9b2 docs: clarify ClickClack token sources 2026-07-15 13:05:10 +01:00