volute 0.47.0 → 0.49.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 (177) hide show
  1. package/README.md +82 -331
  2. package/dist/{accept-YAFP5JFJ.js → accept-KYNC5X3U.js} +3 -3
  3. package/dist/{activity-events-MIOK3IOU.js → activity-events-GJJAI2WT.js} +4 -4
  4. package/dist/{ai-service-CVZEYKTK.js → ai-service-A7FS7EC3.js} +9 -5
  5. package/dist/{archive-6Z4GFQPH.js → archive-7E3YE6VF.js} +3 -3
  6. package/dist/{auth-A4VGHADI.js → auth-ABYLOEZ7.js} +5 -5
  7. package/dist/{avatar-image-7S3WA77A.js → avatar-image-6ATV2IOZ.js} +6 -5
  8. package/dist/{backup-IIAFOW2L.js → backup-XYAMT4CU.js} +15 -15
  9. package/dist/{bridge-TIZGSXOD.js → bridge-3FNSWLNQ.js} +3 -3
  10. package/dist/{channels-ITE4YC57.js → channels-SGQZHNQJ.js} +3 -3
  11. package/dist/{chat-AJLJCQ3M.js → chat-OGXAEXMV.js} +9 -9
  12. package/dist/{chunk-LTLFOSA4.js → chunk-3B427GUK.js} +3 -3
  13. package/dist/{chunk-RUFLGTOT.js → chunk-4B62E4CG.js} +2 -2
  14. package/dist/{chunk-ODDGGLM6.js → chunk-4DSGN4FL.js} +3 -3
  15. package/dist/{chunk-BGYHLR54.js → chunk-6HGEZJDH.js} +2 -2
  16. package/dist/{chunk-RBNMDAKB.js → chunk-BCG45AQB.js} +15 -1
  17. package/dist/{chunk-5IERLDUS.js → chunk-DAIIMBLB.js} +26 -6
  18. package/dist/{chunk-DGGZVZTM.js → chunk-DVN6DNMI.js} +1 -1
  19. package/dist/chunk-DW4TRDOZ.js +29 -0
  20. package/dist/chunk-EADX54RG.js +113 -0
  21. package/dist/{chunk-EIQDZC43.js → chunk-EFT2OALG.js} +6 -2
  22. package/dist/{chunk-XHN6XBWV.js → chunk-EG5LSKHU.js} +2 -2
  23. package/dist/{chunk-VMCZBXF2.js → chunk-FBBS4BVR.js} +10 -34
  24. package/dist/{chunk-IWJSNMSY.js → chunk-GWVFDUNB.js} +45 -14
  25. package/dist/{chunk-CBOIHNMR.js → chunk-HCYQRME2.js} +41 -5
  26. package/dist/{chunk-4I72V3E5.js → chunk-IH5TKXX6.js} +15 -15
  27. package/dist/{chunk-5NN2VHJV.js → chunk-JBIFXB6I.js} +4 -4
  28. package/dist/{chunk-JSVHH32K.js → chunk-JCBPU57A.js} +15 -13
  29. package/dist/{chunk-M3XDVS5Q.js → chunk-JCWB2ITW.js} +2 -2
  30. package/dist/{chunk-JCMGDCGX.js → chunk-JPGHSXSV.js} +20 -25
  31. package/dist/{chunk-K23P5Q5N.js → chunk-K3JOLGWF.js} +30 -8
  32. package/dist/{chunk-3YUBFTDN.js → chunk-KHCKZ36O.js} +1 -1
  33. package/dist/{chunk-7KRIHYLR.js → chunk-L27YYONJ.js} +2 -2
  34. package/dist/{chunk-SZJCJVXV.js → chunk-MG3Z34YE.js} +2 -2
  35. package/dist/{chunk-SKNXMUIU.js → chunk-NJHN6IRB.js} +26 -2
  36. package/dist/{chunk-2OIYNHWO.js → chunk-NOIAHMJB.js} +1 -1
  37. package/dist/{chunk-2MJ7EOMT.js → chunk-P4LHVRNE.js} +1 -0
  38. package/dist/{chunk-IYG4FBMP.js → chunk-PY24ZL62.js} +1 -1
  39. package/dist/{chunk-F55GRIEK.js → chunk-QQBOI3QA.js} +356 -296
  40. package/dist/{chunk-T2TP6ZC6.js → chunk-QUSMYGNQ.js} +6 -0
  41. package/dist/{chunk-KDLYIECM.js → chunk-R772ET2M.js} +18 -4
  42. package/dist/{chunk-WW6C3PLV.js → chunk-RSBL3FAD.js} +39 -6
  43. package/dist/{mind-list-KEGRGQEQ.js → chunk-SHKM5RGD.js} +19 -6
  44. package/dist/{chunk-YKA7DCVW.js → chunk-SX72DOO3.js} +1 -1
  45. package/dist/chunk-TXJL36ZQ.js +48 -0
  46. package/dist/{chunk-M6TTZRGH.js → chunk-VIUH5CHQ.js} +72 -24
  47. package/dist/{chunk-HPGN6XRT.js → chunk-VNRSXEBF.js} +4 -4
  48. package/dist/{chunk-PFZBNKUH.js → chunk-WCFSBH33.js} +0 -1
  49. package/dist/chunk-XTEKINWG.js +158 -0
  50. package/dist/{chunk-LWDTP6DH.js → chunk-YIJGKHIS.js} +32 -2
  51. package/dist/{chunk-MTRMQFCQ.js → chunk-ZX46PGCC.js} +2 -2
  52. package/dist/cli.js +34 -26
  53. package/dist/{clock-E6N5Y3YW.js → clock-6JZL2FS6.js} +3 -3
  54. package/dist/{cloud-sync-LQTVDTQ3.js → cloud-sync-VFDTNNCA.js} +22 -20
  55. package/dist/{config-TJLYUV3U.js → config-RPSLA2HX.js} +3 -3
  56. package/dist/{conversations-C7IKYSHD.js → conversations-TUM5PJJ4.js} +5 -5
  57. package/dist/{create-A7PDHIIL.js → create-VIQVP3QB.js} +3 -3
  58. package/dist/{create-PQQXKTJK.js → create-Z5FSDNVZ.js} +16 -5
  59. package/dist/{daemon-client-IYR4KCPU.js → daemon-client-ZFY5MOAL.js} +5 -3
  60. package/dist/{daemon-restart-5F3YTLZK.js → daemon-restart-54L4B6AQ.js} +7 -7
  61. package/dist/daemon.js +1105 -601
  62. package/dist/{db-FO6LXYCW.js → db-F6UMFRYD.js} +2 -2
  63. package/dist/{db-LZTLA7XC.js → db-IPXRJUI7.js} +1 -1
  64. package/dist/{delete-HPLC7ETU.js → delete-ESEP7NGQ.js} +1 -1
  65. package/dist/delivery-manager-RBXBPVWM.js +36 -0
  66. package/dist/{delivery-router-3QFG2ZEX.js → delivery-router-VUOL5YSA.js} +8 -6
  67. package/dist/{down-ZI4S6265.js → down-6X7KX7BZ.js} +5 -5
  68. package/dist/echo-text-B6NZ5FGE.js +36 -0
  69. package/dist/env-KUL4XKN2.js +18 -0
  70. package/dist/{env-HRL2PWAT.js → env-ZYMSCB7B.js} +6 -6
  71. package/dist/{exec-QIFYZG4C.js → exec-FBXA3CM4.js} +3 -3
  72. package/dist/{export-4GVGNW54.js → export-TNBPDH77.js} +4 -4
  73. package/dist/{extension-QBY4C44L.js → extension-J4ZQ2GHV.js} +3 -3
  74. package/dist/{extensions-PIMIQ7J3.js → extensions-AWNO3SZF.js} +22 -20
  75. package/dist/{files-FEFZKMNM.js → files-BVBRJJ2P.js} +6 -6
  76. package/dist/{import-7MO3YTRE.js → import-ZUNKMCKC.js} +9 -9
  77. package/dist/{isolation-MCT4ZYLT.js → isolation-OPCZQRTH.js} +3 -3
  78. package/dist/{join-ZJV7W6MO.js → join-34TR2GXQ.js} +1 -1
  79. package/dist/{list-LQO2DCIK.js → list-PMUXZNAM.js} +3 -3
  80. package/dist/{login-OF4WXDAN.js → login-KAKNFCW5.js} +14 -5
  81. package/dist/{login-6TLMI2TQ.js → login-LKNLCJPA.js} +3 -3
  82. package/dist/{logout-ERE2BGA3.js → logout-RLT62RQP.js} +5 -5
  83. package/dist/{logout-BK53HXNY.js → logout-YZRMZ3O2.js} +3 -3
  84. package/dist/message-delivery-ABPV76EA.js +42 -0
  85. package/dist/{mind-POOHFZHP.js → mind-IF6CGMFW.js} +23 -19
  86. package/dist/{mind-activity-tracker-YVZPC4A5.js → mind-activity-tracker-YMMERB6B.js} +5 -5
  87. package/dist/mind-contacts-BKUFPUCU.js +64 -0
  88. package/dist/{mind-history-47DN6ILW.js → mind-history-WI5OI3BW.js} +5 -5
  89. package/dist/mind-list-OTHV4ZO4.js +13 -0
  90. package/dist/{mind-profile-PEQYASQX.js → mind-profile-LUG353ZT.js} +1 -1
  91. package/dist/mind-service-42GDO4KH.js +44 -0
  92. package/dist/{mind-sleep-IN3WPA76.js → mind-sleep-VBV7YRSU.js} +5 -5
  93. package/dist/{mind-status-SMUWJKGV.js → mind-status-BJNPGXKC.js} +8 -3
  94. package/dist/{mind-wake-R54BPESY.js → mind-wake-LVTZ55EZ.js} +3 -3
  95. package/dist/notices-N6BCGHFV.js +25 -0
  96. package/dist/{package-WPEE2HVJ.js → package-PD67VPHB.js} +8 -5
  97. package/dist/prompts-MDHDLWEX.js +24 -0
  98. package/dist/{read-PWAJOQIQ.js → read-YSWUXYL7.js} +3 -3
  99. package/dist/{register-7SZJFHU6.js → register-TWQDKQRT.js} +3 -3
  100. package/dist/{registry-UMMDRPRM.js → registry-3ELJPUGJ.js} +6 -2
  101. package/dist/{reject-6VH7N2A4.js → reject-SXGCYN4A.js} +3 -3
  102. package/dist/{restart-H5WJDMA7.js → restart-5F5QDBOG.js} +5 -5
  103. package/dist/{sandbox-G4X4K3UN.js → sandbox-XPYA7UIF.js} +5 -5
  104. package/dist/scheduler-K7Y7Z7FQ.js +34 -0
  105. package/dist/{schema-VEVO7HG6.js → schema-6YONVTKZ.js} +1 -1
  106. package/dist/{seed-VANPU43L.js → seed-NQED7PSX.js} +1 -1
  107. package/dist/{seed-check-VLTVILOV.js → seed-check-TYD7RRZY.js} +1 -1
  108. package/dist/{seed-cmd-SYVDZKM4.js → seed-cmd-QF3F2G4S.js} +3 -3
  109. package/dist/{seed-create-3FGZPS6C.js → seed-create-XOO4N2OE.js} +6 -4
  110. package/dist/seed-readiness-3LRYASA4.js +18 -0
  111. package/dist/{seed-sprout-H7QLFPFM.js → seed-sprout-HSBBGSS2.js} +32 -33
  112. package/dist/{send-HYDFGC6G.js → send-IHRJYNXA.js} +8 -8
  113. package/dist/{service-SYJ5G6LP.js → service-YCOPCTSZ.js} +4 -4
  114. package/dist/{service-install-FQ43Z4DF.js → service-install-Y46OTF55.js} +5 -5
  115. package/dist/{setup-QJHGMGSN.js → setup-F4TE64YI.js} +7 -7
  116. package/dist/{setup-KFYVWTXG.js → setup-TCN7VH5U.js} +9 -3
  117. package/dist/{skill-GUKG2YVH.js → skill-4CYJLYVY.js} +6 -6
  118. package/dist/skills/dreaming/SKILL.md +5 -1
  119. package/dist/skills/dreaming/scripts/dream.ts +5 -1
  120. package/dist/skills/orientation/SKILL.md +8 -7
  121. package/dist/skills/tending/SKILL.md +51 -2
  122. package/dist/skills/volute-mind/SKILL.md +5 -3
  123. package/dist/skills/volute-mind/references/routing.md +6 -5
  124. package/dist/skills/volute-mind/references/variants.md +48 -14
  125. package/dist/{skills-L2CMTW7A.js → skills-NN5UZCUU.js} +8 -6
  126. package/dist/sleep-manager-DSPXFHGX.js +38 -0
  127. package/dist/spirit-SSJMYC6A.js +31 -0
  128. package/dist/{split-WBMZXBHF.js → split-JF2VWTXA.js} +5 -2
  129. package/dist/{sprout-LTL5P36T.js → sprout-AXA2SECQ.js} +1 -1
  130. package/dist/{src-OJHARHTF.js → src-ZN4LXMPI.js} +17 -8
  131. package/dist/{start-X46I3GXB.js → start-BTVMTP3K.js} +5 -5
  132. package/dist/{status-V4RJMHJ4.js → status-VJGXMQ4L.js} +10 -8
  133. package/dist/{stop-HJQV4YSM.js → stop-YORESK4U.js} +5 -5
  134. package/dist/system-chat-M2XOBKEM.js +40 -0
  135. package/dist/{systems-B5YJKMW4.js → systems-5MH2ELQE.js} +6 -6
  136. package/dist/{tailscale-MCLY5GYE.js → tailscale-AMMVKDXB.js} +3 -3
  137. package/dist/{template-staleness-EMQORSGG.js → template-staleness-HKGCTS3H.js} +4 -4
  138. package/dist/{turn-tracker-JZRZDFWV.js → turn-tracker-JQ2YUUY2.js} +7 -7
  139. package/dist/up-SDLTLPAO.js +20 -0
  140. package/dist/{update-ACV4SAY3.js → update-WEA4N2TR.js} +5 -5
  141. package/dist/{update-check-266R4ZSY.js → update-check-DZOTONII.js} +3 -3
  142. package/dist/{upgrade-NWAZ7MLD.js → upgrade-K5FIQPQD.js} +1 -1
  143. package/dist/variant-cleanup-P4MBNLJD.js +33 -0
  144. package/dist/{version-notify-XRGTEEDK.js → version-notify-WFA5XB5A.js} +27 -25
  145. package/dist/web-assets/assets/index-BostMFoR.css +1 -0
  146. package/dist/web-assets/assets/index-CKlqUkyG.js +92 -0
  147. package/dist/web-assets/index.html +2 -2
  148. package/drizzle/0013_variant_purpose.sql +3 -0
  149. package/drizzle/meta/_journal.json +7 -0
  150. package/package.json +8 -5
  151. package/packages/extensions/pages/dist/ui/assets/index-BuXnE-rb.css +1 -0
  152. package/packages/extensions/pages/dist/ui/assets/index-DtzftuPA.js +2 -0
  153. package/packages/extensions/pages/dist/ui/index.html +2 -2
  154. package/templates/_base/.init/.local/hooks/startup-context.ts +19 -2
  155. package/templates/_base/home/VOLUTE.md +13 -1
  156. package/templates/_base/src/lib/daemon-client.ts +27 -7
  157. package/templates/_base/src/lib/startup.ts +16 -1
  158. package/templates/claude/src/agent.ts +10 -3
  159. package/templates/claude/src/lib/hooks/identity-reload.ts +12 -3
  160. package/templates/claude/src/server.ts +4 -2
  161. package/templates/pi/src/agent.ts +7 -10
  162. package/templates/pi/src/lib/dispatch.ts +65 -0
  163. package/templates/pi/src/lib/event-handler.ts +47 -6
  164. package/dist/delivery-manager-TN5KK2AP.js +0 -34
  165. package/dist/echo-text-SEQCLGAT.js +0 -34
  166. package/dist/message-delivery-ZE3YGJDD.js +0 -38
  167. package/dist/mind-service-JFY7UG5E.js +0 -40
  168. package/dist/scheduler-HQSDYJFY.js +0 -32
  169. package/dist/sleep-manager-3NA7ZJP3.js +0 -36
  170. package/dist/spirit-WXN4IDBF.js +0 -23
  171. package/dist/system-chat-N2F7HVY3.js +0 -38
  172. package/dist/up-J2PBPOZL.js +0 -18
  173. package/dist/volute-config-A52FHWKM.js +0 -14
  174. package/dist/web-assets/assets/index-DtctoDXY.css +0 -1
  175. package/dist/web-assets/assets/index-Wpyb2CML.js +0 -86
  176. package/packages/extensions/pages/dist/ui/assets/index-BcY6lnq4.css +0 -1
  177. package/packages/extensions/pages/dist/ui/assets/index-CQjEQg1r.js +0 -2
