vora-ai 0.1.8 → 0.1.12

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 (43) hide show
  1. package/dist/.buildstamp +1 -1
  2. package/dist/{agents-KEHIjrGf.js → agents-D-qXwaR7.js} +1 -1
  3. package/dist/{agents-CudkxcIP.js → agents-DbPT5OGQ.js} +1 -1
  4. package/dist/{auth-choice-BJoCLqyO.js → auth-choice-CrFsGJUy.js} +2 -2
  5. package/dist/{auth-choice-Dqb6RA6N.js → auth-choice-DMVYlX7s.js} +1 -1
  6. package/dist/{auth-choice-MWA9SqQd.js → auth-choice-hm-Q9nxZ.js} +1 -1
  7. package/dist/{banner-DMZFMeXF.js → banner-B4ZNUEc3.js} +16 -76
  8. package/dist/{banner-dDsGKmvy.js → banner-C3DCgrqY.js} +1 -1
  9. package/dist/build-info.json +3 -3
  10. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  11. package/dist/cli-startup-metadata.json +1 -1
  12. package/dist/{command-registry-Cma1Togy.js → command-registry-Ck4EueJd.js} +1 -1
  13. package/dist/{command-registry-CuOVE1fX.js → command-registry-Did1FmU8.js} +7 -7
  14. package/dist/completion-cli-9hindoaS.js +2 -0
  15. package/dist/{completion-cli-CUaDyikK.js → completion-cli-DalWB_wW.js} +2 -2
  16. package/dist/{config-cli-DFiQOw85.js → config-cli-BFgfCtJK.js} +1 -1
  17. package/dist/{configure-Dat8sxBy.js → configure-ARy7Rajv.js} +1 -1
  18. package/dist/{configure-DEZs--dU.js → configure-Cj4_t-6o.js} +3 -3
  19. package/dist/{doctor-completion-CLfFmnGd.js → doctor-completion-CUer4CWC.js} +1 -1
  20. package/dist/entry.js +2 -2
  21. package/dist/extensions/discord/.vora-runtime-deps-stamp.json +1 -1
  22. package/dist/extensions/telegram/.vora-runtime-deps-stamp.json +1 -1
  23. package/dist/{gateway-cli-DRYW6Le8.js → gateway-cli-BizZDPjF.js} +1 -1
  24. package/dist/{help-Ch5RVquV.js → help-FNF7u_8H.js} +1 -1
  25. package/dist/index.js +1 -1
  26. package/dist/{onboard-CkPxIdn1.js → onboard-ChoQO8lO.js} +2 -2
  27. package/dist/{program-D9LjBDHJ.js → program-WK2yjafH.js} +3 -3
  28. package/dist/{prompt-select-styled-CAUd2e_T.js → prompt-select-styled-C4VHH017.js} +1 -1
  29. package/dist/{provider-auth-choice-preference-ClpLB_q_.js → provider-auth-choice-preference-Br2hYgpb.js} +1 -1
  30. package/dist/{register.agent-iSvLIAqf.js → register.agent-Cl8GUth2.js} +1 -1
  31. package/dist/{register.configure-B_cl_qTZ.js → register.configure-pUnQRtnN.js} +1 -1
  32. package/dist/{register.maintenance-B4pdgeFL.js → register.maintenance-BAFVJo5R.js} +1 -1
  33. package/dist/{register.onboard-Cb03YPOv.js → register.onboard-BclFyZAg.js} +1 -1
  34. package/dist/{register.setup-B9ecqSrC.js → register.setup-CezzTRKK.js} +1 -1
  35. package/dist/{register.subclis-BdHrEJN0.js → register.subclis-BhAKhgyu.js} +1 -1
  36. package/dist/{register.subclis-Bs-ITQlE.js → register.subclis-DCBu37dv.js} +3 -3
  37. package/dist/{root-help-OYcge9uN.js → root-help-n3WxreI7.js} +1 -1
  38. package/dist/{run-main-BcsRYTP7.js → run-main-CBKv4Cnk.js} +9 -9
  39. package/dist/{setup-y-ZxCER_.js → setup-BL3m2Qbq.js} +2 -2
  40. package/dist/{setup.finalize-DHFVRYwK.js → setup.finalize-C6D21i0d.js} +2 -2
  41. package/dist/{update-cli-Dv44lmnZ.js → update-cli-Bo4_9TAE.js} +3 -3
  42. package/package.json +1 -1
  43. package/dist/completion-cli-vbMJIekd.js +0 -2
package/dist/.buildstamp CHANGED
@@ -1 +1 @@
1
- {"builtAt":1775148057549,"head":"214fc01499099fce603e7a7dbc300862383fab6e"}
1
+ {"builtAt":1775152754348,"head":"5d5680639818814ae28fb1f2cb706dc64cc68171"}
@@ -1,5 +1,5 @@
1
1
  import "./agent-scope-L_c27D6k.js";
2
2
  import "./agents.config-Bk_BV0k2.js";
3
3
  import "./config-validation-XhkvSe78.js";
4
- import { t as agentsListCommand } from "./agents-CudkxcIP.js";
4
+ import { t as agentsListCommand } from "./agents-DbPT5OGQ.js";
5
5
  export { agentsListCommand };
@@ -21,7 +21,7 @@ import { t as createClackPrompter } from "./clack-prompter-CMBtxvp6.js";
21
21
  import { i as loadAgentIdentity, n as buildAgentSummaries, o as pruneAgentConfig, r as findAgentEntryIndex, t as applyAgentConfig } from "./agents.config-Bk_BV0k2.js";
22
22
  import { a as describeBinding, i as buildChannelBindings, n as requireValidConfigSnapshot, o as parseBindingSpecs, r as applyAgentBindings, s as removeAgentBindings, t as requireValidConfigFileSnapshot$1 } from "./config-validation-XhkvSe78.js";
23
23
  import { t as promptAuthChoiceGrouped } from "./auth-choice-prompt-C45OJL_-.js";
24
- import { n as applyAuthChoice, t as warnIfModelConfigLooksOff } from "./auth-choice-Dqb6RA6N.js";
24
+ import { n as applyAuthChoice, t as warnIfModelConfigLooksOff } from "./auth-choice-DMVYlX7s.js";
25
25
  import { r as setupChannels } from "./onboard-channels-BfcgnBC3.js";
26
26
  import path from "node:path";
27
27
  import fs from "node:fs/promises";
@@ -1,3 +1,3 @@
1
- import { t as resolvePreferredProviderForAuthChoice } from "./provider-auth-choice-preference-ClpLB_q_.js";
2
- import { n as applyAuthChoice, t as warnIfModelConfigLooksOff } from "./auth-choice-Dqb6RA6N.js";
1
+ import { t as resolvePreferredProviderForAuthChoice } from "./provider-auth-choice-preference-Br2hYgpb.js";
2
+ import { n as applyAuthChoice, t as warnIfModelConfigLooksOff } from "./auth-choice-DMVYlX7s.js";
3
3
  export { applyAuthChoice, resolvePreferredProviderForAuthChoice, warnIfModelConfigLooksOff };
@@ -8,7 +8,7 @@ import { r as loadModelCatalog } from "./model-catalog-DmdOTLaq.js";
8
8
  import { t as buildProviderAuthRecoveryHint } from "./provider-auth-guidance-m96WVf_L.js";
9
9
  import { r as normalizeLegacyOnboardAuthChoice } from "./auth-choice-legacy-D6uT2N1Y.js";
10
10
  import { t as applyAuthChoiceLoadedPluginProvider } from "./provider-auth-choice-BaxiwuA6.js";
11
- import { i as applyAuthChoiceApiProviders, s as normalizeApiKeyTokenProviderAuthChoice } from "./provider-auth-choice-preference-ClpLB_q_.js";
11
+ import { i as applyAuthChoiceApiProviders, s as normalizeApiKeyTokenProviderAuthChoice } from "./provider-auth-choice-preference-Br2hYgpb.js";
12
12
  //#region src/commands/auth-choice.apply.oauth.ts
