volute 0.33.0 → 0.35.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 (255) hide show
  1. package/README.md +7 -6
  2. package/dist/accept-ZBDVVCEU.js +42 -0
  3. package/dist/activity-events-ZW4SDL2C.js +15 -0
  4. package/dist/{ai-service-SBY2WG7O.js → ai-service-LURBEDDB.js} +6 -6
  5. package/dist/{api-client-YPKOZP2O.js → api-client-3A77HMH7.js} +2 -2
  6. package/dist/api.d.ts +1 -5195
  7. package/dist/{archive-INXYFVCW.js → archive-ESU2FUN4.js} +4 -4
  8. package/dist/{auth-GKCDSO4T.js → auth-WX4TESEI.js} +6 -6
  9. package/dist/bridge-PXIO6PS2.js +206 -0
  10. package/dist/chat-QXAJF3FU.js +51 -0
  11. package/dist/{chunk-NNB4WIG7.js → chunk-2TGZJFAT.js} +3 -3
  12. package/dist/{chunk-6LXAAQ43.js → chunk-33ODGMFZ.js} +1 -1
  13. package/dist/{chunk-RPZZSXV3.js → chunk-5N7Y5WAM.js} +21 -2
  14. package/dist/chunk-5T5YMX6S.js +23 -0
  15. package/dist/{chunk-7J3HEVR7.js → chunk-5XJYUFZH.js} +28 -16
  16. package/dist/chunk-7KJOFUNN.js +22 -0
  17. package/dist/{chunk-2NGTS5UU.js → chunk-A2ZLHBHG.js} +2 -2
  18. package/dist/{chunk-KIEPMIM5.js → chunk-AN2W47GW.js} +2 -2
  19. package/dist/{chunk-G53F3JA4.js → chunk-AOB6GVRM.js} +1 -1
  20. package/dist/{chunk-LRCG2JLP.js → chunk-BDYXIWA5.js} +9 -5
  21. package/dist/{chunk-YUIHSKR6.js → chunk-BKF4WQCY.js} +2 -2
  22. package/dist/{chunk-N432I7QH.js → chunk-BMZQYACC.js} +2 -2
  23. package/dist/{chunk-NAOW2CLO.js → chunk-BTY4WNFE.js} +1 -1
  24. package/dist/{chunk-ALEF47VT.js → chunk-BV65KRHM.js} +2 -2
  25. package/dist/{chunk-KVK2DLWI.js → chunk-CORXD635.js} +4 -4
  26. package/dist/{chunk-PVY5W6QN.js → chunk-F7ZNLYKZ.js} +2 -2
  27. package/dist/{chunk-QTUVYI7W.js → chunk-FT5KETXZ.js} +3 -3
  28. package/dist/{chunk-C7I35G4R.js → chunk-IJHIXLVN.js} +44 -8
  29. package/dist/{chunk-JUKK7FPS.js → chunk-J6CJQDWI.js} +37 -28
  30. package/dist/{chunk-4RQBJWQX.js → chunk-LOPXTW6H.js} +1 -1
  31. package/dist/{chunk-RSX4OPZY.js → chunk-MDJGMOSD.js} +8 -137
  32. package/dist/{chunk-LOEJ4HPQ.js → chunk-N446KRP7.js} +3 -3
  33. package/dist/{chunk-I5KY25PQ.js → chunk-N5LMGYXX.js} +2 -2
  34. package/dist/{chunk-G6BSYHPK.js → chunk-NJK5SDGR.js} +1 -1
  35. package/dist/{chunk-D424ZQGI.js → chunk-O7IGP7ZW.js} +11 -3
  36. package/dist/{chunk-M7UL5S3Q.js → chunk-OTC67N2Z.js} +2 -2
  37. package/dist/{chunk-GY5HBI7A.js → chunk-PWQ2ITYG.js} +4 -4
  38. package/dist/{chunk-KTLFDYPT.js → chunk-QCH6K235.js} +1 -1
  39. package/dist/chunk-QHG4OMZL.js +145 -0
  40. package/dist/{chunk-SKLSMHXO.js → chunk-QWTR6AWZ.js} +3 -3
  41. package/dist/chunk-TXSA4Q3V.js +116 -0
  42. package/dist/{chunk-VH33ZWMW.js → chunk-VHJRZM2S.js} +2 -2
  43. package/dist/{chunk-SSI47XP2.js → chunk-VHWGEJ4V.js} +1 -1
  44. package/dist/chunk-VY3RB2V7.js +164 -0
  45. package/dist/chunk-WJPROOU5.js +8314 -0
  46. package/dist/{chunk-RVGLDGMI.js → chunk-WZRZFFCL.js} +25 -27
  47. package/dist/{chunk-JYVGHWEJ.js → chunk-XRQSAMX2.js} +4 -4
  48. package/dist/{chunk-OYAKCAVY.js → chunk-ZSR72JB3.js} +1 -1
  49. package/dist/{chunk-UKVWJRKN.js → chunk-ZX7EAV5J.js} +17 -7
  50. package/dist/cli.js +90 -29
  51. package/dist/clock-HSEKS5AR.js +289 -0
  52. package/dist/{cloud-sync-4NWLMFVH.js → cloud-sync-6JL4C24T.js} +22 -23
  53. package/dist/config-UTS7QULS.js +76 -0
  54. package/dist/connectors/discord-bridge.js +4 -4
  55. package/dist/connectors/slack-bridge.js +4 -4
  56. package/dist/connectors/telegram-bridge.js +4 -4
  57. package/dist/{conversations-AWI5SZW2.js → conversations-2PW57WO2.js} +6 -6
  58. package/dist/create-5BPOOJAN.js +75 -0
  59. package/dist/create-UVCK2CS6.js +50 -0
  60. package/dist/daemon-client-RVIKXGFQ.js +12 -0
  61. package/dist/daemon-restart-HSZ3BCX5.js +65 -0
  62. package/dist/daemon.js +1349 -1211
  63. package/dist/db-BDMH4SZ2.js +20 -0
  64. package/dist/db-BVBJ57TU.js +9 -0
  65. package/dist/delete-L5PAVDGQ.js +42 -0
  66. package/dist/delivery-manager-H5ZVBMCQ.js +31 -0
  67. package/dist/{delivery-router-FL45JL7N.js → delivery-router-HEJSJAHQ.js} +5 -5
  68. package/dist/down-74VXM45A.js +17 -0
  69. package/dist/env-E4XHO2BI.js +223 -0
  70. package/dist/exec-PY7THYH4.js +17 -0
  71. package/dist/export-OAS6QVBN.js +113 -0
  72. package/dist/extension-D74CNM7G.js +89 -0
  73. package/dist/extensions-XDDFY72A.js +49 -0
  74. package/dist/files-CWTK6V3H.js +53 -0
  75. package/dist/import-5A3T7QV4.js +143 -0
  76. package/dist/{isolation-LLAYQYDY.js → isolation-TK5RX2WM.js} +4 -4
  77. package/dist/join-DF5XSJAC.js +67 -0
  78. package/dist/lib-DYEZMGW7.js +6588 -0
  79. package/dist/list-PDMQM7ZV.js +53 -0
  80. package/dist/login-7TE6CIZF.js +60 -0
  81. package/dist/login-GOTAYLXP.js +51 -0
  82. package/dist/logout-6KIA74EV.js +29 -0
  83. package/dist/logout-T4XS6LRU.js +50 -0
  84. package/dist/message-delivery-GRC4W6P7.js +41 -0
  85. package/dist/mind-5IEYKV7I.js +97 -0
  86. package/dist/mind-activity-tracker-QBLIV7ZJ.js +18 -0
  87. package/dist/mind-history-IE2QH7U5.js +275 -0
  88. package/dist/mind-list-GEWHWAL4.js +38 -0
  89. package/dist/mind-manager-HFLB5653.js +31 -0
  90. package/dist/mind-profile-DCBDVF5B.js +53 -0
  91. package/dist/mind-service-X2CAA6W6.js +37 -0
  92. package/dist/mind-sleep-ITCF6OQA.js +47 -0
  93. package/dist/mind-status-X4SX3YUG.js +65 -0
  94. package/dist/mind-wake-KXMKMGWX.js +42 -0
  95. package/dist/{package-U3VFO273.js → package-D2FSVFAX.js} +11 -8
  96. package/dist/read-67VRP2DO.js +91 -0
  97. package/dist/{read-stdin-HQJ7774D.js → read-stdin-3X5VYKNS.js} +2 -2
  98. package/dist/register-SB7NXCOE.js +51 -0
  99. package/dist/{registry-PJ4S5PHQ.js → registry-GBSNW3HG.js} +3 -3
  100. package/dist/reject-MUR2KWJ4.js +40 -0
  101. package/dist/restart-5EGG4JXU.js +42 -0
  102. package/dist/{sandbox-GJOK4QLQ.js → sandbox-R37VIU36.js} +6 -6
  103. package/dist/scheduler-Y7O4CJXL.js +31 -0
  104. package/dist/{schema-PA3M5ZKH.js → schema-XVZ2CLKW.js} +4 -2
  105. package/dist/{seed-QDYVLG74.js → seed-EQORWX77.js} +3 -3
  106. package/dist/seed-check-KJNTL72M.js +35 -0
  107. package/dist/seed-cmd-ZM2XGVU2.js +30 -0
  108. package/dist/seed-create-DRWGGHEI.js +113 -0
  109. package/dist/seed-sprout-JYXGXOP3.js +148 -0
  110. package/dist/send-JBJJQ7CA.js +409 -0
  111. package/dist/service-WNPCNHOX.js +121 -0
  112. package/dist/{setup-XMCBE3LF.js → setup-BJ4YAY26.js} +155 -129
  113. package/dist/{setup-TISPCO22.js → setup-RHJRFURI.js} +4 -4
  114. package/dist/skill-TAAKEYBV.js +389 -0
  115. package/dist/skills/plan-coordinator/SKILL.md +60 -0
  116. package/dist/skills/volute-mind/SKILL.md +9 -227
  117. package/dist/skills/volute-mind/references/extensions.md +34 -0
  118. package/dist/skills/volute-mind/references/integrations.md +48 -0
  119. package/dist/skills/volute-mind/references/routing.md +86 -0
  120. package/dist/skills/volute-mind/references/sleep.md +33 -0
  121. package/dist/skills/volute-mind/references/variants.md +31 -0
  122. package/dist/{skills-7FV7EJTE.js → skills-EKMCQ46K.js} +12 -8
  123. package/dist/sleep-manager-7KFK3USC.js +35 -0
  124. package/dist/spirit-ZFRDXMG7.js +23 -0
  125. package/dist/split-AWVOYOPZ.js +64 -0
  126. package/dist/{sprout-WKLZXUIQ.js → sprout-HE4TITMK.js} +3 -3
  127. package/dist/start-3UXOPXQG.js +39 -0
  128. package/dist/status-ZK34WYIM.js +125 -0
  129. package/dist/stop-3XYIBGFM.js +41 -0
  130. package/dist/system-chat-IDPHYHY4.js +35 -0
  131. package/dist/systems-O43WGQY6.js +52 -0
  132. package/dist/{tailscale-XHQBZROW.js → tailscale-ZIZ2HWJ5.js} +5 -5
  133. package/dist/template-hash-A7FNHTB7.js +9 -0
  134. package/dist/up-77ICEDEW.js +19 -0
  135. package/dist/update-ANE5ZM7F.js +225 -0
  136. package/dist/{update-check-ZD6OOIYQ.js → update-check-UV55CBEP.js} +4 -4
  137. package/dist/upgrade-ZMDGC7M2.js +74 -0
  138. package/dist/variant-QWL2WSRI.js +62 -0
  139. package/dist/{version-notify-NBI2MTJO.js → version-notify-FXSEMXWW.js} +29 -28
  140. package/dist/{volute-config-HD7WWUQC.js → volute-config-D2XVS2YI.js} +2 -2
  141. package/dist/web-assets/assets/index-BhxWKvbB.css +1 -0
  142. package/dist/web-assets/assets/index-CHVKJ9II.js +75 -0
  143. package/dist/web-assets/ext-theme.css +48 -9
  144. package/dist/web-assets/index.html +2 -2
  145. package/dist/web-assets/sw.js +117 -0
  146. package/drizzle/0005_meta_summaries.sql +15 -0
  147. package/drizzle/meta/0005_snapshot.json +7 -0
  148. package/drizzle/meta/_journal.json +7 -0
  149. package/package.json +10 -7
  150. package/packages/extensions/pages/dist/ui/assets/index-DKZLNMED.js +2 -0
  151. package/packages/extensions/pages/dist/ui/index.html +1 -1
  152. package/packages/extensions/pages/skills/pages/SKILL.md +84 -9
  153. package/packages/extensions/plan/dist/ui/assets/index-CJj2gZnZ.css +1 -0
  154. package/packages/extensions/plan/dist/ui/assets/index-FMEJmvQz.js +61 -0
  155. package/packages/extensions/plan/dist/ui/index.html +14 -0
  156. package/packages/extensions/plan/skills/plan/SKILL.md +43 -0
  157. package/packages/extensions/plan/skills/plan/scripts/plan-hook.sh +37 -0
  158. package/templates/_base/home/VOLUTE.md +12 -19
  159. package/templates/_base/src/lib/auto-commit.ts +8 -8
  160. package/templates/_base/src/lib/context-breakdown.ts +450 -0
  161. package/templates/_base/src/lib/format-prefix.ts +17 -0
  162. package/templates/_base/src/lib/hook-loader.ts +8 -2
  163. package/templates/_base/src/lib/router.ts +75 -33
  164. package/templates/_base/src/lib/routing.ts +4 -1
  165. package/templates/_base/src/lib/startup.ts +16 -8
  166. package/templates/_base/src/lib/types.ts +2 -1
  167. package/templates/_base/src/lib/volute-server.ts +75 -8
  168. package/templates/claude/.init/CLAUDE.md +4 -10
  169. package/templates/claude/package.json.tmpl +1 -0
  170. package/templates/claude/src/agent.ts +108 -33
  171. package/templates/claude/src/lib/hooks/reply-instructions.ts +27 -7
  172. package/templates/claude/src/lib/stream-consumer.ts +2 -2
  173. package/templates/claude/src/server.ts +1 -0
  174. package/templates/codex/package.json.tmpl +1 -0
  175. package/templates/codex/src/agent.ts +80 -8
  176. package/templates/codex/src/server.ts +1 -4
  177. package/templates/pi/package.json.tmpl +1 -0
  178. package/templates/pi/src/agent.ts +115 -36
  179. package/templates/pi/src/lib/event-handler.ts +22 -7
  180. package/templates/pi/src/lib/reply-instructions-extension.ts +23 -4
  181. package/templates/pi/src/lib/subagents.ts +20 -17
  182. package/templates/pi/src/server.ts +2 -5
  183. package/dist/accept-D5VBM7JW.js +0 -42
  184. package/dist/activity-events-XJO3P4RR.js +0 -15
  185. package/dist/bridge-TXWWPPOJ.js +0 -207
  186. package/dist/chat-U5ZOME3O.js +0 -68
  187. package/dist/chunk-3Z2DPESO.js +0 -3634
  188. package/dist/chunk-A2A4KLFE.js +0 -1528
  189. package/dist/chunk-K3NQKI34.js +0 -10
  190. package/dist/chunk-NPKSDYA2.js +0 -156
  191. package/dist/chunk-PB65JZK2.js +0 -85
  192. package/dist/clock-BVH3V6E3.js +0 -266
  193. package/dist/config-H2H4UIF7.js +0 -72
  194. package/dist/create-2FK7Z46Y.js +0 -44
  195. package/dist/create-YWD2TIP4.js +0 -71
  196. package/dist/daemon-client-6QXHZ7US.js +0 -12
  197. package/dist/daemon-restart-GOBUKLX7.js +0 -52
  198. package/dist/db-F34YLV7D.js +0 -9
  199. package/dist/db-RA45JBFG.js +0 -16
  200. package/dist/delete-QTGWEDBI.js +0 -35
  201. package/dist/delivery-manager-PFAKEJTC.js +0 -32
  202. package/dist/down-FWWTEKXM.js +0 -15
  203. package/dist/env-JCOF2222.js +0 -191
  204. package/dist/export-SUYRLI5Q.js +0 -112
  205. package/dist/extension-OBTGKQQD.js +0 -175
  206. package/dist/extensions-KYNTVTMO.js +0 -30
  207. package/dist/files-65PMW5IK.js +0 -47
  208. package/dist/history-DKCDI3JO.js +0 -128
  209. package/dist/import-DDUFE7AY.js +0 -23
  210. package/dist/join-I5QEE3LG.js +0 -66
  211. package/dist/list-JQ463EDA.js +0 -41
  212. package/dist/login-D7ETSU4R.js +0 -47
  213. package/dist/login-RIJF2F4G.js +0 -47
  214. package/dist/logout-5MLHZALK.js +0 -40
  215. package/dist/logout-UZJRGY4Z.js +0 -21
  216. package/dist/message-delivery-DFF5SJRM.js +0 -42
  217. package/dist/mind-IOJFLEM5.js +0 -108
  218. package/dist/mind-activity-tracker-F6O4Q2SL.js +0 -18
  219. package/dist/mind-list-WUPMQDYQ.js +0 -30
  220. package/dist/mind-manager-NBJF5D26.js +0 -32
  221. package/dist/mind-profile-P67FEHOY.js +0 -47
  222. package/dist/mind-service-2MQ6UK5N.js +0 -38
  223. package/dist/mind-sleep-WW2IX7JT.js +0 -42
  224. package/dist/mind-status-L3EFFRPR.js +0 -56
  225. package/dist/mind-wake-VSSGW465.js +0 -37
  226. package/dist/read-EBY56C33.js +0 -75
  227. package/dist/register-HD74C4TT.js +0 -47
  228. package/dist/reject-UJKFBHRO.js +0 -40
  229. package/dist/restart-3UCMRUVC.js +0 -33
  230. package/dist/scheduler-ZZ7XGQG6.js +0 -32
  231. package/dist/seed-check-S2IX25RL.js +0 -32
  232. package/dist/seed-cmd-DKOUFEAU.js +0 -36
  233. package/dist/seed-create-4XBBOLRH.js +0 -112
  234. package/dist/seed-sprout-GQEIIQRT.js +0 -132
  235. package/dist/send-QIV2INHB.js +0 -373
  236. package/dist/skill-PSQGRRJX.js +0 -358
  237. package/dist/skills/shared-files/SKILL.md +0 -44
  238. package/dist/skills/shared-files/scripts/merge.ts +0 -72
  239. package/dist/skills/shared-files/scripts/pull.ts +0 -52
  240. package/dist/sleep-manager-JTXSN7NV.js +0 -36
  241. package/dist/spirit-VRONKFMF.js +0 -23
  242. package/dist/split-STOROBYJ.js +0 -63
  243. package/dist/start-K2NCUUCG.js +0 -33
  244. package/dist/status-3JBTFSMI.js +0 -115
  245. package/dist/stop-H26JZDXF.js +0 -32
  246. package/dist/system-chat-JAPOJ3KE.js +0 -36
  247. package/dist/systems-XRI52VCH.js +0 -61
  248. package/dist/template-hash-A6VVKOXJ.js +0 -9
  249. package/dist/up-M5AS6SBV.js +0 -18
  250. package/dist/update-UD543CXX.js +0 -215
  251. package/dist/upgrade-O4Q7WJM3.js +0 -67
  252. package/dist/variant-7TGZHOU3.js +0 -41
  253. package/dist/web-assets/assets/index-CWJrVveV.css +0 -1
  254. package/dist/web-assets/assets/index-DJt14FRI.js +0 -75
  255. package/packages/extensions/pages/dist/ui/assets/index-tLTROSk5.js +0 -2
