@marxbiotech/openclaw 2026.3.28-beta.2 → 2026.3.28-beta.3

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.
Files changed (40) hide show
  1. package/dist/.buildstamp +1 -1
  2. package/dist/build-info.json +3 -3
  3. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  4. package/dist/cli-startup-metadata.json +1 -1
  5. package/dist/{command-registry-rZb7lPtI.js → command-registry-B9bgU9hV.js} +5 -5
  6. package/dist/{command-registry-WKy4Mx4x.js → command-registry-BuxJ5NtM.js} +1 -1
  7. package/dist/{completion-cli-B8zT2HAK.js → completion-cli-CofiidKK.js} +2 -2
  8. package/dist/completion-cli-Gj-f2vks.js +2 -0
  9. package/dist/{config-cli-E-zhWRmA.js → config-cli-jZdsV_1z.js} +1 -1
  10. package/dist/{doctor-completion-Dl-XmE3u.js → doctor-completion-gl3VS5_j.js} +1 -1
  11. package/dist/entry.js +1 -1
  12. package/dist/extensions/diffs/.openclaw-runtime-deps-stamp.json +1 -1
  13. package/dist/extensions/discord/.openclaw-runtime-deps-stamp.json +1 -1
  14. package/dist/extensions/feishu/.openclaw-runtime-deps-stamp.json +1 -1
  15. package/dist/extensions/feishu/node_modules/.package-lock.json +3 -3
  16. package/dist/extensions/feishu/node_modules/@larksuiteoapi/node-sdk/es/index.js +20 -16
  17. package/dist/extensions/feishu/node_modules/@larksuiteoapi/node-sdk/lib/index.js +20 -16
  18. package/dist/extensions/feishu/node_modules/@larksuiteoapi/node-sdk/package.json +1 -1
  19. package/dist/extensions/feishu/node_modules/@larksuiteoapi/node-sdk/types/index.d.ts +4 -0
  20. package/dist/extensions/slack/.openclaw-runtime-deps-stamp.json +1 -1
  21. package/dist/extensions/telegram/.openclaw-runtime-deps-stamp.json +1 -1
  22. package/dist/{gateway-cli-BQs8Qd9u.js → gateway-cli-BPgXFsX-.js} +2 -2
  23. package/dist/index.js +1 -1
  24. package/dist/{node-cli-ZfoSKAgY.js → node-cli-C-NHDws4.js} +12 -3
  25. package/dist/{onboard-CtQTF9Pq.js → onboard-D8mLBBSq.js} +1 -1
  26. package/dist/plugin-sdk/src/config/schema.base.generated.d.ts +1 -1
  27. package/dist/{program-DB9XGsJm.js → program-CS3D__yJ.js} +1 -1
  28. package/dist/{prompt-select-styled-jBrfeHUG.js → prompt-select-styled-D0JcqEaf.js} +1 -1
  29. package/dist/{register.maintenance-Ddm9pXEy.js → register.maintenance-BYiyh4Bv.js} +1 -1
  30. package/dist/{register.onboard-C1wg5SMO.js → register.onboard-BLh7MvqL.js} +1 -1
  31. package/dist/{register.setup-C_YIt_Hg.js → register.setup-5Iz11tL5.js} +1 -1
  32. package/dist/{register.subclis-CkFAlHtB.js → register.subclis-Bdfqcaq1.js} +1 -1
  33. package/dist/{register.subclis-BZB6oeZE.js → register.subclis-D5PoU4cG.js} +4 -4
  34. package/dist/{run-main-BSypopS7.js → run-main-GxMMbcni.js} +6 -6
  35. package/dist/{runtime-schema-BirGs1_v.js → runtime-schema-DUD60Mz3.js} +1 -1
  36. package/dist/{setup-Tc8Q5EMN.js → setup-D7aEmeVi.js} +1 -1
  37. package/dist/{setup.finalize-BXnUa_kR.js → setup.finalize-DT2NHFPD.js} +2 -2
  38. package/dist/{update-cli-CpGu1-wL.js → update-cli-CqrlF5yT.js} +3 -3
  39. package/package.json +1 -1
  40. package/dist/completion-cli-YOsLr1vu.js +0 -2
package/dist/.buildstamp CHANGED
@@ -1 +1 @@
1
- {"builtAt":1777342643568,"head":"44a5d2d663433442586fea9263c32a765301c559"}
1
+ {"builtAt":1777452602471,"head":"a26098415e072ddc6102d397aca50bdca61fd716"}
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "2026.3.28-beta.2",
3
- "commit": "44a5d2d663433442586fea9263c32a765301c559",
4
- "builtAt": "2026-04-28T02:17:52.139Z"
2
+ "version": "2026.3.28-beta.3",
3
+ "commit": "a26098415e072ddc6102d397aca50bdca61fd716",
4
+ "builtAt": "2026-04-29T08:50:31.660Z"
5
5
  }
@@ -1 +1 @@
1
- f71d639518195a26d4c56e473c240998b931012f59b86f408307dadb1a712c86
1
+ d4146ac7f5d52f4087e1cd83ee956f8cb1711ef5b72643526140eca93c0ca9c0
@@ -23,5 +23,5 @@
23
23
  "tlon",
24
24
  "twitch"
25
25
  ],
26
- "rootHelpText": "\n🦞 OpenClaw 2026.3.28-beta.2 (44a5d2d) — Alexa, but with taste.\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 channels * Manage connected chat channels (Telegram, Discord, etc.)\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 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 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 logs Tail gateway file logs via RPC\n message * Send, read, and manage messages\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 and extensions\n qr Generate iOS 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 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"
26
+ "rootHelpText": "\n🦞 OpenClaw 2026.3.28-beta.3 (a260984) — If it works, it's automation; if it breaks, it's a \"learning opportunity.\"\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 channels * Manage connected chat channels (Telegram, Discord, etc.)\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 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 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 logs Tail gateway file logs via RPC\n message * Send, read, and manage messages\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 and extensions\n qr Generate iOS 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 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"
27
27
  }