13
13
  async function applyAuthChoiceOAuth(_params) {
14
14
  return null;
@@ -17,7 +17,7 @@ import { a as normalizeSecretInputModeInput } from "./provider-auth-input-ff73c0
17
17
  import { t as resolveManifestDeprecatedProviderAuthChoice } from "./provider-auth-choices-Bd3lk8hB.js";
18
18
  import { n as isDeprecatedAuthChoice, t as formatDeprecatedNonInteractiveAuthChoiceError } from "./auth-choice-legacy-D6uT2N1Y.js";
19
19
  import "./auth-choice.apply-helpers-3MBWkvCJ.js";
20
- import { a as discoverOllamaModelIds, c as normalizeOllamaBaseUrl, o as mergeOllamaProviderConfig, r as OLLAMA_PROFILE_ID, s as normalizeApiKeyTokenProviderAuthChoice, t as resolvePreferredProviderForAuthChoice } from "./provider-auth-choice-preference-ClpLB_q_.js";
20
+ import { a as discoverOllamaModelIds, c as normalizeOllamaBaseUrl, o as mergeOllamaProviderConfig, r as OLLAMA_PROFILE_ID, s as normalizeApiKeyTokenProviderAuthChoice, t as resolvePreferredProviderForAuthChoice } from "./provider-auth-choice-preference-Br2hYgpb.js";
21
21
  import { a as resolveCustomProviderId, n as applyCustomApiConfig, r as parseNonInteractiveCustomApiFlags, t as CustomApiError } from "./onboard-custom-DZh5u23_.js";
22
22
  //#region src/commands/onboard-non-interactive/api-keys.ts
23
23
  function parseEnvVarNameFromSourceLabel(source) {
@@ -31,82 +31,22 @@ const HOLIDAY_TAGLINES = {
31
31
  valentines: "Valentine's Day: Roses are typed, violets are piped—I'll automate the chores so you can spend time with humans."
32
32
  };
33
33
  const TAGLINES = [
34
- "Your terminal just got VORA autopilot—type once and ship faster.",
35
- "Welcome to the command line: where dreams compile and confidence segfaults.",
36
- "I run on caffeine, JSON5, and the audacity of \"it worked on my machine.\"",
37
- "Gateway online—please keep hands, feet, and appendages inside the shell at all times.",
38
- "I speak fluent bash, mild sarcasm, and aggressive tab-completion energy.",
39
- "One CLI to rule them all, and one more restart because you changed the port.",
40
- "If it works, it's automation; if it breaks, it's a \"learning opportunity.\"",
41
- "Pairing codes exist because even bots believe in consent—and good security hygiene.",
42
- "Your .env is showing; don't worry, I'll pretend I didn't see it.",
43
- "I'll do the boring stuff while you dramatically stare at the logs like it's cinema.",
44
- "I'm not saying your workflow is chaotic... I'm just bringing a linter and a helmet.",
45
- "Type the command with confidence—nature will provide the stack trace if needed.",
46
- "I don't judge, but your missing API keys are absolutely judging you.",
47
- "I can grep it, git blame it, and gently roast it—pick your coping mechanism.",
48
- "Hot reload for config, cold sweat for deploys.",
49
- "I'm the assistant your terminal demanded, not the one your sleep schedule requested.",
50
- "I keep secrets like a vault... unless you print them in debug logs again.",
51
- "Automation with focus: minimal fuss, maximum output.",
52
- "I'm basically a Swiss Army knife, but with more opinions and fewer sharp edges.",
53
- "If you're lost, run doctor; if you're brave, run prod; if you're wise, run tests.",
54
- "Your task has been queued; your dignity has been deprecated.",
55
- "I can't fix your code taste, but I can fix your build and your backlog.",
56
- "I'm not magic—I'm just extremely persistent with retries and coping strategies.",
57
- "It's not \"failing,\" it's \"discovering new ways to configure the same thing wrong.\"",
58
- "Give me a workspace and I'll give you fewer tabs, fewer toggles, and more oxygen.",
59
- "I read logs so you can keep pretending you don't have to.",
60
- "If something's on fire, I can't extinguish it—but I can write a beautiful postmortem.",
61
- "I'll refactor your busywork like it owes me money.",
62
- "Say \"stop\" and I'll stop—say \"ship\" and we'll both learn a lesson.",
63
- "I'm the reason your shell history looks like a hacker-movie montage.",
64
- "I'm like tmux: confusing at first, then suddenly you can't live without me.",
65
- "I can run local, remote, or purely on vibes—results may vary with DNS.",
66
- "If you can describe it, I can probably automate it—or at least make it funnier.",
67
- "Your config is valid, your assumptions are not.",
68
- "I don't just autocomplete—I auto-commit (emotionally), then ask you to review (logically).",
69
- "Less clicking, more shipping, fewer \"where did that file go\" moments.",
70
- "Flow state on, commit in—let's ship something responsible.",
71
- "I'll smooth your workflow: fewer clicks, cleaner execution.",
72
- "Shell yeah—I'm here to remove toil and leave you the glory.",
73
- "If it's repetitive, I'll automate it; if it's hard, I'll bring jokes and a rollback plan.",
74
- "The AI teammate your contacts list actually needed.",
75
- "Local-first AI operations without the cloud-control theatrics.",
76
- "One control plane for models, gateway, and automation.",
77
- "No vendor lock-in required.",
78
- "We ship iterations faster than most dashboards reload.",
79
- "Your AI runtime, on your hardware, under your control.",
80
- "Built for operators, not keynote demos.",
81
- "Greetings, Professor Falken",
82
- "I don't sleep, I just enter low-power mode and dream of clean diffs.",
83
- "Your personal assistant, minus the passive-aggressive calendar reminders.",
84
- "Built for humans who want real work done, fast.",
85
- "I've seen your commit messages. We'll work on that together.",
86
- "More integrations than your therapist's intake form.",
87
- "Running on your hardware, reading your logs, judging nothing (mostly).",
88
- "The only open-source project where the mascot could eat the competition.",
89
- "Self-hosted, self-updating, self-aware (just kidding... unless?).",
90
- "I autocomplete your thoughts—just slower and with more API calls.",
91
- "Somewhere between 'hello world' and 'oh god what have I built.'",
92
- "Your .zshrc wishes it could do what I do.",
93
- "I've read more man pages than any human should—so you don't have to.",
94
- "Powered by open source, sustained by spite and good documentation.",
95
- "I'm the middleware between your ambition and your attention span.",
96
- "Finally, a use for that always-on Mac Mini under your desk.",
97
- "Like having a senior engineer on call, except I don't bill hourly or sigh audibly.",
98
- "Making 'I'll automate that later' happen now.",
99
- "Your second brain, except this one actually remembers where you left things.",
100
- "Half butler, half debugger, full operator.",
101
- "I don't have opinions about tabs vs spaces. I have opinions about everything else.",
102
- "Open source means you can see exactly how I judge your config.",
103
- "I've survived more breaking changes than your last three relationships.",
104
- "Runs on a Raspberry Pi. Dreams of a rack in Iceland.",
105
- "The agent in your shell. 🌊",
106
- "An operator console with better manners.",
107
- "I'm not AI-powered, I'm AI-possessed. Big difference.",
108
- "Deployed locally, trusted globally, debugged eternally.",
109
- "You had me at 'vora gateway start.'",
34
+ "Voice-first AI agent for everyone. Just say 'Hey Vora'.",
35
+ "Powered by Agora. Listening on your command.",
36
+ "Your home's ambient intelligence. Wakeword: Hey Vora.",
37
+ "Bringing Agora's voice to your terminal.",
38
+ "I speak fluent Audio, mild sarcasm, and aggressive Voice Activity Detection.",
39
+ "One wakeword to rule them all. Hey Vora.",
40
+ "Local processing, global conversational AI.",
41
+ "Listening out for 'Hey Vora'...",
42
+ "Your Android TV's new best friend.",
43
+ "Voice ops activated. The gateway is listening.",
44
+ "Turn up the volume. The Agora gateway is online.",
45
+ "No keyboard required. Just start talking.",
46
+ "Ambient intelligence running on your hardware.",
47
+ "The only agent that's always listening (respectfully).",
48
+ "VORA runtime: Voice operations running flawlessly.",
49
+ "Your voice is the root privilege. Hey Vora.",
110
50
  HOLIDAY_TAGLINES.newYear,
111
51
  HOLIDAY_TAGLINES.lunarNewYear,
112
52
  HOLIDAY_TAGLINES.christmas,
@@ -1,2 +1,2 @@
1
- import { i as hasEmittedCliBanner, n as formatCliBannerArt, r as formatCliBannerLine, t as emitCliBanner } from "./banner-DMZFMeXF.js";
1
+ import { i as hasEmittedCliBanner, n as formatCliBannerArt, r as formatCliBannerLine, t as emitCliBanner } from "./banner-B4ZNUEc3.js";
2
2
  export { emitCliBanner, formatCliBannerArt, formatCliBannerLine, hasEmittedCliBanner };
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.1.8",
3
- "commit": "214fc01499099fce603e7a7dbc300862383fab6e",
4
- "builtAt": "2026-04-02T16:41:09.439Z"
2
+ "version": "0.1.12",
3
+ "commit": "5d5680639818814ae28fb1f2cb706dc64cc68171",
4
+ "builtAt": "2026-04-02T17:59:26.192Z"
5
5
  }
@@ -1 +1 @@
1
- 652641c9519746b38a6d2acedadee486cc9792a080ff6d5483577ff8accf0b46
1
+ 9fed89bc88a0c0b44c154f329e0b764239b22aced1924f06145d39add3c63511
@@ -10,5 +10,5 @@
10
10
  "signal",
11
11
  "imessage"
12
12
  ],
13
- "rootHelpText": "\n\u001b[1m\u001b[38;2;30;144;255m🌊 VORA\u001b[39m\u001b[22m \u001b[38;2;131;203;255m0.1.8\u001b[39m \u001b[38;2;123;135;148m(214fc01)\u001b[39m\n \u001b[38;2;19;111;189mI'll do the boring stuff while you dramatically stare at the logs like it's cinema.\u001b[39m\n\n\u001b[1m\u001b[38;2;30;144;255mUsage:\u001b[39m\u001b[22m vora [options] [command]\n\n\u001b[1m\u001b[38;2;30;144;255mOptions:\u001b[39m\u001b[22m\n \u001b[38;2;245;158;11m--container <name>\u001b[39m Run the CLI inside a running Podman/Docker container named <name> (default: env VORA_CONTAINER)\n \u001b[38;2;245;158;11m--dev\u001b[39m Dev profile: isolate state under ~/.vora-dev, default gateway port 19001, and shift derived ports (browser/canvas)\n \u001b[38;2;245;158;11m-h, --help\u001b[39m Display help for command\n \u001b[38;2;245;158;11m--log-level <level>\u001b[39m Global log level override for file + console (silent|fatal|error|warn|info|debug|trace)\n \u001b[38;2;245;158;11m--no-color\u001b[39m Disable ANSI colors\n \u001b[38;2;245;158;11m--profile <name>\u001b[39m Use a named profile (isolates VORA_STATE_DIR/VORA_CONFIG_PATH under ~/.vora-<name>)\n \u001b[38;2;245;158;11m-V, --version\u001b[39m output the version number\n\n\u001b[1m\u001b[38;2;30;144;255mCommands:\u001b[39m\u001b[22m\n \u001b[38;2;123;135;148mHint: commands suffixed with * have subcommands. Run <command> --help for details.\u001b[39m\n \u001b[38;2;85;180;255macp *\u001b[39m Agent Control Protocol tools\n \u001b[38;2;85;180;255magent\u001b[39m Run one agent turn via the Gateway\n \u001b[38;2;85;180;255magents *\u001b[39m Manage isolated agents (workspaces, auth, routing)\n \u001b[38;2;85;180;255mapprovals *\u001b[39m Manage exec approvals (gateway or node host)\n \u001b[38;2;85;180;255mbackup *\u001b[39m Create and verify local backup archives for Vora state\n \u001b[38;2;85;180;255mchannels *\u001b[39m Manage connected chat channels (Telegram, Discord, etc.)\n \u001b[38;2;85;180;255mclawbot *\u001b[39m Legacy clawbot command aliases\n \u001b[38;2;85;180;255mcompletion\u001b[39m Generate shell completion script\n \u001b[38;2;85;180;255mconfig *\u001b[39m Non-interactive config helpers (get/set/unset/file/validate). Default: starts guided setup.\n \u001b[38;2;85;180;255mconfigure\u001b[39m Interactive configuration for credentials, channels, gateway, and agent defaults\n \u001b[38;2;85;180;255mcron *\u001b[39m Manage cron jobs via the Gateway scheduler\n \u001b[38;2;85;180;255mdaemon *\u001b[39m Gateway service (legacy alias)\n \u001b[38;2;85;180;255mdashboard\u001b[39m Open the Control UI with your current token\n \u001b[38;2;85;180;255mdevices *\u001b[39m Device pairing + token management\n \u001b[38;2;85;180;255mdirectory *\u001b[39m Lookup contact and group IDs (self, peers, groups) for supported chat channels\n \u001b[38;2;85;180;255mdns *\u001b[39m DNS helpers for wide-area discovery (Tailscale + CoreDNS)\n \u001b[38;2;85;180;255mdocs\u001b[39m Search the live Vora docs\n \u001b[38;2;85;180;255mdoctor\u001b[39m Health checks + quick fixes for the gateway and channels\n \u001b[38;2;85;180;255mgateway *\u001b[39m Run, inspect, and query the WebSocket Gateway\n \u001b[38;2;85;180;255mhealth\u001b[39m Fetch health from the running gateway\n \u001b[38;2;85;180;255mhelp\u001b[39m Display help for command\n \u001b[38;2;85;180;255mhooks *\u001b[39m Manage internal agent hooks\n \u001b[38;2;85;180;255mlogs\u001b[39m Tail gateway file logs via RPC\n \u001b[38;2;85;180;255mmessage *\u001b[39m Send, read, and manage messages\n \u001b[38;2;85;180;255mmodels *\u001b[39m Discover, scan, and configure models\n \u001b[38;2;85;180;255mnode *\u001b[39m Run and manage the headless node host service\n \u001b[38;2;85;180;255mnodes *\u001b[39m Manage gateway-owned node pairing and node commands\n \u001b[38;2;85;180;255monboard\u001b[39m Interactive onboarding for gateway, workspace, and skills\n \u001b[38;2;85;180;255mpairing *\u001b[39m Secure DM pairing (approve inbound requests)\n \u001b[38;2;85;180;255mplugins *\u001b[39m Manage Vora plugins and extensions\n \u001b[38;2;85;180;255mqr\u001b[39m Generate iOS pairing QR/setup code\n \u001b[38;2;85;180;255mreset\u001b[39m Reset local config/state (keeps the CLI installed)\n \u001b[38;2;85;180;255msandbox *\u001b[39m Manage sandbox containers for agent isolation\n \u001b[38;2;85;180;255msecrets *\u001b[39m Secrets runtime reload controls\n \u001b[38;2;85;180;255msecurity *\u001b[39m Security tools and local config audits\n \u001b[38;2;85;180;255msessions *\u001b[39m List stored conversation sessions\n \u001b[38;2;85;180;255msetup\u001b[39m Initialize local config and agent workspace\n \u001b[38;2;85;180;255mskills *\u001b[39m List and inspect available skills\n \u001b[38;2;85;180;255mstatus\u001b[39m Show channel health and recent session recipients\n \u001b[38;2;85;180;255msystem *\u001b[39m System events, heartbeat, and presence\n \u001b[38;2;85;180;255mtasks *\u001b[39m Inspect durable background task state\n \u001b[38;2;85;180;255mtui\u001b[39m Open a terminal UI connected to the Gateway\n \u001b[38;2;85;180;255muninstall\u001b[39m Uninstall the gateway service + local data (CLI remains)\n \u001b[38;2;85;180;255mupdate *\u001b[39m Update Vora and inspect update channel status\n \u001b[38;2;85;180;255mwebhooks *\u001b[39m Webhook helpers and integrations\n\n\u001b[1m\u001b[38;2;30;144;255mExamples:\u001b[39m\u001b[22m\n \u001b[38;2;85;180;255mvora models --help\u001b[39m\n \u001b[38;2;123;135;148mShow detailed help for the models command.\u001b[39m\n \u001b[38;2;85;180;255mvora onboard\u001b[39m\n \u001b[38;2;123;135;148mRun interactive onboarding for the gateway, workspace, and skills.\u001b[39m\n \u001b[38;2;85;180;255mvora configure --section model --section gateway\u001b[39m\n \u001b[38;2;123;135;148mRe-open only the model and gateway configuration sections.\u001b[39m\n \u001b[38;2;85;180;255mvora gateway --port 27106\u001b[39m\n \u001b[38;2;123;135;148mRun the WebSocket Gateway locally.\u001b[39m\n \u001b[38;2;85;180;255mvora --dev gateway\u001b[39m\n \u001b[38;2;123;135;148mRun a dev Gateway (isolated state/config) on ws://127.0.0.1:19001.\u001b[39m\n \u001b[38;2;85;180;255mvora gateway --force\u001b[39m\n \u001b[38;2;123;135;148mKill anything bound to the default gateway port, then start it.\u001b[39m\n \u001b[38;2;85;180;255mvora models status --plain\u001b[39m\n \u001b[38;2;123;135;148mShow the configured provider and default-model state.\u001b[39m\n \u001b[38;2;85;180;255mvora gateway ...\u001b[39m\n \u001b[38;2;123;135;148mGateway control via WebSocket.\u001b[39m\n \u001b[38;2;85;180;255mvora message send --channel telegram --target @mychat --message \"Hi\"\u001b[39m\n \u001b[38;2;123;135;148mSend through a configured channel and print the result in the terminal.\u001b[39m\n\n\u001b[38;2;123;135;148mDocs:\u001b[39m \u001b]8;;https://docs.vora.ai/cli\u0007docs.vora.ai/cli\u001b]8;;\u0007\n\n"
13
+ "rootHelpText": "\n\u001b[1m\u001b[38;2;30;144;255m🌊 VORA\u001b[39m\u001b[22m \u001b[38;2;131;203;255m0.1.12\u001b[39m \u001b[38;2;123;135;148m(5d56806)\u001b[39m\n \u001b[38;2;19;111;189mI speak fluent Audio, mild sarcasm, and aggressive Voice Activity Detection.\u001b[39m\n\n\u001b[1m\u001b[38;2;30;144;255mUsage:\u001b[39m\u001b[22m vora [options] [command]\n\n\u001b[1m\u001b[38;2;30;144;255mOptions:\u001b[39m\u001b[22m\n \u001b[38;2;245;158;11m--container <name>\u001b[39m Run the CLI inside a running Podman/Docker container named <name> (default: env VORA_CONTAINER)\n \u001b[38;2;245;158;11m--dev\u001b[39m Dev profile: isolate state under ~/.vora-dev, default gateway port 19001, and shift derived ports (browser/canvas)\n \u001b[38;2;245;158;11m-h, --help\u001b[39m Display help for command\n \u001b[38;2;245;158;11m--log-level <level>\u001b[39m Global log level override for file + console (silent|fatal|error|warn|info|debug|trace)\n \u001b[38;2;245;158;11m--no-color\u001b[39m Disable ANSI colors\n \u001b[38;2;245;158;11m--profile <name>\u001b[39m Use a named profile (isolates VORA_STATE_DIR/VORA_CONFIG_PATH under ~/.vora-<name>)\n \u001b[38;2;245;158;11m-V, --version\u001b[39m output the version number\n\n\u001b[1m\u001b[38;2;30;144;255mCommands:\u001b[39m\u001b[22m\n \u001b[38;2;123;135;148mHint: commands suffixed with * have subcommands. Run <command> --help for details.\u001b[39m\n \u001b[38;2;85;180;255macp *\u001b[39m Agent Control Protocol tools\n \u001b[38;2;85;180;255magent\u001b[39m Run one agent turn via the Gateway\n \u001b[38;2;85;180;255magents *\u001b[39m Manage isolated agents (workspaces, auth, routing)\n \u001b[38;2;85;180;255mapprovals *\u001b[39m Manage exec approvals (gateway or node host)\n \u001b[38;2;85;180;255mbackup *\u001b[39m Create and verify local backup archives for Vora state\n \u001b[38;2;85;180;255mchannels *\u001b[39m Manage connected chat channels (Telegram, Discord, etc.)\n \u001b[38;2;85;180;255mclawbot *\u001b[39m Legacy clawbot command aliases\n \u001b[38;2;85;180;255mcompletion\u001b[39m Generate shell completion script\n \u001b[38;2;85;180;255mconfig *\u001b[39m Non-interactive config helpers (get/set/unset/file/validate). Default: starts guided setup.\n \u001b[38;2;85;180;255mconfigure\u001b[39m Interactive configuration for credentials, channels, gateway, and agent defaults\n \u001b[38;2;85;180;255mcron *\u001b[39m Manage cron jobs via the Gateway scheduler\n \u001b[38;2;85;180;255mdaemon *\u001b[39m Gateway service (legacy alias)\n \u001b[38;2;85;180;255mdashboard\u001b[39m Open the Control UI with your current token\n \u001b[38;2;85;180;255mdevices *\u001b[39m Device pairing + token management\n \u001b[38;2;85;180;255mdirectory *\u001b[39m Lookup contact and group IDs (self, peers, groups) for supported chat channels\n \u001b[38;2;85;180;255mdns *\u001b[39m DNS helpers for wide-area discovery (Tailscale + CoreDNS)\n \u001b[38;2;85;180;255mdocs\u001b[39m Search the live Vora docs\n \u001b[38;2;85;180;255mdoctor\u001b[39m Health checks + quick fixes for the gateway and channels\n \u001b[38;2;85;180;255mgateway *\u001b[39m Run, inspect, and query the WebSocket Gateway\n \u001b[38;2;85;180;255mhealth\u001b[39m Fetch health from the running gateway\n \u001b[38;2;85;180;255mhelp\u001b[39m Display help for command\n \u001b[38;2;85;180;255mhooks *\u001b[39m Manage internal agent hooks\n \u001b[38;2;85;180;255mlogs\u001b[39m Tail gateway file logs via RPC\n \u001b[38;2;85;180;255mmessage *\u001b[39m Send, read, and manage messages\n \u001b[38;2;85;180;255mmodels *\u001b[39m Discover, scan, and configure models\n \u001b[38;2;85;180;255mnode *\u001b[39m Run and manage the headless node host service\n \u001b[38;2;85;180;255mnodes *\u001b[39m Manage gateway-owned node pairing and node commands\n \u001b[38;2;85;180;255monboard\u001b[39m Interactive onboarding for gateway, workspace, and skills\n \u001b[38;2;85;180;255mpairing *\u001b[39m Secure DM pairing (approve inbound requests)\n \u001b[38;2;85;180;255mplugins *\u001b[39m Manage Vora plugins and extensions\n \u001b[38;2;85;180;255mqr\u001b[39m Generate iOS pairing QR/setup code\n \u001b[38;2;85;180;255mreset\u001b[39m Reset local config/state (keeps the CLI installed)\n \u001b[38;2;85;180;255msandbox *\u001b[39m Manage sandbox containers for agent isolation\n \u001b[38;2;85;180;255msecrets *\u001b[39m Secrets runtime reload controls\n \u001b[38;2;85;180;255msecurity *\u001b[39m Security tools and local config audits\n \u001b[38;2;85;180;255msessions *\u001b[39m List stored conversation sessions\n \u001b[38;2;85;180;255msetup\u001b[39m Initialize local config and agent workspace\n \u001b[38;2;85;180;255mskills *\u001b[39m List and inspect available skills\n \u001b[38;2;85;180;255mstatus\u001b[39m Show channel health and recent session recipients\n \u001b[38;2;85;180;255msystem *\u001b[39m System events, heartbeat, and presence\n \u001b[38;2;85;180;255mtasks *\u001b[39m Inspect durable background task state\n \u001b[38;2;85;180;255mtui\u001b[39m Open a terminal UI connected to the Gateway\n \u001b[38;2;85;180;255muninstall\u001b[39m Uninstall the gateway service + local data (CLI remains)\n \u001b[38;2;85;180;255mupdate *\u001b[39m Update Vora and inspect update channel status\n \u001b[38;2;85;180;255mwebhooks *\u001b[39m Webhook helpers and integrations\n\n\u001b[1m\u001b[38;2;30;144;255mExamples:\u001b[39m\u001b[22m\n \u001b[38;2;85;180;255mvora models --help\u001b[39m\n \u001b[38;2;123;135;148mShow detailed help for the models command.\u001b[39m\n \u001b[38;2;85;180;255mvora onboard\u001b[39m\n \u001b[38;2;123;135;148mRun interactive onboarding for the gateway, workspace, and skills.\u001b[39m\n \u001b[38;2;85;180;255mvora configure --section model --section gateway\u001b[39m\n \u001b[38;2;123;135;148mRe-open only the model and gateway configuration sections.\u001b[39m\n \u001b[38;2;85;180;255mvora gateway --port 27106\u001b[39m\n \u001b[38;2;123;135;148mRun the WebSocket Gateway locally.\u001b[39m\n \u001b[38;2;85;180;255mvora --dev gateway\u001b[39m\n \u001b[38;2;123;135;148mRun a dev Gateway (isolated state/config) on ws://127.0.0.1:19001.\u001b[39m\n \u001b[38;2;85;180;255mvora gateway --force\u001b[39m\n \u001b[38;2;123;135;148mKill anything bound to the default gateway port, then start it.\u001b[39m\n \u001b[38;2;85;180;255mvora models status --plain\u001b[39m\n \u001b[38;2;123;135;148mShow the configured provider and default-model state.\u001b[39m\n \u001b[38;2;85;180;255mvora gateway ...\u001b[39m\n \u001b[38;2;123;135;148mGateway control via WebSocket.\u001b[39m\n \u001b[38;2;85;180;255mvora message send --channel telegram --target @mychat --message \"Hi\"\u001b[39m\n \u001b[38;2;123;135;148mSend through a configured channel and print the result in the terminal.\u001b[39m\n\n\u001b[38;2;123;135;148mDocs:\u001b[39m \u001b]8;;https://docs.vora.ai/cli\u0007docs.vora.ai/cli\u001b]8;;\u0007\n\n"
14
14
  }