@@ -5,26 +5,27 @@ import {
5
5
  SYSTEM_LAUNCHD_PLIST_PATH,
6
6
  SYSTEM_SERVICE_PATH,
7
7
  USER_SYSTEMD_UNIT
8
- } from "./chunk-NNB4WIG7.js";
8
+ } from "./chunk-2TGZJFAT.js";
9
9
  import {
10
10
  promptLine
11
- } from "./chunk-SSI47XP2.js";
11
+ } from "./chunk-VHWGEJ4V.js";
12
+ import {
13
+ command
14
+ } from "./chunk-TXSA4Q3V.js";
15
+ import "./chunk-O7IGP7ZW.js";
12
16
  import {
13
17
  resolveVoluteBin
14
- } from "./chunk-KIEPMIM5.js";
18
+ } from "./chunk-AN2W47GW.js";
15
19
  import {
16
20
  ensureVoluteGroup
17
- } from "./chunk-VH33ZWMW.js";
21
+ } from "./chunk-VHJRZM2S.js";
18
22
  import {
19
23
  readGlobalConfig,
20
24
  writeGlobalConfig
21
- } from "./chunk-N432I7QH.js";
22
- import {
23
- parseArgs
24
- } from "./chunk-D424ZQGI.js";
25
- import "./chunk-LRCG2JLP.js";
26
- import "./chunk-RPZZSXV3.js";
27
- import "./chunk-K3NQKI34.js";
25
+ } from "./chunk-BMZQYACC.js";
26
+ import "./chunk-BDYXIWA5.js";
27
+ import "./chunk-5N7Y5WAM.js";
28
+ import "./chunk-7KJOFUNN.js";
28
29
 
