vora-ai 0.1.36 → 0.1.38

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 (35) 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-C-dQzQLt.js → command-registry-BRC9rQRa.js} +4 -4
  6. package/dist/{command-registry-D5bgvc-g.js → command-registry-CNW-_45W.js} +1 -1
  7. package/dist/completion-cli-CZqBPvMj.js +2 -0
  8. package/dist/{completion-cli-CuDyNItM.js → completion-cli-wmAo3zAc.js} +2 -2
  9. package/dist/{doctor-completion-1du2om2X.js → doctor-completion-D9ct64dl.js} +1 -1
  10. package/dist/entry.js +2 -2
  11. package/dist/extensions/telegram/.vora-runtime-deps-stamp.json +1 -1
  12. package/dist/{gateway-chat-JO0UI9m6.js → gateway-chat-BT9D_xTh.js} +1 -0
  13. package/dist/{gateway-cli-D3jVKXtU.js → gateway-cli-DDZpfER2.js} +1 -1
  14. package/dist/{help-BX3qk2j9.js → help-BWGrT64x.js} +1 -1
  15. package/dist/index.js +1 -1
  16. package/dist/{onboard-DwchOLHk.js → onboard-BgmpmwJd.js} +1 -1
  17. package/dist/{program-Dah2D_cO.js → program-CSIyPhvT.js} +2 -2
  18. package/dist/{prompt-select-styled-fmGo-EJl.js → prompt-select-styled-BXm08-uh.js} +1 -1
  19. package/dist/{register.maintenance-BHLVtWhx.js → register.maintenance-Bpuqh4Q-.js} +1 -1
  20. package/dist/{register.onboard-BQXwigRU.js → register.onboard-D-PZwo7h.js} +1 -1
  21. package/dist/{register.setup-BdrATrzp.js → register.setup-BJyCA8h7.js} +1 -1
  22. package/dist/{register.subclis-Dx_SLWv5.js → register.subclis-BMN-F1BZ.js} +7 -7
  23. package/dist/{register.subclis-CrmcN8zA.js → register.subclis-Cdl19lw2.js} +2 -2
  24. package/dist/{root-help-DDj9BENB.js → root-help-Tv4Oc4kX.js} +2 -2
  25. package/dist/{run-main-C6NIk22l.js → run-main-CHgQSnRn.js} +5 -5
  26. package/dist/{setup-CEe7DH30.js → setup-Cu2MyUlf.js} +3 -3
  27. package/dist/{setup.finalize-tiOrCMkC.js → setup.finalize-CRAM1yrm.js} +4 -4
  28. package/dist/{subcli-descriptors-BTTrqeCm.js → subcli-descriptors-Cc423xKz.js} +1 -1
  29. package/dist/{tui-Bay3TR6u.js → tui-DCtnC9C0.js} +1 -1
  30. package/dist/{tui-cli-Cii_Df7D.js → tui-cli-CU809_m8.js} +1 -1
  31. package/dist/{update-cli-Dmyo-EkW.js → update-cli-DhdDYxXa.js} +3 -3
  32. package/dist/{voice-cli-BD1lHjLd.js → voice-cli-BRD6l0Sl.js} +505 -35
  33. package/package.json +1 -1
  34. package/scripts/agora-stt-bridge.mjs +54 -11
  35. package/dist/completion-cli-BcvhPH1f.js +0 -2
package/dist/.buildstamp CHANGED
@@ -1 +1 @@
1
- {"builtAt":1776448382056,"head":"936286ec3e03bbfaa83f10717f1ccf01e29ff447"}
1
+ {"builtAt":1776480007494,"head":"93abfe1b07bd746d7181c78415ddc656e7bb8a4f"}
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.1.36",
3
- "commit": "936286ec3e03bbfaa83f10717f1ccf01e29ff447",
4
- "builtAt": "2026-04-17T17:53:02.809Z"
2
+ "version": "0.1.38",
3
+ "commit": "93abfe1b07bd746d7181c78415ddc656e7bb8a4f",
4
+ "builtAt": "2026-04-18T02:40:08.213Z"
5
5
  }
@@ -1 +1 @@
1
- e41bbc2c2a8641d063e7675b117011f54b721f5d55b3b94967fee8da0da6a761
1
+ 01b677ec20c9e797dda796c71459c28ae4b6a18ed0c7a835cedc7b231dee672f
@@ -10,5 +10,5 @@
10
10
  "signal",
11
11
  "imessage"
12
12
  ],