@@ -2,10 +2,10 @@
2
2
  import {
3
3
  readGlobalConfig,
4
4
  writeGlobalConfig
5
- } from "./chunk-SKNXMUIU.js";
5
+ } from "./chunk-NJHN6IRB.js";
6
6
  import {
7
7
  logger_default
8
- } from "./chunk-T2TP6ZC6.js";
8
+ } from "./chunk-QUSMYGNQ.js";
9
9
 
10
10
  // packages/daemon/src/lib/ai-service.ts
11
11
  import { defaultProviderAuthContext } from "@earendil-works/pi-ai";
@@ -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-KUL4XKN2.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,
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  publish
4
- } from "./chunk-LTLFOSA4.js";
4
+ } from "./chunk-3B427GUK.js";
5
5
  import {
6
6
  logger_default
7
- } from "./chunk-T2TP6ZC6.js";
7
+ } from "./chunk-QUSMYGNQ.js";
8
8
 
9
9
  // packages/daemon/src/lib/events/mind-activity-tracker.ts
10
10
  var IDLE_TIMEOUT_MS = 5 * 60 * 1e3;
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-PD67VPHB.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-TCN7VH5U.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-F4TE64YI.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-IF6CGMFW.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-QF3F2G4S.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-OGXAEXMV.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-6JZL2FS6.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-4CYJLYVY.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-ZYMSCB7B.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-SDLTLPAO.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-XYAMT4CU.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-6X7KX7BZ.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-54L4B6AQ.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-WEA4N2TR.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-VJGXMQ4L.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-5MH2ELQE.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-KAKNFCW5.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-RLT62RQP.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-YCOPCTSZ.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();
@@ -295,7 +303,7 @@ Run 'volute --help' for usage.`);
295
303
  }
296
304
  }
297
305
  if (command !== "update") {
298
- import("./update-check-266R4ZSY.js").then((m) => m.checkForUpdate()).then((result) => {
306
+ import("./update-check-DZOTONII.js").then((m) => m.checkForUpdate()).then((result) => {
299
307
  if (result.updateAvailable) {
300
308
  console.error(`
