Commit Graph

114 Commits

Author SHA1 Message Date
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
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
0fa77124e9 fix(acpx): migrate codex adapter to maintained @agentclientprotocol/codex-acp (#109075)
* fix(acpx): migrate codex adapter to maintained @agentclientprotocol/codex-acp

The bundled codex ACP adapter pinned the npm-deprecated
@zed-industries/codex-acp@0.16.0, which embeds codex crates from the
rust-v0.137.0 era: GPT-5.6-era models are unknown to it and sessions fail
with 'requires a newer version of Codex'. Migrate to the maintained
@agentclientprotocol/codex-acp@1.1.4 (Node CLI, depends on @openai/codex
^0.144.4 matching the codex plugin pin):

- Wrapper generation resolves the adapter bin from its package manifest and
  delivers startup config via CODEX_CONFIG; OpenClaw-owned wrapper args are
  stripped before launch. Explicit new-adapter commands keep their own
  -c/--config args untouched; only retired Zed commands migrate, with their
  -c TOML overrides (dotted/quoted keys, attached forms, MCP config)
  faithfully converted.
- Model overrides emit the bare model id plus a separate
  model_reasoning_effort; composite model/effort ids are accepted as parse
  input but never emitted.
- Process reaper recognizes the maintained adapter tree and packaged codex
  app-server children without claiming native codex plugin processes.

Live proof: direct adapter smoke with local subscription auth initialized
1.1.4, advertised model gpt-5.6-sol with separate medium effort, and
completed a turn. Fixes #108664

* fix(acpx): pin codex-acp 1.1.2 to satisfy the lockfile release-age gate

1.1.4 is under the 48-hour minimumReleaseAge and fails lockfile
verification repo-wide. 1.1.2 (2026-07-09) passes the gate, carries the
same CODEX_CONFIG startup contract, and its ^0.144.0 codex dependency
resolves to the same 0.144.4 the codex plugin pins. Lockfile re-resolved
from main without any release-age bypass; shrinkwrap regenerated.

* chore(acpx): split oversized auth-bridge test file, register adapter as CLI-resolved dep

codex-auth-bridge.test.ts crossed the max-lines gate after the migration
regressions; the command-migration cluster moves to
codex-auth-bridge.migration.test.ts. knip's CLI-resolved dependency list
swaps the retired zed adapter for @agentclientprotocol/codex-acp (invoked
via generated wrapper/npx, never imported).
2026-07-16 08:51:30 -07:00
Peter Steinberger
a2eb27c03a refactor(plugins): split update lifecycle (#108877)
* refactor(plugins): split update lifecycle

* fix(plugins): break update type cycle

* fix(plugins): keep update modules below line budget

* fix(plugins): preserve update export surface
2026-07-16 07:54:21 -07:00
Peter Steinberger
66604df9b6 refactor(channels): share retry helpers and remove dead state probes (#108903)
* refactor(channels): generalize channel retry runner and retry-after parsing; drop dead configured-state probes

* fix(channels): align retry and metadata contracts
2026-07-16 04:03:15 -07:00
Peter Steinberger
f180638e87 test(docker): extract setup harness (#108797) 2026-07-16 03:44:17 -07:00
Peter Steinberger
723d12fd4c refactor(apns): move registrations to shared SQLite (#108543)
* refactor(apns): move registrations to SQLite

* fix(apns): satisfy strict migration typing

* chore(apns): remove obsolete lint suppression

* chore: prune APNs max-lines baseline

* refactor(apns): keep store internals private

* fix(apns): preserve stored relay origins

* fix(apns): advance versions across deletion

* fix(apns): harden legacy state import

* fix(apns): redact legacy import errors

* fix(apns): reserve version successor

* fix(apns): bound legacy timestamp imports

* refactor(apns): extract payload builders
2026-07-16 01:52:15 -07:00
Peter Steinberger
7e1d93d36d refactor(deadcode): enforce full-repository hard zero (#108717)
* refactor(deadcode): enforce full-repository hard zero

* refactor(deadcode): drop rebased test-support leftovers

* refactor(openai): remove stale TTS test bridge

* test(config): cover bundled tuple baseline merging

* fix(deadcode): reject external Windows paths

* test(config): preserve heterogeneous tuple coverage
2026-07-16 00:16:20 -07:00
Peter Steinberger
7181233320 fix(ci): settle deadcode hard-zero sweep debt across guard lanes
The repository hard-zero sweep (bae9752c5a, #108641) left five CI lanes
red on every PR: a stale max-lines baseline entry for the shrunken
live-cache-regression-runner, session-accessor debt baseline above the
real count, two sqlite-reliability contract types un-exported while
scripts/lib still imports them, a deleted-file entry on the production
lint-suppression allowlist, and a stale wildcard-barrel assertion in the
parallels smoke model test.
2026-07-15 23:16:10 -07:00
Peter Steinberger
906c7332d2 fix(deadcode): keep production scan test-free (#108648) 2026-07-15 22:56:34 -07:00
Peter Steinberger
bae9752c5a refactor(deadcode): enforce repository hard zero (#108641) 2026-07-15 22:40:00 -07:00
Peter Steinberger
c077e801dd refactor(memory-core): split manager sync operations (#108583) 2026-07-15 21:12:22 -07:00
Josh Avant
4b7f193c9d fix: gateway-owned work fails through same-host relay (#108423)
* fix(gateway): dispatch owned runtime work in process

* fix(gateway): publish canonical approval resolutions internally

* fix(gateway): seal owned approval runtime lifecycle

* fix(gateway): keep instance runtime contracts acyclic

* fix(gateway): remove stale runtime type imports

* fix(agents): reconcile ambiguous recovery timeouts

* refactor(gateway): constrain internal approval methods

* fix(agents): route orphan recovery in process

* fix(agents): preserve aborted restores for recovery

* fix(agents): keep lifecycle waits in process

* test(agents): type lifecycle runtime mock

* test(agents): complete restored session fixture
2026-07-15 20:51:57 -07:00
Peter Steinberger
7f9d519fcb fix(ci): repair provider fold validation (#108564)
* fix(ci): repair provider fold validation

* fix(qa): model debugger web entry
2026-07-15 19:49:02 -07:00
Peter Steinberger
08ecf63bb6 fix(deadcode): resolve strict-workspace fallout from bundled plugin roots
The strict knip workspaces landed in #108547 flagged seven files. Two are
convention-resolved and become explicit entries (discord configured-state via
the package-state probes, qa-lab cli via the SDK facade basename resolver);
the other five were dead barrels/wrappers superseded by canonical modules and
are deleted (browser bridge/cdp barrels, discord timeouts wrapper, openai
register.runtime, qa-lab model-selection wrapper).
2026-07-16 03:08:17 +01:00
Peter Steinberger
169ed48866 refactor(deadcode): tighten Anthropic extension roots (#108547) 2026-07-15 18:35:24 -07:00
Peter Steinberger
d4183facf1 refactor(deadcode): tighten extension root modeling (#108538) 2026-07-15 18:18:23 -07:00
Peter Steinberger
ab3f057cfd refactor: split plugin loader by responsibility (#108513)
* refactor(plugins): split plugin loader

* refactor(plugins): keep loader helpers internal

* refactor(plugins): remove unused loader type import

* test(plugins): cover split runtime registry boundary
2026-07-15 17:51:13 -07:00
Peter Steinberger
d3dcb36895 refactor(deadcode): tighten Google and xAI extension roots (#108523) 2026-07-15 17:34:53 -07:00
Peter Steinberger
9bee0d4cb8 refactor(deadcode): tighten more provider extension roots (#108515) 2026-07-15 17:05:21 -07:00
morluto
16801bf4f0 fix(agents): prevent subagent registry resurrection (#105793)
* fix(agents): retire legacy subagent registry JSON

Co-authored-by: morluto <76467478+morluto@users.noreply.github.com>

* fix(agents): keep migration decision internal

Co-authored-by: morluto <76467478+morluto@users.noreply.github.com>

* style(agents): format migration decision type

Co-authored-by: morluto <76467478+morluto@users.noreply.github.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-15 17:01:42 -07:00
Peter Steinberger
9c065c895e refactor(cli): split capability commands by domain (#108419)
* refactor(cli): split capability commands by domain

* fix(cli): keep capability metadata type private
2026-07-15 16:57:21 -07:00
Peter Steinberger
370b80b74d refactor(deadcode): tighten provider extension roots (#108497) 2026-07-15 16:23:47 -07:00
Peter Steinberger
dc7f167227 refactor(ui): split app sidebar responsibilities (#108422)
* refactor(ui): split app sidebar responsibilities

* fix(ui): keep sidebar menu action type private
2026-07-15 15:52:35 -07:00
Peter Steinberger
8aa2392003 refactor(deadcode): harden unused export coverage (#108484) 2026-07-15 15:49:30 -07:00
Peter Steinberger
32a84d093f refactor(agents): split agent command orchestration (#108424)
* refactor(agents): split agent command orchestration

* test(agents): tighten cleanup ownership proof

* refactor(agents): keep command helper types private

* test(cli): track refactored secret resolution callsite

* fix(agents): preserve post-run session ownership

* fix(agents): preserve media recovery across command split
2026-07-15 13:42:05 -07:00
Dallin Romney
77d07dc3e9 refactor(qa): migrate Telegram scenarios into QA Lab (#108430)
* refactor(qa): migrate Telegram scenarios into QA Lab

* refactor(qa): remove retired Telegram runner exports
2026-07-15 12:55:00 -07:00
clawsweeper[bot]
15a304d6e1 fix(agents): wake owning session after generated-media direct delivery (#108024)
* fix(agents): wake owning session after generated-media direct delivery

When a background media generation (image/music/video) completes but the
requester's agent turn cannot be woken, delivery falls back to sending the
media straight to the channel. The owning session never learned about it,
leaving the attachment orphaned with no agent follow-up.

Queue a system event plus a scoped heartbeat wake after both direct
fallback paths (announce delivery and the shared background lifecycle) so
the agent continues the conversation in its own voice. Subagent requester
sessions skip the heartbeat since their completions route via announce.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(agents): persist generated media session handoffs

Co-authored-by: Molty <steipete@gmail.com>

* chore: prune max-lines baseline

* fix(agents): harden durable media handoffs

* fix(agents): charge media retries once

* chore: refresh max-lines baseline

* fix(agents): persist delivery settlement cleanup

* fix(agents): fence interrupted media delivery

* fix(agents): fence durable handoff admission

* fix(agents): reconcile terminal handoffs at retry limit

* fix(agents): align durable handoff types

* test(agents): type durable handoff fixtures

* fix: satisfy session delivery lint

* fix: avoid payload map spreads

* fix: satisfy durable handoff gates

* test: align generated media handoff expectations

* fix: avoid serializing session recovery state during load

---------

Co-authored-by: Molty <steipete@gmail.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 12:54:12 -07:00
Peter Steinberger
d37e873420 refactor(plugins): split plugin type contracts (#108416)
* refactor(plugins): split plugin type contracts

* refactor(plugins): split provider type contracts

* refactor(plugins): extract plugin definition contract
2026-07-15 12:51:39 -07:00
Peter Steinberger
b4b6afadd3 refactor(codex): split app-server thread lifecycle (#108414)
* refactor(codex): split thread lifecycle

* refactor(codex): keep lifecycle types internal
2026-07-15 11:23:47 -07:00
Peter Steinberger
163a9ab5bf refactor(telegram): split message dispatch test suite (#108377)
* refactor(telegram): split message dispatch test suite

* chore: prune stale max-lines baseline
2026-07-15 10:38:37 -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
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
Peter Steinberger
4e78d91c0f refactor(sessions): split session accessor by ownership (#108247) 2026-07-15 06:47:29 -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
Peter Steinberger
ddc9ec3f36 feat(discord): opt-in Discord Activities widget support (#107442)
Adds a Discord Activities integration so an agent can show a self-contained
HTML widget to Discord users, opened as a sandboxed Activity inside the client.
Off by default: routes, the discord_widget tool, and the launch handler register
only when channels.discord.activities is configured. OAuth identifies the user
and gates on the account allowlist; widget lookup is capability- or
instance-validated; token exchange is rate-limited; widget HTML runs in a
no-network sandboxed iframe.
2026-07-15 04:07:46 -07:00
Peter Steinberger
de8c904577 refactor(agents): privatize subagent owner surfaces (#108248)
* refactor(agents): privatize subagent owner surfaces

* chore(deadcode): shrink export baseline
2026-07-15 03:30:21 -07:00
Peter Steinberger
bb3fae8348 refactor(telegram): split message dispatch (#108228)
* refactor(telegram): split message dispatch

* fix(telegram): keep dispatch types internal

* fix(telegram): satisfy dispatch lint
2026-07-15 03:25:54 -07:00
Peter Steinberger
b2a336a2b9 refactor(policy): split policy state evidence (#108210) 2026-07-15 02:56:52 -07:00
Peter Steinberger
3bd9e280e4 refactor(acp): trim internal dead exports (#108170)
* refactor(acp): trim internal dead exports

* chore(deadcode): refresh export baseline
2026-07-15 01:37:08 -07:00
Peter Steinberger
ad1071bcd0 refactor: split agent runner execution and preserve probe state (#108137)
* refactor(auto-reply): split agent runner execution

* fix(auto-reply): preserve concurrent probe selection

* fix(auto-reply): refresh rejected probe cache

* fix(auto-reply): preserve probe cache updates

* fix(auto-reply): preserve concurrent probe cache state

* fix(auto-reply): guard persisted probe generation

* fix(auto-reply): snapshot nested probe cache state

* fix(auto-reply): merge probe cleanup cache updates

* fix(auto-reply): privatize fallback cycle types
2026-07-15 01:35:37 -07:00
Dallin Romney
ad34552473 refactor(qa): migrate Matrix scenarios into QA Lab (#103589)
* refactor(qa): migrate Matrix scenarios into QA Lab

* fix(qa): build Matrix boundary declarations

* fix(qa): preserve Matrix preview boundaries

* fix(qa): preserve Matrix hot reload semantics

* fix(qa): harden Matrix destructive scenario failures

* fix(qa): harden Matrix scenario isolation

* fix(qa): close Matrix negative scenario blind spots

* fix(qa): isolate Matrix substrate state

* fix(qa): harden Matrix transport substrate

* fix(qa): preserve Matrix profile and event parity

* fix(qa): preserve explicit scenario models

* fix(qa): align Matrix scenario coverage taxonomy

* fix(qa): format Matrix allowlist cleanup

* fix(qa): satisfy migrated Matrix CI contracts

* fix(qa): reconcile Matrix migration with current main

* fix(qa): break scenario flow import cycle

* fix(qa): reconcile Matrix max-lines ownership

* fix(qa): address Matrix review boundaries

* fix(qa): remove stale Matrix lint suppression

* fix(qa): adopt split Matrix E2EE flows

* fix(qa): export Matrix scenario record guard

* fix(qa): align Matrix migration with privatized helpers

* refactor(qa): finish Matrix QA Lab ownership

* fix(qa): preserve Matrix suite defaults

* fix(qa): reconcile Matrix cleanup with current main

* test(qa): follow canonical Matrix profile size

* fix(qa): guard stale Matrix QA package output

* docs(qa): redirect retired Matrix QA pages

* refactor(qa): finish Matrix runner rename

* test(qa): assert Matrix defaults through profile resolver

* docs: refresh QA cleanup map

* fix(qa): privatize Matrix storage discovery
2026-07-15 01:22:20 -07:00
Peter Steinberger
92d06e51bb refactor(mcp): trim internal server exports (#108076)
* refactor(mcp): remove dead internal exports

* chore(deadcode): refresh export baseline
2026-07-14 23:47:38 -07:00
Peter Steinberger
b9a837ec8d refactor(agents): split agent session responsibilities (#107948) 2026-07-14 22:25:08 -07:00
Peter Steinberger
eebc0dbc33 refactor(auto-reply): split agent runner execution (#107985)
* refactor(auto-reply): split agent runner execution

* style(auto-reply): satisfy promise executor lint

* fix(ci): align refactor baselines and test types

* fix(ci): prune stale max-lines baseline
2026-07-14 22:20:25 -07:00
Peter Steinberger
290836cafd refactor(config): split config I/O responsibilities (#107983)
* refactor(config): split config I/O

* fix(config): align split modules with guardrails

* fix(config): remove dead write metadata helper

* style(config): format write safety imports

* fix(config): preserve comment-loss warning on split writes
2026-07-14 22:11:22 -07:00
Peter Steinberger
aac4c16f84 refactor(doctor): split Codex route diagnostics (#107955) 2026-07-14 22:02:56 -07:00
Peter Steinberger
3ce986d526 fix(ci): restore Discord architecture and max-lines gates (#108013)
* fix(discord): break channel info cache cycle

* chore(ci): prune stale Discord max-lines baseline
2026-07-14 21:52:09 -07:00
Peter Steinberger
decdaf1718 fix(ci): restore session history types and max-lines gate (#107987)
* fix(gateway): type inline session history messages

* fix(ci): prune stale max-lines baseline
2026-07-14 21:24:40 -07:00
Peter Steinberger
3eb8b3a0f8 refactor(plugins): split plugin installation flows (#107960)
* refactor(plugins): split plugin installation flows

* fix(plugins): keep compatibility helper private
2026-07-14 20:51:21 -07:00