13
- "rootHelpText": "\n🌊 VORA 0.1.36 (936286e) — Listening out for 'Hey Vora'...\n\nUsage: vora [options] [command]\n\nOptions:\n --container <name> Run the CLI inside a running Podman/Docker container\n named <name> (default: env VORA_CONTAINER)\n --dev Dev profile: isolate state under ~/.vora-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 VORA_STATE_DIR/VORA_CONFIG_PATH under ~/.vora-<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 Vora 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 Vora 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 Vora 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 tasks * Inspect durable background task state\n tui Open a terminal UI connected to the Gateway\n uninstall Uninstall the gateway service + local data (CLI remains)\n update * Update Vora and inspect update channel status\n voice * Wake-word terminal voice loop (OpenWakeWord trigger + STT\n bridge + Gateway chat + optional ElevenLabs TTS)\n webhooks * Webhook helpers and integrations\n\nExamples:\n vora models --help\n Show detailed help for the models command.\n vora onboard\n Run interactive onboarding for the gateway, workspace, and skills.\n vora configure --section model --section gateway\n Re-open only the model and gateway configuration sections.\n vora gateway --port 27106\n Run the WebSocket Gateway locally.\n vora --dev gateway\n Run a dev Gateway (isolated state/config) on ws://127.0.0.1:19001.\n vora gateway --force\n Kill anything bound to the default gateway port, then start it.\n vora models status --plain\n Show the configured provider and default-model state.\n vora gateway ...\n Gateway control via WebSocket.\n vora message send --channel telegram --target @mychat --message \"Hi\"\n Send through a configured channel and print the result in the terminal.\n\nDocs: https://docs.vora.ai/cli\n\n"
13
+ "rootHelpText": "\n🌊 VORA 0.1.38 (93abfe1) — I speak fluent Audio, mild sarcasm, and aggressive Voice Activity Detection.\n\nUsage: vora [options] [command]\n\nOptions:\n --container <name> Run the CLI inside a running Podman/Docker container\n named <name> (default: env VORA_CONTAINER)\n --dev Dev profile: isolate state under ~/.vora-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 VORA_STATE_DIR/VORA_CONFIG_PATH under ~/.vora-<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 Vora 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 Vora 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 Vora 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 tasks * Inspect durable background task state\n tui Open a terminal UI connected to the Gateway\n uninstall Uninstall the gateway service + local data (CLI remains)\n update * Update Vora and inspect update channel status\n voice * Wake-word terminal voice loop (OpenWakeWord trigger + STT\n bridge + Gateway chat + optional Hume TTS)\n webhooks * Webhook helpers and integrations\n\nExamples:\n vora models --help\n Show detailed help for the models command.\n vora onboard\n Run interactive onboarding for the gateway, workspace, and skills.\n vora configure --section model --section gateway\n Re-open only the model and gateway configuration sections.\n vora gateway --port 27106\n Run the WebSocket Gateway locally.\n vora --dev gateway\n Run a dev Gateway (isolated state/config) on ws://127.0.0.1:19001.\n vora gateway --force\n Kill anything bound to the default gateway port, then start it.\n vora models status --plain\n Show the configured provider and default-model state.\n vora gateway ...\n Gateway control via WebSocket.\n vora message send --channel telegram --target @mychat --message \"Hi\"\n Send through a configured channel and print the result in the terminal.\n\nDocs: https://docs.vora.ai/cli\n\n"
14
14
  }
@@ -1,7 +1,7 @@
1
1
  import { O as hasHelpOrVersion, T as getPrimaryCommand } from "./logger-DtBbg3AQ.js";
2
2
  import { n as removeCommandByName, t as registerLazyCommand } from "./register-lazy-command-C4_WvYdL.js";
3
3
  import { t as getCoreCliCommandDescriptors } from "./core-command-descriptors-Dmh3xVCU.js";
4
- import { i as registerSubCliCommands } from "./register.subclis-Dx_SLWv5.js";
4
+ import { i as registerSubCliCommands } from "./register.subclis-BMN-F1BZ.js";
5
5
  //#region src/cli/program/command-registry.ts
6
6
  const shouldRegisterCorePrimaryOnly = (argv) => {
7
7
  if (hasHelpOrVersion(argv)) return false;
@@ -15,7 +15,7 @@ const coreEntries = [
15
15
  hasSubcommands: false
16
16
  }],
17
17
  register: async ({ program }) => {
18
- (await import("./register.setup-BdrATrzp.js")).registerSetupCommand(program);
18
+ (await import("./register.setup-BJyCA8h7.js")).registerSetupCommand(program);
19
19
  }
20
20
  },
21
21
  {
@@ -25,7 +25,7 @@ const coreEntries = [
25
25
  hasSubcommands: false
26
26
  }],
27
27
  register: async ({ program }) => {
28
- (await import("./register.onboard-BQXwigRU.js")).registerOnboardCommand(program);
28
+ (await import("./register.onboard-D-PZwo7h.js")).registerOnboardCommand(program);
29
29
  }
30
30
  },
31
31
  {
@@ -82,7 +82,7 @@ const coreEntries = [
82
82
  }
83
83
  ],
