Commit Graph

3854 Commits

Author SHA1 Message Date
Omar Shahine
b82a59a798 feat(cli): add openclaw automations alias and reword cron display prose (#114854)
* feat(cli): add openclaw automations alias and reword cron display prose

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WhJ8EiMXue6ADLmHfb7FL6

* test(doctor): update cron doctor prose assertions for automations wording

* fix(plugins): include command aliases in plugin CLI collision detection

Codex review finding on the automations alias: plugin CLI registration
seeded existingCommands from command names only, so a plugin exposing a
top-level command matching an alias-only root name (automations, terminal,
chat) would crash Commander at startup instead of being skipped. Seed from
names plus aliases; regression test covers the alias path.

* fix(cli): rename residual cron prose in CLI and gateway RPC errors

Found in combined dev-gateway E2E: automation not found / unknown automation
id errors, add/edit prose, docs tip, skills-cli mention, and the gateway RPC
not-found message. The CLI missing-get matcher accepts both message forms so
older gateways keep resolving name lookups.

* fix(gateway): keep cron.get missing wording as a wire contract for older CLI matchers

ClawSweeper rank-up: shipped CLI matchers parse 'cron job not found: <id>'
before the name-lookup fallback; the rename stays CLI-display only. Adds a
regression pinning the exact wire form.

* fix(cli): rename doctor and task-summary cron prose flagged in review

Repair-plan advisories, session-registry task summary, and the heartbeat
migration health check now say automations; recreate hints use the
openclaw automations CLI form.

---------

Co-authored-by: Omar Shahine <10343873+omarshahine@users.noreply.github.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-30 07:16:57 -07:00
Peter Steinberger
1cbe674d6a fix(cli): preserve explicit option intent (#116389) 2026-07-30 05:22:50 -07:00
Peter Steinberger
a4c6efc998 fix(cli): preserve installed plugins in agent exec (#116336) 2026-07-30 03:00:17 -07:00
Vincent Koc
d5e3c68632 fix(daemon): block conflicting systemd gateway owners (#116162) 2026-07-30 09:53:38 +08:00
北京刻熵科技有限责任公司
9308557f72 fix(daemon): detect and resolve dueling user+system systemd gateway units
After upgrading on Linux, a user-scope unit
(~/.config/systemd/user/openclaw-gateway.service) and a system-scope unit
(/etc/systemd/system/openclaw-gateway.service) can both exist and both try to
manage the gateway. They bind the same port and each instance's stale-process
detection SIGTERMs the other, producing an endless restart cascade (#79375).

The detector `findInstalledSystemdGatewayScope` checked the user path first and
returned early, so it could never surface that both scopes coexist.

This adds, in three layers:

1. Detection: `findSystemdGatewayInstallation` — a discriminated union
   (none/user/system/dueling) that reports every installed scope without
   early-returning. `findInstalledSystemdGatewayScope` is refactored to delegate
   to it while preserving the exact user-first preference its four lifecycle
   callers rely on (no behavior change for stop/restart/is-enabled/runtime).
   Adds `uninstallUserSystemdGatewayUnit` (removes only the $HOME user unit, no
   root needed) and the pure `formatDuelingScopesWarning` helper.

2. Doctor: `maybeResolveDuelingSystemdGatewayScopes` detects the dueling state
   and, after the existing confirm/policy gate, removes the redundant user-scope
   unit while keeping the root-installed system unit authoritative. Declining or
   an externally-managed policy falls back to the existing cleanup hints.

3. Startup guard: in service mode, when a stale-kill actually happened, log a
   targeted remediation pointing at `openclaw doctor --fix` instead of letting
   the loop look like routine stale cleanup. Diagnostic only — the kill decision
   is unchanged.
2026-07-30 08:52:05 +09:00
Vincent Koc
215e49b1a2 fix(hooks): report eventless hooks as not ready (#116083)
Fixes #72370

Release note: hooks check now reports selected hooks without declared events as not ready instead of ready.
2026-07-30 05:29:25 +08:00
Peter Steinberger
d6f9affe79 feat(cli): run agent exec against the ambient config, composed in memory (#116038)
* feat(cli): run agent exec against the ambient config, composed in memory

Exec previously ignored the operator's config entirely, so a one-shot turn
could not reach configured providers, credentials, or agentRuntime harness
selection. It now layers config the way other folder-scoped coding CLIs do.

The composed config is published as this process's runtime snapshot rather
than serialized to a temp file and re-read through OPENCLAW_CONFIG_PATH. The
snapshot is the only in-process config cache, so the file only ever fed it --
while writing env-substituted provider keys to disk where the run's own exec
tool could read them.

* fix(cli): resolve exec stored credentials from the configured agent dir

* chore(scripts): allow agent exec the file-scoped config loader at its process boundary

* test(cli): cover the exec credential default and pinned-config flags
2026-07-29 15:38:27 -04:00
Peter Steinberger
b240703cfc fix(ui): compact the macOS gateway picker menu (#115977)
* fix(ui): compact native gateway menu

* chore: leave changelog to release automation

* test: stabilize UI and CLI process checks
2026-07-29 14:42:18 -04:00
Peter Steinberger
e80fe942c8 fix(gateway): stop start-time repair from retargeting managed services (#115935) 2026-07-29 13:41:19 -04: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
Vincent Koc
aaf7a432aa fix(skills): preserve configless workshop apply upgrades (#115982) 2026-07-30 01:09:56 +08:00
Peter Steinberger
d16e33e08e fix: restore trustworthy end-to-end QA and cross-channel delivery (#115404)
* fix(qa): repair verified end-to-end and channel regressions

* fix(gateway): make interrupted restart recovery lifecycle-safe

* test(heartbeat): target the canonical recovery session store

* fix(gateway): prioritize durable restart recovery before heartbeat

* fix(qa): preserve safe restart recovery and channel expiry

* fix(qa): fail closed and fence restart recovery

* test(agents): isolate restart recovery timing

* test(agents): prove actual restart retry timing

* fix(qa): report incompatible profile scenarios

* fix(scripts): resolve symlinked docker scheduler entrypoints

* fix(qa): require fresh native test evidence

* fix(heartbeat): fence active restart recovery delivery

* fix(gateway): consume untargeted restart acknowledgements

* fix(qa): satisfy exhaustive hosted validation gates

* fix(agents): fence stopped restart recovery dispatch

* style(agents): format restart recovery lifecycle regression

* test(gateway): isolate context prewarm sidecar lifecycle

* test(qa): make scenario process timeout cleanup deterministic

* fix(qa): stamp synthetic gateway configs with current version

* fix(openai): preserve vision capabilities in stale model catalogs

* test(qa): align profile channel rejection with current main

* fix(openai): forward supported moderation for image edits

* fix: restore latest-main CI and image edit documentation

* fix(qa): retain relocated code-mode evidence validation

* fix(openai): expose GPT-5.4 vision in static catalog

* fix(pricing): honor explicit model cost overrides

* test(pricing): keep isolated provider regressions deterministic

* fix(openai): inherit transport for discovered static models

* fix(gateway): honor agent-owned static image capabilities

* test(gateway): preserve prepared-snapshot attachment races

* test(gateway): isolate subagent persistence failure injection

* test(gateway): exercise concurrent voice replay admission

* fix(gateway): restore stale model image capabilities

* fix(agents): publish configured model vision capabilities

* fix(agents): isolate detached media transcript ownership

* test(agents): preserve generic transcript lock regression

* fix(gateway): require proven static model route identity

* fix(qa): accept bounded full-size generated image attachments

* fix(qa): require fresh script producer evidence

* test(qa): prove native E2E scenario execution
2026-07-29 12:45:27 -04:00
Peter Steinberger
b4d14d7848 refactor(config): move model normalization to input owners (#115965)
* refactor(config): move model normalization to input owners

* fix(config): merge canonical doctor model rows

* fix(config): align touched model map identities

* ci(env): lower production variable budget

* chore: leave changelog to release automation
2026-07-29 12:04:07 -04:00
Peter Steinberger
5bfc65d7f4 refactor: remove 3,543 lines of redundant runtime and tests (#115961)
* refactor: remove 3,543 lines of redundant runtime and tests

* refactor: ratchet production environment variable budget
2026-07-29 11:43:41 -04:00
Peter Steinberger
383f8947c1 fix: doctor skips host services for isolated state (#115922)
* fix(doctor): isolate host service management

* fix(doctor): clarify service isolation recovery

* test(doctor): isolate service identity fixtures

* test(daemon): keep lifecycle fixtures lint-clean

* test(daemon): isolate install identity fixtures
2026-07-29 11:09:56 -04:00
Peter Steinberger
628262a4af test(cli): keep help-exit process children single-process with a diagnosable timeout (#115940) 2026-07-29 10:28:25 -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
Vincent Koc
4278fdfd5e Merge pull request #115825 from openclaw/refactor/health-owner-boundary
refactor(gateway): own health snapshot collection
2026-07-29 22:00:59 +08:00
Vincent Koc
7d74e45f7f fix(ports): prevent duplicate macOS listener probes during status checks (#115813)
* fix(ports): batch macOS lsof listener inspection to one spawn per cycle

(cherry picked from commit edd01c72ae)

* fix(ports): keep single-port lsof checks targeted

(cherry picked from commit 18ece86a57)

* test(daemon): mock batched port usage in coverage

(cherry picked from commit 917ef0d416)

* test(daemon): model batched listener status

* refactor(ports): isolate lsof listener parsing

---------

Co-authored-by: 狼哥 <hanwanlonga@gmail.com>
2026-07-29 21:33:55 +08:00
Peter Steinberger
8ec4a059fc fix(codex): keep stressed inference turns isolated and observable (#115893) 2026-07-29 09:11:20 -04:00
Peter Steinberger
bfb7ff189e docs(codex): replace stale app/list wording with app/installed (#115867) 2026-07-29 08:09:44 -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
Vincent Koc
f6e874835c fix(gateway): stop managed crash loops for pending agent DB migrations (#115631)
* fix(gateway): recover managed services after agent DB migration

* test(infra): use managed temp directory cleanup
2026-07-29 19:21:46 +08:00
Peter Steinberger
f20fc70cb4 test(cli): isolate unknown-command process validation (#115848) 2026-07-29 06:49:55 -04:00
loong
7bdd1f646b fix(memory-host-sdk): resolve stable execPath for worker fork to survive Homebrew Node upgrades (#99318)
* fix(memory): survive Homebrew Node upgrades

Co-authored-by: 袁龙辉0668001277 <yuan.longhui@xydigit.com>

* test(whatsapp): isolate last-route coverage

* fix(deepinfra): preserve offline model compatibility

* test(memory): isolate migration cleanup lifecycle

* test: stabilize aggregate extension gates

* ci: retrigger pull request workflow

* test: preserve inherited Node options

* test(cli): tolerate cold hosted startup

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 06:49:02 -04:00
Vincent Koc
46f629882b refactor(gateway): own health summary contract 2026-07-29 17:36:30 +08:00
Peter Steinberger
f32242e62f fix(cli): scope dns setup timeout to brew prefix probe with SIGKILL (#115782)
Make the subprocess timeout opt-in so long-running setup steps (brew
install, service restart, sudo writes) keep their unbounded wait, and
apply a 15s SIGKILL-backed deadline only to the fast brew --prefix probe
so a signal-resistant hung shim cannot block dns setup.

Also fix the regression test on Linux CI: stub process.platform via
withMockedPlatform (the action does not consult os.platform()) and point
the mocked brew prefix at a real temp dir so un-mocked fs writes succeed
without sudo. Add focused coverage that non-probe subprocesses stay
unbounded.

(cherry picked from commit 469ae1db40)

Co-authored-by: thomas.szbay <thomas.szbay@example.com>
2026-07-29 05:03:20 -04:00
Peter Steinberger
e1a00726a3 feat(gateway): add least-privilege voice-node pairing (#115712)
* feat(gateway): add least-privilege voice-node pairing

* chore: leave voice-node note to release

* fix(gateway): keep bootstrap helpers private

* fix(ci): remove unused Code Mode type export

* fix(ci): remove stale model matrix import

* fix(ci): align QA evidence timeout guard
2026-07-29 04:09:37 -04:00
Vincent Koc
14940edf15 feat(skills): add Skill Workshop lifecycle hooks (#115606)
* feat(skills): add lifecycle hook contracts

* feat(plugins): expose skill hook contracts

* feat(plugins): identify skill evaluators

* feat(skills): persist proposal evaluation lifecycle

* feat(skills): add agent evaluation action

* feat(skills): emit committed skill lifecycle changes

* feat(gateway): expose skill proposal evaluation lifecycle

* feat(ui): add Skill Workshop evaluations

* fix(skills): bind lifecycle state to proposal revisions

* fix(skills): preserve lifecycle events without artifacts

* feat(cli): evaluate skill proposals

* fix(ui): bind evaluations to proposal revisions

* docs(skills): document lifecycle hook primitives

* chore(plugin-sdk): refresh skill hook surface

* fix(skills): harden proposal evaluator execution

* fix(plugins): isolate skill evaluator inputs

* fix(cli): align skill lifecycle deadlines

* fix(skills): preserve evaluation replay invariants

* test(ui): capture Skill Workshop evaluation proof

* fix(skills): bind apply to evaluated target tree

* fix(skills): preserve evaluation contract edges

* fix(skills): bound evaluation event storage

* chore(skills): keep lifecycle helpers internal

* refactor(skills): isolate evaluation persistence

* fix(skills): satisfy lifecycle validation gates

* chore(protocol): refresh Skill Workshop clients

* docs: refresh Skill Workshop map

* chore: keep release notes in PR metadata

* docs: refresh merged docs map

* fix(ci): type Code Mode catch errors

* fix(skills): freeze lifecycle observation payloads

* fix(protocol): keep proposal inspect backward-decodable

* fix(skills): enforce final evaluator bundle limits

* fix(skills): preserve lifecycle caller attribution

* chore: drop subsumed Code Mode formatting

* test(plugins): adapt lifecycle hook mocks
2026-07-29 15:49:44 +08:00
Peter Steinberger
bb19d65446 fix(cli): keep remote gateway calls read-only (#115664) 2026-07-29 03:48:59 -04:00
Peter Steinberger
6ec84bc3bd fix(models): expose custom max and ultra reasoning tiers (#115690)
* fix(models): honor custom advanced reasoning levels

* fix(ci): restore code mode matrix boundaries
2026-07-29 03:33:30 -04:00
wm0018
a1d31204f1 fix(gateway): drain root work continuations before direct-stop process exit (#105848)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 14:28:14 +08:00
Peter Steinberger
ddd0b48673 refactor: remove 3,527 lines of runtime and test duplication (#115626)
* refactor: remove obsolete runtime and test duplication

* test: preserve typed cron and realtime fixtures
2026-07-29 02:21:20 -04:00
Vincent Koc
1c36054494 feat(agents): add code mode model acceptance matrix (#115305)
* feat(agents): add code mode model acceptance matrix

* fix(qa): emit canonical Code Mode matrix evidence

* fix(qa): reserve code mode matrix output safely

* fix(qa): require fresh matrix builds

* fix(qa): protect matrix evidence paths
2026-07-29 14:12:20 +08:00
Vincent Koc
3b3a64c322 fix(cli): keep JSON stdout valid through finalization (#115315)
* fix(cli): preserve JSON stdout through finalization

* test(cli): cover JSON entrypoint routing

* fix(cli): preserve native relay import ordering
2026-07-29 14:04:12 +08:00
Peter Steinberger
cc3b059497 fix(plugins): honor update channel for targeted probes (#115604) 2026-07-29 01:46:53 -04:00
Peter Steinberger
5fe07e4ae8 fix(update): honor declared plugin entrypoints during repair (#115610) 2026-07-29 01:43:30 -04:00
Peter Steinberger
ec4c90c455 fix(onboard): reject conflicting custom inputs (#115595) 2026-07-29 01:34:54 -04:00
Peter Steinberger
aa1e8683d8 fix(doctor): keep cleanup hints scoped to detected services (#115559) 2026-07-29 01:08:19 -04:00
Peter Steinberger
a8f1e035e4 fix(cli): tolerate listeners exiting before force cleanup (#115568) 2026-07-29 01:02:32 -04:00
Peter Steinberger
83a3975eca improve(agents): reuse prepared model facts across warm turns (#115527)
* perf(agents): keep prepared model facts together

* test(media): expect prepared image runtime context
2026-07-29 00:23:39 -04:00
Peter Steinberger
430c293ee0 refactor: remove duplicate provider and runtime code (#115529)
* refactor: remove duplicated runtime and provider code

* refactor: exclude unrelated browser test cleanup

* refactor: preserve canonical subagent cleanup ordering
2026-07-29 00:04:52 -04:00
ooiuuii
8ffc567075 fix(plugins): keep bulk updates on the beta channel (#115083)
* fix(plugins): preserve beta channel on bulk update

* docs(plugins): document beta bulk update fallback

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-29 12:04:38 +08:00
Peter Steinberger
5cc9693507 fix(doctor): enable workspace suggestions by default (#115512)
Restore the documented default workspace health guidance and preserve the explicit opt-out. Add regression coverage for both real CLI registration modes. Fixes #109503; thanks @moguangyu5-design for reporting the bug and proposing #109504.
2026-07-28 23:35:46 -04:00
Peter Steinberger
5457165289 fix(cli): honor help, dry-run, and plugin pin contracts (#115464) 2026-07-28 23:01:24 -04:00
Peter Steinberger
e1e1c1879b fix: validate plugin installs before lifecycle mutations (#115427) 2026-07-28 18:25:57 -04:00
Josh Lehman
ba68a4ed67 fix(codex): isolate native hook relay startup (#115078) 2026-07-28 11:57:36 -07:00
Vincent Koc
77751a224d fix: stabilize package-to-dev release upgrades (#115292)
* origin/test/parallels-main-3224005-host:
  docs(changelog): cover Windows prerequisite readiness
  fix(e2e): preserve Windows installer reboot results
  docs(changelog): include Windows stop safety gate
  fix(e2e): force Windows smoke gateway stop
  docs(changelog): note Parallels and update fixes
  fix(update): finalize install switches in fresh process
  fix(e2e): harden Parallels guest preparation
2026-07-29 02:52:44 +08:00
Peter Steinberger
a8fb4872fb refactor: harden shell completion and shard Control UI E2E (#115332)
* refactor: harden CLI completion and shard Control UI E2E

* fix: keep completion command-tree result private

* fix: remove unused browser test helper exports

* test: cover sharded Control UI workflow contract
2026-07-28 14:35:27 -04:00
Vincent Koc
13b8f0765c Merge remote-tracking branch 'origin/main' into test/parallels-main-3224005-host
* origin/main: (72 commits)
  fix: macOS-only Parallels smoke harness regression (#75293)
  fix(ios): use configured speech language for system voice (#113372)
  refactor: centralize isolated agent test ownership (#115340)
  test(ui): stabilize browser route readiness (#115320)
  fix(cron): clear automation after failed scheduler shutdown (#115316)
  fix: keep isolated gateway workspaces and skills inside state dir (#114487)
  docs: document local TTS on macOS, Linux, and Windows (#110230)
  fix(tasks): clone only the requested task page (#114277)
  fix(agents): prevent Code Mode resume loss and unbounded preparation (#115314)
  fix(process): preserve the first process cancellation reason (#115317)
  fix(nostr): report unavailable ingress when queue open fails (#115313)
  fix: prevent Slack and Feishu ingress startup leaks (#115295)
  fix(slack): avoid unsafe emphasis boundaries (#111575)
  fix: prevent changed checks from expanding into full lint (#115322)
  fix(codex): stabilize prompts and expose real cache regressions (#115238)
  refactor(ui): derive page route specs from the route table (#115214)
  fix(compaction): plan cut points in trigger units (#111886) (#115309)
  fix: prevent cron and gateway stress-run timeouts (#115241)
  fix(ci): validate frozen Matrix QA targets (#115298)
  test(macos): block real process fallthrough (#113337)
  ...

# Conflicts:
#	CHANGELOG.md
2026-07-29 02:22:47 +08:00