@@ -1,5 +1,5 @@
1
1
  import { O as getPrimaryCommand, j as hasHelpOrVersion } from "./logger-BCzP_yik.js";
2
- import { a as removeCommandByName, i as registerSubCliCommands, o as reparseProgramFromActionArgs } from "./register.subclis-BZB6oeZE.js";
2
+ import { a as removeCommandByName, i as registerSubCliCommands, o as reparseProgramFromActionArgs } from "./register.subclis-D5PoU4cG.js";
3
3
  import { t as getCoreCliCommandDescriptors } from "./core-command-descriptors-3IsGrTdH.js";
4
4
  //#region src/cli/program/command-registry.ts
5
5
  const shouldRegisterCorePrimaryOnly = (argv) => {
@@ -14,7 +14,7 @@ const coreEntries = [
14
14
  hasSubcommands: false
15
15
  }],
16
16
  register: async ({ program }) => {
17
- (await import("./register.setup-C_YIt_Hg.js")).registerSetupCommand(program);
17
+ (await import("./register.setup-5Iz11tL5.js")).registerSetupCommand(program);
18
18
  }
19
19
  },
20
20
  {
@@ -24,7 +24,7 @@ const coreEntries = [
24
24
  hasSubcommands: false
25
25
  }],
26
26
  register: async ({ program }) => {
27
- (await import("./register.onboard-C1wg5SMO.js")).registerOnboardCommand(program);
27
+ (await import("./register.onboard-BLh7MvqL.js")).registerOnboardCommand(program);
28
28
  }
29
29
  },
30
30
  {
@@ -44,7 +44,7 @@ const coreEntries = [
44
44
  hasSubcommands: true
45
45
  }],
46
46
  register: async ({ program }) => {
47
- (await import("./config-cli-E-zhWRmA.js")).registerConfigCli(program);
47
+ (await import("./config-cli-jZdsV_1z.js")).registerConfigCli(program);
48
48
  }
49
49
  },
50
50
  {
@@ -81,7 +81,7 @@ const coreEntries = [
81
81
  }
82
82
  ],
83
83
  register: async ({ program }) => {
84
- (await import("./register.maintenance-Ddm9pXEy.js")).registerMaintenanceCommands(program);
84
+ (await import("./register.maintenance-BYiyh4Bv.js")).registerMaintenanceCommands(program);
85
85
  }
86
86
  },