84
84
  register: async ({ program }) => {
85
- (await import("./register.maintenance-BHLVtWhx.js")).registerMaintenanceCommands(program);
85
+ (await import("./register.maintenance-Bpuqh4Q-.js")).registerMaintenanceCommands(program);
86
86
  }
87
87
  },
88
88
  {
@@ -1,3 +1,3 @@
1
1
  import "./core-command-descriptors-Dmh3xVCU.js";
2
- import { n as registerCoreCliByName } from "./command-registry-C-dQzQLt.js";
2
+ import { n as registerCoreCliByName } from "./command-registry-BRC9rQRa.js";
3
3
  export { registerCoreCliByName };
@@ -0,0 +1,2 @@
1
+ import { a as registerCompletionCli } from "./completion-cli-wmAo3zAc.js";
2
+ export { registerCompletionCli };
@@ -3,8 +3,8 @@ import { t as formatDocsLink } from "./links-D-QW4VCX.js";
3
3
  import { r as theme } from "./theme-DEBOahQW.js";
4
4
  import { _ as resolveStateDir } from "./paths-5dqsPi5h.js";
5
5
  import { m as pathExists } from "./utils-D25qzO4S.js";
6
- import { n as loadValidatedConfigForPluginRegistration, r as registerSubCliByName, t as getSubCliEntries } from "./register.subclis-Dx_SLWv5.js";
7
- import { n as registerCoreCliByName, t as getCoreCliCommandNames } from "./command-registry-C-dQzQLt.js";
6
+ import { n as loadValidatedConfigForPluginRegistration, r as registerSubCliByName, t as getSubCliEntries } from "./register.subclis-BMN-F1BZ.js";
7
+ import { n as registerCoreCliByName, t as getCoreCliCommandNames } from "./command-registry-BRC9rQRa.js";
8
8
  import { t as getProgramContext } from "./program-context-C0Ru__k1.js";
9
9
  import path from "node:path";
10
10
  import os from "node:os";
@@ -1,7 +1,7 @@
1
1
  import { t as resolveVoraPackageRoot } from "./vora-root-fqgy2cBi.js";
2
2
  import { n as resolveCliName } from "./cli-name-C_IzpPbS.js";
3
3
  import { t as note } from "./note-DfcrAbT0.js";
4
- import { c as usesSlowDynamicCompletion, i as isCompletionInstalled, o as resolveCompletionCachePath, r as installCompletion, s as resolveShellFromEnv, t as completionCacheExists } from "./completion-cli-CuDyNItM.js";
4
+ import { c as usesSlowDynamicCompletion, i as isCompletionInstalled, o as resolveCompletionCachePath, r as installCompletion, s as resolveShellFromEnv, t as completionCacheExists } from "./completion-cli-wmAo3zAc.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
@@ -193,14 +193,14 @@ function tryHandleRootHelpFastPath(argv, deps = {}) {
193
193
  Promise.resolve().then(() => deps.outputRootHelp?.()).catch(handleError);
194
194
  return true;
195
195
  }
196
- import("./root-help-DDj9BENB.js").then(({ outputRootHelp }) => {
196
+ import("./root-help-Tv4Oc4kX.js").then(({ outputRootHelp }) => {
197
197
  return outputRootHelp();
198
198
  }).catch(handleError);
199
199
  return true;
200
200
  }
201
201
  function runMainOrRootHelp(argv) {
202
202
  if (tryHandleRootHelpFastPath(argv)) return;
203
- import("./run-main-C6NIk22l.js").then(({ runCli }) => runCli(argv)).catch((error) => {
203
+ import("./run-main-CHgQSnRn.js").then(({ runCli }) => runCli(argv)).catch((error) => {
204
204
  console.error("[vora] Failed to start CLI:", error instanceof Error ? error.stack ?? error.message : error);
205
205
  process$1.exitCode = 1;
206
206
  });
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "fingerprint": "f5cc4428157244c03371a02e98bc2b0556e1853613db4dfe31efcfd24cef35f1",
3
- "generatedAt": "2026-04-17T17:53:01.949Z"
3
+ "generatedAt": "2026-04-18T02:40:07.361Z"
4
4
  }
@@ -84,6 +84,7 @@ var GatewayChatClient = class GatewayChatClient {
84
84
  message: opts.message,
85
85
  thinking: opts.thinking,
86
86
  deliver: opts.deliver,
87
+ attachments: opts.attachments,
87
88
  timeoutMs: opts.timeoutMs,
88
89
  idempotencyKey: runId
89
90
  });
@@ -196,7 +196,7 @@ import { s as normalizeUpdateChannel } from "./update-channels-C8-n6_kE.js";
196
196
  import { n as compareSemverStrings, o as resolveNpmChannelTag, t as checkUpdateStatus } from "./update-check-Cw2Zo7Rn.js";
197
197
  import { i as resolveGatewayStartupPluginIds, r as resolveConfiguredDeferredChannelPluginIds } from "./channel-plugin-ids-BgeBHwp9.js";
198
198
  import { l as startTaskRegistryMaintenance, n as getInspectableTaskRegistrySummary } from "./task-registry.maintenance-CfvslEdg.js";
199
- import { t as runSetupWizard } from "./setup-CEe7DH30.js";
199
+ import { t as runSetupWizard } from "./setup-Cu2MyUlf.js";
200
200
  import { _ as buildGogWatchStartArgs, g as buildGogWatchServeArgs, i as ensureTailscaleEndpoint, w as resolveGmailHookRuntimeConfig } from "./gmail-setup-utils-CstpQWwK.js";
201
201
  import { i as loadAgentIdentity, o as pruneAgentConfig, r as findAgentEntryIndex, t as applyAgentConfig } from "./agents.config-BXIFVvWT.js";
202
202
  import { a as resolveApnsAuthConfigFromEnv, c as shouldClearStoredApnsRegistration, d as MediaOffloadError, f as parseMessageWithAttachments, l as resolveApnsRelayConfigFromEnv, n as loadApnsRegistration, o as sendApnsAlert, r as normalizeApnsEnvironment, s as sendApnsBackgroundWake, t as clearApnsRegistrationIfCurrent, u as normalizeRpcAttachmentsToChatAttachments } from "./push-apns-wrSw6X5_.js";
@@ -6,7 +6,7 @@ import { n as resolveCliName, t as replaceCliName } from "./cli-name-C_IzpPbS.js
6
6
  import { n as resolveCommitHash } from "./git-commit-DifBr62H.js";
7
7
  import { i as hasEmittedCliBanner, r as formatCliBannerLine } from "./banner-C5yJCudk.js";
8
8
  import { n as getCoreCliCommandsWithSubcommands } from "./core-command-descriptors-Dmh3xVCU.js";
9
- import { t as getSubCliCommandsWithSubcommands } from "./subcli-descriptors-BTTrqeCm.js";
9
+ import { t as getSubCliCommandsWithSubcommands } from "./subcli-descriptors-Cc423xKz.js";
10
10
  import { InvalidArgumentError } from "commander";
11
11
  //#region src/cli/log-level-option.ts
12
12
  const CLI_LOG_LEVEL_VALUES = ALLOWED_LOG_LEVELS.join("|");
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-BZRlVrBH.js"), import("./run-main-C6NIk22l.js")]);
31
+ const [{ installGaxiosFetchCompat }, { runCli }] = await Promise.all([import("./gaxios-fetch-compat-BZRlVrBH.js"), import("./run-main-CHgQSnRn.js")]);
32
32
  return {
33
33
  installGaxiosFetchCompat,
34
34
  runCli
@@ -11,7 +11,7 @@ import { c as normalizeGatewayTokenInput, d as randomToken, f as resolveControlU
11
11
  import { n as logConfigUpdated } from "./logging-BQ-k0nK2.js";
12
12
  import { t as WizardCancelledError } from "./prompts-BVJ3zQFl.js";
13
13
  import { t as createClackPrompter } from "./clack-prompter-Be8sX0Lg.js";
14
- import { t as runSetupWizard } from "./setup-CEe7DH30.js";
14
+ import { t as runSetupWizard } from "./setup-Cu2MyUlf.js";
15
15
  import { a as resolveManifestProviderOnboardAuthFlags } from "./provider-auth-choices-DcNzlbgs.js";
16
16
  import { i as resolveDeprecatedAuthChoiceReplacement, n as isDeprecatedAuthChoice, r as normalizeLegacyOnboardAuthChoice, t as formatDeprecatedNonInteractiveAuthChoiceError } from "./auth-choice-legacy-DGeZIT-G.js";
17
17
  import { r as applyLocalSetupWorkspaceConfig } from "./onboard-config-DkkHPbTO.js";
@@ -7,12 +7,12 @@ import { n as VERSION } from "./version-A4Ns-pm9.js";
7
7
  import { n as resolveCliName } from "./cli-name-C_IzpPbS.js";
8
8
  import { t as emitCliBanner } from "./banner-C5yJCudk.js";
9
9
  import { n as resolveCliChannelOptions } from "./channel-options-D_8z6c-h.js";
10
- import { i as registerProgramCommands } from "./command-registry-C-dQzQLt.js";
10
+ import { i as registerProgramCommands } from "./command-registry-BRC9rQRa.js";
11
11
  import { n as setProgramContext } from "./program-context-C0Ru__k1.js";
12
12
  import { t as isCommandJsonOutputMode } from "./json-mode-KmFHsA3R.js";
13
13
  import "./ports-CQo1U86K.js";
14
14
  import { n as resolvePluginInstallPreactionRequest, t as resolvePluginInstallInvalidConfigPolicy } from "./plugin-install-config-policy-BHANXE7k.js";
15
- import { t as configureProgramHelp } from "./help-BX3qk2j9.js";
15
+ import { t as configureProgramHelp } from "./help-BWGrT64x.js";
16
16
  import { Command } from "commander";
17
17
  //#region src/cli/program/context.ts
18
18
  function createProgramContext() {
@@ -108,7 +108,7 @@ import { t as ensureSystemdUserLingerInteractive } from "./systemd-linger-B_gzrf
108
108
  import { t as formatHealthCheckFailure } from "./health-format-TyQPx9cW.js";
109
109
  import { a as stripUnknownConfigKeys, i as resolveConfigPathTarget, n as formatConfigPath, r as noteOpencodeProviderOverrides, t as runDoctorConfigPreflight } from "./doctor-config-preflight-B2IpAFkH.js";
110
110
  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-zVflHd8P.js";
111
- import { n as doctorShellCompletion } from "./doctor-completion-1du2om2X.js";
111
+ import { n as doctorShellCompletion } from "./doctor-completion-D9ct64dl.js";
112
112
  import { t as collectChannelStatusIssues } from "./channels-status-issues-CCJ10zgF.js";
113
113
  import { t as resolveDefaultChannelAccountContext } from "./channel-account-context-ChxhkByq.js";
114
114
  import "./doctor-state-migrations-BlH3irT5.js";
@@ -16,7 +16,7 @@ import { r as resolveGatewayService } from "./service-BnUY5mkU.js";
16
16
  import { n as resolveConfiguredSecretInputWithFallback } from "./resolve-configured-secret-input-string-BGHutVyf.js";
17
17
  import { n as runCommandWithRuntime } from "./cli-utils-4n6KI2ho.js";
18
18
  import { a as removePath, i as listAgentSessionDirs, o as removeStateAndLinkedPaths, r as buildCleanupPlan, s as removeWorkspaceDirs } from "./backup-create-DZood8Ea.js";
19
- import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-fmGo-EJl.js";
19
+ import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-BXm08-uh.js";
20
20
  import path from "node:path";
21
21
  import { cancel, confirm, isCancel, multiselect } from "@clack/prompts";
22
22
  //#region src/infra/clipboard.ts
@@ -4,7 +4,7 @@ import { r as theme } from "./theme-DEBOahQW.js";
4
4
  import { n as runCommandWithRuntime } from "./cli-utils-4n6KI2ho.js";
5
5
  import { a as resolveManifestProviderOnboardAuthFlags } from "./provider-auth-choices-DcNzlbgs.js";
6
6
  import { n as formatAuthChoiceChoicesForCli } from "./auth-choice-options-Blz8a0tL.js";
7
- import { n as CORE_ONBOARD_AUTH_FLAGS, t as setupWizardCommand } from "./onboard-DwchOLHk.js";
7
+ import { n as CORE_ONBOARD_AUTH_FLAGS, t as setupWizardCommand } from "./onboard-BgmpmwJd.js";
8
8
  //#region src/cli/program/register.onboard.ts
9
9
  function resolveInstallDaemonFlag(command, opts) {
10
10
  if (!command || typeof command !== "object") return;
@@ -11,7 +11,7 @@ import { s as resolveSessionTranscriptsDir } from "./paths-UyCuvwtc.js";
11
11
  import { n as safeParseWithSchema } from "./zod-parse-DHX0rEx9.js";
12
12
  import { n as runCommandWithRuntime } from "./cli-utils-4n6KI2ho.js";
13
13
  import { n as logConfigUpdated, t as formatConfigPath } from "./logging-BQ-k0nK2.js";
14
- import { t as setupWizardCommand } from "./onboard-DwchOLHk.js";
14
+ import { t as setupWizardCommand } from "./onboard-BgmpmwJd.js";
15
15
  import fs from "node:fs/promises";
16
16
  import { z } from "zod";
17
17
  import JSON5 from "json5";
@@ -1,7 +1,7 @@
1
1
  import { O as hasHelpOrVersion, T as getPrimaryCommand } from "./logger-DtBbg3AQ.js";
2
2
  import { t as isTruthyEnvValue } from "./env-CLTF3G6u.js";
3
3
  import { n as removeCommandByName, t as registerLazyCommand$1 } from "./register-lazy-command-C4_WvYdL.js";
4
- import { n as getSubCliEntries$1 } from "./subcli-descriptors-BTTrqeCm.js";
4
+ import { n as getSubCliEntries$1 } from "./subcli-descriptors-Cc423xKz.js";
5
5
  //#region src/cli/program/register.subclis.ts
6
6
  const shouldRegisterPrimaryOnly = (argv) => {
7
7
  if (isTruthyEnvValue(process.env.VORA_DISABLE_LAZY_SUBCOMMANDS)) return false;
@@ -30,7 +30,7 @@ const entries = [
30
30
  description: "Run, inspect, and query the WebSocket Gateway",
31
31
  hasSubcommands: true,
32
32
  register: async (program) => {
33
- (await import("./gateway-cli-D3jVKXtU.js")).registerGatewayCli(program);
33
+ (await import("./gateway-cli-DDZpfER2.js")).registerGatewayCli(program);
34
34
  }
35
35
  },
36
36
  {
@@ -110,15 +110,15 @@ const entries = [
110
110
  description: "Open a terminal UI connected to the Gateway",
111
111
  hasSubcommands: false,
112
112
  register: async (program) => {
113
- (await import("./tui-cli-Cii_Df7D.js")).registerTuiCli(program);
113
+ (await import("./tui-cli-CU809_m8.js")).registerTuiCli(program);
114
114
  }
115
115
  },
116
116
  {
117
117
  name: "voice",
118
- description: "Wake-word terminal voice loop (OpenWakeWord trigger + STT bridge + Gateway chat + optional ElevenLabs TTS)",
118
+ description: "Wake-word terminal voice loop (OpenWakeWord trigger + STT bridge + Gateway chat + optional Hume TTS)",
119
119
  hasSubcommands: true,
120
120
  register: async (program) => {
121
- (await import("./voice-cli-BD1lHjLd.js")).registerVoiceCli(program);
121
+ (await import("./voice-cli-BRD6l0Sl.js")).registerVoiceCli(program);
122
122
  }
123
123
  },
124
124
  {
@@ -244,7 +244,7 @@ const entries = [
244
244
  description: "Update Vora and inspect update channel status",
245
245
  hasSubcommands: true,
246
246
  register: async (program) => {
247
- (await import("./update-cli-Dmyo-EkW.js")).registerUpdateCli(program);
247
+ (await import("./update-cli-DhdDYxXa.js")).registerUpdateCli(program);
248
248
  }
249
249
  },
250
250
  {
@@ -252,7 +252,7 @@ const entries = [
252
252
  description: "Generate shell completion script",
253
253
  hasSubcommands: false,
254
254
  register: async (program) => {
255
- (await import("./completion-cli-BcvhPH1f.js")).registerCompletionCli(program);
255
+ (await import("./completion-cli-CZqBPvMj.js")).registerCompletionCli(program);
256
256
  }
257
257
  }
258
258
  ];
@@ -1,3 +1,3 @@
1
- import "./subcli-descriptors-BTTrqeCm.js";
2
- import { n as loadValidatedConfigForPluginRegistration, r as registerSubCliByName } from "./register.subclis-Dx_SLWv5.js";
1
+ import "./subcli-descriptors-Cc423xKz.js";
2
+ import { n as loadValidatedConfigForPluginRegistration, r as registerSubCliByName } from "./register.subclis-BMN-F1BZ.js";
3
3
  export { loadValidatedConfigForPluginRegistration, registerSubCliByName };
@@ -1,7 +1,7 @@
1
1
  import { n as VERSION } from "./version-A4Ns-pm9.js";
2
2
  import { t as getCoreCliCommandDescriptors } from "./core-command-descriptors-Dmh3xVCU.js";
3
- import { n as getSubCliEntries } from "./subcli-descriptors-BTTrqeCm.js";
4
- import { t as configureProgramHelp } from "./help-BX3qk2j9.js";
3
+ import { n as getSubCliEntries } from "./subcli-descriptors-Cc423xKz.js";
4
+ import { t as configureProgramHelp } from "./help-BWGrT64x.js";
5
5
  import { t as getPluginCliCommandDescriptors } from "./cli-CQycN9EN.js";
6
6
  import { Command } from "commander";
7
7
  //#region src/cli/program/root-help.ts
@@ -368,13 +368,13 @@ async function runCli(argv = process$1.argv) {
368
368
  assertSupportedRuntime();
369
369
  try {
370
370
  if (shouldUseRootHelpFastPath(normalizedArgv)) {
371
- const { outputRootHelp } = await import("./root-help-DDj9BENB.js");
371
+ const { outputRootHelp } = await import("./root-help-Tv4Oc4kX.js");
372
372
  await outputRootHelp();
373
373
  return;
374
374
  }
375
375
  if (await tryRouteCli(normalizedArgv)) return;
376
376
  enableConsoleCapture();
377
- const { buildProgram } = await import("./program-Dah2D_cO.js");
377
+ const { buildProgram } = await import("./program-CSIyPhvT.js");
378
378
  const program = buildProgram();
379
379
  const { installUnhandledRejectionHandler } = await import("./unhandled-rejections-D0HD8aaS.js");
380
380
  installUnhandledRejectionHandler();
@@ -388,10 +388,10 @@ async function runCli(argv = process$1.argv) {
388
388
  const { getProgramContext } = await import("./program-context-Bntrf4rW.js");
389
389
  const ctx = getProgramContext(program);
390
390
  if (ctx) {
391
- const { registerCoreCliByName } = await import("./command-registry-D5bgvc-g.js");
391
+ const { registerCoreCliByName } = await import("./command-registry-CNW-_45W.js");
392
392
  await registerCoreCliByName(program, ctx, primary, parseArgv);
393
393
  }
394
- const { registerSubCliByName } = await import("./register.subclis-CrmcN8zA.js");
394
+ const { registerSubCliByName } = await import("./register.subclis-Cdl19lw2.js");
395
395
  await registerSubCliByName(program, primary);
396
396
  }
397
397
  if (!shouldSkipPluginCommandRegistration({
@@ -400,7 +400,7 @@ async function runCli(argv = process$1.argv) {
400
400
  hasBuiltinPrimary: primary !== null && program.commands.some((command) => command.name() === primary)
401
401
  })) {
402
402
  const { registerPluginCliCommands } = await import("./cli-QwFXIS1_.js");
403
- const { loadValidatedConfigForPluginRegistration } = await import("./register.subclis-CrmcN8zA.js");
403
+ const { loadValidatedConfigForPluginRegistration } = await import("./register.subclis-Cdl19lw2.js");
404
404
  const config = await loadValidatedConfigForPluginRegistration();
405
405
  if (config) {
406
406
  await registerPluginCliCommands(program, config, void 0, void 0, {
@@ -103,10 +103,10 @@ async function setupQuickstartVoiceRuntime(params) {
103
103
  await params.prompter.note([
104
104
  "QuickStart will prepare terminal voice runtime now.",
105
105
  "This installs wake-word Python dependencies into ~/.vora/voice-python.",
106
- "STT/TTS use the VORA backend by default, so local Agora/ElevenLabs keys are not required."
106
+ "STT/TTS use the VORA backend by default, so local Agora/Hume keys are not required."
107
107
  ].join("\n"), "Voice runtime");
108
108
  try {
109
- const { runVoiceSetup } = await import("./voice-cli-BD1lHjLd.js");
109
+ const { runVoiceSetup } = await import("./voice-cli-BRD6l0Sl.js");
110
110
  await runVoiceSetup({}, params.runtime);
111
111
  await params.prompter.note([
112
112
  "Voice runtime is ready.",
@@ -464,7 +464,7 @@ async function runSetupWizard(opts, runtime = defaultRuntime, prompter) {
464
464
  mode
465
465
  });
466
466
  await writeConfigFile(nextConfig);
467
- const { finalizeSetupWizard } = await import("./setup.finalize-tiOrCMkC.js");
467
+ const { finalizeSetupWizard } = await import("./setup.finalize-CRAM1yrm.js");
468
468
  const { launchedTui } = await finalizeSetupWizard({
469
469
  flow,
470
470
  opts,
@@ -10,13 +10,13 @@ import { f as resolveControlUiLinks, g as waitForGatewayReachable, i as formatCo
10
10
  import { r as resolveGatewayService, t as describeGatewayServiceRestart } from "./service-BnUY5mkU.js";
11
11
  import { i as isSystemdUserServiceAvailable } from "./systemd-9Gclqlhk.js";
12
12
  import { t as listConfiguredWebSearchProviders } from "./runtime-B0GlgEXr.js";
13
- import { r as installCompletion } from "./completion-cli-CuDyNItM.js";
13
+ import { r as installCompletion } from "./completion-cli-wmAo3zAc.js";
14
14
  import { r as healthCommand } from "./health-DJqooRWK.js";
15
15
  import { t as ensureControlUiAssetsBuilt } from "./control-ui-assets-DVSZ-yd-.js";
16
16
  import { t as resolveSetupSecretInputString } from "./setup.secret-input-DeWdLao-.js";
17
17
  import { t as formatHealthCheckFailure } from "./health-format-TyQPx9cW.js";
18
- import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-1du2om2X.js";
19
- import { t as runTui } from "./tui-Bay3TR6u.js";
18
+ import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-D9ct64dl.js";
19
+ import { t as runTui } from "./tui-DCtnC9C0.js";
20
20
  import path from "node:path";
21
21
  import os from "node:os";
22
22
  import fs from "node:fs/promises";
@@ -351,7 +351,7 @@ async function finalizeSetupWizard(options) {
351
351
  if (hatchChoice === "voice") {
352
352
  restoreTerminalState("pre-setup voice", { resumeStdinIfPaused: true });
353
353
  try {
354
- const { runVoiceLoop } = await import("./voice-cli-BD1lHjLd.js");
354
+ const { runVoiceLoop } = await import("./voice-cli-BRD6l0Sl.js");
355
355
  await runVoiceLoop({
356
356
  url: links.wsUrl,
357
357
  token: settings.authMode === "token" ? settings.gatewayToken : void 0,
@@ -62,7 +62,7 @@ const SUB_CLI_DESCRIPTORS = [
62
62
  },
63
63
  {
64
64
  name: "voice",
65
- description: "Wake-word terminal voice loop (OpenWakeWord trigger + STT bridge + Gateway chat + optional ElevenLabs TTS)",
65
+ description: "Wake-word terminal voice loop (OpenWakeWord trigger + STT bridge + Gateway chat + optional Hume TTS)",
66
66
  hasSubcommands: true
67
67
  },
68
68
  {
@@ -11,7 +11,7 @@ import { t as normalizeGroupActivation } from "./group-activation-C-78lmfs.js";
11
11
  import { n as formatTimeAgo, t as formatRelativeTimestamp } from "./format-relative-DFtNOr25.js";
12
12
  import { a as formatTokenCount, r as stripLeadingInboundMetadata } from "./strip-inbound-meta-EUsXOL1l.js";
13
13
  import { a as listChatCommandsForConfig, i as listChatCommands } from "./commands-registry-e0jUxhko.js";
14
- import { t as GatewayChatClient } from "./gateway-chat-JO0UI9m6.js";
14
+ import { t as GatewayChatClient } from "./gateway-chat-BT9D_xTh.js";
15
15
  import { spawn } from "node:child_process";
16
16
  import chalk from "chalk";
17
17
  import { randomUUID } from "node:crypto";
@@ -2,7 +2,7 @@ import { n as defaultRuntime } from "./runtime-a6RdoDky.js";
2
2
  import { t as formatDocsLink } from "./links-D-QW4VCX.js";
3
3
  import { r as theme } from "./theme-DEBOahQW.js";
4
4
  import { t as parseTimeoutMs } from "./parse-timeout-CIdCwobj.js";
5
- import { t as runTui } from "./tui-Bay3TR6u.js";
5
+ import { t as runTui } from "./tui-DCtnC9C0.js";
6
6
  //#region src/cli/tui-cli.ts
7
7
  function registerTuiCli(program) {
8
8
  program.command("tui").description("Open a terminal UI connected to the Gateway").option("--url <url>", "Gateway WebSocket URL (defaults to gateway.remote.url when configured)").option("--token <token>", "Gateway token (if required)").option("--password <password>", "Gateway password (if required)").option("--session <key>", "Session key (default: \"main\", or \"global\" when scope is global)").option("--deliver", "Deliver assistant replies", false).option("--thinking <level>", "Thinking level override").option("--message <text>", "Send an initial message after connecting").option("--timeout-ms <ms>", "Agent timeout in ms (defaults to agents.defaults.timeoutSeconds)").option("--history-limit <n>", "History entries to load", "200").addHelpText("after", () => `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/tui", "docs.vora.ai/cli/tui")}\n`).action(async (opts) => {
@@ -21,14 +21,14 @@ import { a as terminateStaleGatewayPids, i as renderRestartDiagnostics, s as wai
21
21
  import { r as formatDurationPrecise } from "./format-duration-C7KLrjgc.js";
22
22
  import { o as trimLogTail } from "./restart-sentinel-CjIY0IZ8.js";
23
23
  import { t as formatHelpExamples } from "./help-format-DC7U6A-Y.js";
24
- import { r as installCompletion } from "./completion-cli-CuDyNItM.js";
24
+ import { r as installCompletion } from "./completion-cli-wmAo3zAc.js";
25
25
  import { n as renderTable, t as getTerminalTableWidth } from "./table-CYPwb2Cg.js";
26
26
  import { c as resolveEffectiveUpdateChannel, i as formatUpdateChannelLabel, l as resolveUpdateChannelDisplay, r as channelToNpmTag, s as normalizeUpdateChannel } from "./update-channels-C8-n6_kE.js";
27
27
  import { i as fetchNpmTagVersion, n as compareSemverStrings, o as resolveNpmChannelTag, r as fetchNpmPackageTargetStatus, t as checkUpdateStatus } from "./update-check-Cw2Zo7Rn.js";
28
28
  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-DL743qrx.js";
29
29
  import { n as updateNpmInstalledPlugins, t as syncPluginsForUpdateChannel } from "./update-XayfF-ly.js";
30
- import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-fmGo-EJl.js";
31
- import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-1du2om2X.js";
30
+ import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-BXm08-uh.js";
31
+ import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-D9ct64dl.js";
32
32
  import { i as resolveUpdateAvailability, n as formatUpdateOneLiner, t as formatUpdateAvailableHint } from "./status.update-209xudNW.js";
33
33
  import path from "node:path";
34
34
  import { spawn, spawnSync } from "node:child_process";