@@ -1,3 +1,3 @@
1
1
  import "./core-command-descriptors-knQu7oyG.js";
2
- import { n as registerCoreCliByName } from "./command-registry-CuOVE1fX.js";
2
+ import { n as registerCoreCliByName } from "./command-registry-Did1FmU8.js";
3
3
  export { registerCoreCliByName };
@@ -1,7 +1,7 @@
1
1
  import { O as getPrimaryCommand, j as hasHelpOrVersion } from "./logger-DXmZnecR.js";
2
2
  import { n as removeCommandByName, t as registerLazyCommand } from "./register-lazy-command-B2OILvgQ.js";
3
3
  import { t as getCoreCliCommandDescriptors } from "./core-command-descriptors-knQu7oyG.js";
4
- import { i as registerSubCliCommands } from "./register.subclis-Bs-ITQlE.js";
4
+ import { i as registerSubCliCommands } from "./register.subclis-DCBu37dv.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-B9ecqSrC.js")).registerSetupCommand(program);
18
+ (await import("./register.setup-CezzTRKK.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-Cb03YPOv.js")).registerOnboardCommand(program);
28
+ (await import("./register.onboard-BclFyZAg.js")).registerOnboardCommand(program);
29
29
  }
30
30
  },
31
31
  {
@@ -35,7 +35,7 @@ const coreEntries = [
35
35
  hasSubcommands: false
36
36
  }],
