Peter Steinberger
1f1ff0567a
refactor(lint): reduce map spread patterns
2026-04-18 19:27:43 +01:00
Peter Steinberger
84aed919a9
fix: restore CI restart and provider compat
2026-04-18 19:24:08 +01:00
Peter Steinberger
438799e929
fix: log detached service restart attempts
2026-04-18 19:08:36 +01:00
Peter Steinberger
28be124cc1
refactor: centralize restart log conventions
2026-04-18 19:08:35 +01:00
Peter Steinberger
089e038dfe
fix: harden macOS update restart helper ( #68492 ) (thanks @hclsys)
2026-04-18 18:39:03 +01:00
HCL
4a870300dd
fix(update-cli): capture macOS launchctl stderr to a log file instead of /dev/null
...
The macOS restart helper emitted by `openclaw update` (darwin branch of
`prepareRestartScript`) wrote the gateway restart script with every
`launchctl` stderr redirected to `/dev/null` and the final fallback
`kickstart` chained with `|| true`. When bootstrap/kickstart failed
(plist-on-disk race, schema rejection, stale job, bootout recovery
edge cases), the script exited 0, the updater declared success, and
the gateway silently stayed offline.
The reporter saw a ~25 minute production outage before noticing the
messages going unanswered across Telegram/Discord/Feishu.
Route stderr to `~/.openclaw/logs/update-restart.log` via `exec 2>>`,
drop `2>/dev/null` on every launchctl call, and remove the `|| true`
swallow on the fallback kickstart so a genuine failure exits non-zero
and leaves a durable audit trail. Log directory creation is best-effort
via `mkdir -p ... 2>/dev/null || true` since it normally already exists
from the gateway's own logging path. Self-cleanup of the script file
via `rm -f "$0"` is retained because the log, not the script, is the
useful artifact after the fact.
Adds a targeted regression test `captures macOS launchctl stderr to
~/.openclaw/logs/update-restart.log` alongside the existing darwin
restart-script test. The existing test's assertions about the
kickstart/enable/bootstrap fallback chain + self-cleanup all still pass.
Fixes #68486
2026-04-18 18:39:03 +01:00
Peter Steinberger
df525b90f2
chore(lint): enable unnecessary type parameter rule
2026-04-18 18:31:13 +01:00
Peter Steinberger
cdaa70facb
refactor: cache repeated lazy imports
2026-04-18 16:32:53 +01:00
Peter Steinberger
66385670e4
refactor: reduce unnecessary dynamic imports
2026-04-18 16:15:33 +01:00
Peter Steinberger
48aa076d12
perf: optimize remaining core tests
2026-04-17 16:05:10 +01:00
EE
1ce2596195
matrix: fix sessions_spawn --thread subagent session spawning ( #67643 )
...
Merged via squash.
Prepared head SHA: 1e5127e217
Co-authored-by: eejohnso-ops <238848106+eejohnso-ops@users.noreply.github.com >
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com >
Reviewed-by: @gumadeiras
2026-04-17 02:17:56 -04:00
Onur
900e291f31
CI: expand native release validation coverage ( #67144 )
...
* Actions: grant reusable release checks actions read
* Actions: use read-all for reusable release checks
* CI: add native cross-OS release checks
* CI: wire Discord smoke secrets for cross-OS checks
* CI: fix native cross-OS installer compatibility
* CI: skip empty pnpm cache saves in matrix jobs
* CI: honor workflow runner override envs
* CI: finish native cross-OS update checks
* CI: fix native cross-OS workflow regressions
* Installer: capture Windows npm stderr safely
* CI: harden cross-OS release checks
* CI: resolve reusable workflow harness ref
* CI: stabilize cross-OS dev update lanes
* CI: tighten release-check workflow semantics
* CI: repoint repaired git CLI on POSIX
* CI: repair native dev-update shell handoff
* CI: preserve real updater semantics
* CI: harden supported release-check refs
* CI: harden release-check refs and fresh mode
* CI: skip dev-update for immutable tag refs
* CI: repair fresh installer release checks
* CI: fix native release check installer lanes
* CI: install release checks from candidate artifacts
* CI: use Windows cmd shims in release checks
* Installer: run Windows npm shim via PowerShell
* CI: pin dev update verification to candidate sha
* CI: pin reusable harness and published installers
* CI: isolate Windows dev-update PATH validation
* CI: align Windows dev-update bootstrap validation
* CI: avoid Windows installer gateway flake
* CI: run cross-OS release checks via TypeScript
* CI: bootstrap tsx for release-check workflow
* CI: fix native release-check follow-ups
* CI: tighten dev-update release checks
* CI: peel annotated workflow refs
* CI: harden native release checks
* CI: fix release-check verifier drift
* CI: fix release-check workflow drift
* CI: fix release-check ref resolution
* CI: harden Windows release-check gateway startup
* CI: fix release-check fallback validation
* CI: harden cross-os release checks
* CI: pin dev-update release checks to candidate SHA
* CI: resolve remote dev target refs
* CI: detect cloned dev-update checkouts
* CI: harden Windows release-check launcher
* Windows: harden task fallback and runner overrides
* Release checks: preserve Windows PATH and baseline version reads
* CI: add release validation live lanes
* CI: expand live and e2e release coverage
* CI: add branch dispatch for live and e2e checks
2026-04-16 19:58:19 +02:00
Gustavo Madeira Santana
d5933af80b
QA: fix private runtime source loading ( #67428 )
...
Merged via squash.
Prepared head SHA: b8bf2b6be6
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com >
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com >
Reviewed-by: @gumadeiras
2026-04-15 21:59:16 -04:00
Peter Steinberger
229eb72cf6
build: exclude private QA from npm package
2026-04-15 09:39:51 -07:00
Ayaan Zaidi
64f258fc49
fix(update): keep downgrade follow-ups in-process
2026-04-15 13:22:04 +05:30
Ayaan Zaidi
18d0af3a13
fix(update): verify packaged dist inventory
2026-04-15 13:22:04 +05:30
Mason Huang
3d2f51c0a4
CLI/plugins: stop forced-unsafe installs from falling back to hook packs ( #58909 )
...
Merged via squash.
Prepared head SHA: 7cf146efb6
Co-authored-by: hxy91819 <8814856+hxy91819@users.noreply.github.com >
Co-authored-by: hxy91819 <8814856+hxy91819@users.noreply.github.com >
Reviewed-by: @hxy91819
2026-04-15 13:23:17 +08:00
Josh Avant
1769fb2aa1
fix(secrets): align SecretRef inspect/strict behavior across preload/runtime paths ( #66818 )
...
* Config: add inspect/strict SecretRef string resolver
* CLI: pass resolved/source config snapshots to plugin preload
* Slack: keep HTTP route registration config-only
* Providers: normalize SecretRef handling for auth and web tools
* Secrets: add Exa web search target to registry and docs
* Telegram: resolve env SecretRef tokens at runtime
* Agents: resolve custom provider env SecretRef ids
* Providers: fail closed on blocked SecretRef fallback
* Telegram: enforce env SecretRef policy for runtime token refs
* Status/Providers/Telegram: tighten SecretRef preload and fallback handling
* Providers: enforce env SecretRef policy checks in fallback auth paths
* fix: add SecretRef lifecycle changelog entry (#66818 ) (thanks @joshavant)
2026-04-14 17:59:28 -05:00
Vincent Koc
e31dfa9897
perf(cli): avoid runtime config loads in gateway discover
2026-04-14 17:47:38 +01:00
Vincent Koc
4c090accd3
perf(cli): avoid eager gateway call config loads
2026-04-14 17:42:16 +01:00
Vincent Koc
604a5e07d0
perf(cli): lazy-resolve daemon stop fallback port
2026-04-14 17:39:21 +01:00
Vincent Koc
f8610da4c5
perf(cli): narrow daemon and gateway cold paths
2026-04-14 17:35:26 +01:00
Vincent Koc
f95c706298
perf(cli): lazy-load daemon service runners
2026-04-14 16:43:48 +01:00
Vincent Koc
4e46488d1b
perf(cli): lazy-load gateway registration deps
2026-04-14 16:37:48 +01:00
Neerav Makwana
0381852c26
fix: harden approvals get timeout handling ( #66239 ) (thanks @neeravmakwana)
...
* fix(cli): harden approvals get timeout handling
* fix(cli): sanitize approvals timeout notes
* fix(cli): distill approvals timeout note
---------
Co-authored-by: Ayaan Zaidi <hi@obviy.us >
2026-04-14 11:29:59 +05:30
Peter Steinberger
d4f556a052
fix: align latest main type drift
2026-04-13 20:49:39 -07:00
Vincent Koc
792653df15
fix(ci): clear residual tsgo blockers
2026-04-13 22:37:25 +01:00
Vincent Koc
ac00ba1943
perf(commands): lazy-load agent secret resolution
2026-04-13 20:56:03 +01:00
Vincent Koc
25a2ea4480
perf(config): scope dry-run legacy validation
2026-04-13 20:40:52 +01:00
Vincent Koc
587e72df4d
perf(config): use direct writes for gateway token persistence
2026-04-13 19:38:56 +01:00
Vincent Koc
120c384f00
perf(config): reuse prepared snapshots for daemon token writes
2026-04-13 19:32:28 +01:00
Vincent Koc
55a3c8ea07
perf(daemon): import install config helpers directly
2026-04-13 19:22:52 +01:00
Vincent Koc
75b4c059b8
perf(daemon): slim gateway install token imports
2026-04-13 19:21:01 +01:00
Vincent Koc
114ff23f2a
perf(config): skip shell env fallback for explicit empty vars
2026-04-13 19:09:11 +01:00
Mariano
8dbe1b4f5a
fix(gateway): harden service entrypoint resolution ( #65984 )
...
Merged via squash.
Prepared head SHA: 31cbc3349c
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com >
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com >
Reviewed-by: @mbelinky
2026-04-13 17:14:29 +02:00
Vincent Koc
3792a39fd6
perf(cli): skip redundant schema passes for structured dry runs
2026-04-13 15:49:24 +01:00
Vincent Koc
9763d446d9
fix(qr): lazy load terminal ascii renderer
2026-04-13 15:12:01 +01:00
scoootscooob
94ef2f1b0d
CLI: detect env-backed audio providers ( #65491 )
...
* CLI: detect env-backed audio providers
* fix(cli): trust audio provider env detection
* Secrets: keep default provider env lookups stable
* Plugins: harden env-backed auth defaults
* Plugins: tighten trusted env var lookups
---------
Co-authored-by: Vincent Koc <vincentkoc@ieee.org >
2026-04-12 14:04:44 -07:00
Peter Steinberger
e4841d767d
test: stabilize loaded full-suite checks
2026-04-12 11:52:56 -07:00
Peter Steinberger
67af6f0baf
fix: restore main CI checks
2026-04-12 11:28:43 -07:00
Vincent Koc
d4fb7d893d
fix(ci): repair main tsgo regressions
2026-04-12 19:14:00 +01:00
saram ali
7995e408ce
fix(discord): clear stale heartbeat timers in SafeGatewayPlugin.connect() ( #65087 )
...
* fix(discord): clear stale heartbeat timers in SafeGatewayPlugin.connect()
The @buape/carbon@0.15 .0 heartbeat setup has a race where stopHeartbeat()
runs before heartbeatInterval is assigned, leaving a stale setInterval with
a closed reconnectCallback. When the stale interval fires ~41s later it
throws an uncaught exception that bypasses the EventEmitter error path and
crashes the gateway process via process.on('uncaughtException').
Add a connect() override in SafeGatewayPlugin that unconditionally clears
both heartbeatInterval and firstHeartbeatTimeout before calling super. The
parent's connect() only calls stopHeartbeat() when isConnecting=false; when
isConnecting=true it returns early without clearing — this override fills
that gap.
Fixes #65009 . Related: #64011 , #63387 , #62038 .
* test(discord): assert super.connect() delegation in SafeGatewayPlugin tests
* fix(ci): update raw-fetch allowlist line numbers for gateway-plugin.ts
The connect() override added in the heartbeat fix shifted the two
pre-existing fetch() callsites from lines 370/436 to 387/453.
* docs(changelog): add discord heartbeat crash note
* test(cli): align plugin registry load-context mock
---------
Co-authored-by: Vincent Koc <vincentkoc@ieee.org >
2026-04-12 18:40:04 +01:00
Vincent Koc
a24af49100
fix(update-cli): respawn plugin refresh after self-update ( #65471 )
...
* fix(update-cli): respawn plugin refresh after self-update
* Update src/cli/update-cli/update-command.ts
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
* Update CHANGELOG.md
---------
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-04-12 18:26:43 +01:00
Pengfei Ni
aff8a0c0e7
fix(config): resolve CLI command aliases against parent plugin in plugins.allow ( #64748 ) ( #64779 )
...
* fix(config): resolve CLI command aliases against parent plugin in plugins.allow (#64748 )
The CLI allow guard checked command names (e.g. 'wiki') directly against
plugins.allow, missing the parent plugin ('memory-wiki'). Additionally,
memory-wiki did not declare 'wiki' as a commandAlias, so doctor --fix
would remove it as stale.
- Add commandAliases entry for 'wiki' in memory-wiki plugin manifest
- Check parent plugin ID in the CLI fallback allow guard
- Add tests for both allow and deny cases
* fix(cli): inject manifest registry for alias diagnostics
* Update CHANGELOG.md
---------
Co-authored-by: Vincent Koc <vincentkoc@ieee.org >
2026-04-12 17:32:11 +01:00
Daniel Alkurdi
1f0431cd11
fix(media): surface OpenAI audio transcription failures ( #65096 )
...
* fix(media): surface audio transcription provider failures
* fix(media): prefer failed reasons in surfaced errors
* fix(media): import attempt outcome type
* fix(media): guard malformed decision arrays
---------
Co-authored-by: Vincent Koc <vincentkoc@ieee.org >
2026-04-12 17:05:18 +01:00
Peter Steinberger
23e50859eb
test(e2e): align release harness coverage
2026-04-12 16:08:12 +01:00
Vincent Koc
3059b36306
fix(config): split command flag helpers
2026-04-12 00:05:01 +01:00
Vincent Koc
d7fcd23091
fix(runtime): split cli provider and abort seams
2026-04-11 21:16:50 +01:00
Vincent Koc
0f7d9c9570
fix(runtime): split approval and gateway client seams
2026-04-11 18:36:48 +01:00
Tak Hoffman
958c34e82c
feat(qa-lab): Add proxy capture stack and QA Lab inspector ( #64895 )
...
* Add proxy capture core and CLI
* Expand transport capture coverage
* Add QA Lab capture backend
* Refine QA Lab capture UI
* Fix proxy capture review feedback
* Fix proxy run cleanup and TTS capture
* Fix proxy capture transport follow-ups
* Fix debug proxy CONNECT target parsing
* Harden QA Lab asset path containment
2026-04-11 12:34:57 -05:00