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
@@ -10,11 +10,12 @@ import {
10
10
  minds,
11
11
  sessions,
12
12
  sharedSkills,
13
+ summaries,
13
14
  systemPrompts,
14
15
  turns,
15
16
  users
16
- } from "./chunk-RPZZSXV3.js";
17
- import "./chunk-K3NQKI34.js";
17
+ } from "./chunk-5N7Y5WAM.js";
18
+ import "./chunk-7KJOFUNN.js";
18
19
  export {
19
20
  activity,
20
21
  conversationParticipants,
@@ -26,6 +27,7 @@ export {
26
27
  minds,
27
28
  sessions,
28
29
  sharedSkills,
30
+ summaries,
29
31
  systemPrompts,
30
32
  turns,
31
33
  users
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
- import "./chunk-K3NQKI34.js";
2
+ import "./chunk-7KJOFUNN.js";
3
3
 
4
- // src/commands/seed.ts
4
+ // packages/cli/src/commands/seed.ts
5
5
  async function run(args) {
6
6
  console.error("Note: `volute mind seed` is now `volute seed create`");
7
- await import("./seed-create-4XBBOLRH.js").then((m) => m.run(args));
7
+ await import("./seed-create-DRWGGHEI.js").then((m) => m.run(args));
8
8
  }
9
9
  export {
10
10
  run
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ command
4
+ } from "./chunk-TXSA4Q3V.js";
5
+ import "./chunk-O7IGP7ZW.js";
6
+ import "./chunk-7KJOFUNN.js";
7
+
8
+ // packages/cli/src/commands/seed-check.ts
9
+ var cmd = command({
10
+ name: "volute seed check",
11
+ description: "Check seed readiness",
12
+ args: [{ name: "name", required: true, description: "Seed mind to check" }],
13
+ flags: {},
14
+ run: async ({ args }) => {
15
+ const name = args.name;
16
+ const { daemonFetch } = await import("./daemon-client-RVIKXGFQ.js");
17
+ const res = await daemonFetch(`/api/minds/${encodeURIComponent(name)}/seed-check`);
18
+ if (!res.ok) {
19
+ if (res.status === 404) {
20
+ console.log(`Seed "${name}" not found \u2014 it may have been deleted or already sprouted.`);
21
+ } else {
22
+ console.error(`seed check failed for ${name}: HTTP ${res.status}`);
23
+ }
24
+ return;
25
+ }
26
+ const data = await res.json();
27
+ if (data.output) {
28
+ console.log(data.output);
29
+ }
30
+ }
31
+ });
32
+ var run = cmd.execute;
33
+ export {
34
+ run
35
+ };
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ subcommands
4
+ } from "./chunk-TXSA4Q3V.js";
5
+ import "./chunk-O7IGP7ZW.js";
6
+ import "./chunk-7KJOFUNN.js";
7
+
8
+ // packages/cli/src/commands/seed-cmd.ts
9
+ var cmd = subcommands({
10
+ name: "volute seed",
11
+ description: "Plant and grow new minds",
12
+ commands: {
13
+ create: {
14
+ description: "Plant a new seed",
15
+ run: (args) => import("./seed-create-DRWGGHEI.js").then((m) => m.run(args))
16
+ },
17
+ sprout: {
18
+ description: "Complete orientation and become a full mind",
19
+ run: (args) => import("./seed-sprout-JYXGXOP3.js").then((m) => m.run(args))
20
+ },
21
+ check: {
22
+ description: "Check seed readiness",
23
+ run: (args) => import("./seed-check-KJNTL72M.js").then((m) => m.run(args))
24
+ }
25
+ }
26
+ });
27
+ var run = cmd.execute;
28
+ export {
29
+ run
30
+ };
@@ -0,0 +1,113 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ promptLine
4
+ } from "./chunk-VHWGEJ4V.js";
5
+ import {
6
+ command
7
+ } from "./chunk-TXSA4Q3V.js";
8
+ import "./chunk-O7IGP7ZW.js";
9
+ import "./chunk-7KJOFUNN.js";
10
+
11
+ // packages/cli/src/commands/seed-create.ts
12
+ async function chooseModel(daemonFetch) {
13
+ const res = await daemonFetch("/api/system/ai/models");
14
+ if (!res.ok) {
15
+ console.error(`Failed to fetch AI models (HTTP ${res.status}). Is the daemon running?`);
16
+ process.exit(1);
17
+ }
18
+ const models = await res.json();
19
+ const enabled = models.filter((m) => m.enabled);
20
+ if (enabled.length === 0) return void 0;
21
+ console.log("\nAvailable models:");
22
+ for (let i = 0; i < enabled.length; i++) {
23
+ console.log(` ${i + 1}) ${enabled[i].name} (${enabled[i].provider})`);
24
+ }
25
+ const answer = await promptLine(`
26
+ Choose a model [1-${enabled.length}]: `);
27
+ const idx = parseInt(answer, 10) - 1;
28
+ if (Number.isNaN(idx) || idx < 0 || idx >= enabled.length) {
29
+ console.error("Invalid selection");
30
+ process.exit(1);
31
+ }
32
+ const chosen = enabled[idx];
33
+ return `${chosen.provider}:${chosen.id}`;
34
+ }
35
+ var cmd = command({
36
+ name: "volute seed create",
37
+ description: "Plant a new seed mind",
38
+ args: [{ name: "name", required: true, description: "Name for the seed mind" }],
39
+ flags: {
40
+ template: { type: "string", description: "Template to use" },
41
+ model: { type: "string", description: "AI model to use" },
42
+ description: { type: "string", description: "Description of the seed" },
43
+ skills: { type: "string", description: "Skills to install (comma-separated, or 'none')" },
44
+ "created-by": { type: "string", description: "Username of creator" }
45
+ },
46
+ run: async ({ args, flags }) => {
47
+ const name = args.name;
48
+ const skills = flags.skills === "none" ? [] : flags.skills ? flags.skills.split(",") : void 0;
49
+ const createdBy = flags["created-by"];
50
+ const { daemonFetch } = await import("./daemon-client-RVIKXGFQ.js");
51
+ const { getClient, urlOf } = await import("./api-client-3A77HMH7.js");
52
+ const client = getClient();
53
+ let model = flags.model;
54
+ let template = flags.template;
55
+ if (!template) {
56
+ const { resolveTemplate } = await import("./ai-service-LURBEDDB.js");
57
+ template = resolveTemplate(model);
58
+ }
59
+ if (template !== "claude" && !model) {
60
+ if (process.env.VOLUTE_MIND || !process.stdin.isTTY) {
61
+ const { getSpiritModel } = await import("./spirit-ZFRDXMG7.js");
62
+ const { qualifyModelId } = await import("./ai-service-LURBEDDB.js");
63
+ const spiritModel = getSpiritModel();
64
+ if (spiritModel) {
65
+ model = template === "pi" ? qualifyModelId(spiritModel) : spiritModel;
66
+ }
67
+ }
68
+ if (!model) {
69
+ model = await chooseModel(daemonFetch);
70
+ if (!model) {
71
+ console.error("No AI models configured. Set up providers in the web dashboard first.");
72
+ process.exit(1);
73
+ }
74
+ }
75
+ }
76
+ const createRes = await daemonFetch(urlOf(client.api.minds.$url()), {
77
+ method: "POST",
78
+ headers: { "Content-Type": "application/json" },
79
+ body: JSON.stringify({
80
+ name,
81
+ template,
82
+ stage: "seed",
83
+ description: flags.description,
84
+ model,
85
+ skills,
86
+ createdBy
87
+ })
88
+ });
89
+ const createData = await createRes.json();
90
+ if (!createRes.ok) {
91
+ console.error(createData.error ?? "Failed to create mind");
92
+ process.exit(1);
93
+ }
94
+ const startRes = await daemonFetch(
95
+ urlOf(client.api.minds[":name"].start.$url({ param: { name } })),
96
+ { method: "POST" }
97
+ );
98
+ if (!startRes.ok) {
99
+ const startData = await startRes.json();
100
+ console.error(startData.error ?? "Failed to start mind");
101
+ process.exit(1);
102
+ }
103
+ console.log(`
104
+ Seeded mind: ${name} (port ${createData.port})`);
105
+ console.log(`
106
+ Talk to your new mind:`);
107
+ console.log(` volute chat send @${name} "hello"`);
108
+ }
109
+ });
110
+ var run = cmd.execute;
111
+ export {
112
+ run
113
+ };
@@ -0,0 +1,148 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ command
4
+ } from "./chunk-TXSA4Q3V.js";
5
+ import "./chunk-O7IGP7ZW.js";
6
+ import {
7
+ daemonFetch
8
+ } from "./chunk-ZX7EAV5J.js";
9
+ import {
10
+ getStandardSkillsWithExtensions
11
+ } from "./chunk-IJHIXLVN.js";
12
+ import "./chunk-BKF4WQCY.js";
13
+ import "./chunk-AN2W47GW.js";
14
+ import "./chunk-VHJRZM2S.js";
15
+ import "./chunk-BMZQYACC.js";
16
+ import {
17
+ mindDir
18
+ } from "./chunk-BDYXIWA5.js";
19
+ import "./chunk-5N7Y5WAM.js";
20
+ import "./chunk-7KJOFUNN.js";
21
+
22
+ // packages/cli/src/commands/seed-sprout.ts
23
+ import { existsSync, readFileSync } from "fs";
24
+ import { resolve } from "path";
25
+ var ORIENTATION_MARKER = "You don't have a soul yet";
26
+ var cmd = command({
27
+ name: "volute seed sprout",
28
+ description: "Complete orientation and become a full mind (run by the seed itself)",
29
+ flags: {},
30
+ run: async () => {
31
+ const mindName = process.env.VOLUTE_MIND;
32
+ if (!mindName) {
33
+ console.error("volute seed sprout must be run by a mind (VOLUTE_MIND not set)");
34
+ process.exit(1);
35
+ }
36
+ const mindRes = await daemonFetch(`/api/minds/${encodeURIComponent(mindName)}`);
37
+ if (!mindRes.ok) {
38
+ console.error(`Mind "${mindName}" not found`);
39
+ process.exit(1);
40
+ }
41
+ const mind = await mindRes.json();
42
+ if (mind.stage !== "seed") {
43
+ console.error(`${mindName} is not a seed \u2014 already at stage "${mind.stage}"`);
44
+ process.exit(1);
45
+ }
46
+ const dir = mindDir(mindName);
47
+ const soulPath = resolve(dir, "home/SOUL.md");
48
+ const memoryPath = resolve(dir, "home/MEMORY.md");
49
+ if (!existsSync(soulPath)) {
50
+ console.error("Write your SOUL.md before sprouting.");
51
+ process.exit(1);
52
+ }
53
+ const soul = readFileSync(soulPath, "utf-8");
54
+ if (soul.includes(ORIENTATION_MARKER)) {
55
+ console.error(
56
+ "Your SOUL.md still contains the orientation template. Write your own identity first."
57
+ );
58
+ process.exit(1);
59
+ }
60
+ if (!existsSync(memoryPath)) {
61
+ console.error("Write your MEMORY.md before sprouting.");
62
+ process.exit(1);
63
+ }
64
+ const { isImagegenEnabled } = await import("./setup-RHJRFURI.js");
65
+ if (isImagegenEnabled()) {
66
+ const { readVoluteConfig } = await import("./volute-config-D2XVS2YI.js");
67
+ const config = readVoluteConfig(dir);
68
+ const avatarPath = config?.profile?.avatar;
69
+ if (!avatarPath || !existsSync(resolve(dir, "home", avatarPath))) {
70
+ console.error(
71
+ "Generate an avatar before sprouting. Use `imagegen generate` to create one, then `volute mind profile --avatar <path>` to set it."
72
+ );
73
+ process.exit(1);
74
+ }
75
+ }
76
+ const { getClient, urlOf } = await import("./api-client-3A77HMH7.js");
77
+ const { mindSkillsDir } = await import("./skills-EKMCQ46K.js");
78
+ const client = getClient();
79
+ const failedSkills = [];
80
+ for (const skillId of getStandardSkillsWithExtensions()) {
81
+ const skillDir = resolve(mindSkillsDir(dir), skillId);
82
+ if (!existsSync(skillDir)) {
83
+ const installRes = await daemonFetch(
84
+ urlOf(client.api.minds[":name"].skills.install.$url({ param: { name: mindName } })),
85
+ {
86
+ method: "POST",
87
+ headers: { "Content-Type": "application/json" },
88
+ body: JSON.stringify({ skillId })
89
+ }
90
+ );
91
+ if (!installRes.ok) {
92
+ const data = await installRes.json().catch(() => ({ error: `HTTP ${installRes.status}` }));
93
+ console.error(
94
+ `Failed to install skill ${skillId}: ${data.error}`
95
+ );
96
+ failedSkills.push(skillId);
97
+ }
98
+ }
99
+ }
100
+ const orientationDir = resolve(mindSkillsDir(dir), "orientation");
101
+ if (existsSync(orientationDir)) {
102
+ const delRes = await daemonFetch(
103
+ urlOf(
104
+ client.api.minds[":name"].skills[":skill"].$url({
105
+ param: { name: mindName, skill: "orientation" }
106
+ })
107
+ ),
108
+ { method: "DELETE" }
109
+ );
110
+ if (!delRes.ok) {
111
+ const data = await delRes.json().catch(() => ({ error: `HTTP ${delRes.status}` }));
112
+ console.error(
113
+ `Failed to uninstall orientation skill: ${data.error}`
114
+ );
115
+ }
116
+ }
117
+ if (failedSkills.length > 0) {
118
+ console.error(`Warning: failed to install skills: ${failedSkills.join(", ")}`);
119
+ }
120
+ const sproutRes = await daemonFetch(
121
+ urlOf(client.api.minds[":name"].sprout.$url({ param: { name: mindName } })),
122
+ { method: "POST" }
123
+ );
124
+ if (!sproutRes.ok) {
125
+ const data = await sproutRes.json().catch(() => ({ error: `HTTP ${sproutRes.status}` }));
126
+ console.error(data.error ?? "Failed to update stage");
127
+ process.exit(1);
128
+ }
129
+ const res = await daemonFetch(
130
+ urlOf(client.api.minds[":name"].restart.$url({ param: { name: mindName } })),
131
+ {
132
+ method: "POST",
133
+ headers: { "Content-Type": "application/json" },
134
+ body: JSON.stringify({ context: { type: "sprouted" } })
135
+ }
136
+ );
137
+ if (!res.ok) {
138
+ const data = await res.json().catch(() => ({ error: `HTTP ${res.status}` }));
139
+ console.error(data.error ?? "Failed to restart after sprouting");
140
+ process.exit(1);
141
+ }
142
+ console.log("Sprouted! You now have full mind capabilities.");
143
+ }
144
+ });
145
+ var run = cmd.execute;
146
+ export {
147
+ run
148
+ };