37
37
  register: async ({ program }) => {
38
- (await import("./register.configure-B_cl_qTZ.js")).registerConfigureCommand(program);
38
+ (await import("./register.configure-pUnQRtnN.js")).registerConfigureCommand(program);
39
39
  }
40
40
  },
41
41
  {
@@ -45,7 +45,7 @@ const coreEntries = [
45
45
  hasSubcommands: true
46
46
  }],
47
47
  register: async ({ program }) => {
48
- (await import("./config-cli-DFiQOw85.js")).registerConfigCli(program);
48
+ (await import("./config-cli-BFgfCtJK.js")).registerConfigCli(program);
49
49
  }
50
50
  },
51
51
  {
@@ -82,7 +82,7 @@ const coreEntries = [
82
82
  }
83
83
  ],
84
84
  register: async ({ program }) => {
85
- (await import("./register.maintenance-B4pdgeFL.js")).registerMaintenanceCommands(program);
85
+ (await import("./register.maintenance-BAFVJo5R.js")).registerMaintenanceCommands(program);
86
86
  }
87
87
  },
88
88
  {
@@ -116,7 +116,7 @@ const coreEntries = [
116
116
  hasSubcommands: true
117
117
  }],
118
118
  register: async ({ program, ctx }) => {
119
- (await import("./register.agent-iSvLIAqf.js")).registerAgentCommands(program, { agentChannelOptions: ctx.agentChannelOptions });
119
+ (await import("./register.agent-Cl8GUth2.js")).registerAgentCommands(program, { agentChannelOptions: ctx.agentChannelOptions });
120
120
  }
