volute 0.47.0 → 0.48.0

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 (128) hide show
  1. package/README.md +11 -11
  2. package/dist/{accept-YAFP5JFJ.js → accept-KYNC5X3U.js} +3 -3
  3. package/dist/{ai-service-CVZEYKTK.js → ai-service-643TNFPH.js} +6 -2
  4. package/dist/{avatar-image-7S3WA77A.js → avatar-image-Y45R7LW5.js} +3 -2
  5. package/dist/{backup-IIAFOW2L.js → backup-UDH4GMSW.js} +11 -11
  6. package/dist/{bridge-TIZGSXOD.js → bridge-3FNSWLNQ.js} +3 -3
  7. package/dist/{channels-ITE4YC57.js → channels-SGQZHNQJ.js} +3 -3
  8. package/dist/{chat-AJLJCQ3M.js → chat-X43VYHH2.js} +9 -9
  9. package/dist/chunk-4FCL4DVZ.js +48 -0
  10. package/dist/{chunk-SKNXMUIU.js → chunk-5KXCM5AW.js} +17 -1
  11. package/dist/{chunk-RBNMDAKB.js → chunk-BCG45AQB.js} +15 -1
  12. package/dist/chunk-DW4TRDOZ.js +29 -0
  13. package/dist/{chunk-CBOIHNMR.js → chunk-FJ2MZ5PH.js} +39 -3
  14. package/dist/{chunk-M6TTZRGH.js → chunk-HNGFKPNS.js} +20 -4
  15. package/dist/{chunk-IWJSNMSY.js → chunk-HUNDXZBZ.js} +2 -2
  16. package/dist/chunk-IYCV34IU.js +158 -0
  17. package/dist/{chunk-5IERLDUS.js → chunk-MJRXFUMS.js} +25 -5
  18. package/dist/{chunk-JCMGDCGX.js → chunk-MOERAQXH.js} +2 -0
  19. package/dist/{chunk-XHN6XBWV.js → chunk-OQJMTHEH.js} +1 -1
  20. package/dist/{chunk-BGYHLR54.js → chunk-PJVPDY2Z.js} +1 -1
  21. package/dist/{chunk-5NN2VHJV.js → chunk-Q7HOAVFR.js} +1 -1
  22. package/dist/{chunk-KDLYIECM.js → chunk-R772ET2M.js} +18 -4
  23. package/dist/{mind-list-KEGRGQEQ.js → chunk-SHKM5RGD.js} +19 -6
  24. package/dist/{chunk-4I72V3E5.js → chunk-T4VS7UDW.js} +11 -11
  25. package/dist/{chunk-K23P5Q5N.js → chunk-USD45JKR.js} +27 -5
  26. package/dist/{chunk-F55GRIEK.js → chunk-VB2QXUJQ.js} +176 -201
  27. package/dist/{chunk-M3XDVS5Q.js → chunk-VZRA5TYO.js} +1 -1
  28. package/dist/{chunk-JSVHH32K.js → chunk-WARH6GIV.js} +10 -10
  29. package/dist/{chunk-PFZBNKUH.js → chunk-WCFSBH33.js} +0 -1
  30. package/dist/{chunk-VMCZBXF2.js → chunk-WQ46E33M.js} +8 -32
  31. package/dist/{chunk-RUFLGTOT.js → chunk-XVBSFLM7.js} +1 -1
  32. package/dist/{chunk-LWDTP6DH.js → chunk-YNBXEQAP.js} +31 -1
  33. package/dist/cli.js +33 -25
  34. package/dist/{clock-E6N5Y3YW.js → clock-CNRF6F7T.js} +3 -3
  35. package/dist/{cloud-sync-LQTVDTQ3.js → cloud-sync-WHKCB4CD.js} +14 -12
  36. package/dist/{config-TJLYUV3U.js → config-RPSLA2HX.js} +3 -3
  37. package/dist/{create-PQQXKTJK.js → create-GJKHABJB.js} +16 -5
  38. package/dist/{create-A7PDHIIL.js → create-VIQVP3QB.js} +3 -3
  39. package/dist/{daemon-client-IYR4KCPU.js → daemon-client-ZFY5MOAL.js} +5 -3
  40. package/dist/{daemon-restart-5F3YTLZK.js → daemon-restart-7KUHVZIN.js} +4 -4
  41. package/dist/daemon.js +668 -401
  42. package/dist/{db-LZTLA7XC.js → db-IPXRJUI7.js} +1 -1
  43. package/dist/{delete-HPLC7ETU.js → delete-ESEP7NGQ.js} +1 -1
  44. package/dist/{delivery-manager-TN5KK2AP.js → delivery-manager-HZTT5SJR.js} +14 -12
  45. package/dist/{down-ZI4S6265.js → down-G6IADJXV.js} +2 -2
  46. package/dist/{echo-text-SEQCLGAT.js → echo-text-H3SH337Q.js} +16 -14
  47. package/dist/env-6TGPO5WG.js +18 -0
  48. package/dist/{env-HRL2PWAT.js → env-C7Z55QCJ.js} +7 -7
  49. package/dist/{export-4GVGNW54.js → export-C2K3NIRD.js} +1 -1
  50. package/dist/{extension-QBY4C44L.js → extension-J4ZQ2GHV.js} +3 -3
  51. package/dist/{extensions-PIMIQ7J3.js → extensions-GEKF47A4.js} +14 -12
  52. package/dist/{files-FEFZKMNM.js → files-LXQSQOFG.js} +3 -3
  53. package/dist/{import-7MO3YTRE.js → import-SX3ZXHB4.js} +4 -4
  54. package/dist/{join-ZJV7W6MO.js → join-34TR2GXQ.js} +1 -1
  55. package/dist/{list-LQO2DCIK.js → list-PMUXZNAM.js} +3 -3
  56. package/dist/{login-6TLMI2TQ.js → login-ARRZ4ORJ.js} +3 -3
  57. package/dist/{login-OF4WXDAN.js → login-CL4IT2ED.js} +12 -3
  58. package/dist/{logout-ERE2BGA3.js → logout-HZYJCYCA.js} +3 -3
  59. package/dist/{logout-BK53HXNY.js → logout-YZRMZ3O2.js} +3 -3
  60. package/dist/{message-delivery-ZE3YGJDD.js → message-delivery-GPQ5SE5N.js} +14 -12
  61. package/dist/{mind-POOHFZHP.js → mind-46AOK373.js} +23 -19
  62. package/dist/mind-contacts-GV7XYL5D.js +64 -0
  63. package/dist/{mind-history-47DN6ILW.js → mind-history-TTGA5BHZ.js} +7 -7
  64. package/dist/mind-list-OTHV4ZO4.js +13 -0
  65. package/dist/{mind-profile-PEQYASQX.js → mind-profile-LUG353ZT.js} +1 -1
  66. package/dist/{mind-service-JFY7UG5E.js → mind-service-2ARGJNKP.js} +16 -12
  67. package/dist/{mind-sleep-IN3WPA76.js → mind-sleep-DV7KP255.js} +5 -5
  68. package/dist/{mind-status-SMUWJKGV.js → mind-status-BJNPGXKC.js} +8 -3
  69. package/dist/{mind-wake-R54BPESY.js → mind-wake-LVTZ55EZ.js} +3 -3
  70. package/dist/notices-2KU5NTRY.js +25 -0
  71. package/dist/{package-WPEE2HVJ.js → package-RTN2PS7O.js} +4 -2
  72. package/dist/{read-PWAJOQIQ.js → read-YSWUXYL7.js} +3 -3
  73. package/dist/{register-7SZJFHU6.js → register-42VBJKTP.js} +3 -3
  74. package/dist/{reject-6VH7N2A4.js → reject-SXGCYN4A.js} +3 -3
  75. package/dist/{restart-H5WJDMA7.js → restart-YYEGZJDD.js} +7 -7
  76. package/dist/{sandbox-G4X4K3UN.js → sandbox-5VQ454XP.js} +2 -2
  77. package/dist/{scheduler-HQSDYJFY.js → scheduler-I7JZCT47.js} +14 -12
  78. package/dist/{seed-VANPU43L.js → seed-F2HXZQU4.js} +1 -1
  79. package/dist/{seed-check-VLTVILOV.js → seed-check-TYD7RRZY.js} +1 -1
  80. package/dist/{seed-cmd-SYVDZKM4.js → seed-cmd-MLCTGSX5.js} +3 -3
  81. package/dist/{seed-create-3FGZPS6C.js → seed-create-KQ7OILWB.js} +6 -4
  82. package/dist/seed-readiness-RBPGOLSZ.js +18 -0
  83. package/dist/{seed-sprout-H7QLFPFM.js → seed-sprout-HVYCFJLA.js} +29 -30
  84. package/dist/{send-HYDFGC6G.js → send-TD2X5U3K.js} +7 -7
  85. package/dist/{service-SYJ5G6LP.js → service-CVZMQYK6.js} +1 -1
  86. package/dist/{service-install-FQ43Z4DF.js → service-install-VCRMFWX5.js} +2 -2
  87. package/dist/{setup-KFYVWTXG.js → setup-5ECWTYKG.js} +5 -1
  88. package/dist/{setup-QJHGMGSN.js → setup-AE4CVUC4.js} +4 -4
  89. package/dist/{skill-GUKG2YVH.js → skill-UUM4JZRF.js} +7 -7
  90. package/dist/skills/dreaming/SKILL.md +5 -1
  91. package/dist/skills/dreaming/scripts/dream.ts +5 -1
  92. package/dist/skills/orientation/SKILL.md +8 -7
  93. package/dist/skills/tending/SKILL.md +51 -2
  94. package/dist/skills/volute-mind/SKILL.md +2 -0
  95. package/dist/{skills-L2CMTW7A.js → skills-B3SVDCEB.js} +2 -2
  96. package/dist/{sleep-manager-3NA7ZJP3.js → sleep-manager-Z27R3WTW.js} +14 -12
  97. package/dist/{spirit-WXN4IDBF.js → spirit-WXS3HCLN.js} +7 -5
  98. package/dist/{split-WBMZXBHF.js → split-SKZ4Y2D6.js} +1 -1
  99. package/dist/{sprout-LTL5P36T.js → sprout-KQ43BWZJ.js} +1 -1
  100. package/dist/{src-OJHARHTF.js → src-WLJE73NP.js} +14 -5
  101. package/dist/{start-X46I3GXB.js → start-O6UKK7BG.js} +7 -7
  102. package/dist/{status-V4RJMHJ4.js → status-F4PGREUU.js} +6 -4
  103. package/dist/{stop-HJQV4YSM.js → stop-UBX6X5RA.js} +7 -7
  104. package/dist/{system-chat-N2F7HVY3.js → system-chat-63ABFF6V.js} +14 -12
  105. package/dist/{systems-B5YJKMW4.js → systems-JJNGQHAO.js} +6 -6
  106. package/dist/{turn-tracker-JZRZDFWV.js → turn-tracker-KLPV3PAU.js} +4 -4
  107. package/dist/{up-J2PBPOZL.js → up-RVGDE6CQ.js} +5 -3
  108. package/dist/{update-ACV4SAY3.js → update-OXQEGGXD.js} +1 -1
  109. package/dist/{upgrade-NWAZ7MLD.js → upgrade-K5FIQPQD.js} +1 -1
  110. package/dist/{version-notify-XRGTEEDK.js → version-notify-73YURTFR.js} +17 -15
  111. package/dist/web-assets/assets/index-WdZ60R6c.css +1 -0
  112. package/dist/web-assets/assets/index-taX6Ezfa.js +92 -0
  113. package/dist/web-assets/index.html +2 -2
  114. package/package.json +4 -2
  115. package/packages/extensions/pages/dist/ui/assets/index-BuXnE-rb.css +1 -0
  116. package/packages/extensions/pages/dist/ui/assets/index-DtzftuPA.js +2 -0
  117. package/packages/extensions/pages/dist/ui/index.html +2 -2
  118. package/templates/_base/src/lib/startup.ts +16 -1
  119. package/templates/claude/src/agent.ts +9 -2
  120. package/templates/claude/src/server.ts +4 -2
  121. package/templates/pi/src/agent.ts +7 -10
  122. package/templates/pi/src/lib/dispatch.ts +65 -0
  123. package/dist/volute-config-A52FHWKM.js +0 -14
  124. package/dist/web-assets/assets/index-DtctoDXY.css +0 -1
  125. package/dist/web-assets/assets/index-Wpyb2CML.js +0 -86
  126. package/packages/extensions/pages/dist/ui/assets/index-BcY6lnq4.css +0 -1
  127. package/packages/extensions/pages/dist/ui/assets/index-CQjEQg1r.js +0 -2
  128. /package/dist/{chunk-IYG4FBMP.js → chunk-IJPMIEVE.js} +0 -0
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  readGlobalConfig
4
- } from "./chunk-SKNXMUIU.js";
4
+ } from "./chunk-5KXCM5AW.js";
5
5
  import {
6
6
  logger_default
7
7
  } from "./chunk-T2TP6ZC6.js";
