Commit Graph

1418 Commits

Author SHA1 Message Date
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
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
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
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
Peter Steinberger
e0ffbd90d9 fix(ci): isolate bounded metadata retries (#108804)
* fix(ci): bound Mantis runner IP retries

* fix(e2e): isolate Windows metadata retries

* fix(ci): validate complete runner IPv4

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

---------

Co-authored-by: Alix-007 <li.long15@xydigit.com>
2026-07-16 03:39:31 -07:00
Peter Steinberger
e95577ded7 fix(e2e): bound macOS Discord host requests (#108880) 2026-07-16 03:36:20 -07:00
Alix-007
f0720a856d fix(e2e): time out npm registry upstream requests (#108718) 2026-07-16 02:06:25 -07:00
Alix-007
81e626a6d1 fix(e2e): bound MinGit asset downloads (#108741) 2026-07-16 02:02:09 -07:00
Alix-007
b7270eccc6 fix(e2e): bound Windows prerequisite metadata fetches (#108698) 2026-07-16 01:51:26 -07:00
Peter Steinberger
a7d5386896 improve: speed up ring-zero QA smoke (#108694)
* ci: speed up ring-zero QA smoke

* ci: scope QA sticky cache to Docker lane

* ci: keep QA dependency setup on actions cache

* test: restore modern Docker QA proof
2026-07-16 01:12:40 -07:00
Peter Steinberger
7a398fe6f8 fix(update): preserve plugin policy on failures (#108661) 2026-07-16 00:38:44 -07:00
Alix-007
862f915b55 fix(e2e): keep gateway suspension probes within deadline (#108063)
* fix(e2e): bound gateway network HTTP probes

* test(e2e): align timeout proof with repo guards

* test(e2e): use a typed stalled response
2026-07-15 22:52:59 -07:00
Alix-007
3009338a9a fix(e2e): stop multi-node health checks hanging past deadline (#108065)
* fix(e2e): bound multi-node health probes

* test(e2e): track multi-node timeout temp files
2026-07-15 22:47:43 -07:00
Peter Steinberger
bae9752c5a refactor(deadcode): enforce repository hard zero (#108641) 2026-07-15 22:40:00 -07:00
Peter Steinberger
e7cba0e4d5 fix: provider dead exports no longer block changed checks (#108592)
* fix(ci): clean provider dead exports

* test(extensions): satisfy provider contract types

* refactor(openai): tighten provider runtime factory
2026-07-15 22:33:54 -07:00
Peter Steinberger
154d1277e1 fix(qa): repair package Telegram harness boundaries (#108499)
* fix(qa): keep packaged entry off private transport

* fix(qa): lazy-load private transport runtime

* fix(qa): pass relative package artifact path

* fix(qa): isolate packaged bus protocol

* fix(qa): mount package scenario catalog
2026-07-15 19:24:55 -07:00
Peter Steinberger
3ee408b7b5 fix(qa): isolate Crabline from package live lanes (#108472)
* fix(qa): isolate Crabline from package live lanes

* fix(qa): narrow optional smoke runtime

* ci(release): avoid unrelated Crabline install
2026-07-15 15:09:07 -07:00
Peter Steinberger
f2fa99a414 fix(ci): install Crabline for package Telegram harness (#108468) 2026-07-15 14:41:04 -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
Peter Steinberger
a99b5a686b fix(ci): authenticate live Codex Docker release probe (#108400)
* test(codex): route live Docker probe through OpenAI auth

* test(docker): assert bounded Codex error handling
2026-07-15 10:32:15 -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
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
morluto
1a34950d9c fix(commitments): keep heartbeats responsive with large queues (#105780)
* fix(commitments): migrate store to sqlite

Replace steady-state JSON persistence with typed shared-state rows and a doctor-only verified import for shipped legacy data.

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

* fix(commitments): satisfy migration gates

* fix(commitments): type sqlite counts defensively

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-15 03:58:03 -07:00
Peter Steinberger
75db23f3fc fix: prevent stale rescue approvals from executing (#108147)
* fix(system-agent): persist rescue approvals in sqlite

Co-authored-by: Yung-Chen Tang <46495124+yungchentang@users.noreply.github.com>

* fix(system-agent): narrow rescue expiry clock

* test(system-agent): isolate rescue docker inference

* test(system-agent): align rescue docker doctor contract

* test(system-agent): accept canonical model shape

* fix(system-agent): refuse remote doctor repairs

* fix(infra): break rescue migration import cycle

* test(system-agent): lock rescue publish ordering

* test(system-agent): align rescue harness assertions

---------

Co-authored-by: Yung-Chen Tang <46495124+yungchentang@users.noreply.github.com>
2026-07-15 01:53:00 -07:00
Dallin Romney
e9c8cad99e fix(ci): support frozen Codex binding sidecars (#108158) 2026-07-15 01:38:30 -07:00
Dallin Romney
c421a3b2e6 feat: add reusable Parallels Windows test setup (#107881)
* test: route Parallels Windows setup

* test: own Parallels Windows baseline setup

* docs: point Windows proof to Parallels sidecar
2026-07-14 23:15:57 -07:00
Peter Steinberger
c8733ea674 fix(release): run candidate smoke from trusted tooling 2026-07-15 06:56:04 +01:00
Peter Steinberger
9275f476f4 fix(release): retry flaky fresh Parallels lanes 2026-07-15 06:24:32 +01:00
xydt-tanshanshan
f638cbd0f9 fix(doctor): preserve allowlist entries for version-bound runtime plugins during stale config scan (#107285)
* fix(doctor): preserve allowlist entries for version-bound runtime plugins (codex) during stale config scan

* fix(doctor): restore codex to scanner stale expectation, protect at repair-sequencing

Scanner now flags codex in plugins.allow as stale so diagnostics are visible.
Repair-sequencing preserves the entry via preservePluginIds which already
includes VERSION_BOUND_RUNTIME_PLUGIN_IDS.

* fix(doctor): scope version-bound runtime plugin preservation to allow surface only

ClawSweeper P2: VERSION_BOUND_RUNTIME_PLUGIN_IDS was applied globally
across all stale config surfaces (deny, entries, slots, channels, etc.),
but only plugins.allow needs preservation. Move to a surface-scoped
parameter surfacePreservePluginIds so codex is preserved only in allow.

* fix(doctor): harden version-bound allowlist repair

* fix(doctor): retain version-bound plugin policy

* fix(doctor): align version-bound plugin diagnostics

Co-authored-by: hailory <hailory@xydigit.com>

---------

Co-authored-by: hailory <hailory@xydigit.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-14 22:14:11 -07:00
Peter Steinberger
a6a0716486 feat(setup): rename Crestodian to OpenClaw system agent
User-facing name is now OpenClaw (the system speaks); internal code name is
system-agent. Gateway methods crestodian.* -> openclaw.chat/openclaw.setup.*,
agent tool -> openclaw, reserved agent ids openclaw + retired crestodian.
openclaw setup routes: onboarding flags -> onboard, -m/--yes -> system agent,
bare configured interactive -> OpenClaw chat, unconfigured -> onboarding.
Hidden crestodian CLI and /crestodian TUI aliases kept; docs moved to
docs/cli/openclaw.md with redirect stub. macOS/Android strings in lockstep.

Refs #107237
2026-07-14 11:03:02 -07:00
Jesse Merhi
00364ee777 improve: warn before non-ClawHub plugin installs (#102197)
Merged via squash.

Prepared head SHA: e08d9e737d
Co-authored-by: jesse-merhi <79823012+jesse-merhi@users.noreply.github.com>
Co-authored-by: jesse-merhi <79823012+jesse-merhi@users.noreply.github.com>
Reviewed-by: @jesse-merhi
2026-07-15 03:25:36 +10:00
Peter Steinberger
1551fc9e43 test(e2e): isolate Pond baseline MCP tool (#107128) 2026-07-13 21:45:36 -07:00
Peter Steinberger
92962af779 refactor: prune unsupported OPENCLAW env overrides (#105970)
* refactor: prune unsupported env overrides

* refactor: prune unsupported env overrides

* chore: keep dead export baseline current

* fix: preserve packaged telemetry override
2026-07-13 00:36:02 -07:00
Peter Steinberger
adf6b08ab4 refactor: consolidate duration parsing and formatting (#105988)
* refactor: consolidate duration handling

* docs: leave release notes to release workflow

* fix: preserve build timing precision

* ci: align plugin sdk surface budgets
2026-07-12 23:38:22 -07:00
Vincent Koc
7c62ae1000 refactor(parallels): remove unused macOS exec helpers (#105538) 2026-07-12 19:02:54 +02:00
Vincent Koc
ef29fe1270 refactor(scripts): remove telegram runner testing alias (#105502) 2026-07-12 17:50:24 +02:00
Vincent Koc
796fc409f6 fix(e2e): echo dynamic mobile markers 2026-07-12 15:22:19 +02:00
Peter Steinberger
6ec82a907a fix(ci): support frozen session-store proof (#105337)
* fix(ci): support frozen session-store proof

Keep current targets SQLite-strict while validating pre-cutover release targets through their persisted JSON session contract.

* style(test): format frozen session fixture
2026-07-12 12:46:01 +01:00
Peter Steinberger
e0f45bfbf0 feat(tooling): enforce indexed access checks in root tests (#105223)
* feat(tooling): enforce indexed access checks in root tests

* style(tooling): clarify scoped package guard
2026-07-12 10:42:07 +01:00
Peter Steinberger
e580275464 feat(tooling): enforce noUncheckedIndexedAccess in the scripts lane (NUIA phase 5) (#105180)
* feat(tooling): enforce noUncheckedIndexedAccess in the scripts lane

Burns down all 153 scripts-lane errors (bench aggregation, release
checks, i18n inventories, argv indexing) and flips the flag in
tsconfig.scripts.json. Direct-Node-executed release harness scripts use
local narrowing instead of workspace imports, which do not resolve
under plain node execution. Benchmark measured loops untouched.

* fix(scripts): import expect helpers via relative package sources

tsconfig path aliases resolve from cwd under tsx, so release wrapper
scripts running against old release target cwds could not resolve
@openclaw/normalization-core (not a linked root dependency). Relative
package-source imports match the established pattern on the adjacent
lines and are cwd-independent; old-target planning verified directly.
2026-07-12 10:17:00 +01:00
Vincent Koc
648d742ee7 fix(ci): validate sqlite Codex transcripts 2026-07-12 16:15:44 +08:00
Vincent Koc
8ac8754679 fix(ci): read Codex live sessions from sqlite 2026-07-12 15:50:47 +08:00
Vincent Koc
efdce6754d fix(ci): align scheduled e2e checks with sqlite sessions 2026-07-12 15:22:37 +08:00
Vincent Koc
a2c2c5576e fix(qa): restore OpenAI web search smoke 2026-07-12 07:17:48 +02:00
Vincent Koc
5019d378af fix(e2e): install lifecycle signal handlers before sampling 2026-07-12 04:28:22 +02:00
Peter Steinberger
0ae352a648 fix(test): reclassify sqlite flip proof harness (#104784) 2026-07-11 16:38:37 -07:00
Peter Steinberger
f09c709532 fix(nodes): preserve MCP hot-plug pairing (#104745)
* fix(nodes): preserve MCP hot-plug pairing

Fixes #104743

* chore: defer node MCP release note
2026-07-11 15:37:43 -07:00
Josh Lehman
0a8e3604ba refactor: flip sessions and transcripts to sqlite storage (#98236)
* refactor(sessions): migrate runtime storage to sqlite

* test(sessions): fix sqlite CI regressions

* test(sessions): align remaining sqlite fixtures

* fix(codex): require sqlite trajectory recorder

* test(sessions): align orphan recovery sqlite fixture

* test(sessions): align sqlite rebase fixtures

* fix(sessions): finish current-main integration of the sqlite flip

Resolve the whole-store SDK removal across its owner boundary: drop the
loadSessionStore re-export and the registry whole-store wrappers, wire
hasTrackedActiveSessionRun into gateway chat, complete the
preserveLockedHarnessIds cleanup contract, flip the codex thread-history
import to storePath targets, and port remaining main-side tests from
file-store helpers to session accessor reads.

* chore: drop committed pebbles log, revert plugin-inspector bump, refresh generated docs

Remove the 1.8k-line .pebbles/events.jsonl work log from the branch, restore
the plugin-inspector advisory lane to main's pinned 0.3.10 so the supply-chain
bump gets its own review, and regenerate docs_map, the plugin SDK API baseline,
and the export-surface ratchet for the merged tree.

* feat(sessions): keep archived transcripts by default with zstd cold storage

Codex-style retention: deleting or resetting a session archives its
transcript as a zstd-compressed JSONL artifact (plain when the runtime
lacks node:zlib zstd) and keeps it until the disk budget evicts oldest
first. resetArchiveRetention now governs both deleted and reset archives
and defaults to keep; maxDiskBytes defaults to 2gb so retention stays
bounded, with archives evicted before live sessions. The cron reaper
follows the same knob instead of deleting archives on its own timer.

* fix(state): converge agent DB migration lineages and bound database growth

Merge coherence: run both structure-gated legacy memory-schema repairs
(flip-lineage drop, main-lineage identity rebuild) before the flip
migration so pre-flip v1/v2 and pre-merge flip v1/v4 databases all
converge, and hoist foreign_keys=OFF outside the schema transaction
where the pragma was silently ignored and the v1 sessions rebuild
cascade-deleted session_entries.

Growth guards: fresh agent DBs enable auto_vacuum=INCREMENTAL, WAL
maintenance releases freed pages in bounded passes (never a blocking
full VACUUM), and doctor reports state/agent DB bloat from freelist
stats.

* fix(codex): resolve the store path for thread-history import via the SDK

The supervision catalog passed the legacy sessionFile locator to the
storePath-targeted transcript mirror; resolve the agent store path with
the session-store SDK helper instead of a runtime-object seam so test
fakes and headless callers need no extra surface. Drop the obsolete
missing-session-id preprocessing case: sessions rows are NOT NULL on
session_id and upsert repairs id-less patches at write time.

* fix(sessions): fail safe on malformed disk-budget config and doctor stat errors

A malformed explicit maxDiskBytes disables the budget instead of
falling back to the destructive 2gb default the user never chose, and
the doctor bloat check skips databases whose paths stat-fail instead of
aborting doctor.

* fix(sessions): complete sqlite conflict translations

* test(sqlite): align hardening checks with maintenance

* test(sessions): inspect compressed transcript archives

* fix(tests): await session seeds and drop unused helpers flagged by CI lint

The five unawaited writeSessionStoreSeed calls raced their SQLite seeds
against the assertions, failing compact shards; the bloat probe drops a
useless initializer and the merged tests drop now-unused helpers.

* test(sessions): type legacy proof events directly

* test(sessions): align hardening contracts

* perf(sessions): read usage transcript sizes from SQL aggregates

Usage/cost scans walked every session and materialized every transcript
event just to re-stringify it for a byte estimate — the #86718 stall
class reborn on the DB. readTranscriptStatsSync sums stored JSON bytes
in SQLite without loading a single row.

* fix(sessions): re-root foreign-root transcript paths onto the current sessions dir

Restored backups, moved OPENCLAW_STATE_DIR, and rehearsal copies carry
absolute sessionFile paths from the old root; the containment fallback
kept those foreign paths, so migration read (and would archive) files in
the original root and reported local copies missing. Re-root the
canonical agents/<id>/sessions suffix onto the current dir when the file
exists there; genuine cross-root layouts still fall through unchanged.

* test(agents): seed harness admission through sqlite

* fix(sqlite): close agent db on pragma setup failure

* fix(doctor): compact and retrofit incremental auto-vacuum after session import

The migration is the sanctioned offline window: post-import compact
reclaims import churn and applies auto_vacuum=INCREMENTAL to databases
created before the fresh-DB pragma existed, so runtime maintenance can
release pages in bounded passes on every install.

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-11 14:50:37 -07:00
Peter Steinberger
ac4ecdb4e0 test(e2e): live-model scenarios for node-hosted MCP tools and skills (#104699)
* test(e2e): live-model scenarios for node-hosted MCP tools and skills

Adds --live to the node-plugin pond E2E: three real Anthropic
(claude-sonnet-4-6) agent turns prove the model can (1) call a node-hosted
MCP tool with a proof token verified in the MCP server's call log, (2) use
a node-published skill from its context, and (3) disambiguate identically
named tools from two nodes via deterministic node-prefixed names. Requires
ANTHROPIC_API_KEY; mock mode unchanged.

* style: explicit sort compare in pond tool-id assertion
2026-07-11 14:07:31 -07:00