openclaw 2026.4.26-beta.1 → 2026.4.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -96
- package/dist/.buildstamp +1 -1
- package/dist/build-info.json +3 -3
- package/dist/cli/run-main.js +4 -4
- package/dist/cli-startup-metadata.json +2 -2
- package/dist/{command-registry-DeoNT2MP.js → command-registry-CZTnsBMh.js} +2 -2
- package/dist/{command-registry-CP1YP4gr.js → command-registry-DP8sbc0j.js} +2 -2
- package/dist/{command-registry-core-BGLS24Nb.js → command-registry-core-BW__ytHr.js} +3 -3
- package/dist/{completion-cli-Bs17qMn8.js → completion-cli-CPujqMq_.js} +2 -2
- package/dist/{config-cli-CV5k1_lT.js → config-cli-BZUiTXoe.js} +1 -1
- package/dist/crestodian/crestodian.js +1 -1
- package/dist/crestodian/rescue-message.js +1 -1
- package/dist/{crestodian-DoLCU2ix.js → crestodian-Cdb719FY.js} +3 -3
- package/dist/{dialogue-DBdUB-BO.js → dialogue-Bi1Ejndn.js} +1 -1
- package/dist/{gateway-cli-DFQTmIsB.js → gateway-cli-l4SoRD2p.js} +1 -1
- package/dist/{operations-BfvIQlgH.js → operations-RpPh9sAi.js} +2 -2
- package/dist/plugin-sdk/.boundary-entry-shims.stamp +1 -1
- package/dist/postinstall-inventory.json +23 -23
- package/dist/{program-IvaCxeOx.js → program-B7UMD7mC.js} +1 -1
- package/dist/{register.crestodian-BLj69_GR.js → register.crestodian-DAQqhXc4.js} +1 -1
- package/dist/{register.subclis-DyUVmjtm.js → register.subclis-BWh4CzXv.js} +2 -2
- package/dist/register.subclis-CvhrxO-c.js +3 -0
- package/dist/{register.subclis-core-BC7svxqD.js → register.subclis-core-CGcKvIfu.js} +2 -2
- package/dist/{route-DFCh6MkU.js → route-oWPuyRNu.js} +1 -1
- package/dist/{runtime-schema-6hbpWdo7.js → runtime-schema-TpYHXgGk.js} +1 -1
- package/dist/{server-CYEa6z1r.js → server-BnrDM4ZY.js} +1 -1
- package/dist/{server-methods-1wNO_EHP.js → server-methods-b3jaTRE_.js} +1 -1
- package/dist/{server-plugin-bootstrap-D33qDjbf.js → server-plugin-bootstrap-CKmijMP2.js} +1 -1
- package/dist/{server-plugin-bootstrap-BH3GQUbj.js → server-plugin-bootstrap-Cqhf2lYR.js} +1 -1
- package/dist/{server.impl-DdIemt0o.js → server.impl-hNr66nDN.js} +3 -3
- package/dist/{tui-backend-DylphcC_.js → tui-backend-DJjxFdMK.js} +2 -2
- package/dist/{update-cli-DsQEZRPh.js → update-cli-CgKMD06I.js} +20 -0
- package/docs/ci.md +26 -2
- package/docs/help/testing.md +4 -2
- package/docs/reference/RELEASING.md +36 -4
- package/package.json +1 -1
- package/dist/register.subclis-DBUUDjTW.js +0 -3
package/CHANGELOG.md
CHANGED
|
@@ -15,30 +15,26 @@ Docs: https://docs.openclaw.ai
|
|
|
15
15
|
- Providers: add Cerebras as a bundled plugin with onboarding, static model catalog, docs, and manifest-owned endpoint metadata.
|
|
16
16
|
- Memory/OpenAI-compatible: add optional `memorySearch.inputType`, `queryInputType`, and `documentInputType` config for asymmetric embedding endpoints, including direct query embeddings and provider batch indexing. Carries forward #63313 and #60727. Thanks @HOYALIM and @prospect1314521.
|
|
17
17
|
- Ollama/memory: add model-specific retrieval query prefixes for `nomic-embed-text`, `qwen3-embedding`, and `mxbai-embed-large` memory-search queries while leaving document batches unchanged. Carries forward #45013. Thanks @laolin5564.
|
|
18
|
-
- Plugins/providers: move pre-runtime model-id normalization,
|
|
19
|
-
- Plugins/models: wire manifest `modelCatalog.aliases` and `modelCatalog.suppressions` into model-catalog planning and built-in model suppression, with OpenAI stale Spark suppression now declared in the plugin manifest before runtime fallback. Thanks @shakkernerd.
|
|
20
|
-
- Gateway/startup: pass and reuse plugin metadata snapshots across config validation, plugin bootstrap, and provider discovery so startup and repeated model-provider discovery avoid rebuilding plugin manifest metadata. Thanks @shakkernerd.
|
|
18
|
+
- Plugins/providers: move pre-runtime model-id normalization, endpoint host metadata, OpenAI-compatible request-family hints, model-catalog aliases/suppressions, OpenAI stale Spark suppression, and reusable startup metadata snapshots into plugin manifests so core no longer carries bundled-provider routing tables or repeated manifest rebuilds. Thanks @shakkernerd.
|
|
21
19
|
- Plugins/config: deprecate direct plugin config load/write helpers in favor of passed runtime snapshots plus transactional mutation helpers with explicit restart follow-up policy, scanner guardrails, runtime warnings, and revision-based cache invalidation.
|
|
22
20
|
- Plugins/install: allow `OPENCLAW_PLUGIN_STAGE_DIR` to contain layered runtime-dependency roots, resolving read-only preinstalled deps before installing missing deps into the final writable root. Fixes #72396. Thanks @liorb-mountapps.
|
|
23
21
|
- Control UI: add a raw config pending-changes diff panel that parses JSON5, redacts sensitive values until reveal, and avoids fake raw-edit callbacks when opening the panel. Refs #39831; supersedes #48621 and #46654. Thanks @JiajunBernoulli and @BunsDev.
|
|
24
22
|
- Control UI: polish the quick settings dashboard grid so common cards align across desktop, tablet, and mobile layouts without wasting horizontal space. Thanks @BunsDev.
|
|
25
23
|
- Matrix/E2EE: add `openclaw matrix encryption setup` to enable Matrix encryption, bootstrap recovery, and print verification status from one setup flow. Thanks @gumadeiras.
|
|
26
24
|
- Agents/compaction: add an opt-in `agents.defaults.compaction.maxActiveTranscriptBytes` preflight trigger that runs normal local compaction when the active JSONL grows too large, requiring transcript rotation so successful compaction moves future turns onto a smaller successor file instead of raw byte-splitting history. Thanks @vincentkoc.
|
|
27
|
-
- CLI/migration: add
|
|
28
|
-
- CLI/migration: add `openclaw migrate` with plan, dry-run, JSON, pre-migration backup, onboarding detection, archive-only report copies, and a bundled Hermes importer for configuration, memory/plugin hints, model providers, MCP servers, skills, and supported credentials. Thanks @NousResearch.
|
|
25
|
+
- CLI/migration: add `openclaw migrate` with plan, dry-run, JSON, pre-migration backup, onboarding detection, archive-only reports, a Claude Code/Desktop importer, and a Hermes importer for configuration, memory/plugin hints, model providers, MCP servers, skills, commands, and supported credentials. Thanks @vincentkoc and @NousResearch.
|
|
29
26
|
|
|
30
27
|
### Fixes
|
|
31
28
|
|
|
32
29
|
- Agents/LSP: terminate bundled stdio LSP process trees during runtime disposal and Gateway shutdown, so nested children such as `tsserver` do not survive stop or restart. Fixes #72357. Thanks @ai-hpc and @bittoby.
|
|
33
30
|
- Gateway/device tokens: stop echoing rotated bearer tokens from shared/admin `device.token.rotate` responses while preserving the same-device token handoff needed by token-only clients before reconnect. (#66773) Thanks @MoerAI.
|
|
34
31
|
- Control UI/Talk: keep Google Live browser sessions on the WebSocket transport instead of falling back to WebRTC, validate browser Google Live WebSocket endpoints, cap Gateway relay sessions per browser connection, and remove stale browser-native voice buttons that did not use the configured Talk/TTS provider. Thanks @BunsDev.
|
|
35
|
-
- Gateway/startup: reuse config snapshot plugin manifests for startup auto-enable
|
|
32
|
+
- Gateway/startup: reuse config snapshot plugin manifests for startup auto-enable, config validation, and plugin bootstrap planning, including authored source config and disabled setup-probe handling, so restrictive allowlists avoid duplicate manifest/config passes during boot. Thanks @shakkernerd.
|
|
36
33
|
- Agents/subagents: enforce `subagents.allowAgents` for explicit same-agent `sessions_spawn(agentId=...)` calls instead of auto-allowing requester self-targets. Fixes #72827. Thanks @oiGaDio.
|
|
37
34
|
- ACP/sessions_spawn: let explicit `sessions_spawn(runtime="acp")` bootstrap turns run while `acp.dispatch.enabled=false` still blocks automatic ACP thread dispatch. Fixes #63591. Thanks @moeedahmed.
|
|
38
35
|
- CLI/update: install npm global updates into a verified temporary prefix before swapping the package tree into place, preventing mixed old/new installs and stale packaged files from breaking `openclaw update` verification. Thanks @shakkernerd.
|
|
39
36
|
- Gateway: skip CLI startup self-respawn for foreground gateway runs so low-memory Linux/Node 24 hosts start through the same path as direct `dist/index.js` without hanging before logs. Fixes #72720. Thanks @sign-2025.
|
|
40
|
-
- Google Meet:
|
|
41
|
-
- Google Meet: route local Chrome joins through OpenClaw browser control instead of raw default Chrome, so agents use the configured OpenClaw browser profile when opening Meet. Thanks @oromeis.
|
|
37
|
+
- Google Meet: route local Chrome joins through OpenClaw browser control, grant Meet media permissions, pin local Chrome audio defaults to `BlackHole 2ch`, and use the configured OpenClaw browser profile so joined agents no longer show `Permission needed` or use raw/default Chrome state. Thanks @DougButdorf and @oromeis.
|
|
42
38
|
- Plugins/discovery: follow symlinked plugin directories in global and workspace plugin roots while keeping broken links ignored and existing package safety checks in place. Fixes #36754; carries forward #72695 and #63206. Thanks @Quackstro, @ming1523, and @xsfX20.
|
|
43
39
|
- Plugins/install: skip test files and directories during install security scans while still force-scanning declared runtime entrypoints, so packaged test mocks no longer block plugin installs. Fixes #66840; carries forward #67050. Thanks @saurabhjain1592 and @Magicray1217.
|
|
44
40
|
- Plugins/install: allow exact package-manager peer links back to the trusted OpenClaw host package during install security scans while continuing to block spoofed or nested escaping `node_modules` symlinks. Carries forward #70819. Thanks @fgabelmannjr.
|
|
@@ -56,8 +52,7 @@ Docs: https://docs.openclaw.ai
|
|
|
56
52
|
- Local models: default custom providers with only `baseUrl` to the Chat Completions adapter and trust loopback model requests automatically, so local OpenAI-compatible proxies receive `/v1/chat/completions` without timing out. Fixes #40024. Thanks @parachuteshe.
|
|
57
53
|
- Channels/message tool: surface Discord, Slack, and Mattermost `user:`/`channel:` target syntax in the shared message target schema and Discord ambiguity errors, so DM sends by numeric id stop burning retries before finding `user:<id>`. Fixes #72401. Thanks @garyd9, @hclsys, and @praveen9354.
|
|
58
54
|
- Agents/tools: scope tool-loop detection history to the active run when available, so scheduled heartbeat cycles no longer inherit stale repeated-call counts from previous runs. Fixes #40144. Thanks @mattbrown319.
|
|
59
|
-
- Agents/subagents: preserve requester delivery for completion announces
|
|
60
|
-
- Agents/subagents: fail closed instead of selecting a single child thread binding when completion delivery lacks requester conversation signal. Thanks @suyua9.
|
|
55
|
+
- Agents/subagents: preserve requester delivery for completion announces across different channel accounts, keep same-channel thread completions routed to the child thread, and fail closed instead of guessing a child binding when requester conversation signal is missing. Thanks @sfuminya and @suyua9.
|
|
61
56
|
- Agents/status: persist the post-compaction token estimate from auto-compaction when providers omit usage metadata, so `/status` and session lists keep showing fresh context usage after compaction. Fixes #67667; carries forward #72822. Thanks @Jimmy-xuzimo and @skylight-9.
|
|
62
57
|
- Control UI: show loading, reload, and retry states when a lazy dashboard panel cannot load after an upgrade, so the Logs tab no longer appears blank on stale browser bundles. Fixes #72450. Thanks @sobergou.
|
|
63
58
|
- Gateway/plugins: start the Gateway in degraded mode when a single plugin entry has invalid schema config, and let `openclaw doctor --fix` quarantine that plugin config instead of crash-looping every channel. Fixes #62976 and #70371. Thanks @Doraemon-Claw and @pksidekyk.
|
|
@@ -65,8 +60,6 @@ Docs: https://docs.openclaw.ai
|
|
|
65
60
|
- Agents/reasoning: recover fully wrapped unclosed `<think>` replies that would otherwise sanitize to empty text while keeping strict stripping for closed reasoning blocks and unclosed tails after visible text. Fixes #37696; supersedes #51915. Thanks @druide67 and @okuyam2y.
|
|
66
61
|
- Control UI/Gateway: bind WebChat handshakes to their active socket and reject post-close server registrations, so aborted connects no longer leave zombie clients or misleading duplicate WebSocket connection logs. Fixes #72753. Thanks @LumenFromTheFuture.
|
|
67
62
|
- Agents/fallback: split ambiguous provider failures into `empty_response`, `no_error_details`, and `unclassified`, and add flat fallback-step fields to structured fallback logs so primary-model failures stay visible when later fallbacks also fail. Fixes #71922; refs #71744. Thanks @andyk-ms and @nikolaykazakovvs-ux.
|
|
68
|
-
- Gateway/startup: reuse the plugin manifest registry inside config validation so restrictive plugin allowlists avoid a duplicate manifest pass during startup. Thanks @shakkernerd.
|
|
69
|
-
- Gateway/startup: run plugin auto-enable from authored source config and skip disabled setup probes, avoiding runtime-default plugin allowlist writes and a second config snapshot read during startup. Thanks @shakkernerd.
|
|
70
63
|
- Plugins/Windows: normalize Windows absolute paths before handing bundled plugin modules to Jiti, so Feishu/Lark message sending no longer fails with unsupported `c:` ESM loader URLs. Fixes #72783. Thanks @jackychen-png.
|
|
71
64
|
- CLI/doctor: run bundled plugin runtime-dependency repairs through the async npm installer with spinner/line progress and heartbeat updates, so long `openclaw doctor --fix` installs no longer look hung in TTY or piped output. Fixes #72775. Thanks @dfpalhano.
|
|
72
65
|
- Feishu/Windows: normalize bundled channel sidecar loads before Jiti evaluates them, so Feishu outbound sends no longer fail with raw `C:` ESM loader errors on Windows. Fixes #72783. Thanks @jackychen-png.
|
|
@@ -144,19 +137,7 @@ Docs: https://docs.openclaw.ai
|
|
|
144
137
|
- Docker/setup: route Docker onboarding defaults for host-side LM Studio and Ollama through `host.docker.internal` and add the Linux host-gateway mapping to the bundled Compose file, so containerized gateways can reach local providers without using container loopback. Fixes #68684; supersedes #68702. Thanks @safrano9999 and @skolez.
|
|
145
138
|
- Agents/LM Studio: strip prior-turn Gemma 4 reasoning from OpenAI-compatible replay while preserving active tool-call continuation reasoning. Fixes #68704. Thanks @chip-snomo and @Kailigithub.
|
|
146
139
|
- LM Studio: allow interactive onboarding to leave the API key blank for unauthenticated local servers, using local synthetic auth while clearing stale LM Studio auth profiles. Fixes #66937. Thanks @olamedia.
|
|
147
|
-
- Plugins/startup:
|
|
148
|
-
- Plugins/startup: pass the Gateway `PluginLookUpTable` through plugin loading so auto-enable checks and startup-scope fallback reuse the same manifest registry instead of doing another manifest pass. Thanks @shakkernerd.
|
|
149
|
-
- Plugins/startup: carry the Gateway `PluginLookUpTable` into deferred channel full-runtime reloads so post-listen startup does not rebuild manifest metadata after the provisional setup-runtime load. Thanks @shakkernerd.
|
|
150
|
-
- Gateway/models: reuse Gateway plugin manifest metadata during the initial model-pricing refresh so pricing policies and configured plugin web-search models do not rebuild plugin lookups during startup. Thanks @shakkernerd.
|
|
151
|
-
- Gateway/startup: extend `OPENCLAW_GATEWAY_STARTUP_TRACE=1` with per-phase event-loop delay plus plugin lookup-table timing and count metrics for installed-index, manifest, startup-plan, and owner-map work, and include the new timing fields in startup benchmark summaries. Thanks @shakkernerd.
|
|
152
|
-
- Plugins/channels: resolve read-only channel command defaults from one plugin index plus manifest pass instead of reloading plugin metadata while checking candidate plugin enablement. Thanks @shakkernerd.
|
|
153
|
-
- Plugins/capabilities: cache manifest-derived capability provider plugin IDs per config snapshot so repeated TTS, media, realtime, memory, image, video, and music provider resolution avoids redundant manifest scans. Thanks @shakkernerd.
|
|
154
|
-
- Plugins/contracts: resolve runtime manifest-contract plugin owners from one plugin index plus manifest pass instead of rebuilding manifest metadata separately for all owners and enabled owners. Thanks @shakkernerd.
|
|
155
|
-
- Plugins/extractors: reuse one manifest registry pass while resolving bundled document and web-content extractor plugins instead of rereading manifests for compatibility and enablement filtering. Thanks @shakkernerd.
|
|
156
|
-
- Plugins/providers: reuse one plugin registry snapshot and manifest registry while resolving provider discovery entries instead of rebuilding manifest metadata after provider owner discovery. Thanks @shakkernerd.
|
|
157
|
-
- Plugins/registry: resolve lookup-table owner maps for providers, CLI backends, setup providers, command aliases, model catalogs, channel configs, and manifest contracts while preserving setup-only CLI backend ownership. Thanks @shakkernerd.
|
|
158
|
-
- Plugins/registry: cache repeated installed-index manifest registry fallback rebuilds behind a bounded invalidating cache so cold provider-discovery paths avoid rereading unchanged manifests. Thanks @mcaxtr.
|
|
159
|
-
- Plugins/web: reuse manifest records already loaded for bundled web provider candidate discovery when falling back to public artifact provider loading. Thanks @shakkernerd.
|
|
140
|
+
- Plugins/startup/registry: reuse a Gateway `PluginLookUpTable` and one manifest registry pass across startup plugin IDs, plugin loading, deferred channel reloads, model pricing, read-only channel defaults, capability/provider/media resolution, manifest contracts, extractors, web fallback discovery, owner maps, and cold provider-discovery caches, with new startup-trace timing/count metrics for installed-index, manifest, startup-plan, and owner-map work. Thanks @shakkernerd and @mcaxtr.
|
|
160
141
|
- Mattermost: keep direct-message replies top-level by suppressing reply roots for DM delivery while preserving channel and group thread roots, and derive inbound chat kind from the trusted channel lookup instead of the websocket event channel type. Carries forward #60115, #55186, #72305, and #72659; refs #59758, #59981, #59791, and #57565. Thanks @vincentkoc, @jwchmodx, and @hnykda.
|
|
161
142
|
- Docker: pre-create `/home/node/.openclaw` with node ownership and private permissions so first-run Docker Compose named volumes no longer fail startup with EACCES. (#48072, #63959; fixes #61279) Thanks @timoxue and @jeanibarz.
|
|
162
143
|
- CLI/Gateway: treat local restart probe policy closes for connect, exact `device required`, pairing, and auth failures as Gateway reachability proof without accepting empty, broad standalone token/password/scope/role, or pair-substring 1008 close reasons. Fixes #48771; carries forward #48801; related #63491. Thanks @MarsDoge and @genoooool.
|
|
@@ -181,28 +162,12 @@ Docs: https://docs.openclaw.ai
|
|
|
181
162
|
- CLI/help: treat positional `help` invocations like `openclaw channels help` as help paths for startup gating, avoiding model/auth warmup while preserving positional arguments such as `openclaw docs help`. Thanks @gumadeiras.
|
|
182
163
|
- Web search: route plugin-scoped web_search SecretRefs through the active runtime config snapshot so provider execution receives resolved credentials across app/runtime paths, including `plugins.entries.brave.config.webSearch.apiKey`. Fixes #68690. Thanks @VACInc.
|
|
183
164
|
- Voice Call: allow SecretRef-backed Twilio auth tokens and call-specific OpenAI/ElevenLabs TTS API keys through the plugin config surface. Fixes #68690. Thanks @joshavant.
|
|
184
|
-
- Google Meet: clean stale chrome-node realtime
|
|
185
|
-
- Google Meet: use 24 kHz PCM16 for Chrome command-pair realtime audio by default, preserve legacy 8 kHz G.711 mu-law custom command pairs, and let realtime providers negotiate the selected bridge audio format. Fixes #72525. Thanks @BsnizND.
|
|
186
|
-
- Google Meet: clear queued Gemini Live playback when realtime interruptions arrive, restart Chrome command-pair audio output after clears, and expose Google Live interruption/VAD config knobs for Meet and Voice Call realtime bridges. Fixes #72523. (#72524) Thanks @BsnizND.
|
|
187
|
-
- Google Meet: add `realtime.agentId` so live meeting consults can target a named OpenClaw agent instead of always using `main`. (#72381) Thanks @BsnizND.
|
|
188
|
-
- Google Meet: route stateful `google_meet` tool actions through the gateway-owned runtime so created or joined realtime sessions remain visible to status, speak, and leave after the agent turn ends. Fixes #72440. (#72441) Thanks @BsnizND.
|
|
189
|
-
- Google Meet/Voice Call: send Gemini Live a non-blocking consult continuation before long OpenClaw agent consults finish, then deliver the final result when idle so calls and meetings do not sit silent during tool-backed answers. (#72189) Thanks @VACInc.
|
|
190
|
-
- Google Meet: preserve Gemini Live function names when replying to realtime tool calls so Google SDK validation accepts the `FunctionResponse` payload. Fixes #72425. (#72426) Thanks @BsnizND.
|
|
165
|
+
- Google Meet/Voice Call: clean stale chrome-node realtime bridges before rejoining, expose bridge inspection, tolerate transient node input pull failures, default Chrome command-pair audio to 24 kHz PCM16 while preserving legacy 8 kHz G.711 mu-law pairs, handle Gemini Live interruptions/VAD and function-response names correctly, route stateful `google_meet` tools through the gateway runtime, support `realtime.agentId`, and send non-blocking consult continuations before long tool-backed answers finish. Fixes #72371, #72525, #72523, #72440, and #72425; (#72372, #72524, #72381, #72441, #72189, #72426) Thanks @BsnizND and @VACInc.
|
|
191
166
|
- Discord/media: keep incidental Markdown image badges in final replies as text unless a channel opts into Markdown-image media extraction, while preserving Telegram Markdown-image media replies and explicit `MEDIA:` attachments. Fixes #72642. Thanks @solavrc and @Bartok9.
|
|
192
167
|
- Matrix/E2EE: stabilize recovery and broken-device QA flows while avoiding Matrix device-cleanup sync races that could leave shutdown-time crypto work running. Thanks @gumadeiras.
|
|
193
|
-
- Cron: apply `cron.maxConcurrentRuns` to
|
|
194
|
-
- Cron:
|
|
195
|
-
- Cron:
|
|
196
|
-
- Cron: preserve exact `NO_REPLY` tool results from isolated jobs with empty final assistant turns as quiet successes instead of surfacing incomplete-turn errors. Fixes #68452; carries forward #68453. Thanks @anyech.
|
|
197
|
-
- Cron: resolve failure alerts and failure-destination announcements against `session:<id>` targets before falling back to the creator session, so jobs created from group chats can notify the targeted direct session without cross-account routing errors. Refs #62777; carries forward #68535. Thanks @slideshow-dingo and @likewen-tech.
|
|
198
|
-
- Discord: preserve explicit `user:` and `channel:` delivery targets through plugin routing so cron announcements and failure alerts keep their intended recipient kind. Refs #62777; carries forward #62798. Thanks @neeravmakwana.
|
|
199
|
-
- Cron: add `failureAlert.includeSkipped` and `openclaw cron edit --failure-alert-include-skipped` so persistently skipped jobs can alert without counting skips as execution errors or affecting retry backoff. Fixes #60846. Thanks @slideshow-dingo.
|
|
200
|
-
- Cron: invalidate stale pending runtime slots after live or offline `jobs.json` schedule edits, while preserving due slots for formatting-only rewrites. Fixes #27996 and #71607; carries forward #71651. Thanks @xialonglee and @fagnersouza666.
|
|
201
|
-
- Cron: keep legacy flat `jobs.json` rows loadable while comparing split-state schedule identities, so old cron stores do not crash before in-memory hydration can normalize them.
|
|
202
|
-
- Cron: start isolated agent-turn execution timeouts after the runner enters its effective execution lane, so queued cron/manual runs no longer spend their whole timeout budget before useful work begins. Fixes #41783. Thanks @ayanesakura and @Hurray0.
|
|
203
|
-
- Cron/Telegram: preserve direct-chat thread IDs and optional account IDs when inferring reminder delivery from Telegram direct-thread session keys. Fixes #44270; carries forward #44325, #44351, #44412, and #72657. Thanks @RunMintOn, @arkyu2077, @0xsline, and @vincentkoc.
|
|
204
|
-
- Cron: omit synthetic `delivery.resolved` errors from `--no-deliver` run records while preserving explicit no-deliver target traces for agent-initiated messages. Fixes #72210; carries forward #72219. Thanks @hatemclawbot-collab and @xydigit-sj.
|
|
205
|
-
- Cron: classify isolated runs as errors from structured embedded-run execution-denial metadata, with final-output marker fallback for `SYSTEM_RUN_DENIED`, `INVALID_REQUEST`, and approval-binding refusals, so blocked commands no longer appear green in cron history. Fixes #67172; carries forward #67186. Thanks @oc-gh-dr, @hclsys, and @1yihui.
|
|
168
|
+
- Cron: apply `cron.maxConcurrentRuns` to the nested isolated-agent lane, start isolated execution timeouts only after the runner enters that lane, keep legacy flat `jobs.json` rows loadable, invalidate stale pending runtime slots after schedule edits, and preserve due slots for formatting-only rewrites. Fixes #72707, #27996, #71607, and #41783; carries forward #71651. Thanks @kagura-agent, @xialonglee, @fagnersouza666, @ayanesakura, and @Hurray0.
|
|
169
|
+
- Cron/delivery: classify isolated successes, quiet `NO_REPLY` turns, model/provider failures, execution denials, `--no-deliver` traces, skipped-job alerts, and verified delivery outcomes correctly so cron history, retries, and failure counters reflect what actually happened. Fixes #72732, #50170, #43604, #68452, #60846, #72210, and #67172; follow-up to #54188; carries forward #43631, #68453, #72219, and #67186. Thanks @zNatix, @pixeldyn, @ChickenEggRoll, @SPFAdvisors, @anyech, @slideshow-dingo, @hatemclawbot-collab, @xydigit-sj, @oc-gh-dr, @hclsys, and @1yihui.
|
|
170
|
+
- Cron/routing: preserve direct Telegram thread/account IDs, explicit Discord `user:`/`channel:` delivery targets, and `session:<id>` failure-destination routing so reminders, cron announcements, and failure alerts keep the intended recipient kind across direct and group chats. Fixes #44270; refs #62777; carries forward #44325, #44351, #44412, #72657, #68535, and #62798. Thanks @RunMintOn, @arkyu2077, @0xsline, @vincentkoc, @slideshow-dingo, @likewen-tech, and @neeravmakwana.
|
|
206
171
|
- Subagents: keep the delegated task only in the subagent system prompt and send a short initial kickoff message, avoiding duplicate task tokens while preserving multiline task formatting. Fixes #72019; carries forward #72053. Thanks @Wizongod and @ly85206559.
|
|
207
172
|
- Onboarding/GitHub Copilot: add manifest-owned `--github-copilot-token` support for non-interactive setup, including env fallback, tokenRef storage in ref mode, saved-profile reuse, and current Copilot default-model wiring. Refs #50002 and supersedes #50003. Thanks @scottgl9.
|
|
208
173
|
- Gateway/install: add a validated `--wrapper`/`OPENCLAW_WRAPPER` service install path that persists executable LaunchAgent/systemd wrappers across forced reinstalls, updates, and doctor repairs instead of falling back to raw node/bun `ProgramArguments`. Fixes #69400. (#72445) Thanks @willtmc.
|
|
@@ -214,20 +179,7 @@ Docs: https://docs.openclaw.ai
|
|
|
214
179
|
- Exec/node: synthesize a local approval plan when a paired node advertises `system.run` without `system.run.prepare`, unblocking approval-required `host=node` exec on current macOS companion nodes while preserving remote prepare for node hosts that support it. Fixes #37591 and duplicate #66839; carries forward #69725. Thanks @soloclz.
|
|
215
180
|
- Memory/QMD: prefer QMD's `--mask` collection pattern flag so root memory indexing stays scoped to `MEMORY.md` instead of widening to every markdown file in the workspace. Fixes #65480; supersedes #65481 and #66259. Thanks @ccage-simp, @Bortlesboat, @seank-com, and @crazyscience.
|
|
216
181
|
- Memory/doctor: treat the specific `gateway timeout after ...` gateway memory probe result as inconclusive instead of reporting embeddings not ready, while preserving warnings for explicit failures. Fixes #44426; carries forward #46576 with the Greptile review feedback applied. Thanks Cengiz (@ghost).
|
|
217
|
-
- Gateway/
|
|
218
|
-
- Gateway/startup: keep core request handlers, setup wizard, and channel runtime helpers off the boot path until the first matching request, wizard run, or channel start, reducing no-plugin Gateway ready RSS and avoidable startup imports. Thanks @vincentkoc.
|
|
219
|
-
- Gateway/startup: keep CLI outbound channel send dependencies as lazy request-time senders so Gateway boot no longer imports channel plugin registration just to construct default deps. Thanks @vincentkoc.
|
|
220
|
-
- Gateway/startup: split lightweight HTTP auth helpers away from model-override helpers so Gateway bind no longer imports model catalog selection while wiring base HTTP routes. Thanks @vincentkoc.
|
|
221
|
-
- Gateway/startup: lazy-load plugin HTTP route dispatch when active plugin routes exist so no-plugin Gateway boot skips plugin route runtime scope setup. Thanks @vincentkoc.
|
|
222
|
-
- Gateway/startup: move chat run/subscriber registries onto a lightweight state module and defer chat/session event projection until the first event so Gateway boot skips session IO imports. Thanks @vincentkoc.
|
|
223
|
-
- Gateway/startup: keep node session runtime on a lightweight JSON parser instead of importing gateway method validation helpers during boot. Thanks @vincentkoc.
|
|
224
|
-
- Gateway/startup: read embedded-run activity from a lightweight shared state module so restart deferral no longer imports the embedded runner during Gateway boot. Thanks @vincentkoc.
|
|
225
|
-
- Gateway/startup: defer MCP loopback server imports until Gateway shutdown so normal boot no longer loads the loopback HTTP/tool schema stack just to register close handlers. Thanks @vincentkoc.
|
|
226
|
-
- Gateway/startup: resolve channel runtime helpers asynchronously only when an enabled/configured channel starts, so no-channel Gateway boot skips auto-reply, media, pairing, and outbound channel helper imports. Thanks @vincentkoc.
|
|
227
|
-
- Gateway/startup: lazy-load HTTP auth, canvas auth, and plugin route scope helpers from their request paths so Gateway bind no longer pays those utility graphs during boot. Thanks @vincentkoc.
|
|
228
|
-
- Gateway/startup: defer isolated cron runner imports until `/hooks/agent` dispatch so Gateway boot skips the agent-turn runtime on installs that only need normal HTTP bind. Thanks @vincentkoc.
|
|
229
|
-
- Gateway/startup: split hook request parsing into a request-path module and load the Gateway hook dispatcher only when a request matches the hooks base path, keeping hook mapping and throttle helpers off plain HTTP bind. Thanks @vincentkoc.
|
|
230
|
-
- CLI/Gateway: use a parse-only config snapshot for plain `gateway status` reads and reuse same-path service config context so status no longer spends tens of seconds in full config validation before printing. Thanks @vincentkoc.
|
|
182
|
+
- Gateway/startup: defer QMD, core request handlers, setup wizard, CLI outbound senders, plugin HTTP routes, chat/session projection, node session runtime validation, embedded-run activity reads, MCP loopback server imports, channel runtime helpers, HTTP/canvas/plugin auth helpers, isolated cron imports, and hook dispatch parsing until their request or shutdown paths, while making plain `gateway status` use a parse-only config snapshot so no-plugin boots and status reads avoid broad runtime fanout. Thanks @vincentkoc.
|
|
231
183
|
- Lobster/Gateway: memoize repeated Ajv schema compilation before loading the embedded Lobster runtime so scheduled workflows and `llm.invoke` loops stop growing gateway heap on content-identical schemas. Fixes #71148. Thanks @cmi525, @vsolaz, and @vincentkoc.
|
|
232
184
|
- Codex harness: normalize cached input tokens before session/context accounting so prompt cache reads are not double-counted in `/status`, `session_status`, or persisted `sessionEntry.totalTokens`. Fixes #69298. Thanks @richardmqq.
|
|
233
185
|
- Hooks/session-memory: use the host local timezone for memory filenames, fallback timestamp slugs, and markdown headers instead of UTC dates. Fixes #46703. (#46721) Thanks @Astro-Han.
|
|
@@ -242,35 +194,12 @@ Docs: https://docs.openclaw.ai
|
|
|
242
194
|
- Logging: write validated diagnostic trace context as top-level `traceId`, `spanId`, `parentSpanId`, and `traceFlags` fields in file-log JSONL records so traced requests and model calls are easier to correlate in log processors. Refs #40353. Thanks @liangruochong44-ui.
|
|
243
195
|
- Logging/sessions: apply configured redaction patterns to persisted session transcript text and accept escaped character classes in safe custom redaction regexes, so transcript JSONL no longer keeps matching sensitive text in the clear. Fixes #42982. Thanks @panpan0000.
|
|
244
196
|
- Agents/sessions: let `sessions_spawn runtime="subagent"` ignore ACP-only `streamTo` and `resumeSessionId` fields while keeping ACP passthrough and documenting `streamTo` as ACP-only. Fixes #43556 and #63120; covers #56326, #61724, #64714, and #67248; carries forward #68397, #65282, #58686, #56342, and #40102. Thanks @skernelx, @damselem, @Br1an67, @Mintalix, @IsaacAPerez, @vvitovec, @Sanjays2402, @shenkq97, and @1034378361.
|
|
245
|
-
- Providers/Ollama: honor `/api/show` capabilities
|
|
197
|
+
- Providers/Ollama: honor `/api/show` capabilities, custom Modelfile `PARAMETER num_ctx`, configured provider/model context defaults, whitelisted native params such as `temperature`, `top_p`, and `think`, and native thinking effort levels so local models get accurate tools, context, and thinking behavior without forcing full-context VRAM use. Fixes #64710, duplicate #65343, #68344, #44550, #52206, #49684, #68662, #48010, #71584, and #44786; supersedes #69464; carries forward #44955. Thanks @yuan-b, @netherby, @xilopaint, @Diyforfun2026, @neeravmakwana, @taitruong, @armi0024, @LokiCode404, @zhouZcong, @dshenster-byte, @tangzhi, @pandego, @maweibin, @Adam-Researchh, @EmpireCreator, @g0st1n, and @voltwake.
|
|
246
198
|
- Image tool/media: honor `tools.media.image.timeoutSeconds` and matching per-model image timeouts in explicit image analysis, including the MiniMax VLM fallback path, so slow local vision models are not capped by hardcoded 30s/60s aborts. Fixes #67889; supersedes #67929. Thanks @AllenT22 and @alchip.
|
|
247
|
-
- Providers/Ollama:
|
|
248
|
-
- Providers/Ollama:
|
|
249
|
-
-
|
|
250
|
-
- Providers/Ollama: forward whitelisted native Ollama model params such as `temperature`, `top_p`, and top-level `think` so users can disable API-level thinking or tune local models from config without proxy shims. Fixes #48010. Thanks @tangzhi, @pandego, @maweibin, @Adam-Researchh, and @EmpireCreator.
|
|
251
|
-
- Providers/Ollama: expose native Ollama thinking effort levels so `/think max` is accepted for reasoning-capable Ollama models and maps to Ollama's highest supported `think` effort. Fixes #71584. Thanks @g0st1n.
|
|
252
|
-
- Providers/Ollama: strip the active custom Ollama provider prefix before native chat and embedding requests, so custom provider ids like `ollama-spark/qwen3:32b` reach Ollama as the real model name. Fixes #72353. Thanks @maximus-dss and @hclsys.
|
|
253
|
-
- Providers/Ollama: parse stringified native tool-call arguments before dispatch, preserving unsafe integer values so Ollama tool use receives structured parameters. Fixes #69735; supersedes #69910. Thanks @rongshuzhao and @yfge.
|
|
254
|
-
- Providers/Ollama: skip ambient localhost discovery unless Ollama auth or meaningful config opts in, preventing unexpected probes to `127.0.0.1:11434` for users who are not using Ollama. Fixes #56939; supersedes #57116. Thanks @IanxDev and @tsukhani.
|
|
255
|
-
- Providers/Ollama: skip implicit localhost discovery when a custom remote `api: "ollama"` provider is configured, while still treating `127/8` loopback hosts as local. Carries forward #43224. Thanks @issacthekaylon.
|
|
256
|
-
- Providers/models: honor provider-level `contextWindow`, `contextTokens`, and `maxTokens` as defaults when resolving discovered models, so local Ollama and other self-hosted providers can cap all models without repeating per-model entries. Fixes #44786; carries forward #44955. Thanks @voltwake and @maweibin.
|
|
257
|
-
- Providers/Ollama: move memory embeddings to Ollama's current `/api/embed` endpoint with batched `input` requests while preserving vector normalization and custom provider auth/header overrides. Fixes #39983. Thanks @sskkcc and @LiudengZhang.
|
|
258
|
-
- Providers/Ollama: route local web search through Ollama's signed `/api/experimental/web_search` daemon proxy, use hosted `/api/web_search` directly for `ollama.com`, and keep `OLLAMA_API_KEY` scoped to cloud fallback auth. Fixes #69132. Thanks @yoon1012 and @hyspacex.
|
|
259
|
-
- Providers/Ollama: accept OpenAI SDK-style `baseURL` as an alias for `baseUrl` across discovery, streaming, setup pulls, embeddings, and web search so remote Ollama hosts are not silently ignored. Fixes #62533; supersedes #62549. Thanks @Julien-BKK and @Linux2010.
|
|
260
|
-
- Providers/Ollama: scope synthetic local auth and embedding bearer headers to declared Ollama host boundaries so cloud keys are not sent to local/self-hosted embedding endpoints and remote/cloud Ollama endpoints no longer receive the `ollama-local` marker as if it were a real token. Supersedes #69261 and #69857; refs #43945. Thanks @hyspacex, @maxramsay, and @Meli73.
|
|
261
|
-
- Providers/Ollama: resolve custom-named local Ollama providers such as `ollama-remote` through the Ollama synthetic-auth hook so subagents no longer miss `ollama-local` auth and silently fall back to cloud models. Fixes #43945. Thanks @Meli73 and @maxramsay.
|
|
262
|
-
- Providers/Ollama: add provider-scoped model request timeouts, thread them through guarded fetch connect/header/body/abort handling, and document `params.keep_alive` for cold local models so first-turn Ollama loads no longer require global agent timeout changes. Fixes #64541 and #68796; supersedes #65143 and #66511. Thanks @LittleJakub, @Juankcba, @uninhibite-scholar, and @yfge.
|
|
263
|
-
- Providers/Ollama: preserve explicit configured model input modalities when merging discovered provider metadata so custom vision models keep image support instead of silently dropping attachments. Fixes #39690; carries forward #39785. Thanks @Skrblik and @Mriris.
|
|
264
|
-
- Providers/Ollama: estimate native Ollama transcript usage when `/api/chat` omits prompt/eval counters while preserving exact zero counters, keeping local model runs visible in usage surfaces. Carries forward #39112. Thanks @TylonHH.
|
|
265
|
-
- Agents/Ollama: retry native Ollama turns that finish without user-visible text, including unsigned thinking-only responses, so constrained reasoning turns can continue instead of surfacing an empty reply. Carries forward #66552 and #61223. Thanks @yfge and @L3G.
|
|
266
|
-
- Docs/Ollama: expand setup recipes for local, LAN, cloud, multi-host, web search, embeddings, thinking control, and large-context troubleshooting.
|
|
199
|
+
- Providers/Ollama: strip custom provider prefixes before native chat/embedding requests, skip ambient localhost discovery unless config/auth opts in, handle custom remote `api: "ollama"` providers, accept OpenAI SDK-style `baseURL`, scope synthetic local auth and embedding bearer headers to declared host boundaries, resolve custom-named local providers for subagents, add provider-scoped model request timeouts, preserve explicit input modalities, and document `params.keep_alive` plus local/LAN/cloud/multi-host/web-search/embedding/thinking setup recipes. Fixes #72353, #56939, #62533, #43945, #64541, #68796, and #39690; supersedes #57116, #62549, #69261, #69857, #65143, and #66511; refs #43945; carries forward #43224 and #39785. Thanks @maximus-dss, @hclsys, @IanxDev, @tsukhani, @issacthekaylon, @Julien-BKK, @Linux2010, @hyspacex, @maxramsay, @Meli73, @LittleJakub, @Juankcba, @uninhibite-scholar, @yfge, @Skrblik, and @Mriris.
|
|
200
|
+
- Providers/Ollama: move memory embeddings to `/api/embed` with batched `input`, route local web search through Ollama's signed daemon proxy while keeping cloud auth scoped, treat Ollama memory embeddings as key-optional in doctor, and keep model usage visible by estimating native transcript usage when `/api/chat` omits counters. Fixes #39983, #69132, and #46584; carries forward #39112. Thanks @sskkcc, @LiudengZhang, @yoon1012, @hyspacex, @fengly78, and @TylonHH.
|
|
201
|
+
- Agents/Ollama: parse stringified native tool-call arguments, retry native empty/thinking-only turns, accept already-prefixed LLM task model overrides, apply provider-owned replay normalization for Cloud models, validate explicit `--thinking max`, show resolved thinking defaults in Control UI, and include configured provider models in `models list --provider`. Fixes #69735, #50052, #71697, #71584, #72407, and #65207; supersedes #69910; carries forward #66552 and #61223. Thanks @rongshuzhao, @yfge, @L3G, @ralphy-maplebots, @Hollychou924, @ismael-81, @g0st1n, @NotecAG, and @drzeast-png.
|
|
267
202
|
- Providers/PDF/Ollama: add bounded network timeouts for Ollama model pulls and native Anthropic/Gemini PDF analysis requests so unresponsive provider endpoints no longer hang sessions indefinitely. Fixes #54142; supersedes #54144 and #54145. Thanks @jinduwang1001-max and @arkyu2077.
|
|
268
|
-
- LLM Task/Ollama: accept model overrides that already include the selected provider prefix, avoiding doubled ids such as `ollama/ollama/llama3.2:latest`, and live-verify local Ollama JSON tasks return parsed output. Fixes #50052. Thanks @ralphy-maplebots and @Hollychou924.
|
|
269
|
-
- Memory/doctor: treat Ollama memory embeddings as key-optional so `openclaw doctor` no longer warns about a missing API key when the gateway reports embeddings are ready. Fixes #46584. Thanks @fengly78.
|
|
270
|
-
- Agents/Ollama: apply provider-owned replay turn normalization to native Ollama chat so Cloud models no longer reject non-alternating replay history in agent/Gateway runs. Fixes #71697. Thanks @ismael-81.
|
|
271
|
-
- Control UI/Ollama: show the resolved configured thinking default in chat and session thinking dropdowns so inherited `adaptive`/per-model thinking config no longer appears as `Default (off)` or a generic inherit value. Fixes #72407. Thanks @NotecAG.
|
|
272
|
-
- Agents/Ollama: validate explicit `--thinking max` against catalog-discovered Ollama reasoning metadata so local agent runs accept the same native thinking levels shown in the model catalog. Fixes #71584. Thanks @g0st1n.
|
|
273
|
-
- CLI/models: include explicitly configured provider models in `openclaw models list --provider <id>` without requiring the full catalog path, so configured Ollama models are visible. Fixes #65207. Thanks @drzeast-png.
|
|
274
203
|
- Docker/QA: add observability coverage to the normal Docker aggregate so QA-lab OTEL and Prometheus diagnostics run inside Docker. Thanks @vincentkoc.
|
|
275
204
|
- Auto-reply: poison inbound message dedupe after replay-unsafe provider/runtime failures so retries stay safe before visible progress but cannot duplicate messages after block output, tool side effects, or session progress. Fixes #69303; keeps #58549 and #64606 as duplicate validation. Thanks @martingarramon, @NikolaFC, and @zeroth-blip.
|
|
276
205
|
- Agents/model fallback: keep auto-persisted fallback model overrides selected across turns until `/new` or reset clears them, avoiding repeated probes of a known-bad primary while `/status` shows the selected and active models. Thanks @kibedu.
|
|
@@ -278,11 +207,7 @@ Docs: https://docs.openclaw.ai
|
|
|
278
207
|
- Gateway/Bonjour: keep @homebridge/ciao cancellation handlers registered across advertiser restarts so late probing cancellations cannot crash Linux and other mDNS-churned gateways.
|
|
279
208
|
- Plugins/startup: load the default `memory-core` slot during Gateway startup when permitted so active-memory recall can call `memory_search` and `memory_get` without requiring an explicit `plugins.slots.memory` entry, while preserving `plugins.slots.memory: "none"`.
|
|
280
209
|
- Plugins/CLI: prefer native require for compiled bundled plugin JavaScript before jiti so read-only config, status, device, and node commands avoid unnecessary transform overhead on slow hosts. Fixes #62842. Thanks @Effet.
|
|
281
|
-
- Plugins/compat: inventory doctor-side deprecation migrations separately from runtime plugin compatibility
|
|
282
|
-
- Plugins/compat: add missing dated compatibility records for legacy extension-api, memory registration, provider hook/type aliases, runtime aliases, channel SDK helpers, and approval/test utility shims. Thanks @vincentkoc.
|
|
283
|
-
- Plugins/CLI: refresh the persisted registry after managed plugin files are removed so ClawHub uninstall cannot leave stale `plugins list` entries.
|
|
284
|
-
- Plugins/CLI: make plugin install and uninstall config writes conflict-aware, clear stale denylist entries on explicit reinstall/removal, and delete managed plugin files only after config/index commit succeeds.
|
|
285
|
-
- Plugins: fail `plugins update` when tracked plugin or hook updates error, keep bundled runtime-dependency repair behind restrictive allowlists, and reject package installs with unloadable extension entries.
|
|
210
|
+
- Plugins/compat/CLI: inventory doctor-side deprecation migrations separately from runtime plugin compatibility, add dated records for legacy extension-api, memory registration, provider hook/type aliases, runtime aliases, channel SDK helpers, and approval/test utility shims, refresh the persisted registry after managed plugin removals, make plugin install/uninstall writes conflict-aware, clear stale denylists, and fail tracked plugin/hook updates or unloadable package installs instead of leaving stale state. Thanks @vincentkoc.
|
|
286
211
|
- WebChat/Control UI: support non-video file attachments in chat uploads while preserving the existing image attachment path and MIME-sniff fallback for generic image uploads. (#70947) Thanks @IAMSamuelRodda.
|
|
287
212
|
- Skills/memory: restore Chokidar v5 hot reloads by watching concrete skill and memory roots with filters, including SKILL.md removals and deleted skill folders without broad workspace recursion. Fixes #27404, #33585, and #41606. Thanks @shelvenzhou, @08820048, and @rocke2020.
|
|
288
213
|
- Gateway/chat: keep duplicate attachment-backed `chat.send` retries with the same idempotency key on the documented in-flight path so aborts still target the real active run. Fixes #70139. Thanks @Feelw00.
|
|
@@ -298,12 +223,8 @@ Docs: https://docs.openclaw.ai
|
|
|
298
223
|
- Docker/update smoke: keep the package-derived update-channel fixture on package-shipped files and make its UI build stub create the asset the updater verifies. Thanks @vincentkoc.
|
|
299
224
|
- Gateway/models: repair legacy `models.providers.*.api = "openai"` config values to `openai-completions`, and skip providers with future stale API enum values during startup instead of bricking the gateway. Fixes #72477. (#72542) Thanks @JooyoungChoi14 and @obviyus.
|
|
300
225
|
- Gateway/skills: redact `apiKey` and secret-named `env` values from the `skills.update` RPC response to prevent leaking credentials into WebSocket traffic, client logs, or session transcripts. Config is still written to disk in full; only the response payload is redacted. (#69998) Thanks @Ziy1-Tan.
|
|
301
|
-
|
|
302
226
|
- Plugins/CLI: let flag-driven `openclaw channels add` install the selected channel plugin from its default source without opening an interactive prompt, fixing published npm Telegram setup in stdin-closed automation.
|
|
303
|
-
- Onboarding/setup: keep first-run config reads, plugin compatibility notices, and post-model sanity checks on cold metadata
|
|
304
|
-
- Onboarding/auth: run manifest-owned provider auth choices through scoped setup providers so selecting OpenAI Codex browser/device auth no longer loads every provider runtime before OAuth starts. Thanks @shakkernerd.
|
|
305
|
-
- Onboarding/auth: keep the post-auth default-model policy lookup on manifest/setup metadata so the next prompt appears without loading broad provider runtime. Thanks @shakkernerd.
|
|
306
|
-
- Onboarding/models: keep skip-auth and provider-scoped model picker prompts off the full global model catalog path, and cache provider catalog hook resolution so setup no longer stalls after auth on large plugin registries. Thanks @shakkernerd.
|
|
227
|
+
- Onboarding/setup: keep first-run config reads, plugin compatibility notices, OpenAI Codex auth, post-auth default-model policy lookup, skip-auth, provider-scoped model pickers, and post-model sanity checks on cold manifest/setup metadata unless the user chooses to browse all models, avoiding full plugin/provider runtime loads between prompts. Thanks @shakkernerd.
|
|
307
228
|
- Gateway/Bonjour: suppress known @homebridge/ciao cancellation and network assertion failures through scoped process handlers so malformed mDNS packets or restricted VPS networking disable/restart Bonjour instead of crashing the gateway. Fixes #67578. Thanks @zenassist26-create.
|
|
308
229
|
- Discord: keep late clicks on already-resolved exec approval buttons quiet when elevated mode auto-resolved the request, while still surfacing real approval submission failures. Fixes #66906. Thanks @rlerikse.
|
|
309
230
|
- Telegram: send a fresh final message for long-lived preview-streamed replies so the visible Telegram timestamp reflects completion time instead of the preview creation time. Thanks @rubencu.
|
package/dist/.buildstamp
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"builtAt":
|
|
1
|
+
{"builtAt":1777339625927,"head":"be8c24633aaa7ef0425ae1178f096ee8dd6226c0"}
|
package/dist/build-info.json
CHANGED
package/dist/cli/run-main.js
CHANGED
|
@@ -180,7 +180,7 @@ async function runCli(argv = process$1.argv) {
|
|
|
180
180
|
});
|
|
181
181
|
await ensureCliEnvProxyDispatcher();
|
|
182
182
|
maybeWarnAboutDebugProxyCoverage();
|
|
183
|
-
const { tryRouteCli } = await import("../route-
|
|
183
|
+
const { tryRouteCli } = await import("../route-oWPuyRNu.js");
|
|
184
184
|
if (await tryRouteCli(normalizedArgv)) return;
|
|
185
185
|
const { createCliProgress } = await import("../progress-DvLtPNBN.js");
|
|
186
186
|
const startupProgress = createCliProgress({
|
|
@@ -199,7 +199,7 @@ async function runCli(argv = process$1.argv) {
|
|
|
199
199
|
const { enableConsoleCapture } = await import("../logging-DJVyz0NO.js");
|
|
200
200
|
enableConsoleCapture();
|
|
201
201
|
const [{ buildProgram }, { formatUncaughtError }, { runFatalErrorHooks }, { installUnhandledRejectionHandler, isUncaughtExceptionHandled }, { restoreTerminalState }] = await Promise.all([
|
|
202
|
-
import("../program-
|
|
202
|
+
import("../program-B7UMD7mC.js"),
|
|
203
203
|
import("../infra/errors.js"),
|
|
204
204
|
import("../fatal-error-hooks-DxqbkWSf.js"),
|
|
205
205
|
import("../unhandled-rejections-C8zuE08J.js"),
|
|
@@ -223,10 +223,10 @@ async function runCli(argv = process$1.argv) {
|
|
|
223
223
|
const { getProgramContext } = await import("../program-context-DQcRYcs8.js");
|
|
224
224
|
const ctx = getProgramContext(program);
|
|
225
225
|
if (ctx) {
|
|
226
|
-
const { registerCoreCliByName } = await import("../command-registry-
|
|
226
|
+
const { registerCoreCliByName } = await import("../command-registry-CZTnsBMh.js");
|
|
227
227
|
await registerCoreCliByName(program, ctx, primary, parseArgv);
|
|
228
228
|
}
|
|
229
|
-
const { registerSubCliByName } = await import("../register.subclis-
|
|
229
|
+
const { registerSubCliByName } = await import("../register.subclis-CvhrxO-c.js");
|
|
230
230
|
await registerSubCliByName(program, primary);
|
|
231
231
|
}
|
|
232
232
|
if (!shouldSkipPluginCommandRegistration({
|
|
@@ -28,6 +28,6 @@
|
|
|
28
28
|
"channelCatalogSignature": "bbc5a4e89c38926bfa8047b3df822d7696c226a9",
|
|
29
29
|
"rootHelpBundleSignature": "207a8c995cd3ba2b7bea2490530cb594a6f7d20f",
|
|
30
30
|
"browserHelpSourceSignature": "56c4202114c558f595db265da52e81a54c140752",
|
|
31
|
-
"browserHelpText": "\n🦞 OpenClaw 2026.4.26
|
|
32
|
-
"rootHelpText": "\n🦞 OpenClaw 2026.4.26
|
|
31
|
+
"browserHelpText": "\n🦞 OpenClaw 2026.4.26 (be8c246) — Your .zshrc wishes it could do what I do.\n\nUsage: openclaw browser [options] [command]\n\nManage OpenClaw's dedicated browser (Chrome/Chromium)\n\nOptions:\n --browser-profile <name> Browser profile name (default from config)\n --expect-final Wait for final response (agent) (default: false)\n -h, --help Display help for command\n --json Output machine-readable JSON (default: false)\n --timeout <ms> Timeout in ms (default: \"30000\")\n --token <token> Gateway token (if required)\n --url <url> Gateway WebSocket URL (defaults to\n gateway.remote.url when configured)\n\nCommands:\n click Click an element by ref from snapshot\n click-coords Click viewport coordinates\n close Close a tab (target id optional)\n console Get recent console messages\n cookies Read/write cookies\n create-profile Create a new browser profile\n delete-profile Delete a browser profile\n dialog Arm the next modal dialog (alert/confirm/prompt)\n doctor Check browser plugin readiness\n download Click a ref and save the resulting download\n drag Drag from one ref to another\n errors Get recent page errors\n evaluate Evaluate a function against the page or a ref\n fill Fill a form with JSON field descriptors\n focus Focus a tab by target id, tab id, label, or unique\n target id prefix\n highlight Highlight an element by ref\n hover Hover an element by ai ref\n navigate Navigate the current tab to a URL\n open Open a URL in a new tab\n pdf Save page as PDF\n press Press a key\n profiles List all browser profiles\n requests Get recent network requests (best-effort)\n reset-profile Reset browser profile (moves it to Trash)\n resize Resize the viewport\n responsebody Wait for a network response and return its body\n screenshot Capture a screenshot (MEDIA:<path>)\n scrollintoview Scroll an element into view by ref from snapshot\n select Select option(s) in a select element\n set Browser environment settings\n snapshot Capture a snapshot (default: ai; aria is the\n accessibility tree)\n start Start the browser (no-op if already running)\n status Show browser status\n stop Stop the browser (best-effort)\n storage Read/write localStorage/sessionStorage\n tab Tab shortcuts (index-based)\n tabs List open tabs\n trace Record a Playwright trace\n type Type into an element by ref from snapshot\n upload Arm file upload for the next file chooser\n wait Wait for time, selector, URL, load state, or JS\n conditions\n waitfordownload Wait for the next download (and save it)\n\nExamples:\n openclaw browser status\n openclaw browser start\n openclaw browser start --headless\n openclaw browser stop\n openclaw browser tabs\n openclaw browser open https://example.com\n openclaw browser focus abcd1234\n openclaw browser close abcd1234\n openclaw browser screenshot\n openclaw browser screenshot --full-page\n openclaw browser screenshot --ref 12\n openclaw browser snapshot\n openclaw browser snapshot --format aria --limit 200\n openclaw browser snapshot --efficient\n openclaw browser snapshot --labels\n openclaw browser navigate https://example.com\n openclaw browser resize 1280 720\n openclaw browser click 12 --double\n openclaw browser click-coords 120 340\n openclaw browser type 23 \"hello\" --submit\n openclaw browser press Enter\n openclaw browser hover 44\n openclaw browser drag 10 11\n openclaw browser select 9 OptionA OptionB\n openclaw browser upload /tmp/openclaw/uploads/file.pdf\n openclaw browser fill --fields '[{\"ref\":\"1\",\"value\":\"Ada\"}]'\n openclaw browser dialog --accept\n openclaw browser wait --text \"Done\"\n openclaw browser evaluate --fn '(el) => el.textContent' --ref 7\n openclaw browser console --level error\n openclaw browser pdf\n\nDocs: https://docs.openclaw.ai/cli/browser\n\n",
|
|
32
|
+
"rootHelpText": "\n🦞 OpenClaw 2026.4.26 (be8c246) — I'm not magic—I'm just extremely persistent with retries and coping strategies.\n\nUsage: openclaw [options] [command]\n\nOptions:\n --container <name> Run the CLI inside a running Podman/Docker container\n named <name> (default: env OPENCLAW_CONTAINER)\n --dev Dev profile: isolate state under ~/.openclaw-dev, default\n gateway port 19001, and shift derived ports\n (browser/canvas)\n -h, --help Display help for command\n --log-level <level> Global log level override for file + console\n (silent|fatal|error|warn|info|debug|trace)\n --no-color Disable ANSI colors\n --profile <name> Use a named profile (isolates\n OPENCLAW_STATE_DIR/OPENCLAW_CONFIG_PATH under\n ~/.openclaw-<name>)\n -V, --version output the version number\n\nCommands:\n Hint: commands suffixed with * have subcommands. Run <command> --help for details.\n acp * Agent Control Protocol tools\n agent Run one agent turn via the Gateway\n agents * Manage isolated agents (workspaces, auth, routing)\n approvals * Manage exec approvals (gateway or node host)\n backup * Create and verify local backup archives for OpenClaw\n state\n capability * Run provider-backed inference commands (fallback alias:\n infer)\n channels * Manage connected chat channels (Telegram, Discord, etc.)\n chat Open a local terminal UI (alias for tui --local)\n clawbot * Legacy clawbot command aliases\n completion Generate shell completion script\n config * Non-interactive config helpers\n (get/set/unset/file/validate). Default: starts guided\n setup.\n configure Interactive configuration for credentials, channels,\n gateway, and agent defaults\n crestodian Open the ring-zero setup and repair helper\n cron * Manage cron jobs via the Gateway scheduler\n daemon * Gateway service (legacy alias)\n dashboard Open the Control UI with your current token\n devices * Device pairing + token management\n directory * Lookup contact and group IDs (self, peers, groups) for\n supported chat channels\n dns * DNS helpers for wide-area discovery (Tailscale + CoreDNS)\n docs Search the live OpenClaw docs\n doctor Health checks + quick fixes for the gateway and channels\n exec-policy * Show or synchronize requested exec policy with host\n approvals\n gateway * Run, inspect, and query the WebSocket Gateway\n health Fetch health from the running gateway\n help Display help for command\n hooks * Manage internal agent hooks\n infer * Run provider-backed inference commands\n logs Tail gateway file logs via RPC\n mcp * Manage OpenClaw MCP config and channel bridge\n memory Search, inspect, and reindex memory files\n message * Send, read, and manage messages\n migrate * Import state from another agent system\n models * Discover, scan, and configure models\n node * Run and manage the headless node host service\n nodes * Manage gateway-owned node pairing and node commands\n onboard Interactive onboarding for gateway, workspace, and skills\n pairing * Secure DM pairing (approve inbound requests)\n plugins * Manage OpenClaw plugins\n proxy * Run the OpenClaw debug proxy and inspect captured traffic\n qr Generate mobile pairing QR/setup code\n reset Reset local config/state (keeps the CLI installed)\n sandbox * Manage sandbox containers for agent isolation\n secrets * Secrets runtime reload controls\n security * Security tools and local config audits\n sessions * List stored conversation sessions\n setup Initialize local config and agent workspace\n skills * List and inspect available skills\n status Show channel health and recent session recipients\n system * System events, heartbeat, and presence\n tasks * Inspect durable background task state\n terminal Open a local terminal UI (alias for tui --local)\n tui Open a terminal UI connected to the Gateway\n uninstall Uninstall the gateway service + local data (CLI remains)\n update * Update OpenClaw and inspect update channel status\n webhooks * Webhook helpers and integrations\n\nExamples:\n openclaw models --help\n Show detailed help for the models command.\n openclaw channels login --verbose\n Link personal WhatsApp Web and show QR + connection logs.\n openclaw message send --target +15555550123 --message \"Hi\" --json\n Send via your web session and print JSON result.\n openclaw gateway --port 18789\n Run the WebSocket Gateway locally.\n openclaw --dev gateway\n Run a dev Gateway (isolated state/config) on ws://127.0.0.1:19001.\n openclaw gateway --force\n Kill anything bound to the default gateway port, then start it.\n openclaw gateway ...\n Gateway control via WebSocket.\n openclaw agent --to +15555550123 --message \"Run summary\" --deliver\n Talk directly to the agent using the Gateway; optionally send the WhatsApp reply.\n openclaw message send --channel telegram --target @mychat --message \"Hi\"\n Send via your Telegram bot.\n\nDocs: https://docs.openclaw.ai/cli\n\n"
|
|
33
33
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import "./argv-Bh2LLxMT.js";
|
|
2
|
-
import { n as registerCoreCliByName } from "./command-registry-core-
|
|
3
|
-
import "./command-registry-
|
|
2
|
+
import { n as registerCoreCliByName } from "./command-registry-core-BW__ytHr.js";
|
|
3
|
+
import "./command-registry-DP8sbc0j.js";
|
|
4
4
|
export { registerCoreCliByName };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { r as registerCoreCliCommands } from "./command-registry-core-
|
|
2
|
-
import { n as registerSubCliCommands } from "./register.subclis-
|
|
1
|
+
import { r as registerCoreCliCommands } from "./command-registry-core-BW__ytHr.js";
|
|
2
|
+
import { n as registerSubCliCommands } from "./register.subclis-BWh4CzXv.js";
|
|
3
3
|
//#region src/cli/program/command-registry.ts
|
|
4
4
|
function registerProgramCommands(program, ctx, argv = process.argv) {
|
|
5
5
|
registerCoreCliCommands(program, ctx, argv);
|
|
@@ -2,7 +2,7 @@ import { _ as getCoreCliCommandDescriptors, v as getCoreCliCommandNames$1 } from
|
|
|
2
2
|
import { t as resolveCliArgvInvocation } from "./argv-invocation-C0QUafZn.js";
|
|
3
3
|
import { n as shouldRegisterPrimaryCommandOnly } from "./command-registration-policy-vjojuaYv.js";
|
|
4
4
|
import { i as registerCommandGroups, r as registerCommandGroupByName } from "./register-command-groups-DKI4xdVx.js";
|
|
5
|
-
import { a as defineImportedCommandGroupSpec, i as buildCommandGroupEntries, o as defineImportedProgramCommandGroupSpecs } from "./register.subclis-core-
|
|
5
|
+
import { a as defineImportedCommandGroupSpec, i as buildCommandGroupEntries, o as defineImportedProgramCommandGroupSpecs } from "./register.subclis-core-CGcKvIfu.js";
|
|
6
6
|
//#region src/cli/program/command-registry-core.ts
|
|
7
7
|
function withProgramOnlySpecs(specs) {
|
|
8
8
|
return specs.map((spec) => ({
|
|
@@ -16,7 +16,7 @@ const coreEntrySpecs = [
|
|
|
16
16
|
...withProgramOnlySpecs(defineImportedProgramCommandGroupSpecs([
|
|
17
17
|
{
|
|
18
18
|
commandNames: ["crestodian"],
|
|
19
|
-
loadModule: () => import("./register.crestodian-
|
|
19
|
+
loadModule: () => import("./register.crestodian-DAQqhXc4.js"),
|
|
20
20
|
exportName: "registerCrestodianCommand"
|
|
21
21
|
},
|
|
22
22
|
{
|
|
@@ -36,7 +36,7 @@ const coreEntrySpecs = [
|
|
|
36
36
|
},
|
|
37
37
|
{
|
|
38
38
|
commandNames: ["config"],
|
|
39
|
-
loadModule: () => import("./config-cli-
|
|
39
|
+
loadModule: () => import("./config-cli-BZUiTXoe.js"),
|
|
40
40
|
exportName: "registerConfigCli"
|
|
41
41
|
},
|
|
42
42
|
{
|
|
@@ -2,8 +2,8 @@ import { t as formatDocsLink } from "./links-BszRQhGa.js";
|
|
|
2
2
|
import { r as theme } from "./theme-B128avno.js";
|
|
3
3
|
import { a as routeLogsToStderr } from "./console-D6VW2Y3e.js";
|
|
4
4
|
import { c as resolveShellFromEnv, i as installCompletion, o as isCompletionShell, s as resolveCompletionCachePath, t as COMPLETION_SHELLS } from "./completion-runtime-Dj8zJbDO.js";
|
|
5
|
-
import { n as registerSubCliByName, t as getSubCliEntries } from "./register.subclis-core-
|
|
6
|
-
import { n as registerCoreCliByName, t as getCoreCliCommandNames } from "./command-registry-core-
|
|
5
|
+
import { n as registerSubCliByName, t as getSubCliEntries } from "./register.subclis-core-CGcKvIfu.js";
|
|
6
|
+
import { n as registerCoreCliByName, t as getCoreCliCommandNames } from "./command-registry-core-BW__ytHr.js";
|
|
7
7
|
import { t as getProgramContext } from "./program-context-BqlxOV9o.js";
|
|
8
8
|
import path from "node:path";
|
|
9
9
|
import fs from "node:fs/promises";
|
|
@@ -16,7 +16,7 @@ import { n as discoverConfigSecretTargets, s as resolveConfigSecretTargetByPath
|
|
|
16
16
|
import { r as replaceConfigFile } from "./config--k_1dtUP.js";
|
|
17
17
|
import { a as normalizeConfigIssues, n as formatConfigIssueLines } from "./issue-format-DUq-EpQO.js";
|
|
18
18
|
import { n as redactConfigObject } from "./redact-snapshot-CHwgMzic.js";
|
|
19
|
-
import { n as readBestEffortRuntimeConfigSchema } from "./runtime-schema-
|
|
19
|
+
import { n as readBestEffortRuntimeConfigSchema } from "./runtime-schema-TpYHXgGk.js";
|
|
20
20
|
import { n as setCommandJsonMode } from "./json-mode-EE8S0d-K.js";
|
|
21
21
|
import fs from "node:fs";
|
|
22
22
|
import JSON5 from "json5";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as runCrestodian } from "../crestodian-
|
|
1
|
+
import { t as runCrestodian } from "../crestodian-Cdb719FY.js";
|
|
2
2
|
export { runCrestodian };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { _ as resolveStateDir } from "../paths-B2cMK-wd.js";
|
|
2
2
|
import { c as normalizeAgentId } from "../session-key-hxP9B3Or.js";
|
|
3
|
-
import { a as parseCrestodianOperation, i as isPersistentCrestodianOperation, n as executeCrestodianOperation, r as formatCrestodianPersistentPlan } from "../operations-
|
|
3
|
+
import { a as parseCrestodianOperation, i as isPersistentCrestodianOperation, n as executeCrestodianOperation, r as formatCrestodianPersistentPlan } from "../operations-RpPh9sAi.js";
|
|
4
4
|
import path from "node:path";
|
|
5
5
|
import fs from "node:fs/promises";
|
|
6
6
|
import { createHash, randomUUID } from "node:crypto";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { n as defaultRuntime, r as writeRuntimeJson } from "./runtime-izpjJukX.js";
|
|
2
2
|
import { n as withProgress } from "./progress-CmC4nq1O.js";
|
|
3
|
-
import { i as isPersistentCrestodianOperation, n as executeCrestodianOperation } from "./operations-
|
|
3
|
+
import { i as isPersistentCrestodianOperation, n as executeCrestodianOperation } from "./operations-RpPh9sAi.js";
|
|
4
4
|
import { r as loadCrestodianOverview, t as formatCrestodianOverview } from "./overview-B3_zmq9x.js";
|
|
5
|
-
import { r as resolveCrestodianOperation } from "./dialogue-
|
|
5
|
+
import { r as resolveCrestodianOperation } from "./dialogue-Bi1Ejndn.js";
|
|
6
6
|
import { stdin, stdout } from "node:process";
|
|
7
7
|
//#region src/crestodian/crestodian.ts
|
|
8
8
|
function crestodianCommandDepsFromOptions(opts) {
|
|
@@ -46,7 +46,7 @@ async function runCrestodian(opts = {}, runtime = defaultRuntime) {
|
|
|
46
46
|
runtime.error("Crestodian needs an interactive TTY. Use --message for one command.");
|
|
47
47
|
return;
|
|
48
48
|
}
|
|
49
|
-
const runInteractiveTui = opts.runInteractiveTui ?? (await import("./tui-backend-
|
|
49
|
+
const runInteractiveTui = opts.runInteractiveTui ?? (await import("./tui-backend-DJjxFdMK.js")).runCrestodianTui;
|
|
50
50
|
opts.onReady?.();
|
|
51
51
|
await runInteractiveTui(opts, runtime);
|
|
52
52
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as parseCrestodianOperation, t as describeCrestodianPersistentOperation } from "./operations-
|
|
1
|
+
import { a as parseCrestodianOperation, t as describeCrestodianPersistentOperation } from "./operations-RpPh9sAi.js";
|
|
2
2
|
import { r as loadCrestodianOverview } from "./overview-B3_zmq9x.js";
|
|
3
3
|
//#region src/crestodian/dialogue.ts
|
|
4
4
|
function approvalQuestion(operation) {
|
|
@@ -842,7 +842,7 @@ async function runGatewayCommand$1(opts) {
|
|
|
842
842
|
const { startGatewayServer } = await startupTrace.measure("cli.server-import", () => withProgress({
|
|
843
843
|
label: "Loading gateway modules…",
|
|
844
844
|
indeterminate: true
|
|
845
|
-
}, async () => import("./server-
|
|
845
|
+
}, async () => import("./server-BnrDM4ZY.js")));
|
|
846
846
|
setConsoleTimestampPrefix(true);
|
|
847
847
|
if (devMode) await startupTrace.measure("cli.dev-config", () => ensureDevGatewayConfig({ reset: Boolean(opts.reset) }));
|
|
848
848
|
gatewayLog.info("loading configuration…");
|
|
@@ -387,7 +387,7 @@ async function executeCrestodianOperation(operation, runtime, opts = {}) {
|
|
|
387
387
|
const { readConfigFileSnapshot } = await import("./config/config.js");
|
|
388
388
|
const before = await readConfigFileSnapshot();
|
|
389
389
|
await (opts.deps?.runConfigSet ?? (async (setOpts) => {
|
|
390
|
-
const { runConfigSet: importedRunConfigSet } = await import("./config-cli-
|
|
390
|
+
const { runConfigSet: importedRunConfigSet } = await import("./config-cli-BZUiTXoe.js");
|
|
391
391
|
await importedRunConfigSet({
|
|
392
392
|
...setOpts,
|
|
393
393
|
runtime: createNoExitRuntime(runtime)
|
|
@@ -425,7 +425,7 @@ async function executeCrestodianOperation(operation, runtime, opts = {}) {
|
|
|
425
425
|
const { readConfigFileSnapshot } = await import("./config/config.js");
|
|
426
426
|
const before = await readConfigFileSnapshot();
|
|
427
427
|
await (opts.deps?.runConfigSet ?? (async (setOpts) => {
|
|
428
|
-
const { runConfigSet: importedRunConfigSet } = await import("./config-cli-
|
|
428
|
+
const { runConfigSet: importedRunConfigSet } = await import("./config-cli-BZUiTXoe.js");
|
|
429
429
|
await importedRunConfigSet({
|
|
430
430
|
...setOpts,
|
|
431
431
|
runtime: createNoExitRuntime(runtime)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
2026-04-
|
|
1
|
+
2026-04-28T01:27:06.546Z
|
|
@@ -504,9 +504,9 @@
|
|
|
504
504
|
"dist/command-queue-O7Nzaeee.js",
|
|
505
505
|
"dist/command-registration-h0xR6wWQ.js",
|
|
506
506
|
"dist/command-registration-policy-vjojuaYv.js",
|
|
507
|
-
"dist/command-registry-core-
|
|
508
|
-
"dist/command-registry-
|
|
509
|
-
"dist/command-registry-
|
|
507
|
+
"dist/command-registry-core-BW__ytHr.js",
|
|
508
|
+
"dist/command-registry-CZTnsBMh.js",
|
|
509
|
+
"dist/command-registry-DP8sbc0j.js",
|
|
510
510
|
"dist/command-secret-gateway-Bz9ocmUm.js",
|
|
511
511
|
"dist/command-secret-targets-Cj5-iVXn.js",
|
|
512
512
|
"dist/command-secret-targets-SPHUpw6H.js",
|
|
@@ -555,7 +555,7 @@
|
|
|
555
555
|
"dist/compaction-CciVUU6P.js",
|
|
556
556
|
"dist/compaction-runtime-context-DKVjVf22.js",
|
|
557
557
|
"dist/compaction-successor-transcript-CFukhZtt.js",
|
|
558
|
-
"dist/completion-cli-
|
|
558
|
+
"dist/completion-cli-CPujqMq_.js",
|
|
559
559
|
"dist/completion-runtime-Dj8zJbDO.js",
|
|
560
560
|
"dist/config--k_1dtUP.js",
|
|
561
561
|
"dist/config-api-BLtpLP02.js",
|
|
@@ -566,7 +566,7 @@
|
|
|
566
566
|
"dist/config-BFHPzDUh.js",
|
|
567
567
|
"dist/config-BZVBCK8E.js",
|
|
568
568
|
"dist/config-Cd4tXHpC.js",
|
|
569
|
-
"dist/config-cli-
|
|
569
|
+
"dist/config-cli-BZUiTXoe.js",
|
|
570
570
|
"dist/config-compat-_t5yOAPm.js",
|
|
571
571
|
"dist/config-compat-CMK0r75q.js",
|
|
572
572
|
"dist/config-compat-D9RYuMgr.js",
|
|
@@ -687,7 +687,7 @@
|
|
|
687
687
|
"dist/credential-planner-DT5dEiCa.js",
|
|
688
688
|
"dist/credentials-CbE6PbFU.js",
|
|
689
689
|
"dist/credentials-secret-inputs-3C1Ox7Mp.js",
|
|
690
|
-
"dist/crestodian-
|
|
690
|
+
"dist/crestodian-Cdb719FY.js",
|
|
691
691
|
"dist/crestodian/crestodian.js",
|
|
692
692
|
"dist/crestodian/rescue-message.js",
|
|
693
693
|
"dist/cron-cli-BugBCXbp.js",
|
|
@@ -767,7 +767,7 @@
|
|
|
767
767
|
"dist/diagnostics-D_i4GduU.js",
|
|
768
768
|
"dist/diagnostics-D0Q9NVFX.js",
|
|
769
769
|
"dist/diagnostics-DIG3MCn9.js",
|
|
770
|
-
"dist/dialogue-
|
|
770
|
+
"dist/dialogue-Bi1Ejndn.js",
|
|
771
771
|
"dist/direct-dm-access-CvGs_kA7.js",
|
|
772
772
|
"dist/direct-dm-C8Osrz4E.js",
|
|
773
773
|
"dist/direct-dm-guard-policy-Q1MG7jR6.js",
|
|
@@ -2616,7 +2616,7 @@
|
|
|
2616
2616
|
"dist/fs-safe-sV0LG2ru.js",
|
|
2617
2617
|
"dist/gateway-auth-bypass-D2QXpKX4.js",
|
|
2618
2618
|
"dist/gateway-bindings-Ckjy42-e.js",
|
|
2619
|
-
"dist/gateway-cli-
|
|
2619
|
+
"dist/gateway-cli-l4SoRD2p.js",
|
|
2620
2620
|
"dist/gateway-control-ui-origins-DpuxXpK4.js",
|
|
2621
2621
|
"dist/gateway-discovery-targets-9UU82bx_.js",
|
|
2622
2622
|
"dist/gateway-DY8i5DmM.js",
|
|
@@ -3208,7 +3208,7 @@
|
|
|
3208
3208
|
"dist/openclaw-tools.runtime.js",
|
|
3209
3209
|
"dist/opencode-xGNdHn3j.js",
|
|
3210
3210
|
"dist/openresponses-http-D2SenRnn.js",
|
|
3211
|
-
"dist/operations-
|
|
3211
|
+
"dist/operations-RpPh9sAi.js",
|
|
3212
3212
|
"dist/operator-approvals-client-BdTbpocA.js",
|
|
3213
3213
|
"dist/order-Din7_cCm.js",
|
|
3214
3214
|
"dist/origin-routing-BobkolwG.js",
|
|
@@ -7369,9 +7369,9 @@
|
|
|
7369
7369
|
"dist/profile-list-zV5Cv5VC.js",
|
|
7370
7370
|
"dist/profile-utils-7b3ZHGpe.js",
|
|
7371
7371
|
"dist/profiles-CrHNjqxk.js",
|
|
7372
|
+
"dist/program-B7UMD7mC.js",
|
|
7372
7373
|
"dist/program-context-BqlxOV9o.js",
|
|
7373
7374
|
"dist/program-context-DQcRYcs8.js",
|
|
7374
|
-
"dist/program-IvaCxeOx.js",
|
|
7375
7375
|
"dist/progress-CmC4nq1O.js",
|
|
7376
7376
|
"dist/progress-DvLtPNBN.js",
|
|
7377
7377
|
"dist/progress-line-BLlwPNs4.js",
|
|
@@ -7576,16 +7576,16 @@
|
|
|
7576
7576
|
"dist/register.agent-npRc8Wjk.js",
|
|
7577
7577
|
"dist/register.backup-DzWjeSLp.js",
|
|
7578
7578
|
"dist/register.configure-CcaQe_ET.js",
|
|
7579
|
-
"dist/register.crestodian-
|
|
7579
|
+
"dist/register.crestodian-DAQqhXc4.js",
|
|
7580
7580
|
"dist/register.maintenance-WKgig_k7.js",
|
|
7581
7581
|
"dist/register.message-90Kbyg31.js",
|
|
7582
7582
|
"dist/register.migrate-CqfLkpPs.js",
|
|
7583
7583
|
"dist/register.onboard-CnvTY35k.js",
|
|
7584
7584
|
"dist/register.setup-cmWLXmJA.js",
|
|
7585
7585
|
"dist/register.status-health-sessions-DQMRaTXg.js",
|
|
7586
|
-
"dist/register.subclis-
|
|
7587
|
-
"dist/register.subclis-
|
|
7588
|
-
"dist/register.subclis-
|
|
7586
|
+
"dist/register.subclis-BWh4CzXv.js",
|
|
7587
|
+
"dist/register.subclis-core-CGcKvIfu.js",
|
|
7588
|
+
"dist/register.subclis-CvhrxO-c.js",
|
|
7589
7589
|
"dist/registry-0w2lmC7e.js",
|
|
7590
7590
|
"dist/registry-C0FSoFN6.js",
|
|
7591
7591
|
"dist/registry-D-ZIoZaU.js",
|
|
@@ -7651,7 +7651,7 @@
|
|
|
7651
7651
|
"dist/root-help-metadata-DK0ege7M.js",
|
|
7652
7652
|
"dist/root-memory-files-C1geB1Vs.js",
|
|
7653
7653
|
"dist/route-auth-SJhaf4nx.js",
|
|
7654
|
-
"dist/route-
|
|
7654
|
+
"dist/route-oWPuyRNu.js",
|
|
7655
7655
|
"dist/route-reply-BC4sjn6L.js",
|
|
7656
7656
|
"dist/route-reply.runtime-J4Mfj0O0.js",
|
|
7657
7657
|
"dist/route-reply.runtime.js",
|
|
@@ -7760,7 +7760,7 @@
|
|
|
7760
7760
|
"dist/runtime-provider-DBC2jp8c.js",
|
|
7761
7761
|
"dist/runtime-registry-loader-BjhzkGx1.js",
|
|
7762
7762
|
"dist/runtime-registry-loader-mlB2pM9z.js",
|
|
7763
|
-
"dist/runtime-schema-
|
|
7763
|
+
"dist/runtime-schema-TpYHXgGk.js",
|
|
7764
7764
|
"dist/runtime-shared-D5Uo5m_3.js",
|
|
7765
7765
|
"dist/runtime-shared-DPvHwujJ.js",
|
|
7766
7766
|
"dist/runtime-snapshot-DLisEE8Y.js",
|
|
@@ -7838,25 +7838,25 @@
|
|
|
7838
7838
|
"dist/send.runtime-BcCWoxew.js",
|
|
7839
7839
|
"dist/send.runtime.js",
|
|
7840
7840
|
"dist/server-BjfM77Wf.js",
|
|
7841
|
+
"dist/server-BnrDM4ZY.js",
|
|
7841
7842
|
"dist/server-chat-D9Ba8S2j.js",
|
|
7842
7843
|
"dist/server-constants-D1hNc2O7.js",
|
|
7843
7844
|
"dist/server-context-BCtsFniv.js",
|
|
7844
7845
|
"dist/server-context-BlZx3zqr.js",
|
|
7845
|
-
"dist/server-CYEa6z1r.js",
|
|
7846
7846
|
"dist/server-json-DCqyamk1.js",
|
|
7847
|
-
"dist/server-methods-
|
|
7847
|
+
"dist/server-methods-b3jaTRE_.js",
|
|
7848
7848
|
"dist/server-middleware-D7p2PyOh.js",
|
|
7849
7849
|
"dist/server-model-catalog-CCif8jPv.js",
|
|
7850
7850
|
"dist/server-node-events-DxeveG8H.js",
|
|
7851
|
-
"dist/server-plugin-bootstrap-
|
|
7852
|
-
"dist/server-plugin-bootstrap-
|
|
7851
|
+
"dist/server-plugin-bootstrap-CKmijMP2.js",
|
|
7852
|
+
"dist/server-plugin-bootstrap-Cqhf2lYR.js",
|
|
7853
7853
|
"dist/server-restart-sentinel-Bpny2lZk.js",
|
|
7854
7854
|
"dist/server-restart-sentinel-psrIBzaE.js",
|
|
7855
7855
|
"dist/server-session-events-DSN87FpH.js",
|
|
7856
7856
|
"dist/server-startup-log-BsVmC7gG.js",
|
|
7857
7857
|
"dist/server-startup-memory-DG9PddZc.js",
|
|
7858
7858
|
"dist/server-tailscale-BY6G8F-6.js",
|
|
7859
|
-
"dist/server.impl-
|
|
7859
|
+
"dist/server.impl-hNr66nDN.js",
|
|
7860
7860
|
"dist/service-audit-CBzk3ERB.js",
|
|
7861
7861
|
"dist/service-audit-r0zSxh-j.js",
|
|
7862
7862
|
"dist/service-CZlUBsZA.js",
|
|
@@ -8315,7 +8315,7 @@
|
|
|
8315
8315
|
"dist/tts.runtime-DMGD-nh4.js",
|
|
8316
8316
|
"dist/tts.runtime-Dsqbh7ze.js",
|
|
8317
8317
|
"dist/tts.runtime.js",
|
|
8318
|
-
"dist/tui-backend-
|
|
8318
|
+
"dist/tui-backend-DJjxFdMK.js",
|
|
8319
8319
|
"dist/tui-cli-4t8ylcjf.js",
|
|
8320
8320
|
"dist/tui-inkZBA5F.js",
|
|
8321
8321
|
"dist/tui-qCxzg0E8.js",
|
|
@@ -8341,7 +8341,7 @@
|
|
|
8341
8341
|
"dist/uninstall-BR1Z044v.js",
|
|
8342
8342
|
"dist/uninstall-CywubpT4.js",
|
|
8343
8343
|
"dist/update-check-BRY_D61t.js",
|
|
8344
|
-
"dist/update-cli-
|
|
8344
|
+
"dist/update-cli-CgKMD06I.js",
|
|
8345
8345
|
"dist/update-kKaOeGGE.js",
|
|
8346
8346
|
"dist/update-runner-Bz-TX8OW.js",
|
|
8347
8347
|
"dist/update-startup-Bpf_15q2.js",
|
|
@@ -9,7 +9,7 @@ import { n as setProgramContext } from "./program-context-BqlxOV9o.js";
|
|
|
9
9
|
import { t as isCommandJsonOutputMode } from "./json-mode-EE8S0d-K.js";
|
|
10
10
|
import { t as forceFreePort } from "./ports-CUmvj7Fu.js";
|
|
11
11
|
import { n as resolvePluginInstallPreactionRequest, t as resolvePluginInstallInvalidConfigPolicy } from "./plugin-install-config-policy-BewKHRqc.js";
|
|
12
|
-
import { t as registerProgramCommands } from "./command-registry-
|
|
12
|
+
import { t as registerProgramCommands } from "./command-registry-DP8sbc0j.js";
|
|
13
13
|
import { t as configureProgramHelp } from "./help-CpCcjECx.js";
|
|
14
14
|
import { i as shouldBypassConfigGuardForCommandPath, n as ensureCliExecutionBootstrap, r as resolveCliExecutionStartupContext, t as applyCliExecutionStartupPresentation } from "./command-execution-startup-Bao9Epfx.js";
|
|
15
15
|
import process$1 from "node:process";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { r as theme } from "./theme-B128avno.js";
|
|
2
2
|
import { n as defaultRuntime } from "./runtime-izpjJukX.js";
|
|
3
|
-
import { t as runCrestodian } from "./crestodian-
|
|
3
|
+
import { t as runCrestodian } from "./crestodian-Cdb719FY.js";
|
|
4
4
|
import { n as runCommandWithRuntime } from "./cli-utils-Bey8_EmD.js";
|
|
5
5
|
import { t as formatHelpExamples } from "./help-format-DNTD3upA.js";
|
|
6
6
|
//#region src/cli/program/register.crestodian.ts
|
|
@@ -2,11 +2,11 @@ import { h as getSubCliEntries } from "./argv-Bh2LLxMT.js";
|
|
|
2
2
|
import { t as resolveCliArgvInvocation } from "./argv-invocation-C0QUafZn.js";
|
|
3
3
|
import { r as shouldRegisterPrimarySubcommandOnly, t as shouldEagerRegisterSubcommands } from "./command-registration-policy-vjojuaYv.js";
|
|
4
4
|
import { i as registerCommandGroups, r as registerCommandGroupByName } from "./register-command-groups-DKI4xdVx.js";
|
|
5
|
-
import { i as buildCommandGroupEntries, n as registerSubCliByName$1, o as defineImportedProgramCommandGroupSpecs, r as registerSubCliCommands$1 } from "./register.subclis-core-
|
|
5
|
+
import { i as buildCommandGroupEntries, n as registerSubCliByName$1, o as defineImportedProgramCommandGroupSpecs, r as registerSubCliCommands$1 } from "./register.subclis-core-CGcKvIfu.js";
|
|
6
6
|
//#region src/cli/program/register.subclis.ts
|
|
7
7
|
const entrySpecs = [...defineImportedProgramCommandGroupSpecs([{
|
|
8
8
|
commandNames: ["completion"],
|
|
9
|
-
loadModule: () => import("./completion-cli-
|
|
9
|
+
loadModule: () => import("./completion-cli-CPujqMq_.js"),
|
|
10
10
|
exportName: "registerCompletionCli"
|
|
11
11
|
}])];
|
|
12
12
|
function resolveSubCliCommandGroups() {
|
|
@@ -61,7 +61,7 @@ const entrySpecs = [
|
|
|
61
61
|
},
|
|
62
62
|
{
|
|
63
63
|
commandNames: ["gateway"],
|
|
64
|
-
loadModule: () => import("./gateway-cli-
|
|
64
|
+
loadModule: () => import("./gateway-cli-l4SoRD2p.js"),
|
|
65
65
|
exportName: "registerGatewayCli"
|
|
66
66
|
},
|
|
67
67
|
{
|
|
@@ -218,7 +218,7 @@ const entrySpecs = [
|
|
|
218
218
|
},
|
|
219
219
|
{
|
|
220
220
|
commandNames: ["update"],
|
|
221
|
-
loadModule: () => import("./update-cli-
|
|
221
|
+
loadModule: () => import("./update-cli-CgKMD06I.js"),
|
|
222
222
|
exportName: "registerUpdateCli"
|
|
223
223
|
}
|
|
224
224
|
])
|
|
@@ -232,7 +232,7 @@ let configCliPromise;
|
|
|
232
232
|
let modelsListCommandPromise;
|
|
233
233
|
let modelsStatusCommandPromise;
|
|
234
234
|
function loadConfigCli() {
|
|
235
|
-
configCliPromise ??= import("./config-cli-
|
|
235
|
+
configCliPromise ??= import("./config-cli-BZUiTXoe.js");
|
|
236
236
|
return configCliPromise;
|
|
237
237
|
}
|
|
238
238
|
function loadModelsListCommand() {
|
|
@@ -26454,7 +26454,7 @@ const GENERATED_BASE_CONFIG_SCHEMA = {
|
|
|
26454
26454
|
] },
|
|
26455
26455
|
"mcp.servers.*.url": { tags: ["advanced", "url-secret"] }
|
|
26456
26456
|
},
|
|
26457
|
-
version: "2026.4.26
|
|
26457
|
+
version: "2026.4.26",
|
|
26458
26458
|
generatedAt: "2026-03-22T21:17:33.302Z"
|
|
26459
26459
|
};
|
|
26460
26460
|
//#endregion
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { t as truncateCloseReason } from "./close-reason-8HUllQNM.js";
|
|
2
2
|
//#region src/gateway/server.ts
|
|
3
3
|
async function loadServerImpl() {
|
|
4
|
-
return await import("./server.impl-
|
|
4
|
+
return await import("./server.impl-hNr66nDN.js");
|
|
5
5
|
}
|
|
6
6
|
async function startGatewayServer(...args) {
|
|
7
7
|
return await (await loadServerImpl()).startGatewayServer(...args);
|
|
@@ -156,7 +156,7 @@ import { n as buildAuthHealthSummary, r as formatRemainingShort } from "./auth-h
|
|
|
156
156
|
import { a as performGatewaySessionReset } from "./session-reset-service-GWn5mWEv.js";
|
|
157
157
|
import { t as buildChannelUiCatalog } from "./catalog-Bs5xqjVh.js";
|
|
158
158
|
import { a as removeBackfillDiaryEntries, c as writeBackfillDiaryEntries, n as dedupeDreamDiaryEntries, o as removeGroundedShortTermCandidates, r as previewGroundedRemMarkdown, s as repairDreamingArtifacts } from "./memory-core-bundled-runtime-rDmBFpO1.js";
|
|
159
|
-
import { r as lookupConfigSchema, t as loadGatewayRuntimeConfigSchema } from "./runtime-schema-
|
|
159
|
+
import { r as lookupConfigSchema, t as loadGatewayRuntimeConfigSchema } from "./runtime-schema-TpYHXgGk.js";
|
|
160
160
|
import { t as detectRespawnSupervisor } from "./supervisor-markers-DFFvMHRG.js";
|
|
161
161
|
import { t as readConfiguredLogTail } from "./log-tail-Dem10fne.js";
|
|
162
162
|
import { n as purgeAgentSessionStoreEntries } from "./agents.command-shared-Ck6-Lvlr.js";
|
|
@@ -283,7 +283,7 @@ async function dispatchGatewayMethod(method, params, options) {
|
|
|
283
283
|
const isWebchatConnect = scope?.isWebchatConnect ?? (() => false);
|
|
284
284
|
if (!context) throw new Error(`Plugin subagent dispatch requires a gateway request scope (method: ${method}). No scope set and no fallback context available.`);
|
|
285
285
|
let result;
|
|
286
|
-
const { handleGatewayRequest } = await import("./server-methods-
|
|
286
|
+
const { handleGatewayRequest } = await import("./server-methods-b3jaTRE_.js");
|
|
287
287
|
const pluginRuntimeOwnerId = typeof options?.pluginRuntimeOwnerId === "string" && options.pluginRuntimeOwnerId.trim() ? options.pluginRuntimeOwnerId.trim() : void 0;
|
|
288
288
|
const syntheticClient = createSyntheticOperatorClient({
|
|
289
289
|
allowModelOverride: options?.allowSyntheticModelOverride === true,
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { r as reloadDeferredGatewayPlugins } from "./server-plugin-bootstrap-
|
|
1
|
+
import { r as reloadDeferredGatewayPlugins } from "./server-plugin-bootstrap-CKmijMP2.js";
|
|
2
2
|
export { reloadDeferredGatewayPlugins };
|
|
@@ -146,7 +146,7 @@ import { D as pruneStaleControlPlaneBuckets, T as roleCanSkipDeviceIdentity, _ a
|
|
|
146
146
|
import { a as resolveApnsAuthConfigFromEnv, c as sendApnsExecApprovalAlert, d as resolveApnsRelayConfigFromEnv, l as sendApnsExecApprovalResolvedWake, n as loadApnsRegistration, t as clearApnsRegistrationIfCurrent, u as shouldClearStoredApnsRegistration } from "./push-apns-DATsloye.js";
|
|
147
147
|
import { i as normalizeCanvasScopedUrl, n as buildCanvasScopedHostUrl, r as mintCanvasCapabilityToken, t as CANVAS_CAPABILITY_TTL_MS } from "./canvas-capability-CuMcYzPG.js";
|
|
148
148
|
import { n as runHeartbeatOnce, r as startHeartbeatRunner } from "./heartbeat-runner-BPAToAzE.js";
|
|
149
|
-
import { a as loadPluginLookUpTable, i as setFallbackGatewayContextResolver, o as mergeActivationSectionsIntoRuntimeConfig, t as loadGatewayStartupPlugins } from "./server-plugin-bootstrap-
|
|
149
|
+
import { a as loadPluginLookUpTable, i as setFallbackGatewayContextResolver, o as mergeActivationSectionsIntoRuntimeConfig, t as loadGatewayStartupPlugins } from "./server-plugin-bootstrap-CKmijMP2.js";
|
|
150
150
|
import { n as stopGmailWatcher, t as startGmailWatcherWithLogs } from "./gmail-watcher-lifecycle-8PF2s7Xy.js";
|
|
151
151
|
import { a as resolvePluginRoutePathContext, i as isProtectedPluginRoutePathFromContext, n as shouldEnforceGatewayAuthForPluginPath } from "./route-auth-SJhaf4nx.js";
|
|
152
152
|
import "./paths-COvTKgy0.js";
|
|
@@ -10204,7 +10204,7 @@ function attachGatewayWsMessageHandler(params) {
|
|
|
10204
10204
|
});
|
|
10205
10205
|
};
|
|
10206
10206
|
(async () => {
|
|
10207
|
-
const { handleGatewayRequest } = await import("./server-methods-
|
|
10207
|
+
const { handleGatewayRequest } = await import("./server-methods-b3jaTRE_.js");
|
|
10208
10208
|
await handleGatewayRequest({
|
|
10209
10209
|
req,
|
|
10210
10210
|
respond,
|
|
@@ -11113,7 +11113,7 @@ async function startGatewayServer(port = 18789, opts = {}) {
|
|
|
11113
11113
|
setFallbackGatewayContextResolver(() => gatewayRequestContext);
|
|
11114
11114
|
if (!minimalTestGateway) {
|
|
11115
11115
|
if (deferredConfiguredChannelPluginIds.length > 0) {
|
|
11116
|
-
const { reloadDeferredGatewayPlugins } = await import("./server-plugin-bootstrap-
|
|
11116
|
+
const { reloadDeferredGatewayPlugins } = await import("./server-plugin-bootstrap-Cqhf2lYR.js");
|
|
11117
11117
|
({pluginRegistry, gatewayMethods: baseGatewayMethods} = reloadDeferredGatewayPlugins({
|
|
11118
11118
|
cfg: gatewayPluginConfigAtStart,
|
|
11119
11119
|
activationSourceConfig: startupActivationSourceConfig,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { r as buildAgentMainSessionKey } from "./session-key-hxP9B3Or.js";
|
|
2
|
-
import { i as isPersistentCrestodianOperation, n as executeCrestodianOperation } from "./operations-
|
|
2
|
+
import { i as isPersistentCrestodianOperation, n as executeCrestodianOperation } from "./operations-RpPh9sAi.js";
|
|
3
3
|
import { n as formatCrestodianStartupMessage, r as loadCrestodianOverview } from "./overview-B3_zmq9x.js";
|
|
4
|
-
import { n as isYes, r as resolveCrestodianOperation, t as approvalQuestion } from "./dialogue-
|
|
4
|
+
import { n as isYes, r as resolveCrestodianOperation, t as approvalQuestion } from "./dialogue-Bi1Ejndn.js";
|
|
5
5
|
import { f as runTui } from "./tui-qCxzg0E8.js";
|
|
6
6
|
import { randomUUID } from "node:crypto";
|
|
7
7
|
//#region src/crestodian/tui-backend.ts
|
|
@@ -731,6 +731,23 @@ function Get-OpenClawListenerPids {
|
|
|
731
731
|
$listenerPids | Sort-Object -Unique
|
|
732
732
|
}
|
|
733
733
|
|
|
734
|
+
function Invoke-OpenClawStartupLauncher {
|
|
735
|
+
$launcherPath = Join-Path $env:USERPROFILE ".openclaw\\gateway.cmd"
|
|
736
|
+
if (-not (Test-Path -LiteralPath $launcherPath)) {
|
|
737
|
+
Write-RestartLog "openclaw restart startup launcher missing source=update path=$launcherPath"
|
|
738
|
+
return 1
|
|
739
|
+
}
|
|
740
|
+
|
|
741
|
+
try {
|
|
742
|
+
Start-Process -FilePath $launcherPath -WindowStyle Hidden | Out-Null
|
|
743
|
+
Write-RestartLog "openclaw restart launched startup fallback source=update path=$launcherPath"
|
|
744
|
+
return 0
|
|
745
|
+
} catch {
|
|
746
|
+
Write-RestartLog "openclaw restart startup fallback failed source=update error=$($_.Exception.Message)"
|
|
747
|
+
return 1
|
|
748
|
+
}
|
|
749
|
+
}
|
|
750
|
+
|
|
734
751
|
$taskName = ${quotedTaskName}
|
|
735
752
|
$port = ${port}
|
|
736
753
|
Write-RestartLog "openclaw restart attempt source=update target=$taskName"
|
|
@@ -767,6 +784,9 @@ for ($attempt = 1; $attempt -le 10; $attempt++) {
|
|
|
767
784
|
}
|
|
768
785
|
|
|
769
786
|
$status = Invoke-OpenClawSchtasksWithTimeout -Arguments @("/Run", "/TN", $taskName) -TimeoutSeconds 30
|
|
787
|
+
if ($status -ne 0) {
|
|
788
|
+
$status = Invoke-OpenClawStartupLauncher
|
|
789
|
+
}
|
|
770
790
|
if ($status -eq 0) {
|
|
771
791
|
Write-RestartLog "openclaw restart done source=update"
|
|
772
792
|
} else {
|
package/docs/ci.md
CHANGED
|
@@ -14,7 +14,9 @@ manual `CI` workflow with that target, and dispatches `OpenClaw Release Checks`
|
|
|
14
14
|
for install smoke, package acceptance, Docker release-path suites, live/E2E,
|
|
15
15
|
OpenWebUI, QA Lab parity, Matrix, and Telegram lanes. It can also run the
|
|
16
16
|
post-publish `NPM Telegram Beta E2E` workflow when a published package spec is
|
|
17
|
-
provided.
|
|
17
|
+
provided. For unpublished package candidates, `OpenClaw Release Checks` runs
|
|
18
|
+
Package Acceptance with `source=ref` and Telegram package QA against the packed
|
|
19
|
+
tarball. The umbrella records the dispatched child run ids, and the final
|
|
18
20
|
`Verify full validation` job re-checks the current child run conclusions. If a
|
|
19
21
|
child workflow is rerun and turns green, rerun only the parent verifier job to
|
|
20
22
|
refresh the umbrella result.
|
|
@@ -37,7 +39,9 @@ Docker lane selections. The `package` profile uses offline plugin coverage so
|
|
|
37
39
|
published-package validation is not gated on live ClawHub availability. The
|
|
38
40
|
optional Telegram lane reuses the
|
|
39
41
|
`package-under-test` artifact in the `NPM Telegram Beta E2E` workflow, with the
|
|
40
|
-
published npm spec path kept for standalone dispatches.
|
|
42
|
+
published npm spec path kept for standalone dispatches. Standalone Telegram
|
|
43
|
+
dispatch can also pack a trusted branch/tag/SHA, verify an HTTPS tarball URL
|
|
44
|
+
plus SHA-256, or reuse a tarball artifact from another run.
|
|
41
45
|
|
|
42
46
|
## Package acceptance
|
|
43
47
|
|
|
@@ -165,6 +169,26 @@ gh workflow run package-acceptance.yml \
|
|
|
165
169
|
-f docker_lanes='install-e2e plugin-update'
|
|
166
170
|
```
|
|
167
171
|
|
|
172
|
+
Use standalone `NPM Telegram Beta E2E` when only the Telegram package lane is
|
|
173
|
+
needed:
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
# Exact published npm proof.
|
|
177
|
+
gh workflow run npm-telegram-beta-e2e.yml \
|
|
178
|
+
--ref main \
|
|
179
|
+
-f source=npm \
|
|
180
|
+
-f package_spec=openclaw@YYYY.M.D-beta.N \
|
|
181
|
+
-f provider_mode=mock-openai
|
|
182
|
+
|
|
183
|
+
# Pre-publish proof from a branch, tag, or full SHA.
|
|
184
|
+
gh workflow run npm-telegram-beta-e2e.yml \
|
|
185
|
+
--ref main \
|
|
186
|
+
-f source=ref \
|
|
187
|
+
-f package_ref=release/YYYY.M.D \
|
|
188
|
+
-f harness_ref=main \
|
|
189
|
+
-f provider_mode=mock-openai
|
|
190
|
+
```
|
|
191
|
+
|
|
168
192
|
When debugging a failed package acceptance run, start at the `resolve_package`
|
|
169
193
|
summary to confirm the package source, version, and SHA-256. Then inspect the
|
|
170
194
|
`docker_acceptance` child run and its Docker artifacts:
|
package/docs/help/testing.md
CHANGED
|
@@ -168,8 +168,10 @@ the fast Matrix and Telegram lanes before release approval.
|
|
|
168
168
|
- `OPENCLAW_NPM_TELEGRAM_CREDENTIAL_ROLE=ci|maintainer` overrides the shared
|
|
169
169
|
`OPENCLAW_QA_CREDENTIAL_ROLE` for this lane only.
|
|
170
170
|
- GitHub Actions exposes this lane as the manual maintainer workflow
|
|
171
|
-
`NPM Telegram Beta E2E`. It does not run on merge. The workflow
|
|
172
|
-
|
|
171
|
+
`NPM Telegram Beta E2E`. It does not run on merge. The workflow can install
|
|
172
|
+
a published npm spec, pack a trusted branch/tag/SHA, verify an HTTPS tarball
|
|
173
|
+
URL plus SHA-256, or reuse a tarball artifact from another Actions run. It
|
|
174
|
+
uses the `qa-live-shared` environment and Convex CI credential leases.
|
|
173
175
|
- GitHub Actions also exposes `Package Acceptance` for side-run product proof
|
|
174
176
|
against one candidate package. It accepts a trusted ref, published npm spec,
|
|
175
177
|
HTTPS tarball URL plus SHA-256, or tarball artifact from another run, uploads
|
|
@@ -103,7 +103,10 @@ the maintainer-only release runbook.
|
|
|
103
103
|
`OpenClaw Release Checks` for install smoke, package acceptance, Docker
|
|
104
104
|
release-path suites, live/E2E, OpenWebUI, QA Lab parity, Matrix, and Telegram
|
|
105
105
|
lanes. Provide `npm_telegram_package_spec` only after a package has been
|
|
106
|
-
published and the post-publish Telegram E2E should run too.
|
|
106
|
+
published and the post-publish Telegram E2E should run too. Provide
|
|
107
|
+
`evidence_package_spec` when the private evidence report should prove that the
|
|
108
|
+
validation matches a published npm package without forcing Telegram E2E.
|
|
109
|
+
Example:
|
|
107
110
|
`gh workflow run full-release-validation.yml --ref main -f ref=release/YYYY.M.D`
|
|
108
111
|
- Run the manual `Package Acceptance` workflow when you want side-channel proof
|
|
109
112
|
for a package candidate while release work continues. Use `source=npm` for
|
|
@@ -180,7 +183,10 @@ Validation` or from the `main`/release workflow ref so workflow logic and
|
|
|
180
183
|
`OPENCLAW_QA_TELEGRAM_*` env credentials directly.
|
|
181
184
|
- Maintainers can run the same post-publish check from GitHub Actions via the
|
|
182
185
|
manual `NPM Telegram Beta E2E` workflow. It is intentionally manual-only and
|
|
183
|
-
does not run on every merge.
|
|
186
|
+
does not run on every merge. For pre-publish Telegram-only proof, run the
|
|
187
|
+
same workflow with `source=ref` and `package_ref=<branch-or-sha>` so CI packs
|
|
188
|
+
the candidate tarball before exercising Telegram. For exact registry proof
|
|
189
|
+
after publish, keep `source=npm` and `package_spec=openclaw@<version>`.
|
|
184
190
|
- Maintainer release automation now uses preflight-then-promote:
|
|
185
191
|
- real npm publish must pass a successful npm `preflight_run_id`
|
|
186
192
|
- the real npm publish must be dispatched from the same `main` or
|
|
@@ -233,7 +239,8 @@ gh workflow run full-release-validation.yml \
|
|
|
233
239
|
--ref main \
|
|
234
240
|
-f ref=release/YYYY.M.D \
|
|
235
241
|
-f provider=openai \
|
|
236
|
-
-f mode=both
|
|
242
|
+
-f mode=both \
|
|
243
|
+
-f evidence_package_spec=openclaw@YYYY.M.D-beta.N
|
|
237
244
|
```
|
|
238
245
|
|
|
239
246
|
The workflow resolves the target ref, dispatches manual `CI` with
|
|
@@ -244,7 +251,10 @@ install smoke, cross-OS release checks, live/E2E Docker release-path coverage,
|
|
|
244
251
|
Package Acceptance with Telegram package QA, QA Lab parity, live Matrix, and
|
|
245
252
|
live Telegram. A full run is only acceptable when the `Full Release Validation`
|
|
246
253
|
summary shows `normal_ci` and `release_checks` as successful, and any optional
|
|
247
|
-
`npm_telegram` child is either successful or intentionally skipped.
|
|
254
|
+
`npm_telegram` child is either successful or intentionally skipped. A skipped
|
|
255
|
+
`npm_telegram` child only means no exact published npm package was supplied;
|
|
256
|
+
the pre-publish tarball-backed Telegram package proof still runs inside
|
|
257
|
+
`OpenClaw Release Checks` through Package Acceptance.
|
|
248
258
|
Child workflows are dispatched from the trusted ref that runs `Full Release
|
|
249
259
|
Validation`, normally `--ref main`, even when the target `ref` points at an
|
|
250
260
|
older release branch or tag. There is no separate Full Release Validation
|
|
@@ -273,10 +283,32 @@ gh workflow run full-release-validation.yml \
|
|
|
273
283
|
-f ref=release/YYYY.M.D \
|
|
274
284
|
-f provider=openai \
|
|
275
285
|
-f mode=both \
|
|
286
|
+
-f evidence_package_spec=openclaw@YYYY.M.D-beta.N \
|
|
276
287
|
-f npm_telegram_package_spec=openclaw@YYYY.M.D-beta.N \
|
|
277
288
|
-f npm_telegram_provider_mode=mock-openai
|
|
278
289
|
```
|
|
279
290
|
|
|
291
|
+
For focused Telegram package proof before publishing, use the standalone
|
|
292
|
+
`NPM Telegram Beta E2E` workflow with the same package candidate shapes as
|
|
293
|
+
Package Acceptance:
|
|
294
|
+
|
|
295
|
+
```bash
|
|
296
|
+
# Pack and test a release branch or exact SHA through Telegram.
|
|
297
|
+
gh workflow run npm-telegram-beta-e2e.yml \
|
|
298
|
+
--ref main \
|
|
299
|
+
-f source=ref \
|
|
300
|
+
-f package_ref=release/YYYY.M.D \
|
|
301
|
+
-f harness_ref=main \
|
|
302
|
+
-f provider_mode=mock-openai
|
|
303
|
+
|
|
304
|
+
# Exact published package proof after beta/stable publish.
|
|
305
|
+
gh workflow run npm-telegram-beta-e2e.yml \
|
|
306
|
+
--ref main \
|
|
307
|
+
-f source=npm \
|
|
308
|
+
-f package_spec=openclaw@YYYY.M.D-beta.N \
|
|
309
|
+
-f provider_mode=mock-openai
|
|
310
|
+
```
|
|
311
|
+
|
|
280
312
|
Do not use the full umbrella as the first rerun after a focused fix. If one box
|
|
281
313
|
fails, use the failed child workflow, job, Docker lane, package profile, model
|
|
282
314
|
provider, or QA lane for the next proof. Run the full umbrella again only when
|
package/package.json
CHANGED