@@ -3,20 +3,20 @@ import {
3
3
  compactDateTime,
4
4
  isCompact
5
5
  } from "./chunk-5T5YMX6S.js";
6
+ import {
7
+ getClient,
8
+ urlOf
9
+ } from "./chunk-LOPXTW6H.js";
6
10
  import {
7
11
  resolveMindName
8
12
  } from "./chunk-BTY4WNFE.js";
13
+ import {
14
+ daemonFetch
15
+ } from "./chunk-BCG45AQB.js";
9
16
  import {
10
17
  command,
11
18
  subcommands
12
19
  } from "./chunk-TXSA4Q3V.js";
13
- import {
14
- daemonFetch
15
- } from "./chunk-RBNMDAKB.js";
16
- import {
17
- getClient,
18
- urlOf
19
- } from "./chunk-LOPXTW6H.js";
20
20
 
21
21
  // packages/cli/src/commands/clock.ts
22
22
  import { CronExpressionParser } from "cron-parser";
@@ -114,7 +114,7 @@ var listSchedulesCmd = command({
114
114
  console.log("No schedules configured.");
115
115
  return;
116
116
  }
117
- const actionLabel = (s) => s.script ? `[script] ${s.script}` : s.message ?? "";
117
+ const actionLabel = (s) => s.script ? `[script] ${s.script}` : s.messages?.length ? `[rotating x${s.messages.length}] ${s.messages[0]}` : s.message ?? "";
118
118
  if (isCompact()) {
119
119
  for (const s of schedules) {
120
120
  const sched = s.cron ?? (s.fireAt ? `at ${s.fireAt}` : "");
@@ -277,11 +277,11 @@ var cmd = subcommands({
277
277
  },
278
278
  sleep: {
279
279
  description: "Put a mind to sleep",
280
- run: (args) => import("./mind-sleep-IN3WPA76.js").then((m) => m.run(args))
280
+ run: (args) => import("./mind-sleep-DV7KP255.js").then((m) => m.run(args))
281
281
  },
282
282
  wake: {
283
283
  description: "Wake a sleeping mind",
284
- run: (args) => import("./mind-wake-R54BPESY.js").then((m) => m.run(args))
284
+ run: (args) => import("./mind-wake-LVTZ55EZ.js").then((m) => m.run(args))
285
285
  }
286
286
  },
287
287
  footer: "Use --mind <name> or VOLUTE_MIND to identify the mind."
@@ -31,7 +31,6 @@ function writeVoluteConfig(mindDir, config) {
31
31
  }
32
32
 
33
33
  export {
34
- WAKE_TRIGGER_DEFAULTS,
35
34
  resolveWakeTriggers,
36
35
  readVoluteConfig,
37
36
  writeVoluteConfig
@@ -1,7 +1,10 @@
1
1
  #!/usr/bin/env node
2
+ import {
3
+ safeResolveWithinBase
4
+ } from "./chunk-DW4TRDOZ.js";
2
5
  import {
3
6
  readVoluteConfig
4
- } from "./chunk-PFZBNKUH.js";
7
+ } from "./chunk-WCFSBH33.js";
5
8
  import {
6
9
  logger_default
7
10
  } from "./chunk-T2TP6ZC6.js";
@@ -13,33 +16,7 @@ import {
13
16
 
14
17
  // packages/daemon/src/lib/util/avatar-image.ts
15
18
  import { readdir, readFile, writeFile } from "fs/promises";
16
- import { extname, resolve as resolve2 } from "path";
17
-
18
- // packages/daemon/src/lib/util/paths.ts
19
- import { resolve, sep } from "path";
20
- var PathTraversalError = class extends Error {
21
- constructor(base, userPath) {
22
- super(`Path "${userPath}" escapes base directory "${base}"`);
23
- this.name = "PathTraversalError";
24
- }
25
- };
26
- function resolveWithinBase(base, userPath) {
27
- const resolvedBase = resolve(base);
28
- const target = resolve(resolvedBase, userPath);
29
- if (target !== resolvedBase && !target.startsWith(resolvedBase + sep)) {
30
- throw new PathTraversalError(base, userPath);
31
- }
32
- return target;
33
- }
34
- function safeResolveWithinBase(base, userPath) {
35
- try {
36
- return resolveWithinBase(base, userPath);
37
- } catch {
38
- return null;
39
- }
40
- }
41
-
42
- // packages/daemon/src/lib/util/avatar-image.ts
19
+ import { extname, resolve } from "path";
43
20
  var alog = logger_default.child("avatar-image");
44
21
  var AVATAR_DIM = 256;
45
22
  var AVATAR_CONTEXT_DIM = 128;
@@ -96,10 +73,10 @@ async function downscaleFile(sharp, filePath) {
96
73
  async function migrateAvatarSizes() {
97
74
  const sharp = await loadSharp();
98
75
  if (!sharp) return;
99
- const userAvatarsDir = resolve2(voluteHome(), "avatars");
76
+ const userAvatarsDir = resolve(voluteHome(), "avatars");
100
77
  let userAvatars = [];
101
78
  try {
102
- userAvatars = (await readdir(userAvatarsDir)).map((f) => resolve2(userAvatarsDir, f));
79
+ userAvatars = (await readdir(userAvatarsDir)).map((f) => resolve(userAvatarsDir, f));
103
80
  } catch {
104
81
  }
105
82
  const mindAvatars = [];
@@ -108,7 +85,7 @@ async function migrateAvatarSizes() {
108
85
  const dir = mind.dir ?? mindDir(mind.name);
109
86
  const avatar = readVoluteConfig(dir)?.profile?.avatar;
110
87
  if (!avatar) continue;
111
- const path = safeResolveWithinBase(resolve2(dir, "home"), avatar);
88
+ const path = safeResolveWithinBase(resolve(dir, "home"), avatar);
112
89
  if (path) mindAvatars.push(path);
113
90
  }
114
91
  } catch (err) {
@@ -154,7 +131,6 @@ async function renderAvatarBlock(filePath, label) {
154
131
  }
155
132
 
156
133
  export {
157
- safeResolveWithinBase,
158
134
  AVATAR_DIM,
159
135
  AVATAR_CONTEXT_DIM,
160
136
  MAX_AVATAR_BLOCK_BYTES,
@@ -3,7 +3,7 @@ import {
3
3
  LAUNCHD_PLIST_LABEL,
4
4
  LAUNCHD_PLIST_PATH,
5
5
  USER_SYSTEMD_UNIT
6
- } from "./chunk-CBOIHNMR.js";
6
+ } from "./chunk-FJ2MZ5PH.js";
7
7
  import {
8
8
  resolveVoluteBin
9
9
  } from "./chunk-DGGZVZTM.js";
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  readGlobalConfig,
4
4
  writeGlobalConfig
5
- } from "./chunk-SKNXMUIU.js";
5
+ } from "./chunk-5KXCM5AW.js";
6
6
  import {
7
7
  logger_default
8
8
  } from "./chunk-T2TP6ZC6.js";
@@ -109,6 +109,34 @@ function templateForProvider(provider) {
109
109
  if (provider === "openai-codex") return "codex";
110
110
  return "pi";
111
111
  }
112
+ var PROVIDER_ENV_VAR = {
113
+ anthropic: "ANTHROPIC_API_KEY",
114
+ "openai-codex": "OPENAI_API_KEY",
115
+ openrouter: "OPENROUTER_API_KEY",
116
+ openai: "OPENAI_API_KEY",
117
+ google: "GEMINI_API_KEY",
118
+ groq: "GROQ_API_KEY",
119
+ cerebras: "CEREBRAS_API_KEY",
120
+ xai: "XAI_API_KEY",
121
+ mistral: "MISTRAL_API_KEY",
122
+ zai: "ZAI_API_KEY"
123
+ };
124
+ function providerForMindTemplate(template, model) {
125
+ if (!template || template === "claude") return "anthropic";
126
+ if (template === "codex") return "openai-codex";
127
+ if (model?.includes(":")) return model.split(":")[0];
128
+ return void 0;
129
+ }
130
+ async function missingCredentialWarning(template, model, mindName) {
131
+ const provider = providerForMindTemplate(template, model);
132
+ if (!provider) return null;
133
+ const envVar = PROVIDER_ENV_VAR[provider] ?? `${provider.toUpperCase().replace(/-/g, "_")}_API_KEY`;
134
+ if (await resolveApiKey(provider)) return null;
135
+ if (provider === "openai-codex" && process.env.OPENAI_API_KEY) return null;
136
+ const { loadMergedEnv } = await import("./env-6TGPO5WG.js");
137
+ if (loadMergedEnv(mindName)[envVar]) return null;
138
+ return `No ${provider} credentials are configured, so ${mindName} will start but stay silent until a key is available. Set one with \`volute env set ${envVar} <key> --mind ${mindName}\`, or configure the ${provider} provider in the web dashboard (Settings \u2192 Providers).`;
139
+ }
112
140
  async function resolveTemplate(modelId) {
113
141
  if (!modelId) {
114
142
  const enabled = getEnabledModels();
@@ -379,6 +407,8 @@ export {
379
407
  getUtilityModel,
380
408
  setUtilityModel,
381
409
  aiCompleteUtility,
410
+ providerForMindTemplate,
411
+ missingCredentialWarning,
382
412
  resolveTemplate,
383
413
  getEnabledModels,
384
414
  setEnabledModels,
package/dist/cli.js CHANGED
@@ -10,7 +10,7 @@ if (!process.env.VOLUTE_HOME) {
10
10
  var command = process.argv[2];
11
11
  var args = process.argv.slice(3);
12
12
  if (command === "--version" || command === "-v") {
13
- const { default: pkg } = await import("./package-WPEE2HVJ.js");
13
+ const { default: pkg } = await import("./package-RTN2PS7O.js");
14
14
  console.log(pkg.version);
15
15
  process.exit(0);
16
16
  }
@@ -33,72 +33,80 @@ var ungatedCommands = /* @__PURE__ */ new Set([
33
33
  void 0
34
34
  ]);
35
35
  if (!ungatedCommands.has(command)) {
36
- const { isSetupComplete } = await import("./setup-KFYVWTXG.js");
37
- if (!isSetupComplete()) {
38
- console.error("Volute is not set up. Run `volute setup` first.");
36
+ const { setupStatus, setupUrl } = await import("./setup-5ECWTYKG.js");
37
+ const status = setupStatus();
38
+ if (status !== "complete") {
39
+ if (status === "in-progress") {
40
+ console.error("Volute setup isn't finished yet.");
41
+ console.error(`Open ${setupUrl()} in your browser to complete it.`);
42
+ console.error("(If the daemon isn't running, start it with `volute up` first.)");
43
+ } else {
44
+ console.error("Volute is not set up. Run `volute setup` to get started.");
45
+ console.error("It starts the daemon and opens a browser wizard to finish configuration.");
46
+ }
39
47
  process.exit(1);
40
48
  }
41
49
  }
42
50
  switch (command) {
43
51
  case "setup":
44
- await import("./setup-QJHGMGSN.js").then((m) => m.run(args));
52
+ await import("./setup-AE4CVUC4.js").then((m) => m.run(args));
45
53
  break;
46
54
  case "mind":
47
- await import("./mind-POOHFZHP.js").then((m) => m.run(args));
55
+ await import("./mind-46AOK373.js").then((m) => m.run(args));
48
56
  break;
49
57
  case "seed":
50
- await import("./seed-cmd-SYVDZKM4.js").then((m) => m.run(args));
58
+ await import("./seed-cmd-MLCTGSX5.js").then((m) => m.run(args));
51
59
  break;
52
60
  case "chat":
53
- await import("./chat-AJLJCQ3M.js").then((m) => m.run(args));
61
+ await import("./chat-X43VYHH2.js").then((m) => m.run(args));
54
62
  break;
55
63
  case "variant":
56
64
  await import("./variant-HHDTW74J.js").then((m) => m.run(args));
57
65
  break;
58
66
  case "clock":
59
- await import("./clock-E6N5Y3YW.js").then((m) => m.run(args));
67
+ await import("./clock-CNRF6F7T.js").then((m) => m.run(args));
60
68
  break;
61
69
  case "skill":
62
- await import("./skill-GUKG2YVH.js").then((m) => m.run(args));
70
+ await import("./skill-UUM4JZRF.js").then((m) => m.run(args));
63
71
  break;
64
72
  case "env":
65
- await import("./env-HRL2PWAT.js").then((m) => m.run(args));
73
+ await import("./env-C7Z55QCJ.js").then((m) => m.run(args));
66
74
  break;
67
75
  case "config":
68
- await import("./config-TJLYUV3U.js").then((m) => m.run(args));
76
+ await import("./config-RPSLA2HX.js").then((m) => m.run(args));
69
77
  break;
70
78
  case "up":
71
- await import("./up-J2PBPOZL.js").then((m) => m.run(args));
79
+ await import("./up-RVGDE6CQ.js").then((m) => m.run(args));
72
80
  break;
73
81
  case "backup":
74
- await import("./backup-IIAFOW2L.js").then((m) => m.run(args));
82
+ await import("./backup-UDH4GMSW.js").then((m) => m.run(args));
75
83
  break;
76
84
  case "down":
77
- await import("./down-ZI4S6265.js").then((m) => m.run(args));
85
+ await import("./down-G6IADJXV.js").then((m) => m.run(args));
78
86
  break;
79
87
  case "restart":
80
- await import("./daemon-restart-5F3YTLZK.js").then((m) => m.run(args));
88
+ await import("./daemon-restart-7KUHVZIN.js").then((m) => m.run(args));
81
89
  break;
82
90
  case "update":
83
- await import("./update-ACV4SAY3.js").then((m) => m.run(args));
91
+ await import("./update-OXQEGGXD.js").then((m) => m.run(args));
84
92
  break;
85
93
  case "status":
86
- await import("./status-V4RJMHJ4.js").then((m) => m.run(args));
94
+ await import("./status-F4PGREUU.js").then((m) => m.run(args));
87
95
  break;
88
96
  case "extension":
89
- await import("./extension-QBY4C44L.js").then((m) => m.run(args));
97
+ await import("./extension-J4ZQ2GHV.js").then((m) => m.run(args));
90
98
  break;
91
99
  case "systems":
92
- await import("./systems-B5YJKMW4.js").then((m) => m.run(args));
100
+ await import("./systems-JJNGQHAO.js").then((m) => m.run(args));
93
101
  break;
94
102
  case "login":
95
- await import("./login-OF4WXDAN.js").then((m) => m.run(args));
103
+ await import("./login-CL4IT2ED.js").then((m) => m.run(args));
96
104
  break;
97
105
  case "logout":
98
- await import("./logout-ERE2BGA3.js").then((m) => m.run(args));
106
+ await import("./logout-HZYJCYCA.js").then((m) => m.run(args));
99
107
  break;
100
108
  case "service":
101
- await import("./service-SYJ5G6LP.js").then((m) => m.run(args));
109
+ await import("./service-CVZMQYK6.js").then((m) => m.run(args));
102
110
  break;
103
111
  case "--help":
104
112
  case "-h":
@@ -140,7 +148,7 @@ System:
140
148
  update Update volute
141
149
  systems register/login/logout volute.systems account`);
142
150
  try {
143
- const { resolveDaemonUrl, getAuthToken } = await import("./daemon-client-IYR4KCPU.js");
151
+ const { resolveDaemonUrl, getAuthToken } = await import("./daemon-client-ZFY5MOAL.js");
144
152
  const token = getAuthToken();
145
153
  const headers = {};
146
154
  if (token) headers.Authorization = `Bearer ${token}`;
@@ -181,7 +189,7 @@ use --mind <name> or VOLUTE_MIND env var to identify the mind.`);
181
189
  default: {
182
190
  let isExtensionCommand = false;
183
191
  try {
184
- const { daemonFetch } = await import("./daemon-client-IYR4KCPU.js");
192
+ const { daemonFetch } = await import("./daemon-client-ZFY5MOAL.js");
185
193
  const res = await daemonFetch("/api/extensions/commands");
186
194
  if (res.ok) {
187
195
  const extCommands = await res.json();
@@ -2,13 +2,13 @@
2
2
  import {
3
3
  parseDuration,
4
4
  run
5
- } from "./chunk-JSVHH32K.js";
5
+ } from "./chunk-WARH6GIV.js";
6
6
  import "./chunk-5T5YMX6S.js";
7
+ import "./chunk-LOPXTW6H.js";
7
8
  import "./chunk-BTY4WNFE.js";
9
+ import "./chunk-BCG45AQB.js";
8
10
  import "./chunk-TXSA4Q3V.js";
9
11
  import "./chunk-O7IGP7ZW.js";
10
- import "./chunk-RBNMDAKB.js";
11
- import "./chunk-LOPXTW6H.js";
12
12
  import "./chunk-K3NQKI34.js";
13
13
  export {
14
14
  parseDuration,
@@ -1,26 +1,28 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  deliverMessage
4
- } from "./chunk-F55GRIEK.js";
5
- import "./chunk-IYG4FBMP.js";
6
- import "./chunk-M6TTZRGH.js";
4
+ } from "./chunk-VB2QXUJQ.js";
5
+ import "./chunk-HNGFKPNS.js";
7
6
  import "./chunk-RRZ4RQQU.js";
8
- import "./chunk-K23P5Q5N.js";
9
- import "./chunk-JCMGDCGX.js";
10
- import "./chunk-IWJSNMSY.js";
7
+ import "./chunk-USD45JKR.js";
8
+ import "./chunk-MOERAQXH.js";
9
+ import "./chunk-HUNDXZBZ.js";
10
+ import "./chunk-ODDGGLM6.js";
11
11
  import {
12
12
  getAuthHeaders,
13
13
  getWebhookUrl
14
14
  } from "./chunk-HPGN6XRT.js";
15
- import "./chunk-M3XDVS5Q.js";
15
+ import "./chunk-VZRA5TYO.js";
16
+ import "./chunk-IYCV34IU.js";
16
17
  import "./chunk-MTRMQFCQ.js";
17
- import "./chunk-VMCZBXF2.js";
18
- import "./chunk-PFZBNKUH.js";
18
+ import "./chunk-WQ46E33M.js";
19
+ import "./chunk-DW4TRDOZ.js";
20
+ import "./chunk-WCFSBH33.js";
19
21
  import "./chunk-EIQDZC43.js";
20
22
  import "./chunk-DGGZVZTM.js";
21
- import "./chunk-LWDTP6DH.js";
22
- import "./chunk-SKNXMUIU.js";
23
- import "./chunk-ODDGGLM6.js";
23
+ import "./chunk-IJPMIEVE.js";
24
+ import "./chunk-YNBXEQAP.js";
25
+ import "./chunk-5KXCM5AW.js";
24
26
  import "./chunk-LTLFOSA4.js";
25
27
  import {
26
28
  logger_default
@@ -7,7 +7,7 @@ import "./chunk-K3NQKI34.js";
7
7
 
8
8
  // packages/cli/src/commands/config.ts
9
9
  async function listModels() {
10
- const { daemonFetch } = await import("./daemon-client-IYR4KCPU.js");
10
+ const { daemonFetch } = await import("./daemon-client-ZFY5MOAL.js");
11
11
  const res = await daemonFetch("/api/config/models");
12
12
  if (!res.ok) {
13
13
  console.error(`Failed to fetch models (HTTP ${res.status})`);
@@ -24,7 +24,7 @@ async function listModels() {
24
24
  }
25
25
  }
26
26
  async function listProviders() {
27
- const { daemonFetch } = await import("./daemon-client-IYR4KCPU.js");
27
+ const { daemonFetch } = await import("./daemon-client-ZFY5MOAL.js");
28
28
  const res = await daemonFetch("/api/config/providers");
29
29
  if (!res.ok) {
30
30
  console.error(`Failed to fetch providers (HTTP ${res.status})`);
@@ -41,7 +41,7 @@ async function listProviders() {
41
41
  }
42
42
  }
43
43
  async function showStatus() {
44
- const { daemonFetch } = await import("./daemon-client-IYR4KCPU.js");
44
+ const { daemonFetch } = await import("./daemon-client-ZFY5MOAL.js");
45
45
  const res = await daemonFetch("/api/config/status");
46
46
  if (!res.ok) {
47
47
  console.error(`Failed to fetch config (HTTP ${res.status})`);
@@ -8,7 +8,7 @@ import "./chunk-K3NQKI34.js";
8
8
  // packages/cli/src/commands/create.ts
9
9
  var cmd = command({
10
10
  name: "volute mind create",
11
- description: "Create a new mind",
11
+ description: "Create a new mind (see 'volute seed create' for the recommended path)",
12
12
  args: [{ name: "name", required: true, description: "Name for the new mind" }],
13
13
  flags: {
14
14
  template: { type: "string", description: "Template to use (claude, pi, codex)" },
@@ -21,11 +21,11 @@ var cmd = command({
21
21
  const name = args.name;
22
22
  let template = flags.template;
23
23
  if (!template) {
24
- const { resolveTemplate } = await import("./ai-service-CVZEYKTK.js");
24
+ const { resolveTemplate } = await import("./ai-service-643TNFPH.js");
25
25
  template = await resolveTemplate();
26
26
  }
27
27
  const skills = flags.skills === "none" ? [] : flags.skills ? flags.skills.split(",") : void 0;
28
- const { daemonFetch } = await import("./daemon-client-IYR4KCPU.js");
28
+ const { daemonFetch } = await import("./daemon-client-ZFY5MOAL.js");
29
29
  const { getClient, urlOf } = await import("./api-client-LC5YRA32.js");
30
30
  const client = getClient();
31
31
  const res = await daemonFetch(urlOf(client.api.minds.$url()), {
@@ -38,10 +38,21 @@ var cmd = command({
38
38
  console.error(data.error ?? "Failed to create mind");
39
39
  process.exit(1);
40
40
  }
41
+ const created = data.name ?? name;
41
42
  console.log(`
42
- ${data.message ?? `Created mind: ${data.name} (port ${data.port})`}`);
43
+ ${data.message ?? `Created mind: ${created} (port ${data.port})`}`);
44
+ if (data.warning) console.warn(`
45
+ \u26A0 ${data.warning}`);
46
+ if (data.credentialWarning) console.warn(`
47
+ \u26A0 ${data.credentialWarning}`);
43
48
  console.log(`
44
- volute mind start ${data.name ?? name}`);
49
+ Start it, then say hello:`);
50
+ console.log(` volute mind start ${created}`);
51
+ console.log(` volute chat send @${created} "hello"`);
52
+ console.log(
53
+ `
54
+ Tip: 'volute seed create' grows a mind that shapes its own identity \u2014 the recommended way to start.`
55
+ );
45
56
  }
46
57
  });
47
58
  var run = cmd.execute;
@@ -2,13 +2,13 @@
2
2
  import {
3
3
  resolveMindName
4
4
  } from "./chunk-BTY4WNFE.js";
5
+ import {
6
+ daemonFetch
7
+ } from "./chunk-BCG45AQB.js";
5
8
  import {
6
9
  command
7
10
  } from "./chunk-TXSA4Q3V.js";
8
11
  import "./chunk-O7IGP7ZW.js";
9
- import {
10
- daemonFetch
11
- } from "./chunk-RBNMDAKB.js";
12
12
  import "./chunk-K3NQKI34.js";
13
13
 
14
14
  // packages/cli/src/commands/chat/create.ts
@@ -4,13 +4,15 @@ import {
4
4
  daemonFetch,
5
5
  getAuthToken,
6
6
  readSessionFile,
7
- resolveDaemonUrl
8
- } from "./chunk-RBNMDAKB.js";
7
+ resolveDaemonUrl,
8
+ resolveWebUrl
9
+ } from "./chunk-BCG45AQB.js";
9
10
  import "./chunk-K3NQKI34.js";
10
11
  export {
11
12
  daemonDispatcher,
12
13
  daemonFetch,
13
14
  getAuthToken,
14
15
  readSessionFile,
15
- resolveDaemonUrl
16
+ resolveDaemonUrl,
17
+ resolveWebUrl
16
18
  };
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  stopDaemon
4
- } from "./chunk-BGYHLR54.js";
4
+ } from "./chunk-PJVPDY2Z.js";
5
5
  import {
6
6
  run
7
- } from "./chunk-5IERLDUS.js";
7
+ } from "./chunk-MJRXFUMS.js";
8
8
  import {
9
9
  command
10
10
  } from "./chunk-TXSA4Q3V.js";
@@ -15,9 +15,9 @@ import {
15
15
  pollHealth,
16
16
  readDaemonConfig,
17
17
  restartService
18
- } from "./chunk-CBOIHNMR.js";
18
+ } from "./chunk-FJ2MZ5PH.js";
19
19
  import "./chunk-DGGZVZTM.js";
20
- import "./chunk-SKNXMUIU.js";
20
+ import "./chunk-5KXCM5AW.js";
21
21
  import "./chunk-WW6C3PLV.js";
22
22
  import "./chunk-2MJ7EOMT.js";
23
23
  import "./chunk-K3NQKI34.js";