Commit Graph

311 Commits

Author SHA1 Message Date
Vincent Koc e8885eefcd fix(update): migrate plugin config before final validation (#122199)
Stage transitional plugin install-record writes without plugin-schema validation, then require fresh doctor and strict validation for every aggregate plugin change.

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-12 03:16:22 +08:00
Peter Steinberger 3d76246792 refactor: eliminate final export name collisions (#122083)
* refactor: resolve final export name collisions

* refactor: update remaining collision rename consumers

* style: format rebased auth helpers

* test: update remaining session entry mocks

* test: update remaining runtime mock exports

* test: update delivery info path mock

* refactor: reconcile combined collision sweeps

* chore: regenerate collision and sdk baselines
2026-08-11 11:18:24 -07:00
Vincent Koc 0e52f4c4ce fix(update): avoid duplicate configured plugin installs (#122161)
Make updater doctor phases explicit so only post-plugin finalization marks post-core convergence, and strip ambient convergence state from fresh child environments.

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-12 01:56:40 +08:00
Peter Steinberger 7713e8fb74 fix(update): prevent Gateway respawn during package replacement (#103537)
* fix(update): quiesce respawn-pending services

* fix(update): preserve disabled launch agents
2026-08-09 21:23:50 -07:00
Peter Steinberger f4e62523af fix(update): preserve upstream after pinned dev updates (#121328) 2026-08-09 18:50:12 -07:00
Peter Steinberger ef167715e3 fix(update): bind managed handoffs to install root (#121288) 2026-08-09 17:32:02 -07:00
Jason (Json) d9e43b147a fix: prevent startup failures from obsolete managed plugin shadows (#121261)
* fix: retire stale bundled plugin shadows after core updates

* test: type convergence call ordering
2026-08-09 17:00:24 -06:00
Peter Steinberger 08c3c776f9 fix(update): keep managed gateway updates in the correct profile (#113901)
* fix(update): keep managed gateway state in its profile

* refactor(update): scope managed profile finalization

* chore(update): remove stale env import

* test(update): narrow completion call lookup
2026-08-09 09:32:57 -07:00
Peter Steinberger 8616c0c374 refactor: finish shared test helper migrations (#120996)
* test: finish shared helper migrations

* test: fix helper migration CI

* style: fix test import ordering

* test(acpx): restore deferred void types

* test: fix helper migrations after rebase
2026-08-09 06:00:06 -07:00
Vincent Koc 1471881af7 fix(plugins): preserve install records during recovery (#121045)
* fix(plugins): canonicalize install record persistence

Preserve canonical fields, passthrough metadata, untouched record identity, and deterministic serialized ordering across SQLite and post-core handoff.

Punchcard-Session: amber-workshop-workshop-36
Co-authored-by: Galin Iliev <5711535+galiniliev@users.noreply.github.com>

* fix(doctor): block invalid plugin record mutations

Preflight persisted and legacy install-record state before registry repair, package cleanup, generation retirement, archival, or state-directory moves.

Punchcard-Session: amber-workshop-workshop-36
Co-authored-by: Galin Iliev <5711535+galiniliev@users.noreply.github.com>

* fix(plugins): harden install record map ownership

Punchcard-Session: amber-workshop-workshop-36
Co-authored-by: Galin Iliev <5711535+galiniliev@users.noreply.github.com>

* fix(update): preserve special plugin ids in payload checks

Punchcard-Session: amber-workshop-workshop-36
Co-authored-by: Galin Iliev <5711535+galiniliev@users.noreply.github.com>

* test(doctor): assert canonical install record maps

Punchcard-Session: amber-workshop-workshop-36
Co-authored-by: Galin Iliev <5711535+galiniliev@users.noreply.github.com>

* test(doctor): preserve invalid plugin index fixtures

Punchcard-Session: amber-workshop-workshop-36
Co-authored-by: Galin Iliev <5711535+galiniliev@users.noreply.github.com>

---------

Co-authored-by: Galin Iliev <5711535+galiniliev@users.noreply.github.com>
2026-08-09 20:24:40 +08:00
Dallin Romney dcdbd7aab6 fix(update): prevent stable upgrade notices on extended-stable (#118518)
* fix(update): keep extended-stable update notices on channel

* fix(update): repair extended-stable CI checks

* fix(update): retain verified extended-stable channel

* fix(update): normalize gateway install surface

* test(update): split effective channel coverage

* fix(update): resolve verified extended-stable status paths

* fix(update): preserve Sparkle fallback on missing channel

* fix(update): restore effective channel after rebase

* fix(update): repair rebased CI coverage
2026-08-09 16:01:14 +08:00
Peter Steinberger e9d3cf1a64 fix(daemon): preserve file-backed gateway auth secrets across service regeneration (#120458) 2026-08-07 21:19:33 -07:00
Peter Steinberger f4387b7a5e feat(plugins): support the Agent Plugins bundle format (#120115)
* feat(plugins): support the Agent Plugins bundle format

* docs(plugins): document the Agent Plugins bundle format

* test(agents): preserve agent bundle runtime discovery

* fix(plugins): isolate Agent Plugins data-dir failures and align MCP support reporting

* docs(plugins): list Agent Plugins in the canonical plugin-format guides

* fix(plugins): gate Agent Plugins detection on schema, pure inspection, root-relative cwd

* fix(plugins): record Agent Plugins data-dir ownership explicitly

* docs(plugins): cover Agent Plugins in the CLI install detection guide

* fix(plugins): carry Agent Plugins data-dir and transport contracts through external MCP projections
2026-08-07 02:55:08 -07:00
Vincent Koc b8b878ed33 fix(plugins): preserve startup release during repair (#120085)
* fix(plugins): preserve startup compatibility version

* chore(ci): refresh merge context
2026-08-07 09:37:33 +08:00
Vincent Koc ef11eae39b fix(plugins): preserve install index state across failures (#119228)
* fix(plugins): preserve install index policy config

* fix(plugins): restore complete install index state

* fix(plugins): fence install index rollback

* fix(plugins): fence generic install index rollback

* fix(plugins): keep lifecycle lease context private

* test(cli): align plugin index rollback mocks

* test(plugins): enforce index rollback receipts

* fix(plugins): serialize install rollback with config commit

* test(plugins): keep legacy index writer mock private
2026-08-05 01:04:17 +08:00
Peter Steinberger 6ee406b1bf fix(plugins): repair stale host packages after OpenClaw upgrades (#118304)
* fix(plugins): repair stale registered host package links

* refactor(plugins): isolate authoritative host-link repair owners

* fix(plugins): constrain host repair to registered install roots
2026-08-02 18:10:26 -07:00
WhatsSkiLL 428a9e9cbc fix(update): return failure when dirty checkout blocks update (#117452)
Co-authored-by: IWhatsskill <284122573+IWhatsskill@users.noreply.github.com>
2026-08-01 11:11:19 -07:00
Peter Steinberger d88c338a82 fix(update): keep rolled-back Git installs runnable (#117294)
* fix(update): restore runtime after git rollback

* chore(update): leave changelog to release automation

* test(update): cover rollback restart policy

* test(update): satisfy caller fixture types
2026-08-01 02:20:13 -07:00
Sasan 6938f7dddb fix: allow gateway service commands for named profiles (#116314)
* fix: gateway service commands refuse a named profile or relocated OPENCLAW_HOME

- Resolve the default install identity against the canonical state directory
  for the active OpenClaw home and profile instead of the unprofiled OS
  account default.
- `--profile <name>` / `--dev` project `.openclaw-<profile>` state and config
  paths, so every named profile was classified as isolated state and refused
  `install`, `start`, `stop`, `restart`, `uninstall`, Doctor service repair,
  and self-update service handling.
- `OPENCLAW_HOME` relocates all OpenClaw path defaults and is documented for
  running as a dedicated service user; a relocated home is now an install
  identity. `HOME` alone still is not.
- An `OPENCLAW_STATE_DIR` or `OPENCLAW_CONFIG_PATH` pointing outside those
  canonical paths is still treated as isolated state.
- Recovery guidance in the refusal message now names the paths that must match.

Verified: focused vitest shards for the changed suites plus the daemon, CLI,
and doctor suites that consume the identity check; tsgo core and core-test
lanes; oxlint; docs format, MDX, link, and map checks.

* fix(gateway): keep relocated homes isolated

* fix(config): validate service profile identity

* fix(daemon): enforce named-profile service ownership

* fix(update): reject drifted service selectors before probes

* test(windows): prove scheduled task lifecycle

* test(windows): harden scheduled task proof cleanup

* test(windows): bind lifecycle proof to checkout

* test(windows): normalize cleanup exit status

* test(windows): verify effective task privilege

* test(windows): protect scheduled task proof roots

* test(windows): prove listener-owned task lifecycle

* test(windows): fix scheduled task proof contracts

* test(windows): remove redundant mock coercions

* test(windows): measure fallback before task probes

* test(windows): prove scheduled task process origin

* fix(gateway): preserve unmanaged restart fallback

* test(gateway): cover denied restart ownership

* test(gateway): keep restart helper types private

* test(gateway): classify lifecycle helpers as test code

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-08-01 11:28:39 +08:00
Harjoth Khara 895b691c55 fix(daemon): refuse duplicate launchd gateway managers (#97285)
* fix(daemon): block duplicate launchd owners

Co-authored-by: Harjoth Khara <harjoth.khara@gmail.com>

* fix(ci): satisfy launchd docs and lint gates

* fix(ci): remove unused launchd exports

* docs: refresh gateway map

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 13:31:22 -04:00
Simranjit Singh 26b236dae3 fix(update): gateway restart survives inherited cross-user D-Bus environment (#111534)
* fix(update): repair mismatched user bus for restart

* fix(update): preserve custom user bus on restart

* fix(update): preserve effective-user D-Bus transports

* fix(update): preserve effective-user D-Bus transports

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 10:25:10 -04:00
Peter Steinberger 8ec4a059fc fix(codex): keep stressed inference turns isolated and observable (#115893) 2026-07-29 09:11:20 -04:00
Vincent Koc 38abf500ba fix(update): stabilize cross-version dev upgrades (#115651)
* fix(e2e): stabilize cross-version Parallels upgrades

* fix(e2e): avoid inline macOS guest probes

* fix(e2e): detach Windows dev updates

* fix(e2e): detach macOS guest updates with Node

* fix(e2e): initialize skipped upgrade config

* fix(update): use partial clone for dev checkout

* fix(update): keep Windows dev checkouts clean

* fix(e2e): pin Parallels dev update targets

* fix(e2e): own Parallels gateway restarts

* fix(e2e): verify pinned Parallels checkouts

* fix(e2e): forward Parallels update budgets

* fix(e2e): use canonical provider auth choices

* chore: leave changelog to release automation

* test(ui): stabilize route waits on loaded runners
2026-07-29 19:52:34 +08:00
Peter Steinberger 5fe07e4ae8 fix(update): honor declared plugin entrypoints during repair (#115610) 2026-07-29 01:43:30 -04:00
Peter Steinberger 5457165289 fix(cli): honor help, dry-run, and plugin pin contracts (#115464) 2026-07-28 23:01:24 -04:00
Vincent Koc 4ee399c714 fix(update): finalize install switches in fresh process 2026-07-29 00:24:09 +08:00
Peter Steinberger d68ebc8932 fix(cli): keep update dry runs free of mutations (#114803) 2026-07-27 20:10:35 -04:00
Peter Steinberger 9e2ffea0de fix(cli): reject empty update timeout arguments (#114700) 2026-07-27 16:08:00 -04:00
Peter Steinberger c6b2ec28c8 refactor: mechanical dedup batch (protocol types, update-cli bridge, talk fallback) (#114432)
* refactor(onboarding): remove search setup barrel

* refactor(plugins): reuse detected package manifest

* test(update): replace global helper bridges

* refactor(talk): remove dead legacy response fallback

* refactor(protocol): derive root types from schema

The maintainer approved broadening the additive schema-backed type surface without a protocol version bump.

* fix(plugins): drop stale package path import

* test(protocol): type dynamic registry lookups

* docs(talk): explain canonical response boundary

* refactor(talk): enforce canonical response input

* fix(protocol): keep root type exports registry-free

* refactor(update): expose helpers through test facades

* fix(protocol): keep result types on leaf schema modules
2026-07-27 06:55:07 -04:00
Vincent Koc 8029b3bbb8 fix(update): repair plugin config during upgrade finalization (#113324)
* fix(update): repair configured plugins during finalization

* fix(update): allow legacy config through migration
2026-07-25 00:18:59 +08:00
Vincent Koc 218c2fe3a5 fix(update): preserve JSON output during resume (#113298) 2026-07-24 18:56:20 +08:00
Vincent Koc 741ed2d6a8 fix(update): migrate config before plugin convergence (#113280) 2026-07-24 16:55:38 +08:00
Peter Steinberger a12e0f26ee fix(plugins): serialize lifecycle mutations and preserve setup-required installs (#112763)
* fix(plugins): harden concurrent lifecycle mutations

* fix(update): preserve post-core restart snapshot

* fix(update): retain authoritative plugin records on resume

* fix(update): reconcile plugin records after handoff
2026-07-22 23:25:48 -04:00
Jesse Merhi 4a2a600809 feat(channels): add channel-owned setup contracts (#112176)
* feat(channels): add channel-owned setup contracts

* test(channels): align legacy setup fixtures

* chore(channels): regenerate config and SDK baselines after rebase

* fix(update): run fresh doctor after current-process core changes

* fix(channels): align add pre-scan with execution precedence

* style(cli): format channels-cli test additions

* fix(channels): restore option-before-positional channel resolution via metadata arity scan

* fix(channels): keep help flags out of metadata arity escalation

* test(update): mock fresh post-update doctor in current-process suites

* style: format review fixes and correct entrypoint mock type

* fix(channels): register only modern contract options for dual-publishing plugins

* test(update): align downgrade suites with fresh-doctor child invocation

* docs(channels): record empty-contract and input-forwarding invariants

* fix(line): keep the shipped --token switch as a channel access token alias

* fix(signal): stop treating exact cross-family loopback endpoints as bind-aligned

* chore(config): regenerate docs config baselines after second rebase

* style: format rebased channels add tests

* fix(channels): enforce field-key and flag-name agreement in setup contracts

* fix(signal): detect container endpoints for bare --http-url setup

* fix(signal): ignore unconfigured accounts in transport collision checks

* fix(channels): validate negated setup flags in contract and normalizer

* fix(signal): preserve existing transport kind when setup detection is unreachable

* style(signal): use direct boolean check in collision guard

* style(signal): type test config literals

* docs(update): record two-read design of fresh-doctor validation gate

* fix(channels): satisfy post-rebase architecture gates

* docs: refresh channel setup map

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-22 19:57:42 -04:00
zw-xysk 1ee91d4484 fix(cli): silent drop of malformed post-core install-records JSON (#109989)
* fix(cli): fail closed on malformed post-core install-records JSON

Missing handoff files stay optional. Corrupt JSON previously returned
undefined and dropped parent recovery context during update resume.

* test(cli): cover post-core install-records missing vs malformed JSON

Includes live temp-file proof that corrupt handoff is rejected.

* fix(cli): direct corrupt post-core handoffs to doctor

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-20 21:42:30 -07:00
Peter Steinberger 0d91b07f5b refactor(update): split update-command into focused modules under the line limit (#110550) 2026-07-18 09:51:00 +01:00
Shakker 006d6556b8 refactor: expose selected plugin payload checks 2026-07-18 07:13:45 +01:00
Peter Steinberger a89f01abf4 perf(sqlite): fast schema gates, background integrity verification, and downgrade protection (#110271)
* perf(sqlite): gate schema version before integrity scans and quarantine terminal open failures

* feat(gateway): refuse incompatible database schemas at boot and verify integrity in the background

* feat(update): refuse installing builds that cannot open the current databases

* docs: add database schema reference with version history and downgrade guidance

* test(update): tolerate optional runner options in git-mutation mocks

* refactor(update): split npm package-target metadata out of update-check

* chore: model verifier internals for knip and regenerate docs map

* chore(i18n): resync stale iOS localization catalog

* chore: allowlist read-only preflight and verifier raw SQLite access
2026-07-18 05:49:39 +01:00
Vito Cappello cd1ab40632 fix: gateway boots when a configured plugin payload is broken (#110239)
* fix: quarantine broken plugins during gateway startup

* fix(plugins): preserve degraded boot on package read errors

* fix(gateway): emit quarantine diagnostic once

* fix(gateway): refresh plugin quarantine every boot

* fix(gateway): harden plugin payload quarantine

Co-authored-by: VACInc <3279061+VACInc@users.noreply.github.com>

* fix(ci): satisfy plugin quarantine checks

Co-authored-by: VACInc <3279061+VACInc@users.noreply.github.com>

---------

Co-authored-by: VACInc <3279061+VACInc@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-18 03:50:50 +01:00
DaigoSoup 025cecf1f9 fix: avoid false macOS gateway restart failures (#109955)
* fix: wait through launchd KeepAlive restart throttling

* ci: retrigger checks

* test: make update restart test platform-independent

---------

Co-authored-by: Josh Lehman <josh@martian.engineering>
2026-07-17 17:19:23 -07:00
Vito Cappello 748fc04419 fix(update): classify unreadable plugin manifests (#110200)
Co-authored-by: VACInc <3279061+VACInc@users.noreply.github.com>
2026-07-17 16:33:04 -07:00
Shakker 244f4965dc feat: add external gateway supervision policy 2026-07-16 17:01:39 +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
ooiuuii 6828bcac53 fix(update): verify Windows restart listener owners (#108023)
* fix(update): verify Windows restart listener owners

* fix(update): harden Windows listener ownership checks

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

* fix(update): test shipped Windows listener policy

* ci: refresh merge ref after main schema fix

* ci: refresh merge ref

* fix(lint): drop redundant String conversion in pwsh lookup

* ci: pick up periphery workflow fix

* ci: pick up pinned xcodegen installer

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 07:59:13 -07:00
Abner Shang 5ad0d4d6c0 fix: avoid false restart failure during startup migrations (#105544)
* fix: wait for startup migrations on restart

* fix: honor restart readiness caller context

* fix: preserve restart service identity

* fix: refresh readiness context after repair

* fix: bound migration restart wait by wall clock

Co-authored-by: Abner Shang <abner.shang@gmail.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 02:04:49 -07:00
Peter Steinberger 9d4652a46c refactor: make update runtime preflight result explicit (#108760) 2026-07-16 01:48:29 -07:00
Peter Steinberger 48b11d1c66 fix(update): repair obsolete managed Gateway Node (#108668)
* fix(update): refresh stale managed service Node

* refactor(update): keep preflight result internal

* docs(changelog): defer update note to release
2026-07-16 00:41:43 -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
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 0be803ebc0 fix: npm 12 global updates no longer stop at the candidate guard (#108100)
* fix(update): approve candidate lifecycle on npm 12

* test(update): align npm lifecycle argv expectations
2026-07-15 01:10:32 -07:00