87
87
  {
@@ -1,3 +1,3 @@
1
1
  import "./core-command-descriptors-3IsGrTdH.js";
2
- import { n as registerCoreCliByName } from "./command-registry-rZb7lPtI.js";
2
+ import { n as registerCoreCliByName } from "./command-registry-B9bgU9hV.js";
3
3
  export { registerCoreCliByName };
@@ -3,8 +3,8 @@ import { m as pathExists } from "./utils-BfvDpbwh.js";
3
3
  import { t as formatDocsLink } from "./links-CNsP_rfF.js";
4
4
  import { r as theme } from "./theme-D-TumEpz.js";
5
5
  import { _ as resolveStateDir } from "./paths-Y4UT24Of.js";
6
- import { n as loadValidatedConfigForPluginRegistration, r as registerSubCliByName, t as getSubCliEntries } from "./register.subclis-BZB6oeZE.js";
7
- import { n as registerCoreCliByName, t as getCoreCliCommandNames } from "./command-registry-rZb7lPtI.js";
6
+ import { n as loadValidatedConfigForPluginRegistration, r as registerSubCliByName, t as getSubCliEntries } from "./register.subclis-D5PoU4cG.js";
7
+ import { n as registerCoreCliByName, t as getCoreCliCommandNames } from "./command-registry-B9bgU9hV.js";
8
8
  import { t as getProgramContext } from "./program-context-Bv9xg3LZ.js";
9
9
  import path from "node:path";
10
10
  import os from "node:os";
@@ -0,0 +1,2 @@
1
+ import { a as registerCompletionCli } from "./completion-cli-CofiidKK.js";
2
+ export { registerCompletionCli };
@@ -13,7 +13,7 @@ import { a as formatExecSecretRefIdValidationMessage, c as isValidSecretProvider
13
13
  import { C as SecretProviderSchema } from "./zod-schema.core-CGoKjdG2.js";
14
14
  import { a as resolveSecretRefValue } from "./resolve-CFB7mNpd.js";
15
15
  import { l as discoverConfigSecretTargets, m as resolveConfigSecretTargetByPath } from "./command-secret-targets-DayQlnoD.js";
16
- import { i as redactConfigObject, n as readBestEffortRuntimeConfigSchema } from "./runtime-schema-BirGs1_v.js";
16
+ import { i as redactConfigObject, n as readBestEffortRuntimeConfigSchema } from "./runtime-schema-DUD60Mz3.js";
17
17
  import { n as setCommandJsonMode } from "./json-mode-DP5Id_4L.js";
18
18
  import fsSync from "node:fs";
19
19
  import JSON5 from "json5";
@@ -1,7 +1,7 @@
1
1
  import { t as resolveOpenClawPackageRoot } from "./openclaw-root-BYOI_ohY.js";
2
2
  import { r as resolveCliName } from "./command-format-CR4nOXgc.js";
3
3
  import { t as note } from "./note-C01OqYRg.js";
4
- import { c as usesSlowDynamicCompletion, i as isCompletionInstalled, o as resolveCompletionCachePath, r as installCompletion, s as resolveShellFromEnv, t as completionCacheExists } from "./completion-cli-B8zT2HAK.js";
4
+ import { c as usesSlowDynamicCompletion, i as isCompletionInstalled, o as resolveCompletionCachePath, r as installCompletion, s as resolveShellFromEnv, t as completionCacheExists } from "./completion-cli-CofiidKK.js";
5
5
  import path from "node:path";
6
6
  import { spawnSync } from "node:child_process";
7
7
  //#region src/commands/doctor-completion.ts
package/dist/entry.js CHANGED
@@ -204,7 +204,7 @@ function tryHandleRootHelpFastPath(argv, deps = {}) {
204
204
  }
205
205
  function runMainOrRootHelp(argv) {
206
206
  if (tryHandleRootHelpFastPath(argv)) return;
207
- import("./run-main-BSypopS7.js").then(({ runCli }) => runCli(argv)).catch((error) => {
207
+ import("./run-main-GxMMbcni.js").then(({ runCli }) => runCli(argv)).catch((error) => {
208
208
  console.error("[openclaw] Failed to start CLI:", error instanceof Error ? error.stack ?? error.message : error);
209
209
  process$1.exitCode = 1;
210
210
  });
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "fingerprint": "ef24c7e339e5f03791f6c9be916fb9dc046e157ae11ab2dd442ca99134e407a5",
3
- "generatedAt": "2026-04-28T02:17:17.888Z"
3
+ "generatedAt": "2026-04-29T08:49:56.455Z"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "fingerprint": "7c13afb5af0cf25094a3c9d6629ce46049bfd7ddd6f6621210795ee08b80910b",
3
- "generatedAt": "2026-04-28T02:17:19.590Z"
3
+ "generatedAt": "2026-04-29T08:49:58.246Z"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "fingerprint": "7840b254bfdd415fb35f9ad380c618abdbb8caaae7b53cc9b75ddc9a5e3f5410",
3
- "generatedAt": "2026-04-28T02:17:21.093Z"
3
+ "generatedAt": "2026-04-29T08:49:59.867Z"
4
4
  }
@@ -3,9 +3,9 @@
3
3
  "requires": true,
4
4
  "packages": {
5
5
  "node_modules/@larksuiteoapi/node-sdk": {
6
- "version": "1.62.0",
7
- "resolved": "https://registry.npmjs.org/@larksuiteoapi/node-sdk/-/node-sdk-1.62.0.tgz",
8
- "integrity": "sha512-ZITiuAkiVgphn6OPO8MHeWV1q7+UNByLmNiYVDIAxF5+HJ8USl4xPinDOq9AMJSEUqdBJtiLdz7UltV5jP+EDg==",
6
+ "version": "1.62.1",
7
+ "resolved": "https://registry.npmjs.org/@larksuiteoapi/node-sdk/-/node-sdk-1.62.1.tgz",
8
+ "integrity": "sha512-o9oAjv5Ffnp/6iXIJLHrO6N0US/r2ZZy3xmO6ylGegjuVSC05cx0fADA38Dc1h0FV8T9BDK+ariWk84TNMGbKg==",
9
9
  "license": "MIT",
10
10
  "dependencies": {
11
11
  "axios": "~1.13.3",
@@ -146,19 +146,21 @@ function getSdkVersion() {
146
146
  function sanitizeSource(raw) {
147
147
  return raw.replace(/[^a-zA-Z0-9._-]/g, '_').slice(0, 64);
148
148
  }
149
- /**
150
- * Build the User-Agent value. When `source` is provided it appends a
151
- * `source/<sanitized>` product token, e.g.
152
- * oapi-node-sdk/1.62.0 source/cursor-bot
153
- * Falsy or all-invalid-char `source` values produce the base UA without
154
- * the extra token.
155
- */
156
- function buildUserAgent(source) {
157
- const base = `oapi-node-sdk/${getSdkVersion()}`;
158
- if (!source)
159
- return base;
160
- const clean = sanitizeSource(source);
161
- return clean ? `${base} source/${clean}` : base;
149
+ function buildUserAgent(source, opts) {
150
+ let ua = `oapi-node-sdk/${getSdkVersion()}`;
151
+ if (source) {
152
+ const clean = sanitizeSource(source);
153
+ if (clean)
154
+ ua += ` source/${clean}`;
155
+ }
156
+ if (opts === null || opts === void 0 ? void 0 : opts.extraTags) {
157
+ for (const t of opts.extraTags) {
158
+ const clean = sanitizeSource(t);
159
+ if (clean)
160
+ ua += ` ${clean}`;
161
+ }
162
+ }
163
+ return ua;
162
164
  }
163
165
 
164
166
  const defaultHttpInstance = axios.create();
@@ -83993,7 +83995,7 @@ class Client extends Client$1 {
83993
83995
  this.appId = params.appId;
83994
83996
  this.appSecret = params.appSecret;
83995
83997
  this.disableTokenCache = params.disableTokenCache;
83996
- this.userAgent = buildUserAgent(params.source);
83998
+ this.userAgent = buildUserAgent(params.source, { extraTags: params.extraUaTags });
83997
83999
  assert(!this.appId, () => this.logger.error('appId is needed'));
83998
84000
  assert(!this.appSecret, () => this.logger.error('appSecret is needed'));
83999
84001
  this.helpDeskId = params.helpDeskId;
@@ -85362,8 +85364,8 @@ class WSClient {
85362
85364
  /** True if the WS has ever connected successfully in this client's
85363
85365
  * lifetime — used to distinguish first-connect from reconnect. */
85364
85366
  this.hasEverConnected = false;
85365
- const { appId, appSecret, agent, domain = Domain.Feishu, httpInstance = defaultHttpInstance, loggerLevel = LoggerLevel.info, logger = defaultLogger, autoReconnect = true, source, onReady, onError, onReconnecting, onReconnected, } = params;
85366
- this.userAgent = buildUserAgent(source);
85367
+ const { appId, appSecret, agent, domain = Domain.Feishu, httpInstance = defaultHttpInstance, loggerLevel = LoggerLevel.info, logger = defaultLogger, autoReconnect = true, source, extraUaTags, onReady, onError, onReconnecting, onReconnected, } = params;
85368
+ this.userAgent = buildUserAgent(source, { extraTags: extraUaTags });
85367
85369
  this.logger = new LoggerProxy(loggerLevel, logger);
85368
85370
  assert(!appId, () => this.logger.error('appId is needed'));
85369
85371
  assert(!appSecret, () => this.logger.error('appSecret is needed'));
@@ -89328,6 +89330,7 @@ class LarkChannel {
89328
89330
  logger: opts.logger,
89329
89331
  loggerLevel: opts.loggerLevel,
89330
89332
  source: opts.source,
89333
+ extraUaTags: ['channel'],
89331
89334
  });
89332
89335
  this.dispatcher = new EventDispatcher({
89333
89336
  verificationToken: (_d = opts.webhook) === null || _d === void 0 ? void 0 : _d.verificationToken,
@@ -89405,6 +89408,7 @@ class LarkChannel {
89405
89408
  httpInstance: this.opts.httpInstance,
89406
89409
  autoReconnect: true,
89407
89410
  source: this.opts.source,
89411
+ extraUaTags: ['channel'],
89408
89412
  onReady: () => {
89409
89413
  if (settled)
89410
89414
  return;
@@ -164,19 +164,21 @@ function getSdkVersion() {
164
164
  function sanitizeSource(raw) {
165
165
  return raw.replace(/[^a-zA-Z0-9._-]/g, '_').slice(0, 64);
166
166
  }
167
- /**
168
- * Build the User-Agent value. When `source` is provided it appends a
169
- * `source/<sanitized>` product token, e.g.
170
- * oapi-node-sdk/1.62.0 source/cursor-bot
171
- * Falsy or all-invalid-char `source` values produce the base UA without
172
- * the extra token.
173
- */
174
- function buildUserAgent(source) {
175
- const base = `oapi-node-sdk/${getSdkVersion()}`;
176
- if (!source)
177
- return base;
178
- const clean = sanitizeSource(source);
179
- return clean ? `${base} source/${clean}` : base;
167
+ function buildUserAgent(source, opts) {
168
+ let ua = `oapi-node-sdk/${getSdkVersion()}`;
169
+ if (source) {
170
+ const clean = sanitizeSource(source);
171
+ if (clean)
172
+ ua += ` source/${clean}`;
173
+ }
174
+ if (opts === null || opts === void 0 ? void 0 : opts.extraTags) {
175
+ for (const t of opts.extraTags) {
176
+ const clean = sanitizeSource(t);
177
+ if (clean)
178
+ ua += ` ${clean}`;
179
+ }
180
+ }
181
+ return ua;
180
182
  }
181
183
 
182
184
  const defaultHttpInstance = axios__default["default"].create();
@@ -84011,7 +84013,7 @@ class Client extends Client$1 {
84011
84013
  this.appId = params.appId;
84012
84014
  this.appSecret = params.appSecret;
84013
84015
  this.disableTokenCache = params.disableTokenCache;
84014
- this.userAgent = buildUserAgent(params.source);
84016
+ this.userAgent = buildUserAgent(params.source, { extraTags: params.extraUaTags });
84015
84017
  assert(!this.appId, () => this.logger.error('appId is needed'));
84016
84018
  assert(!this.appSecret, () => this.logger.error('appSecret is needed'));
84017
84019
  this.helpDeskId = params.helpDeskId;
@@ -85380,8 +85382,8 @@ class WSClient {
85380
85382
  /** True if the WS has ever connected successfully in this client's
85381
85383
  * lifetime — used to distinguish first-connect from reconnect. */
85382
85384
  this.hasEverConnected = false;
85383
- const { appId, appSecret, agent, domain = exports.Domain.Feishu, httpInstance = defaultHttpInstance, loggerLevel = exports.LoggerLevel.info, logger = defaultLogger, autoReconnect = true, source, onReady, onError, onReconnecting, onReconnected, } = params;
85384
- this.userAgent = buildUserAgent(source);
85385
+ const { appId, appSecret, agent, domain = exports.Domain.Feishu, httpInstance = defaultHttpInstance, loggerLevel = exports.LoggerLevel.info, logger = defaultLogger, autoReconnect = true, source, extraUaTags, onReady, onError, onReconnecting, onReconnected, } = params;
85386
+ this.userAgent = buildUserAgent(source, { extraTags: extraUaTags });
85385
85387
  this.logger = new LoggerProxy(loggerLevel, logger);
85386
85388
  assert(!appId, () => this.logger.error('appId is needed'));
85387
85389
  assert(!appSecret, () => this.logger.error('appSecret is needed'));
@@ -89346,6 +89348,7 @@ class LarkChannel {
89346
89348
  logger: opts.logger,
89347
89349
  loggerLevel: opts.loggerLevel,
89348
89350
  source: opts.source,
89351
+ extraUaTags: ['channel'],
89349
89352
  });
89350
89353
  this.dispatcher = new EventDispatcher({
89351
89354
  verificationToken: (_d = opts.webhook) === null || _d === void 0 ? void 0 : _d.verificationToken,
@@ -89423,6 +89426,7 @@ class LarkChannel {
89423
89426
  httpInstance: this.opts.httpInstance,
89424
89427
  autoReconnect: true,
89425
89428
  source: this.opts.source,
89429
+ extraUaTags: ['channel'],
89426
89430
  onReady: () => {
89427
89431
  if (settled)
89428
89432
  return;
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@larksuiteoapi/node-sdk",
3
- "version": "1.62.0",
3
+ "version": "1.62.1",
4
4
  "description": "larksuite open sdk for nodejs",
5
5
  "keywords": [
6
6
  "feishu",
@@ -112,6 +112,8 @@ interface IClientParams {
112
112
  httpInstance?: HttpInstance;
113
113
  /** Caller tag appended to User-Agent as `source/<name>`. */
114
114
  source?: string;
115
+ /** @internal Extra bare tokens appended to User-Agent, set by sub-modules. */
116
+ extraUaTags?: string[];
115
117
  }
116
118
  interface IPayload {
117
119
  params?: Record<string, any>;
@@ -293052,6 +293054,8 @@ interface IConstructorParams {
293052
293054
  agent?: any;
293053
293055
  /** Caller tag appended to User-Agent as `source/<name>`. */
293054
293056
  source?: string;
293057
+ /** @internal Extra bare tokens appended to User-Agent, set by sub-modules. */
293058
+ extraUaTags?: string[];
293055
293059
  /** Fires once when the first WebSocket handshake succeeds. */
293056
293060
  onReady?: () => void;
293057
293061
  /**
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "fingerprint": "1b8455ffc9fcd2d7fab79d6e0bc7c9572fe5bac8a1e26a59687f7ef49f145789",
3
- "generatedAt": "2026-04-28T02:17:22.949Z"
3
+ "generatedAt": "2026-04-29T08:50:01.824Z"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "fingerprint": "70ac0a9d08cc930f081d5692bae4a41e047f6564cd25d8a7c3973bfce634a96a",
3
- "generatedAt": "2026-04-28T02:17:23.469Z"
3
+ "generatedAt": "2026-04-29T08:50:02.364Z"
4
4
  }
@@ -112,7 +112,7 @@ import { t as ensureOpenClawCliOnPath } from "./path-env-CnuZbAnP.js";
112
112
  import { n as DEFAULT_GATEWAY_HTTP_TOOL_DENY } from "./dangerous-tools-CXOUipYm.js";
113
113
  import { t as readSecretFromFile } from "./secret-file-Yxvhw2BY.js";
114
114
  import { t as buildChannelUiCatalog } from "./catalog-CXSV1A5r.js";
115
- import { a as redactConfigSnapshot, i as redactConfigObject, o as restoreRedactedValues, r as lookupConfigSchema, t as loadGatewayRuntimeConfigSchema } from "./runtime-schema-BirGs1_v.js";
115
+ import { a as redactConfigSnapshot, i as redactConfigObject, o as restoreRedactedValues, r as lookupConfigSchema, t as loadGatewayRuntimeConfigSchema } from "./runtime-schema-DUD60Mz3.js";
116
116
  import { n as resolveWideAreaDiscoveryDomain, r as writeWideAreaGatewayZone } from "./widearea-dns-T_YTt6aT.js";
117
117
  import { i as toOptionString, n as extractGatewayMiskeys, r as maybeExplainGatewayServiceStop, t as describeUnknownError } from "./shared-CHc66k3d.js";
118
118
  import { i as discoverGatewayBeacons, n as buildGatewayDiscoveryTarget, r as serializeGatewayDiscoveryBeacon } from "./gateway-discovery-targets-DmW9k0_i.js";
@@ -123,7 +123,7 @@ import { n as formatPluginInstallPathIssue, t as detectPluginInstallPathIssue }
123
123
  import { s as normalizeUpdateChannel } from "./update-channels-B-xUHsxn.js";
124
124
  import { n as compareSemverStrings, o as resolveNpmChannelTag, t as checkUpdateStatus } from "./update-check-CBvDyb4y.js";
125
125
  import { i as resolveGatewayStartupPluginIds, r as resolveConfiguredDeferredChannelPluginIds } from "./channel-plugin-ids-DNcOBw7g.js";
126
- import { t as runSetupWizard } from "./setup-Tc8Q5EMN.js";
126
+ import { t as runSetupWizard } from "./setup-D7aEmeVi.js";
127
127
  import { _ as buildGogWatchStartArgs, g as buildGogWatchServeArgs, i as ensureTailscaleEndpoint, w as resolveGmailHookRuntimeConfig } from "./gmail-setup-utils-wQyeJrgH.js";
128
128
  import { _ as coerceFiniteScheduleNumber, g as normalizeStoredCronJobs, n as runGatewayUpdate, t as runStartupMatrixMigration, v as computeNextRunAtMs, y as computePreviousRunAtMs } from "./server-startup-matrix-migration-IRd288cT.js";
129
129
  import { i as loadAgentIdentity, o as pruneAgentConfig, r as findAgentEntryIndex, t as applyAgentConfig } from "./agents.config-B2ywJN0y.js";
package/dist/index.js CHANGED
@@ -28,7 +28,7 @@ let saveSessionStore;
28
28
  let toWhatsappJid;
29
29
  let waitForever;
30
30
  async function loadLegacyCliDeps() {
31
- const [{ installGaxiosFetchCompat }, { runCli }] = await Promise.all([import("./gaxios-fetch-compat-gheufJJy.js"), import("./run-main-BSypopS7.js")]);
31
+ const [{ installGaxiosFetchCompat }, { runCli }] = await Promise.all([import("./gaxios-fetch-compat-gheufJJy.js"), import("./run-main-GxMMbcni.js")]);
32
32
  return {
33
33
  installGaxiosFetchCompat,
34
34
  runCli
@@ -131,16 +131,25 @@ async function handleSpawn(payload, client) {
131
131
  const { execFileSync } = await import("node:child_process");
132
132
  execFileSync(sessionInvocation.command, sessionInvocation.argv, {
133
133
  cwd,
134
- timeout: 1e4,
134
+ timeout: 3e4,
135
135
  stdio: [
136
136
  "ignore",
137
- "ignore",
137
+ "pipe",
138
138
  "pipe"
139
139
  ],
140
140
  shell: sessionInvocation.shell,
141
141
  windowsHide: sessionInvocation.windowsHide
142
142
  });
143
- } catch {}
143
+ } catch (err) {
144
+ const message = err instanceof Error ? err.message : String(err);
145
+ const rawStderr = asRecord(err)?.stderr;
146
+ const stderr = typeof rawStderr === "string" || Buffer.isBuffer(rawStderr) ? String(rawStderr).trim().slice(0, 500) : "";
147
+ await sendNodeEvent$1(client, "acp.error", {
148
+ acpSessionId,
149
+ error: `sessions new failed: ${message}${stderr ? ` | stderr: ${stderr}` : ""}`
150
+ });
151
+ return;
152
+ }
144
153
  await sendNodeEvent$1(client, "acp.spawned", {
145
154
  acpSessionId,
146
155
  agentCommand
@@ -10,7 +10,7 @@ import { n as WizardCancelledError } from "./setup-Cwl-lwyP.js";
10
10
  import "./daemon-runtime-DOak7cvW.js";
11
11
  import { c as normalizeGatewayTokenInput, d as randomToken, f as resolveControlUiLinks, g as waitForGatewayReachable, n as applyWizardMetadata, o as handleReset, r as ensureWorkspaceAndSessions, t as DEFAULT_WORKSPACE } from "./onboard-helpers-DwA3PlvE.js";
12
12
  import { t as createClackPrompter } from "./clack-prompter-BiYDNc5T.js";
13
- import { t as runSetupWizard } from "./setup-Tc8Q5EMN.js";
13
+ import { t as runSetupWizard } from "./setup-D7aEmeVi.js";
14
14
  import { a as resolveManifestProviderOnboardAuthFlags } from "./provider-auth-choices-dW54Fzji.js";
15
15
  import { i as resolveDeprecatedAuthChoiceReplacement, n as isDeprecatedAuthChoice, r as normalizeLegacyOnboardAuthChoice, t as formatDeprecatedNonInteractiveAuthChoiceError } from "./auth-choice-legacy-BFKLMq1E.js";
16
16
  import { r as applyLocalSetupWorkspaceConfig } from "./onboard-config-BL_lvk7T.js";
@@ -14552,6 +14552,6 @@ export declare const GENERATED_BASE_CONFIG_SCHEMA: {
14552
14552
  readonly tags: ["security", "auth"];
14553
14553
  };
14554
14554
  };
14555
- readonly version: "2026.3.28-beta.2";
14555
+ readonly version: "2026.3.28-beta.3";
14556
14556
  readonly generatedAt: "2026-03-22T21:17:33.302Z";
14557
14557
  };
@@ -7,7 +7,7 @@ import { n as VERSION } from "./version-pQXc43AL.js";
7
7
  import { r as resolveCliName } from "./command-format-CR4nOXgc.js";
8
8
  import { t as emitCliBanner } from "./banner-gsaJ6dcJ.js";
9
9
  import { n as resolveCliChannelOptions } from "./channel-options-B67XtGim.js";
10
- import { i as registerProgramCommands } from "./command-registry-rZb7lPtI.js";
10
+ import { i as registerProgramCommands } from "./command-registry-B9bgU9hV.js";
11
11
  import { n as setProgramContext } from "./program-context-Bv9xg3LZ.js";
12
12
  import { t as isCommandJsonOutputMode } from "./json-mode-DP5Id_4L.js";
13
13
  import "./ports-CC4LkdnK.js";
@@ -77,7 +77,7 @@ import { t as ensureSystemdUserLingerInteractive } from "./systemd-linger-BrDIQs
77
77
  import { t as formatHealthCheckFailure } from "./health-format-DNIEVtuF.js";
78
78
  import { a as stripUnknownConfigKeys, i as resolveConfigPathTarget, n as formatConfigPath, r as noteOpencodeProviderOverrides, t as runDoctorConfigPreflight } from "./doctor-config-preflight-DK3Q_2pH.js";
79
79
  import { a as isMattermostMutableAllowEntry, i as isMSTeamsMutableAllowEntry, n as isGoogleChatMutableAllowEntry, o as isSlackMutableAllowEntry, r as isIrcMutableAllowEntry, s as isZalouserMutableGroupEntry, t as isDiscordMutableAllowEntry } from "./mutable-allowlist-detectors-FRErTNTi.js";
80
- import { n as doctorShellCompletion } from "./doctor-completion-Dl-XmE3u.js";
80
+ import { n as doctorShellCompletion } from "./doctor-completion-gl3VS5_j.js";
81
81
  import { t as collectChannelStatusIssues } from "./channels-status-issues-DO14xH_0.js";
82
82
  import { t as resolveDefaultChannelAccountContext } from "./channel-account-context-D68-LJee.js";
83
83
  import { i as runLegacyStateMigrations, n as detectLegacyStateMigrations } from "./doctor-state-migrations-Csgc_Q_V.js";
@@ -10,7 +10,7 @@ import { n as openUrl, t as detectBrowserOpenSupport } from "./browser-open-jk8C
10
10
  import { f as resolveControlUiLinks, i as formatControlUiSshHint } from "./onboard-helpers-DwA3PlvE.js";
11
11
  import { n as stylePromptMessage, r as stylePromptTitle, t as stylePromptHint } from "./prompt-style-BraGXuAF.js";
12
12
  import { r as resolveGatewayService } from "./service-B6FeS3ro.js";
13
- import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-jBrfeHUG.js";
13
+ import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-D0JcqEaf.js";
14
14
  import path from "node:path";
15
15
  import { cancel, confirm, isCancel, multiselect } from "@clack/prompts";
16
16
  //#region src/infra/clipboard.ts
@@ -4,7 +4,7 @@ import { r as theme } from "./theme-D-TumEpz.js";
4
4
  import { Yy as runCommandWithRuntime } from "./auth-profiles-TH_VkVvF.js";
5
5
  import { a as resolveManifestProviderOnboardAuthFlags } from "./provider-auth-choices-dW54Fzji.js";
6
6
  import { n as formatAuthChoiceChoicesForCli } from "./auth-choice-options-DaeqlsRG.js";
7
- import { n as CORE_ONBOARD_AUTH_FLAGS, t as setupWizardCommand } from "./onboard-CtQTF9Pq.js";
7
+ import { n as CORE_ONBOARD_AUTH_FLAGS, t as setupWizardCommand } from "./onboard-D8mLBBSq.js";
8
8
  //#region src/cli/program/register.onboard.ts
9
9
  function resolveInstallDaemonFlag(command, opts) {
10
10
  if (!command || typeof command !== "object") return;
@@ -6,7 +6,7 @@ import { QI as logConfigUpdated, VL as hasExplicitOptions, Yy as runCommandWithR
6
6
  import { d as ensureAgentWorkspace, n as DEFAULT_AGENT_WORKSPACE_DIR } from "./workspace-gGdwHCNO.js";
7
7
  import { n as safeParseWithSchema } from "./zod-parse-DgsspuWq.js";
8
8
  import { s as resolveSessionTranscriptsDir } from "./paths-CFxPq48L.js";
9
- import { t as setupWizardCommand } from "./onboard-CtQTF9Pq.js";
9
+ import { t as setupWizardCommand } from "./onboard-D8mLBBSq.js";
10
10
  import fs from "node:fs/promises";
11
11
  import JSON5 from "json5";
12
12
  import { z } from "zod";
@@ -1,3 +1,3 @@
1
- import { n as loadValidatedConfigForPluginRegistration, r as registerSubCliByName } from "./register.subclis-BZB6oeZE.js";
1
+ import { n as loadValidatedConfigForPluginRegistration, r as registerSubCliByName } from "./register.subclis-D5PoU4cG.js";
2
2
  import "./subcli-descriptors-BN4V8fAs.js";
3
3
  export { loadValidatedConfigForPluginRegistration, registerSubCliByName };
@@ -58,7 +58,7 @@ const entries = [
58
58
  description: "Run, inspect, and query the WebSocket Gateway",
59
59
  hasSubcommands: true,
60
60
  register: async (program) => {
61
- (await import("./gateway-cli-BQs8Qd9u.js")).registerGatewayCli(program);
61
+ (await import("./gateway-cli-BPgXFsX-.js")).registerGatewayCli(program);
62
62
  }
63
63
  },
64
64
  {
@@ -122,7 +122,7 @@ const entries = [
122
122
  description: "Run and manage the headless node host service",
123
123
  hasSubcommands: true,
124
124
  register: async (program) => {
125
- (await import("./node-cli-ZfoSKAgY.js")).registerNodeCli(program);
125
+ (await import("./node-cli-C-NHDws4.js")).registerNodeCli(program);
126
126
  }
127
127
  },
128
128
  {
@@ -264,7 +264,7 @@ const entries = [
264
264
  description: "Update OpenClaw and inspect update channel status",
265
265
  hasSubcommands: true,
266
266
  register: async (program) => {
267
- (await import("./update-cli-CpGu1-wL.js")).registerUpdateCli(program);
267
+ (await import("./update-cli-CqrlF5yT.js")).registerUpdateCli(program);
268
268
  }
269
269
  },
270
270
  {
@@ -272,7 +272,7 @@ const entries = [
272
272
  description: "Generate shell completion script",
273
273
  hasSubcommands: false,
274
274
  register: async (program) => {
275
- (await import("./completion-cli-YOsLr1vu.js")).registerCompletionCli(program);
275
+ (await import("./completion-cli-Gj-f2vks.js")).registerCompletionCli(program);
276
276
  }
277
277
  }
278
278
  ];
@@ -175,7 +175,7 @@ const routes = [
175
175
  const pathArg = positionals[0];
176
176
  if (!pathArg) return false;
177
177
  const json = hasFlag(argv, "--json");
178
- const { runConfigGet } = await import("./config-cli-E-zhWRmA.js");
178
+ const { runConfigGet } = await import("./config-cli-jZdsV_1z.js");
179
179
  await runConfigGet({
180
180
  path: pathArg,
181
181
  json
@@ -190,7 +190,7 @@ const routes = [
190
190
  if (!positionals || positionals.length !== 1) return false;
191
191
  const pathArg = positionals[0];
192
192
  if (!pathArg) return false;
193
- const { runConfigUnset } = await import("./config-cli-E-zhWRmA.js");
193
+ const { runConfigUnset } = await import("./config-cli-jZdsV_1z.js");
194
194
  await runConfigUnset({ path: pathArg });
195
195
  return true;
196
196
  }
@@ -367,7 +367,7 @@ async function runCli(argv = process$1.argv) {
367
367
  }
368
368
  if (await tryRouteCli(normalizedArgv)) return;
369
369
  enableConsoleCapture();
370
- const { buildProgram } = await import("./program-DB9XGsJm.js");
370
+ const { buildProgram } = await import("./program-CS3D__yJ.js");
371
371
  const program = buildProgram();
372
372
  const { installUnhandledRejectionHandler } = await import("./unhandled-rejections-BbX0Cjcp.js");
373
373
  installUnhandledRejectionHandler();
@@ -381,10 +381,10 @@ async function runCli(argv = process$1.argv) {
381
381
  const { getProgramContext } = await import("./program-context-B4zoT31i.js");
382
382
  const ctx = getProgramContext(program);
383
383
  if (ctx) {
384
- const { registerCoreCliByName } = await import("./command-registry-WKy4Mx4x.js");
384
+ const { registerCoreCliByName } = await import("./command-registry-BuxJ5NtM.js");
385
385
  await registerCoreCliByName(program, ctx, primary, parseArgv);
386
386
  }
387
- const { registerSubCliByName } = await import("./register.subclis-CkFAlHtB.js");
387
+ const { registerSubCliByName } = await import("./register.subclis-Bdfqcaq1.js");
388
388
  await registerSubCliByName(program, primary);
389
389
  }
390
390
  if (!shouldSkipPluginCommandRegistration({
@@ -393,7 +393,7 @@ async function runCli(argv = process$1.argv) {
393
393
  hasBuiltinPrimary: primary !== null && program.commands.some((command) => command.name() === primary)
394
394
  })) {
395
395
  const { registerPluginCliCommands } = await import("./cli-ZcS97SCb.js");
396
- const { loadValidatedConfigForPluginRegistration } = await import("./register.subclis-CkFAlHtB.js");
396
+ const { loadValidatedConfigForPluginRegistration } = await import("./register.subclis-Bdfqcaq1.js");
397
397
  const config = await loadValidatedConfigForPluginRegistration();
398
398
  if (config) registerPluginCliCommands(program, config);
399
399
  }
@@ -14196,7 +14196,7 @@ const GENERATED_BASE_CONFIG_SCHEMA = {
14196
14196
  tags: ["security", "auth"]
14197
14197
  }
14198
14198
  },
14199
- version: "2026.3.28-beta.2",
14199
+ version: "2026.3.28-beta.3",
14200
14200
  generatedAt: "2026-03-22T21:17:33.302Z"
14201
14201
  };
14202
14202
  //#endregion
@@ -409,7 +409,7 @@ async function runSetupWizard(opts, runtime = defaultRuntime, prompter) {
409
409
  mode
410
410
  });
411
411
  await writeConfigFile(nextConfig);
412
- const { finalizeSetupWizard } = await import("./setup.finalize-BXnUa_kR.js");
412
+ const { finalizeSetupWizard } = await import("./setup.finalize-DT2NHFPD.js");
413
413
  const { launchedTui } = await finalizeSetupWizard({
414
414
  flow,
415
415
  opts,
@@ -9,12 +9,12 @@ import { n as openUrl, t as detectBrowserOpenSupport } from "./browser-open-jk8C
9
9
  import { f as resolveControlUiLinks, g as waitForGatewayReachable, i as formatControlUiSshHint, u as probeGatewayReachable } from "./onboard-helpers-DwA3PlvE.js";
10
10
  import { r as resolveGatewayService, t as describeGatewayServiceRestart } from "./service-B6FeS3ro.js";
11
11
  import { i as isSystemdUserServiceAvailable } from "./systemd-DLR8owrQ.js";
12
- import { r as installCompletion } from "./completion-cli-B8zT2HAK.js";
12
+ import { r as installCompletion } from "./completion-cli-CofiidKK.js";
13
13
  import { r as healthCommand } from "./health-CGO48PhL.js";
14
14
  import { t as ensureControlUiAssetsBuilt } from "./control-ui-assets-wJIJo8fl.js";
15
15
  import { t as resolveSetupSecretInputString } from "./setup.secret-input-CSdoGG0T.js";
16
16
  import { t as formatHealthCheckFailure } from "./health-format-DNIEVtuF.js";
17
- import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-Dl-XmE3u.js";
17
+ import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-gl3VS5_j.js";
18
18
  import { t as runTui } from "./tui-BgxbMFwK.js";
19
19
  import path from "node:path";
20
20
  import os from "node:os";
@@ -16,14 +16,14 @@ import { n as stylePromptMessage } from "./prompt-style-BraGXuAF.js";
16
16
  import { r as resolveGatewayService } from "./service-B6FeS3ro.js";
17
17
  import { r as runDaemonRestart, s as runDaemonInstall } from "./daemon-cli-Btp5dxEF.js";
18
18
  import { a as terminateStaleGatewayPids, i as renderRestartDiagnostics, s as waitForGatewayHealthyRestart } from "./status-Bobucbt4.js";
19
- import { r as installCompletion } from "./completion-cli-B8zT2HAK.js";
19
+ import { r as installCompletion } from "./completion-cli-CofiidKK.js";
20
20
  import { n as renderTable, t as getTerminalTableWidth } from "./table-BCfvCJ3j.js";
21
21
  import { c as resolveEffectiveUpdateChannel, i as formatUpdateChannelLabel, l as resolveUpdateChannelDisplay, r as channelToNpmTag, s as normalizeUpdateChannel } from "./update-channels-B-xUHsxn.js";
22
22
  import { i as fetchNpmTagVersion, n as compareSemverStrings, o as resolveNpmChannelTag, r as fetchNpmPackageTargetStatus, t as checkUpdateStatus } from "./update-check-CBvDyb4y.js";
23
23
  import { a as collectInstalledGlobalPackageErrors, c as detectGlobalInstallManagerForRoot, d as resolveGlobalInstallSpec, f as resolveGlobalPackageRoot, h as readPackageVersion, i as cleanupGlobalRenameDirs, l as globalInstallArgs, m as readPackageName, n as runGatewayUpdate, o as createGlobalInstallEnv, p as normalizePackageTagInput, r as canResolveRegistryVersionForPackageTarget, s as detectGlobalInstallManagerByPresence, u as resolveExpectedInstalledVersionFromSpec } from "./server-startup-matrix-migration-IRd288cT.js";
24
24
  import { n as updateNpmInstalledPlugins, t as syncPluginsForUpdateChannel } from "./update-CxPsOpIk.js";
25
- import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-jBrfeHUG.js";
26
- import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-Dl-XmE3u.js";
25
+ import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-D0JcqEaf.js";
26
+ import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-gl3VS5_j.js";
27
27
  import { i as resolveUpdateAvailability, n as formatUpdateOneLiner, t as formatUpdateAvailableHint } from "./status.update-B910Rm5P.js";
28
28
  import path from "node:path";
29
29
  import { spawn, spawnSync } from "node:child_process";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@marxbiotech/openclaw",
3
- "version": "2026.3.28-beta.2",
3
+ "version": "2026.3.28-beta.3",
4
4
  "description": "Multi-channel AI gateway with extensible messaging integrations",
5
5
  "keywords": [],
6
6
  "homepage": "https://github.com/marxbiotech/openclaw#readme",
@@ -1,2 +0,0 @@
1
- import { a as registerCompletionCli } from "./completion-cli-B8zT2HAK.js";
2
- export { registerCompletionCli };