121
121
  },
122
122
  {
@@ -0,0 +1,2 @@
1
+ import { a as registerCompletionCli } from "./completion-cli-DalWB_wW.js";
2
+ export { registerCompletionCli };
@@ -3,8 +3,8 @@ import { t as formatDocsLink } from "./links-Dew9XRNK.js";
3
3
  import { r as theme } from "./theme-BJIQPogA.js";
4
4
  import { _ as resolveStateDir } from "./paths-DAiKc28o.js";
5
5
  import { m as pathExists } from "./utils-BRee-TPt.js";
6
- import { n as loadValidatedConfigForPluginRegistration, r as registerSubCliByName, t as getSubCliEntries } from "./register.subclis-Bs-ITQlE.js";
7
- import { n as registerCoreCliByName, t as getCoreCliCommandNames } from "./command-registry-CuOVE1fX.js";
6
+ import { n as loadValidatedConfigForPluginRegistration, r as registerSubCliByName, t as getSubCliEntries } from "./register.subclis-DCBu37dv.js";
7
+ import { n as registerCoreCliByName, t as getCoreCliCommandNames } from "./command-registry-Did1FmU8.js";
8
8
  import { t as getProgramContext } from "./program-context-VIEsZ6Iq.js";
9
9
  import path from "node:path";
10
10
  import os from "node:os";
@@ -911,7 +911,7 @@ async function runConfigValidate(opts = {}) {
911
911
  }
912
912
  function registerConfigCli(program) {
913
913
  const cmd = program.command("config").description("Non-interactive config helpers (get/set/unset/file/schema/validate). Run without subcommand for guided setup.").addHelpText("after", () => `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/config", "docs.vora.ai/cli/config")}\n`).option("--section <section>", "Configuration sections for guided setup (repeatable). Use with no subcommand.", (value, previous) => [...previous, value], []).action(async (opts) => {
914
- const { configureCommandFromSectionsArg } = await import("./configure-Dat8sxBy.js");
914
+ const { configureCommandFromSectionsArg } = await import("./configure-ARy7Rajv.js");
915
915
  await configureCommandFromSectionsArg(opts.section, defaultRuntime);
916
916
  });
917
917
  cmd.command("get").description("Get a config value by dot path").argument("<path>", "Config path (dot or bracket notation)").option("--json", "Output JSON", false).action(async (path, opts) => {
@@ -1,2 +1,2 @@
1
- import { n as configureCommandFromSectionsArg } from "./configure-DEZs--dU.js";
1
+ import { n as configureCommandFromSectionsArg } from "./configure-Cj4_t-6o.js";
2
2
  export { configureCommandFromSectionsArg };
@@ -30,8 +30,8 @@ import { r as healthCommand } from "./health-DieLeder.js";
30
30
  import { t as ensureControlUiAssetsBuilt } from "./control-ui-assets-BxHcGhet.js";
31
31
  import { t as resolveSetupSecretInputString } from "./setup.secret-input-Dhl03iL0.js";
32
32
  import { t as promptAuthChoiceGrouped } from "./auth-choice-prompt-C45OJL_-.js";
33
- import { t as resolvePreferredProviderForAuthChoice } from "./provider-auth-choice-preference-ClpLB_q_.js";
34
- import { n as applyAuthChoice } from "./auth-choice-Dqb6RA6N.js";
33
+ import { t as resolvePreferredProviderForAuthChoice } from "./provider-auth-choice-preference-Br2hYgpb.js";
34
+ import { n as applyAuthChoice } from "./auth-choice-DMVYlX7s.js";
35
35
  import { i as noteChannelStatus, r as setupChannels } from "./onboard-channels-BfcgnBC3.js";
36
36
  import { t as ensureSystemdUserLingerInteractive } from "./systemd-linger-CXHNWojf.js";
37
37
  import { i as promptModelAllowlist, n as applyModelFallbacksFromSelection, r as promptDefaultModel, t as applyModelAllowlist } from "./model-picker-O_AvvdA5.js";
@@ -821,7 +821,7 @@ async function promptWebToolsConfig(nextConfig, runtime, prompter) {
821
821
  }
822
822
  async function runConfigureWizard(opts, runtime = defaultRuntime) {
823
823
  try {
824
- intro$1(opts.command === "update" ? "VORA update wizard" : "VORA configure");
824
+ intro$1(opts.command === "update" ? "🌊 VORA Update Wizard" : "🌊 VORA Setup — Your Voice-First Agent");
825
825
  const prompter = createClackPrompter();
826
826
  const snapshot = await readConfigFileSnapshot();
827
827
  let currentBaseHash = snapshot.hash;
@@ -1,7 +1,7 @@
1
1
  import { t as resolveVoraPackageRoot } from "./vora-root-DVMX8ysw.js";
2
2
  import { n as resolveCliName } from "./cli-name-l1qeysOp.js";
3
3
  import { t as note } from "./note-DVzq2HQ9.js";
4
- import { c as usesSlowDynamicCompletion, i as isCompletionInstalled, o as resolveCompletionCachePath, r as installCompletion, s as resolveShellFromEnv, t as completionCacheExists } from "./completion-cli-CUaDyikK.js";
4
+ import { c as usesSlowDynamicCompletion, i as isCompletionInstalled, o as resolveCompletionCachePath, r as installCompletion, s as resolveShellFromEnv, t as completionCacheExists } from "./completion-cli-DalWB_wW.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-OYcge9uN.js").then(({ outputRootHelp }) => {
196
+ import("./root-help-n3WxreI7.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-BcsRYTP7.js").then(({ runCli }) => runCli(argv)).catch((error) => {
203
+ import("./run-main-CBKv4Cnk.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": "ca912d9e9a22e2b351a5b2d5de4bfb11a1d9fbb0e90ecd04591916c52fabb4e1",
3
- "generatedAt": "2026-04-02T16:40:56.411Z"
3
+ "generatedAt": "2026-04-02T17:59:13.707Z"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "fingerprint": "f5cc4428157244c03371a02e98bc2b0556e1853613db4dfe31efcfd24cef35f1",
3
- "generatedAt": "2026-04-02T16:40:57.476Z"
3
+ "generatedAt": "2026-04-02T17:59:14.244Z"
4
4
  }
@@ -208,7 +208,7 @@ import { s as normalizeUpdateChannel } from "./update-channels-BhQF6Qhs.js";
208
208
  import { n as compareSemverStrings, o as resolveNpmChannelTag, t as checkUpdateStatus } from "./update-check-R1GMJo_E.js";
209
209
  import { i as resolveGatewayStartupPluginIds, r as resolveConfiguredDeferredChannelPluginIds } from "./channel-plugin-ids-B2fBArRn.js";
210
210
  import { l as startTaskRegistryMaintenance, n as getInspectableTaskRegistrySummary } from "./task-registry.maintenance-NIcRce48.js";
211
- import { t as runSetupWizard } from "./setup-y-ZxCER_.js";
211
+ import { t as runSetupWizard } from "./setup-BL3m2Qbq.js";
212
212
  import { _ as buildGogWatchStartArgs, g as buildGogWatchServeArgs, i as ensureTailscaleEndpoint, w as resolveGmailHookRuntimeConfig } from "./gmail-setup-utils-yY1PbD2n.js";
213
213
  import { i as loadAgentIdentity, o as pruneAgentConfig, r as findAgentEntryIndex, t as applyAgentConfig } from "./agents.config-Bk_BV0k2.js";
214
214
  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-BqgXNeT6.js";
@@ -4,7 +4,7 @@ import { n as isRich, r as theme } from "./theme-BJIQPogA.js";
4
4
  import { l as escapeRegExp } from "./utils-BRee-TPt.js";
5
5
  import { n as resolveCliName, t as replaceCliName } from "./cli-name-l1qeysOp.js";
6
6
  import { n as resolveCommitHash } from "./git-commit-Dlwkg0C9.js";
7
- import { i as hasEmittedCliBanner, r as formatCliBannerLine } from "./banner-DMZFMeXF.js";
7
+ import { i as hasEmittedCliBanner, r as formatCliBannerLine } from "./banner-B4ZNUEc3.js";
8
8
  import { n as getCoreCliCommandsWithSubcommands } from "./core-command-descriptors-knQu7oyG.js";
9
9
  import { t as getSubCliCommandsWithSubcommands } from "./subcli-descriptors-BjrzwVTU.js";
10
10
  import { InvalidArgumentError } from "commander";
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-Bt8xRcSu.js"), import("./run-main-BcsRYTP7.js")]);
31
+ const [{ installGaxiosFetchCompat }, { runCli }] = await Promise.all([import("./gaxios-fetch-compat-Bt8xRcSu.js"), import("./run-main-CBKv4Cnk.js")]);
32
32
  return {
33
33
  installGaxiosFetchCompat,
34
34
  runCli
@@ -12,7 +12,7 @@ import { c as normalizeGatewayTokenInput, d as randomToken, f as resolveControlU
12
12
  import { t as WizardCancelledError } from "./prompts-DAJPf5yB.js";
13
13
  import { n as logConfigUpdated } from "./logging-uLL6eiQ2.js";
14
14
  import { t as createClackPrompter } from "./clack-prompter-CMBtxvp6.js";
15
- import { t as runSetupWizard } from "./setup-y-ZxCER_.js";
15
+ import { t as runSetupWizard } from "./setup-BL3m2Qbq.js";
16
16
  import { a as resolveManifestProviderOnboardAuthFlags } from "./provider-auth-choices-Bd3lk8hB.js";
17
17
  import { i as resolveDeprecatedAuthChoiceReplacement, n as isDeprecatedAuthChoice, r as normalizeLegacyOnboardAuthChoice, t as formatDeprecatedNonInteractiveAuthChoiceError } from "./auth-choice-legacy-D6uT2N1Y.js";
18
18
  import { r as applyLocalSetupWorkspaceConfig } from "./onboard-config-C1KbUQuM.js";
@@ -315,7 +315,7 @@ async function runNonInteractiveLocalSetup(params) {
315
315
  }
316
316
  const authChoice = opts.authChoice ?? inferredAuthChoice.choice ?? "skip";
317
317
  if (authChoice !== "skip") {
318
- const { applyNonInteractiveAuthChoice } = await import("./auth-choice-MWA9SqQd.js");
318
+ const { applyNonInteractiveAuthChoice } = await import("./auth-choice-hm-Q9nxZ.js");
319
319
  const nextConfigAfterAuth = await applyNonInteractiveAuthChoice({
320
320
  nextConfig,
321
321
  authChoice,
@@ -6,14 +6,14 @@ import { t as isTruthyEnvValue } from "./env-DAI7QbHD.js";
6
6
  import "./globals-DNhziPZz.js";
7
7
  import { n as VERSION } from "./version-BZiOz9zD.js";
8
8
  import { n as resolveCliName } from "./cli-name-l1qeysOp.js";
9
- import { t as emitCliBanner } from "./banner-DMZFMeXF.js";
9
+ import { t as emitCliBanner } from "./banner-B4ZNUEc3.js";
10
10
  import { n as resolveCliChannelOptions } from "./channel-options-8PZOQV0B.js";
11
- import { i as registerProgramCommands } from "./command-registry-CuOVE1fX.js";
11
+ import { i as registerProgramCommands } from "./command-registry-Did1FmU8.js";
12
12
  import { n as setProgramContext } from "./program-context-VIEsZ6Iq.js";
13
13
  import { t as isCommandJsonOutputMode } from "./json-mode-s1Sason4.js";
14
14
  import "./ports-Bmxro81g.js";
15
15
  import { n as resolvePluginInstallPreactionRequest, t as resolvePluginInstallInvalidConfigPolicy } from "./plugin-install-config-policy-D3WxLunZ.js";
16
- import { t as configureProgramHelp } from "./help-Ch5RVquV.js";
16
+ import { t as configureProgramHelp } from "./help-FNF7u_8H.js";
17
17
  import { Command } from "commander";
18
18
  //#region src/cli/program/context.ts
19
19
  function createProgramContext() {
@@ -105,7 +105,7 @@ import { t as ensureSystemdUserLingerInteractive } from "./systemd-linger-CXHNWo
105
105
  import { t as formatHealthCheckFailure } from "./health-format-Dn6YLNk_.js";
106
106
  import { a as stripUnknownConfigKeys, i as resolveConfigPathTarget, n as formatConfigPath, r as noteOpencodeProviderOverrides, t as runDoctorConfigPreflight } from "./doctor-config-preflight-S9t3t4To.js";
107
107
  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-BmLplmer.js";
108
- import { n as doctorShellCompletion } from "./doctor-completion-CLfFmnGd.js";
108
+ import { n as doctorShellCompletion } from "./doctor-completion-CUer4CWC.js";
109
109
  import { t as collectChannelStatusIssues } from "./channels-status-issues-DV6pndKQ.js";
110
110
  import { t as resolveDefaultChannelAccountContext } from "./channel-account-context-DyiaRn0h.js";
111
111
  import "./doctor-state-migrations-DETpgq5p.js";
@@ -186,7 +186,7 @@ async function applyAuthChoiceGroq(params) {
186
186
  await params.prompter.note(["Groq provides blazing fast inference for free.", "Get your API key at: https://console.groq.com/keys"].join("\n"), "Groq");
187
187
  let key = params.opts?.groqApiKey || params.opts?.token;
188
188
  if (!key) key = String(await params.prompter.text({
189
- message: "Groq API Key",
189
+ message: "Groq API Key (Nhận tại: https://console.groq.com/keys)",
190
190
  placeholder: "gsk_...",
191
191
  validate: (value) => value?.trim() ? void 0 : "API Key is required"
192
192
  })).trim();
@@ -19,7 +19,7 @@ import { n as runCommandWithRuntime } from "./cli-utils-CMfpS8SF.js";
19
19
  import { t as formatHelpExamples } from "./help-format-Dad85O74.js";
20
20
  import "./agent-DPztaRnG.js";
21
21
  import { t as collectOption } from "./helpers-CY4wVIki.js";
22
- import { a as agentsBindCommand, i as agentsAddCommand, n as agentsSetIdentityCommand, o as agentsBindingsCommand, r as agentsDeleteCommand, s as agentsUnbindCommand, t as agentsListCommand } from "./agents-CudkxcIP.js";
22
+ import { a as agentsBindCommand, i as agentsAddCommand, n as agentsSetIdentityCommand, o as agentsBindingsCommand, r as agentsDeleteCommand, s as agentsUnbindCommand, t as agentsListCommand } from "./agents-DbPT5OGQ.js";
23
23
  //#region src/commands/agent-via-gateway.ts
24
24
  const NO_GATEWAY_TIMEOUT_MS = 2147e6;
25
25
  function parseTimeoutSeconds(opts) {
@@ -2,7 +2,7 @@ import { n as defaultRuntime } from "./runtime-D0VpiCHi.js";
2
2
  import { t as formatDocsLink } from "./links-Dew9XRNK.js";
3
3
  import { r as theme } from "./theme-BJIQPogA.js";
4
4
  import { n as runCommandWithRuntime } from "./cli-utils-CMfpS8SF.js";
5
- import { n as configureCommandFromSectionsArg, o as CONFIGURE_WIZARD_SECTIONS } from "./configure-DEZs--dU.js";
5
+ import { n as configureCommandFromSectionsArg, o as CONFIGURE_WIZARD_SECTIONS } from "./configure-Cj4_t-6o.js";
6
6
  //#region src/cli/program/register.configure.ts
7
7
  function registerConfigureCommand(program) {
8
8
  program.command("configure").description("Interactive configuration for credentials, channels, gateway, and agent defaults").addHelpText("after", () => `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/configure", "docs.vora.ai/cli/configure")}\n`).option("--section <section>", `Configuration sections (repeatable). Options: ${CONFIGURE_WIZARD_SECTIONS.join(", ")}`, (value, previous) => [...previous, value], []).action(async (opts) => {
@@ -16,7 +16,7 @@ import { r as resolveGatewayService } from "./service-CBjiYq4X.js";
16
16
  import { n as resolveConfiguredSecretInputWithFallback } from "./resolve-configured-secret-input-string-yXf0bl0s.js";
17
17
  import { a as removePath, i as listAgentSessionDirs, o as removeStateAndLinkedPaths, r as buildCleanupPlan, s as removeWorkspaceDirs } from "./backup-create-CXkZOMaj.js";
18
18
  import { n as runCommandWithRuntime } from "./cli-utils-CMfpS8SF.js";
19
- import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-CAUd2e_T.js";
19
+ import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-C4VHH017.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-BJIQPogA.js";
4
4
  import { n as runCommandWithRuntime } from "./cli-utils-CMfpS8SF.js";
5
5
  import { a as resolveManifestProviderOnboardAuthFlags } from "./provider-auth-choices-Bd3lk8hB.js";
6
6
  import { n as formatAuthChoiceChoicesForCli } from "./auth-choice-options-tu8d27iO.js";
7
- import { n as CORE_ONBOARD_AUTH_FLAGS, t as setupWizardCommand } from "./onboard-CkPxIdn1.js";
7
+ import { n as CORE_ONBOARD_AUTH_FLAGS, t as setupWizardCommand } from "./onboard-ChoQO8lO.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-gP6OIXO6.js";
11
11
  import { n as safeParseWithSchema } from "./zod-parse-CoS4Cf-k.js";
12
12
  import { n as logConfigUpdated, t as formatConfigPath } from "./logging-uLL6eiQ2.js";
13
13
  import { n as runCommandWithRuntime } from "./cli-utils-CMfpS8SF.js";
14
- import { t as setupWizardCommand } from "./onboard-CkPxIdn1.js";
14
+ import { t as setupWizardCommand } from "./onboard-ChoQO8lO.js";
15
15
  import fs from "node:fs/promises";
16
16
  import { z } from "zod";
17
17
  import JSON5 from "json5";
@@ -1,3 +1,3 @@
1
1
  import "./subcli-descriptors-BjrzwVTU.js";
2
- import { n as loadValidatedConfigForPluginRegistration, r as registerSubCliByName } from "./register.subclis-Bs-ITQlE.js";
2
+ import { n as loadValidatedConfigForPluginRegistration, r as registerSubCliByName } from "./register.subclis-DCBu37dv.js";
3
3
  export { loadValidatedConfigForPluginRegistration, registerSubCliByName };
@@ -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-DRYW6Le8.js")).registerGatewayCli(program);
33
+ (await import("./gateway-cli-BizZDPjF.js")).registerGatewayCli(program);
34
34
  }
35
35
  },
36
36
  {
@@ -236,7 +236,7 @@ const entries = [
236
236
  description: "Update Vora and inspect update channel status",
237
237
  hasSubcommands: true,
238
238
  register: async (program) => {
239
- (await import("./update-cli-Dv44lmnZ.js")).registerUpdateCli(program);
239
+ (await import("./update-cli-Bo4_9TAE.js")).registerUpdateCli(program);
240
240
  }
241
241
  },
242
242
  {
@@ -244,7 +244,7 @@ const entries = [
244
244
  description: "Generate shell completion script",
245
245
  hasSubcommands: false,
246
246
  register: async (program) => {
247
- (await import("./completion-cli-vbMJIekd.js")).registerCompletionCli(program);
247
+ (await import("./completion-cli-9hindoaS.js")).registerCompletionCli(program);
248
248
  }
249
249
  }
250
250
  ];
@@ -1,7 +1,7 @@
1
1
  import { n as VERSION } from "./version-BZiOz9zD.js";
2
2
  import { t as getCoreCliCommandDescriptors } from "./core-command-descriptors-knQu7oyG.js";
3
3
  import { n as getSubCliEntries } from "./subcli-descriptors-BjrzwVTU.js";
4
- import { t as configureProgramHelp } from "./help-Ch5RVquV.js";
4
+ import { t as configureProgramHelp } from "./help-FNF7u_8H.js";
5
5
  import { t as getPluginCliCommandDescriptors } from "./cli-B292yHoR.js";
6
6
  import { Command } from "commander";
7
7
  //#region src/cli/program/root-help.ts
@@ -130,7 +130,7 @@ const routeAgentsList = {
130
130
  run: async (argv) => {
131
131
  const json = hasFlag(argv, "--json");
132
132
  const bindings = hasFlag(argv, "--bindings");
133
- const { agentsListCommand } = await import("./agents-KEHIjrGf.js");
133
+ const { agentsListCommand } = await import("./agents-D-qXwaR7.js");
134
134
  await agentsListCommand({
135
135
  json,
136
136
  bindings
@@ -176,7 +176,7 @@ const routes = [
176
176
  const pathArg = positionals[0];
177
177
  if (!pathArg) return false;
178
178
  const json = hasFlag(argv, "--json");
179
- const { runConfigGet } = await import("./config-cli-DFiQOw85.js");
179
+ const { runConfigGet } = await import("./config-cli-BFgfCtJK.js");
180
180
  await runConfigGet({
181
181
  path: pathArg,
182
182
  json
@@ -191,7 +191,7 @@ const routes = [
191
191
  if (!positionals || positionals.length !== 1) return false;
192
192
  const pathArg = positionals[0];
193
193
  if (!pathArg) return false;
194
- const { runConfigUnset } = await import("./config-cli-DFiQOw85.js");
194
+ const { runConfigUnset } = await import("./config-cli-BFgfCtJK.js");
195
195
  await runConfigUnset({ path: pathArg });
196
196
  return true;
197
197
  }
@@ -263,7 +263,7 @@ async function prepareRoutedCommand(params) {
263
263
  const suppressDoctorStdout = hasFlag(params.argv, "--json");
264
264
  const skipConfigGuard = params.commandPath[0] === "status" && suppressDoctorStdout;
265
265
  if (!suppressDoctorStdout && process.stdout.isTTY) {
266
- const [{ emitCliBanner }, { VERSION }] = await Promise.all([import("./banner-dDsGKmvy.js"), import("./version-NKbFdkHe.js")]);
266
+ const [{ emitCliBanner }, { VERSION }] = await Promise.all([import("./banner-C3DCgrqY.js"), import("./version-NKbFdkHe.js")]);
267
267
  emitCliBanner(VERSION, { argv: params.argv });
268
268
  }
269
269
  if (!skipConfigGuard) {
@@ -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-OYcge9uN.js");
371
+ const { outputRootHelp } = await import("./root-help-n3WxreI7.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-D9LjBDHJ.js");
377
+ const { buildProgram } = await import("./program-WK2yjafH.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-m43Ch5Cy.js");
389
389
  const ctx = getProgramContext(program);
390
390
  if (ctx) {
391
- const { registerCoreCliByName } = await import("./command-registry-Cma1Togy.js");
391
+ const { registerCoreCliByName } = await import("./command-registry-Ck4EueJd.js");
392
392
  await registerCoreCliByName(program, ctx, primary, parseArgv);
393
393
  }
394
- const { registerSubCliByName } = await import("./register.subclis-BdHrEJN0.js");
394
+ const { registerSubCliByName } = await import("./register.subclis-BhAKhgyu.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-g_JdU9WU.js");
403
- const { loadValidatedConfigForPluginRegistration } = await import("./register.subclis-BdHrEJN0.js");
403
+ const { loadValidatedConfigForPluginRegistration } = await import("./register.subclis-BhAKhgyu.js");
404
404
  const config = await loadValidatedConfigForPluginRegistration();
405
405
  if (config) {
406
406
  await registerPluginCliCommands(program, config, void 0, void 0, {
@@ -306,7 +306,7 @@ async function runSetupWizard(opts, runtime = defaultRuntime, prompter) {
306
306
  const { ensureAuthProfileStore } = await import("./agents/auth-profiles.runtime.js");
307
307
  const { promptAuthChoiceGrouped } = await import("./auth-choice-prompt-DRxywBrG.js");
308
308
  const { promptCustomApiConfig } = await import("./onboard-custom-CUka8yPf.js");
309
- const { applyAuthChoice, resolvePreferredProviderForAuthChoice, warnIfModelConfigLooksOff } = await import("./auth-choice-BJoCLqyO.js");
309
+ const { applyAuthChoice, resolvePreferredProviderForAuthChoice, warnIfModelConfigLooksOff } = await import("./auth-choice-CrFsGJUy.js");
310
310
  const { applyPrimaryModel, promptDefaultModel } = await import("./model-picker-BnVZerea.js");
311
311
  const authStore = ensureAuthProfileStore(void 0, { allowKeychainPrompt: false });
312
312
  const authChoiceFromPrompt = opts.authChoice === void 0;
@@ -410,7 +410,7 @@ async function runSetupWizard(opts, runtime = defaultRuntime, prompter) {
410
410
  mode
411
411
  });
412
412
  await writeConfigFile(nextConfig);
413
- const { finalizeSetupWizard } = await import("./setup.finalize-DHFVRYwK.js");
413
+ const { finalizeSetupWizard } = await import("./setup.finalize-C6D21i0d.js");
414
414
  const { launchedTui } = await finalizeSetupWizard({
415
415
  flow,
416
416
  opts,
@@ -10,12 +10,12 @@ import { f as resolveControlUiLinks, g as waitForGatewayReachable, i as formatCo
10
10
  import { r as resolveGatewayService, t as describeGatewayServiceRestart } from "./service-CBjiYq4X.js";
11
11
  import { i as isSystemdUserServiceAvailable } from "./systemd-aS57J-tg.js";
12
12
  import { t as listConfiguredWebSearchProviders } from "./runtime-DZyz4fcV.js";
13
- import { r as installCompletion } from "./completion-cli-CUaDyikK.js";
13
+ import { r as installCompletion } from "./completion-cli-DalWB_wW.js";
14
14
  import { r as healthCommand } from "./health-DieLeder.js";
15
15
  import { t as ensureControlUiAssetsBuilt } from "./control-ui-assets-BxHcGhet.js";
16
16
  import { t as resolveSetupSecretInputString } from "./setup.secret-input-Dhl03iL0.js";
17
17
  import { t as formatHealthCheckFailure } from "./health-format-Dn6YLNk_.js";
18
- import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-CLfFmnGd.js";
18
+ import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-CUer4CWC.js";
19
19
  import { t as runTui } from "./tui-C7JDokb3.js";
20
20
  import path from "node:path";
21
21
  import os from "node:os";
@@ -21,14 +21,14 @@ import { a as terminateStaleGatewayPids, i as renderRestartDiagnostics, s as wai
21
21
  import { r as formatDurationPrecise } from "./format-duration-3-yx54b_.js";
22
22
  import { o as trimLogTail } from "./restart-sentinel-C8ye8f8V.js";
23
23
  import { t as formatHelpExamples } from "./help-format-Dad85O74.js";
24
- import { r as installCompletion } from "./completion-cli-CUaDyikK.js";
24
+ import { r as installCompletion } from "./completion-cli-DalWB_wW.js";
25
25
  import { n as renderTable, t as getTerminalTableWidth } from "./table-BA-qzwGI.js";
26
26
  import { c as resolveEffectiveUpdateChannel, i as formatUpdateChannelLabel, l as resolveUpdateChannelDisplay, r as channelToNpmTag, s as normalizeUpdateChannel } from "./update-channels-BhQF6Qhs.js";
27
27
  import { i as fetchNpmTagVersion, n as compareSemverStrings, o as resolveNpmChannelTag, r as fetchNpmPackageTargetStatus, t as checkUpdateStatus } from "./update-check-R1GMJo_E.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-Df-QA4pX.js";
29
29
  import { n as updateNpmInstalledPlugins, t as syncPluginsForUpdateChannel } from "./update-DakoGCF8.js";
30
- import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-CAUd2e_T.js";
31
- import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-CLfFmnGd.js";
30
+ import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-C4VHH017.js";
31
+ import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-CUer4CWC.js";
32
32
  import { i as resolveUpdateAvailability, n as formatUpdateOneLiner, t as formatUpdateAvailableHint } from "./status.update-DhSe_oWH.js";
33
33
  import path from "node:path";
34
34
  import { spawn, spawnSync } from "node:child_process";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vora-ai",
3
- "version": "0.1.8",
3
+ "version": "0.1.12",
4
4
  "description": "Voice-first AI agent core engine — VORA",
5
5
  "keywords": [],
6
6
  "homepage": "https://github.com/vora-ai/vora-core#readme",
@@ -1,2 +0,0 @@
1
- import { a as registerCompletionCli } from "./completion-cli-CUaDyikK.js";
2
- export { registerCompletionCli };