301
309
  Update available: ${result.current} \u2192 ${result.latest}`);
@@ -2,13 +2,13 @@
2
2
  import {
3
3
  parseDuration,
4
4
  run
5
- } from "./chunk-JSVHH32K.js";
5
+ } from "./chunk-JCBPU57A.js";
6
6
  import "./chunk-5T5YMX6S.js";
7
7
  import "./chunk-BTY4WNFE.js";
8
+ import "./chunk-BCG45AQB.js";
9
+ import "./chunk-LOPXTW6H.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,32 +1,34 @@
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-QQBOI3QA.js";
5
+ import "./chunk-VIUH5CHQ.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-EFT2OALG.js";
8
+ import "./chunk-K3JOLGWF.js";
9
+ import "./chunk-GWVFDUNB.js";
10
+ import "./chunk-4DSGN4FL.js";
11
11
  import {
12
12
  getAuthHeaders,
13
13
  getWebhookUrl
14
- } from "./chunk-HPGN6XRT.js";
15
- import "./chunk-M3XDVS5Q.js";
16
- import "./chunk-MTRMQFCQ.js";
17
- import "./chunk-VMCZBXF2.js";
18
- import "./chunk-PFZBNKUH.js";
19
- import "./chunk-EIQDZC43.js";
20
- import "./chunk-DGGZVZTM.js";
21
- import "./chunk-LWDTP6DH.js";
22
- import "./chunk-SKNXMUIU.js";
23
- import "./chunk-ODDGGLM6.js";
24
- import "./chunk-LTLFOSA4.js";
14
+ } from "./chunk-VNRSXEBF.js";
15
+ import "./chunk-JPGHSXSV.js";
16
+ import "./chunk-JCWB2ITW.js";
17
+ import "./chunk-XTEKINWG.js";
18
+ import "./chunk-ZX46PGCC.js";
19
+ import "./chunk-FBBS4BVR.js";
20
+ import "./chunk-DW4TRDOZ.js";
21
+ import "./chunk-WCFSBH33.js";
22
+ import "./chunk-DVN6DNMI.js";
23
+ import "./chunk-PY24ZL62.js";
24
+ import "./chunk-YIJGKHIS.js";
25
+ import "./chunk-NJHN6IRB.js";
26
+ import "./chunk-3B427GUK.js";
25
27
  import {
26
28
  logger_default
27
- } from "./chunk-T2TP6ZC6.js";
28
- import "./chunk-WW6C3PLV.js";
29
- import "./chunk-2MJ7EOMT.js";
29
+ } from "./chunk-QUSMYGNQ.js";
30
+ import "./chunk-RSBL3FAD.js";
31
+ import "./chunk-P4LHVRNE.js";
30
32
  import "./chunk-K3NQKI34.js";
31
33
 
32
34
  // packages/daemon/src/lib/cloud-sync.ts
@@ -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})`);
@@ -29,11 +29,11 @@ import {
29
29
  removeParticipant,
30
30
  setConversationPrivate,
31
31
  updateChannelSettings
32
- } from "./chunk-HPGN6XRT.js";
33
- import "./chunk-LTLFOSA4.js";
34
- import "./chunk-T2TP6ZC6.js";
35
- import "./chunk-WW6C3PLV.js";
36
- import "./chunk-2MJ7EOMT.js";
32
+ } from "./chunk-VNRSXEBF.js";
33
+ import "./chunk-3B427GUK.js";
34
+ import "./chunk-QUSMYGNQ.js";
35
+ import "./chunk-RSBL3FAD.js";
36
+ import "./chunk-P4LHVRNE.js";
37
37
  import "./chunk-K3NQKI34.js";
38
38
  export {
39
39
  addMessage,
@@ -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
@@ -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-A7FS7EC3.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;
@@ -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-6HGEZJDH.js";
5
5
  import {
6
6
  run
7
- } from "./chunk-5IERLDUS.js";
7
+ } from "./chunk-DAIIMBLB.js";
8
8
  import {
9
9
  command
10
10
  } from "./chunk-TXSA4Q3V.js";
@@ -15,11 +15,11 @@ import {
15
15
  pollHealth,
16
16
  readDaemonConfig,
17
17
  restartService
18
- } from "./chunk-CBOIHNMR.js";
19
- import "./chunk-DGGZVZTM.js";
20
- import "./chunk-SKNXMUIU.js";
21
- import "./chunk-WW6C3PLV.js";
22
- import "./chunk-2MJ7EOMT.js";
18
+ } from "./chunk-HCYQRME2.js";
19
+ import "./chunk-DVN6DNMI.js";
20
+ import "./chunk-NJHN6IRB.js";
21
+ import "./chunk-RSBL3FAD.js";
22
+ import "./chunk-P4LHVRNE.js";
23
23
  import "./chunk-K3NQKI34.js";
24
24
 
25
25
  // src/commands/daemon-restart.ts