29
30
  // src/commands/setup.ts
30
31
  import { execFile, execFileSync } from "child_process";
@@ -272,133 +273,158 @@ export VOLUTE_MINDS_DIR=${MINDS_DIR}
272
273
  console.log(` Wrote ${PROFILE_PATH}`);
273
274
  }
274
275
  }
275
- async function run(args) {
276
- const { flags } = parseArgs(args, {
277
- name: { type: "string" },
278
- system: { type: "boolean" },
279
- service: { type: "boolean" },
280
- dir: { type: "string" },
281
- port: { type: "number" },
282
- host: { type: "string" }
283
- });
284
- const isInteractive = !flags.name && process.stdin.isTTY;
285
- let systemName;
286
- let setupType;
287
- let wantService;
288
- const port = flags.port;
289
- const host = flags.host;
290
- if (isInteractive) {
291
- console.log("Welcome to Volute!\n");
292
- systemName = await promptLine("System name: ");
293
- if (!systemName.trim()) {
294
- console.error("System name is required.");
295
- process.exit(1);
296
- }
297
- systemName = systemName.trim();
298
- console.log("\nInstall type:");
299
- console.log(" 1. Local (minds in ~/.volute/minds/, sandbox isolation)");
300
- console.log(" 2. System (minds in /minds, per-user isolation, requires sudo)");
301
- const typeChoice = await promptLine("> ");
302
- setupType = typeChoice.trim() === "2" ? "system" : "local";
303
- if (setupType === "system" && process.getuid?.() !== 0) {
304
- console.error("\nSystem install requires root. Re-run with sudo.");
305
- process.exit(1);
306
- }
307
- const serviceDefault = setupType === "system" ? "Y/n" : "y/N";
308
- const servicePrompt = `
276
+ var cmd = command({
277
+ name: "volute setup",
278
+ description: "First-time Volute setup",
279
+ flags: {
280
+ name: { type: "string", description: "System name" },
281
+ system: { type: "boolean", description: "System-level install" },
282
+ service: { type: "boolean", description: "Install as service" },
283
+ remote: { type: "boolean", description: "Allow access from other devices" },
284
+ dir: { type: "string", description: "Data directory" },
285
+ port: { type: "number", description: "Daemon port" },
286
+ host: { type: "string", description: "Daemon host" }
287
+ },
288
+ run: async ({ flags }) => {
289
+ const isInteractive = !flags.name && process.stdin.isTTY;
290
+ let systemName;
291
+ let setupType;
292
+ let wantService;
293
+ let wantRemote = flags.remote ?? false;
294
+ const port = flags.port;
295
+ let host = flags.host;
296
+ if (isInteractive) {
297
+ console.log("Welcome to Volute!\n");
298
+ systemName = await promptLine("System name: ");
299
+ if (!systemName.trim()) {
300
+ console.error("System name is required.");
301
+ process.exit(1);
302
+ }
303
+ systemName = systemName.trim();
304
+ console.log("\nInstall type:");
305
+ console.log(" 1. Local (minds in ~/.volute/minds/, sandbox isolation)");
306
+ console.log(" 2. System (minds in /minds, per-user isolation, requires sudo)");
307
+ const typeChoice = await promptLine("> ");
308
+ setupType = typeChoice.trim() === "2" ? "system" : "local";
309
+ if (setupType === "system" && process.getuid?.() !== 0) {
310
+ console.error("\nSystem install requires root. Re-run with sudo.");
311
+ process.exit(1);
312
+ }
313
+ if (!host) {
314
+ const remoteAnswer = (await promptLine("\nAllow access from other devices on the network? [y/N]: ")).trim().toLowerCase();
315
+ if (remoteAnswer === "y" || remoteAnswer === "yes") {
316
+ wantRemote = true;
317
+ host = "0.0.0.0";
318
+ }
319
+ }
320
+ const serviceDefault = setupType === "system" ? "Y/n" : "y/N";
321
+ const servicePrompt = `
309
322
  Install as a service (auto-start on boot)? [${serviceDefault}]: `;
310
- const serviceAnswer = (await promptLine(servicePrompt)).trim().toLowerCase();
311
- if (setupType === "system") {
312
- wantService = serviceAnswer !== "n";
323
+ const serviceAnswer = (await promptLine(servicePrompt)).trim().toLowerCase();
324
+ if (setupType === "system") {
325
+ wantService = serviceAnswer !== "n";
326
+ } else {
327
+ wantService = serviceAnswer === "y" || serviceAnswer === "yes";
328
+ }
313
329
  } else {
314
- wantService = serviceAnswer === "y" || serviceAnswer === "yes";
315
- }
316
- } else {
317
- if (!flags.name) {
318
- console.error("Error: --name is required in non-interactive mode.");
319
- console.error("Usage: volute setup --name <name> [--system] [--service] [--dir <path>]");
320
- process.exit(1);
321
- }
322
- systemName = flags.name;
323
- setupType = flags.system ? "system" : "local";
324
- wantService = flags.service ?? setupType === "system";
325
- if (setupType === "system" && process.getuid?.() !== 0) {
326
- console.error("Error: system install requires root (use sudo).");
327
- process.exit(1);
328
- }
329
- }
330
- if (host) validateHost(host);
331
- console.log("\nSetting up...");
332
- let isolation;
333
- let mindsDir;
334
- let configHome;
335
- if (setupType === "system") {
336
- configHome = DATA_DIR;
337
- mindsDir = MINDS_DIR;
338
- isolation = "user";
339
- process.env.VOLUTE_HOME = DATA_DIR;
340
- process.env.VOLUTE_MINDS_DIR = MINDS_DIR;
341
- setupSystemDirectories();
342
- ensureVoluteGroup({ force: true });
343
- console.log(" Ensured volute group exists");
344
- setupSystemGitIdentity();
345
- const voluteBin = resolveVoluteBin();
346
- setupSystemWrapper(voluteBin);
347
- setupSystemEnvProfile();
348
- if (wantService) {
349
- if (!installSystemService(voluteBin, port, host)) wantService = false;
350
- }
351
- } else {
352
- configHome = flags.dir ? resolve(flags.dir) : resolve(homedir(), ".volute");
353
- if (flags.dir) {
354
- process.env.VOLUTE_HOME = configHome;
330
+ if (!flags.name) {
331
+ console.error("Error: --name is required in non-interactive mode.");
332
+ console.error(
333
+ "Usage: volute setup --name <name> [--system] [--service] [--remote] [--dir <path>]"
334
+ );
335
+ process.exit(1);
336
+ }
337
+ systemName = flags.name;
338
+ setupType = flags.system ? "system" : "local";
339
+ wantService = flags.service ?? setupType === "system";
340
+ if (wantRemote && !host) {
341
+ host = "0.0.0.0";
342
+ }
343
+ if (setupType === "system" && process.getuid?.() !== 0) {
344
+ console.error("Error: system install requires root (use sudo).");
345
+ process.exit(1);
346
+ }
355
347
  }
356
- mindsDir = resolve(configHome, "minds");
357
- isolation = "sandbox";
358
- mkdirSync(configHome, { recursive: true });
359
- console.log(` Created ${configHome}`);
360
- mkdirSync(mindsDir, { recursive: true });
361
- console.log(" Sandbox enabled for mind isolation");
362
- if (wantService) {
348
+ if (host) validateHost(host);
349
+ console.log("\nSetting up...");
350
+ let isolation;
351
+ let mindsDir;
352
+ let configHome;
353
+ if (setupType === "system") {
354
+ configHome = DATA_DIR;
355
+ mindsDir = MINDS_DIR;
356
+ isolation = "user";
357
+ process.env.VOLUTE_HOME = DATA_DIR;
358
+ process.env.VOLUTE_MINDS_DIR = MINDS_DIR;
359
+ setupSystemDirectories();
360
+ ensureVoluteGroup({ force: true });
361
+ console.log(" Ensured volute group exists");
362
+ setupSystemGitIdentity();
363
363
  const voluteBin = resolveVoluteBin();
364
- if (!await installUserService(voluteBin, port, host)) wantService = false;
364
+ setupSystemWrapper(voluteBin);
365
+ setupSystemEnvProfile();
366
+ if (wantService) {
367
+ if (!installSystemService(voluteBin, port, host)) wantService = false;
368
+ }
369
+ } else {
370
+ configHome = flags.dir ? resolve(flags.dir) : resolve(homedir(), ".volute");
371
+ if (flags.dir) {
372
+ process.env.VOLUTE_HOME = configHome;
373
+ }
374
+ mindsDir = resolve(configHome, "minds");
375
+ isolation = "sandbox";
376
+ mkdirSync(configHome, { recursive: true });
377
+ console.log(` Created ${configHome}`);
378
+ mkdirSync(mindsDir, { recursive: true });
379
+ console.log(" Sandbox enabled for mind isolation");
380
+ if (wantService) {
381
+ const voluteBin = resolveVoluteBin();
382
+ if (!await installUserService(voluteBin, port, host)) wantService = false;
383
+ }
365
384
  }
366
- }
367
- const existingConfig = readGlobalConfig();
368
- const setup = {
369
- type: setupType,
370
- mindsDir,
371
- isolation,
372
- service: wantService
373
- };
374
- const config = {
375
- ...existingConfig,
376
- name: systemName,
377
- setup,
378
- setupCompleted: true
379
- };
380
- if (port != null) config.port = port;
381
- if (host) config.hostname = host;
382
- writeGlobalConfig(config);
383
- if (isInteractive) {
384
- const wantAi = (await promptLine("\nConfigure an AI provider? (optional) [y/N]: ")).trim().toLowerCase();
385
- if (wantAi === "y" || wantAi === "yes") {
386
- const aiProvider = (await promptLine("Provider (anthropic, openai, google, etc.): ")).trim();
387
- if (aiProvider) {
388
- const aiApiKey = (await promptLine("API key (leave empty to use env var): ")).trim();
389
- if (aiApiKey) {
390
- const { saveProviderConfig } = await import("./ai-service-SBY2WG7O.js");
391
- saveProviderConfig(aiProvider, { apiKey: aiApiKey });
392
- console.log(` AI provider configured: ${aiProvider}`);
393
- } else {
394
- console.log(` Using env var for ${aiProvider} (no explicit key saved)`);
385
+ const existingConfig = readGlobalConfig();
386
+ const setup = {
387
+ type: setupType,
388
+ mindsDir,
389
+ isolation,
390
+ service: wantService
391
+ };
392
+ const config = {
393
+ ...existingConfig,
394
+ name: systemName,
395
+ setup,
396
+ setupCompleted: true
397
+ };
398
+ if (port != null) config.port = port;
399
+ if (host) config.hostname = host;
400
+ writeGlobalConfig(config);
401
+ if (isInteractive) {
402
+ const wantAi = (await promptLine("\nConfigure an AI provider? (optional) [y/N]: ")).trim().toLowerCase();
403
+ if (wantAi === "y" || wantAi === "yes") {
404
+ const aiProvider = (await promptLine("Provider (anthropic, openai, google, etc.): ")).trim();
405
+ if (aiProvider) {
406
+ const aiApiKey = (await promptLine("API key (leave empty to use env var): ")).trim();
407
+ if (aiApiKey) {
408
+ const { saveProviderConfig } = await import("./ai-service-LURBEDDB.js");
409
+ saveProviderConfig(aiProvider, { apiKey: aiApiKey });
410
+ console.log(` AI provider configured: ${aiProvider}`);
411
+ } else {
412
+ console.log(` Using env var for ${aiProvider} (no explicit key saved)`);
413
+ }
395
414
  }
396
415
  }
397
416
  }
398
- }
399
- console.log(`
417
+ console.log(`
400
418
  Done! Use \`volute mind create <name>\` to create your first mind.`);
401
- }
419
+ if (wantRemote || host === "0.0.0.0" || host === "::") {
420
+ const displayPort = port ?? 1618;
421
+ console.log(`
422
+ Remote access enabled. Connect from other devices at:`);
423
+ console.log(` http://<this-machine-ip>:${displayPort}/`);
424
+ }
425
+ }
426
+ });
427
+ var run = cmd.execute;
402
428
  export {
403
429
  run
404
430
  };
@@ -6,10 +6,10 @@ import {
6
6
  migrateSetupCompleted,
7
7
  readGlobalConfig,
8
8
  writeGlobalConfig
9
- } from "./chunk-N432I7QH.js";
10
- import "./chunk-LRCG2JLP.js";
11
- import "./chunk-RPZZSXV3.js";
12
- import "./chunk-K3NQKI34.js";
9
+ } from "./chunk-BMZQYACC.js";
10
+ import "./chunk-BDYXIWA5.js";
11
+ import "./chunk-5N7Y5WAM.js";
12
+ import "./chunk-7KJOFUNN.js";
13
13
  export {
14
14
  configPath,
15
15
  isImagegenEnabled,