volute 0.49.0 → 0.50.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 (210) hide show
  1. package/README.md +2 -2
  2. package/dist/{accept-KYNC5X3U.js → accept-5NK5XJB5.js} +2 -1
  3. package/dist/{activity-events-GJJAI2WT.js → activity-events-H7YI3BTF.js} +3 -3
  4. package/dist/{ai-service-A7FS7EC3.js → ai-service-V4CTNGI3.js} +5 -4
  5. package/dist/{archive-7E3YE6VF.js → archive-ORM3ENHI.js} +3 -3
  6. package/dist/{auth-ABYLOEZ7.js → auth-DT7GY7EZ.js} +10 -6
  7. package/dist/{avatar-image-6ATV2IOZ.js → avatar-image-QEPAP3A5.js} +3 -3
  8. package/dist/{backup-XYAMT4CU.js → backup-IE6PMXJO.js} +11 -12
  9. package/dist/{bridge-3FNSWLNQ.js → bridge-YK7NTRU5.js} +2 -1
  10. package/dist/{channels-SGQZHNQJ.js → channels-FSAHOQWI.js} +2 -1
  11. package/dist/{chat-OGXAEXMV.js → chat-W5K6HCBE.js} +9 -9
  12. package/dist/{chunk-3B427GUK.js → chunk-3BAFMGCJ.js} +2 -2
  13. package/dist/{chunk-4B62E4CG.js → chunk-4CN7OCJE.js} +2 -2
  14. package/dist/{chunk-VNRSXEBF.js → chunk-574M6I7F.js} +38 -5
  15. package/dist/{chunk-HCYQRME2.js → chunk-5FVANDON.js} +2 -2
  16. package/dist/{chunk-P4LHVRNE.js → chunk-5IIVOWSP.js} +27 -19
  17. package/dist/{chunk-TXJL36ZQ.js → chunk-5PKFJHCR.js} +2 -2
  18. package/dist/{chunk-JPGHSXSV.js → chunk-5TPC4KCV.js} +23 -9
  19. package/dist/{chunk-YIJGKHIS.js → chunk-632FJ23O.js} +24 -20
  20. package/dist/{chunk-IH5TKXX6.js → chunk-636GFQNE.js} +11 -11
  21. package/dist/{chunk-EFT2OALG.js → chunk-6BM2I736.js} +20 -5
  22. package/dist/{chunk-JCBPU57A.js → chunk-74T3CEXK.js} +6 -6
  23. package/dist/{chunk-EG5LSKHU.js → chunk-77IZUVBB.js} +2 -2
  24. package/dist/{chunk-K3JOLGWF.js → chunk-7DXLIYPY.js} +76 -63
  25. package/dist/chunk-7FDWPQCU.js +289 -0
  26. package/dist/chunk-7OZWKHA3.js +548 -0
  27. package/dist/{chunk-PY24ZL62.js → chunk-7UWXAJMK.js} +1 -1
  28. package/dist/{chunk-MG3Z34YE.js → chunk-7XDOTN4R.js} +1 -1
  29. package/dist/{chunk-SX72DOO3.js → chunk-AFSLNUTT.js} +1 -1
  30. package/dist/{chunk-DVN6DNMI.js → chunk-AJWFDIEY.js} +17 -2
  31. package/dist/chunk-ALIVXDM4.js +1014 -0
  32. package/dist/{chunk-RSBL3FAD.js → chunk-CAIYV33P.js} +234 -24
  33. package/dist/{chunk-ZX46PGCC.js → chunk-E5S3ILVA.js} +1 -1
  34. package/dist/{chunk-SHKM5RGD.js → chunk-EEOMA4DX.js} +1 -1
  35. package/dist/chunk-EQKSRVDE.js +2857 -0
  36. package/dist/chunk-FNJCBRD3.js +31 -0
  37. package/dist/{chunk-EADX54RG.js → chunk-HW6Q7AMB.js} +4 -4
  38. package/dist/chunk-JI67D7O2.js +1222 -0
  39. package/dist/{chunk-KHCKZ36O.js → chunk-KAEZOVP6.js} +1 -1
  40. package/dist/chunk-LNNI3MS4.js +54 -0
  41. package/dist/{chunk-BCG45AQB.js → chunk-M74I3HHF.js} +15 -5
  42. package/dist/chunk-MLZBBLMT.js +109 -0
  43. package/dist/{chunk-5T5YMX6S.js → chunk-PW65BXY5.js} +5 -0
  44. package/dist/{chunk-NOIAHMJB.js → chunk-QFVGPKJI.js} +1 -1
  45. package/dist/{chunk-VIUH5CHQ.js → chunk-SFRYRW37.js} +50 -33
  46. package/dist/{chunk-L27YYONJ.js → chunk-SSNZ6ZNN.js} +1 -1
  47. package/dist/{chunk-GWVFDUNB.js → chunk-TGJHGVBZ.js} +8 -10
  48. package/dist/{chunk-6HGEZJDH.js → chunk-U3EJJ7JN.js} +2 -2
  49. package/dist/{chunk-4DSGN4FL.js → chunk-UC6BNMGT.js} +43 -13
  50. package/dist/{chunk-JBIFXB6I.js → chunk-WBBKYUGF.js} +3 -5
  51. package/dist/{chunk-FBBS4BVR.js → chunk-X67VT4QO.js} +1 -1
  52. package/dist/{chunk-DAIIMBLB.js → chunk-YQOYZ6G7.js} +3 -5
  53. package/dist/{chunk-JCWB2ITW.js → chunk-ZUG76D3P.js} +35 -5
  54. package/dist/cli.js +34 -27
  55. package/dist/{clock-6JZL2FS6.js → clock-LH7UFNLJ.js} +4 -3
  56. package/dist/{cloud-sync-VFDTNNCA.js → cloud-sync-IDJFVDEP.js} +22 -19
  57. package/dist/{config-RPSLA2HX.js → config-UGJS57VT.js} +3 -3
  58. package/dist/{conversations-TUM5PJJ4.js → conversations-S2232Y5I.js} +8 -4
  59. package/dist/{create-Z5FSDNVZ.js → create-2M7DAHQX.js} +2 -2
  60. package/dist/{create-VIQVP3QB.js → create-M727VUDF.js} +2 -1
  61. package/dist/{daemon-client-ZFY5MOAL.js → daemon-client-VVYFZI2D.js} +2 -1
  62. package/dist/{daemon-restart-54L4B6AQ.js → daemon-restart-2AAGYFHE.js} +6 -7
  63. package/dist/daemon.js +1625 -529
  64. package/dist/{db-F6UMFRYD.js → db-QAY45Z56.js} +2 -2
  65. package/dist/{delete-ESEP7NGQ.js → delete-O7PEFQDF.js} +1 -1
  66. package/dist/delivery-manager-B4OKWD2P.js +33 -0
  67. package/dist/{delivery-router-VUOL5YSA.js → delivery-router-JE7SHYNU.js} +7 -5
  68. package/dist/{down-6X7KX7BZ.js → down-D4IRNEMJ.js} +5 -5
  69. package/dist/echo-text-WYAAODBV.js +39 -0
  70. package/dist/{env-ZYMSCB7B.js → env-ABM5IMA7.js} +3 -2
  71. package/dist/{env-KUL4XKN2.js → env-AZK5X4W7.js} +3 -3
  72. package/dist/{exec-FBXA3CM4.js → exec-2H65LMTA.js} +3 -3
  73. package/dist/{export-TNBPDH77.js → export-3E3EL6W3.js} +4 -4
  74. package/dist/{extension-J4ZQ2GHV.js → extension-MRYJWSMV.js} +2 -1
  75. package/dist/{extensions-AWNO3SZF.js → extensions-7KP3X6G7.js} +22 -19
  76. package/dist/{files-BVBRJJ2P.js → files-6BMKVG5G.js} +5 -4
  77. package/dist/{import-ZUNKMCKC.js → import-UPNTEBBT.js} +8 -8
  78. package/dist/{isolation-OPCZQRTH.js → isolation-OKDFM6WA.js} +5 -3
  79. package/dist/{join-34TR2GXQ.js → join-PYA36HEC.js} +1 -1
  80. package/dist/{list-PMUXZNAM.js → list-4BVGH7AN.js} +8 -3
  81. package/dist/{login-KAKNFCW5.js → login-MOXVLULE.js} +4 -3
  82. package/dist/{login-LKNLCJPA.js → login-RJJTCVR3.js} +2 -1
  83. package/dist/{logout-YZRMZ3O2.js → logout-BYV433X6.js} +2 -1
  84. package/dist/{logout-RLT62RQP.js → logout-DWD3OQVT.js} +4 -3
  85. package/dist/message-delivery-3456PXB7.js +43 -0
  86. package/dist/migrate-thread-config-4A5LW36Z.js +90 -0
  87. package/dist/{mind-IF6CGMFW.js → mind-NYRALSV2.js} +19 -19
  88. package/dist/{mind-activity-tracker-YMMERB6B.js → mind-activity-tracker-L7GCYXQR.js} +4 -4
  89. package/dist/{mind-contacts-BKUFPUCU.js → mind-contacts-QYU4TPEA.js} +3 -2
  90. package/dist/{mind-history-WI5OI3BW.js → mind-history-NXXOOTX6.js} +30 -7
  91. package/dist/{mind-list-OTHV4ZO4.js → mind-list-SYRA7CH5.js} +3 -2
  92. package/dist/{mind-profile-LUG353ZT.js → mind-profile-MRCVZPYT.js} +1 -1
  93. package/dist/mind-service-5TA7UJAT.js +47 -0
  94. package/dist/{mind-sleep-VBV7YRSU.js → mind-sleep-TH6BRQ5X.js} +4 -3
  95. package/dist/{mind-status-BJNPGXKC.js → mind-status-Z2LQFA6F.js} +3 -2
  96. package/dist/{mind-wake-LVTZ55EZ.js → mind-wake-LDGPRA42.js} +2 -1
  97. package/dist/{package-PD67VPHB.js → package-XYSV7NUT.js} +23 -23
  98. package/dist/{prompts-MDHDLWEX.js → prompts-QKFPX6DQ.js} +3 -3
  99. package/dist/{read-YSWUXYL7.js → read-ZXGUT4QC.js} +5 -3
  100. package/dist/{register-TWQDKQRT.js → register-OX4HRSGC.js} +2 -1
  101. package/dist/{registry-3ELJPUGJ.js → registry-4UF6OCOE.js} +6 -4
  102. package/dist/{reject-SXGCYN4A.js → reject-TWB4QJHG.js} +2 -1
  103. package/dist/{restart-5F5QDBOG.js → restart-AGEGNSYQ.js} +2 -1
  104. package/dist/{sandbox-XPYA7UIF.js → sandbox-EGEU5GGE.js} +7 -4
  105. package/dist/scheduler-UV6RUJ7P.js +25 -0
  106. package/dist/{schema-6YONVTKZ.js → schema-C2GIPD4V.js} +3 -3
  107. package/dist/{seed-NQED7PSX.js → seed-3IMBOAGK.js} +1 -1
  108. package/dist/{seed-check-TYD7RRZY.js → seed-check-NRJEQZST.js} +14 -5
  109. package/dist/{seed-cmd-QF3F2G4S.js → seed-cmd-U73XVQMI.js} +3 -3
  110. package/dist/{seed-create-XOO4N2OE.js → seed-create-FBLNVSUP.js} +4 -4
  111. package/dist/{seed-readiness-3LRYASA4.js → seed-readiness-QRA46ZJQ.js} +4 -5
  112. package/dist/{seed-sprout-HSBBGSS2.js → seed-sprout-3B4SZX7J.js} +9 -9
  113. package/dist/{send-IHRJYNXA.js → send-NBRZJXKX.js} +32 -10
  114. package/dist/{service-YCOPCTSZ.js → service-XMXAXGJD.js} +4 -4
  115. package/dist/{service-install-Y46OTF55.js → service-install-MOKTEG7B.js} +5 -5
  116. package/dist/{setup-TCN7VH5U.js → setup-CAJFOR2N.js} +10 -3
  117. package/dist/{setup-F4TE64YI.js → setup-JGYAXXW7.js} +6 -7
  118. package/dist/{skill-4CYJLYVY.js → skill-NXIHDQCG.js} +3 -2
  119. package/dist/skills/dreaming/references/INSTALL.md +2 -2
  120. package/dist/skills/imagegen/SKILL.md +21 -4
  121. package/dist/skills/imagegen/scripts/imagegen.ts +124 -21
  122. package/dist/skills/tending/SKILL.md +7 -7
  123. package/dist/skills/volute-mind/SKILL.md +3 -3
  124. package/dist/skills/volute-mind/references/integrations.md +2 -2
  125. package/dist/skills/volute-mind/references/routing.md +15 -15
  126. package/dist/{skills-NN5UZCUU.js → skills-5MSMT7PT.js} +4 -5
  127. package/dist/sleep-manager-LIEPO6WG.js +41 -0
  128. package/dist/{spirit-SSJMYC6A.js → spirit-IL5EMWYZ.js} +10 -7
  129. package/dist/spirit-availability-YFEGJNJ2.js +42 -0
  130. package/dist/{split-JF2VWTXA.js → split-BU5VWX6P.js} +1 -1
  131. package/dist/{sprout-AXA2SECQ.js → sprout-UPXGJ5HX.js} +1 -1
  132. package/dist/{src-YH6PQ7LJ.js → src-HGNE2XG4.js} +7 -1
  133. package/dist/{src-ZN4LXMPI.js → src-LCSOQY6Z.js} +57 -51
  134. package/dist/{src-JAOVXO5W.js → src-UDMJZ6MH.js} +8 -8
  135. package/dist/{start-BTVMTP3K.js → start-MUMNFR52.js} +2 -1
  136. package/dist/{status-VJGXMQ4L.js → status-IL67CYM4.js} +7 -6
  137. package/dist/{stop-YORESK4U.js → stop-EKERNYTX.js} +2 -1
  138. package/dist/system-events-A6IGCEC3.js +46 -0
  139. package/dist/system-install-YZSWCPDK.js +8 -0
  140. package/dist/{systems-5MH2ELQE.js → systems-VDRUZXNF.js} +5 -4
  141. package/dist/{tailscale-AMMVKDXB.js → tailscale-SJUW2ETR.js} +2 -2
  142. package/dist/{template-staleness-HKGCTS3H.js → template-staleness-T27VCGYA.js} +3 -3
  143. package/dist/{turn-tracker-JQ2YUUY2.js → turn-tracker-6EI2EL7G.js} +6 -6
  144. package/dist/{up-SDLTLPAO.js → up-CLL4665A.js} +5 -6
  145. package/dist/{update-WEA4N2TR.js → update-HVAUCQPN.js} +5 -5
  146. package/dist/{update-check-DZOTONII.js → update-check-2MGBBAFF.js} +3 -3
  147. package/dist/{upgrade-K5FIQPQD.js → upgrade-LIE46UBB.js} +1 -1
  148. package/dist/variant-cleanup-HJ7Z75R6.js +22 -0
  149. package/dist/{version-notify-WFA5XB5A.js → version-notify-7BUHWZNT.js} +10 -27
  150. package/dist/web-assets/assets/index-ClsUcXiW.js +95 -0
  151. package/dist/web-assets/assets/index-Dz3wTbtR.css +1 -0
  152. package/dist/web-assets/index.html +2 -2
  153. package/dist/xai-P42CRCZA.js +129 -0
  154. package/drizzle/0014_system_events.sql +26 -0
  155. package/drizzle/0015_rename_session_to_thread.sql +12 -0
  156. package/drizzle/0016_brain_to_human.sql +4 -0
  157. package/drizzle/0017_event_history_rows.sql +9 -0
  158. package/drizzle/meta/_journal.json +28 -0
  159. package/package.json +23 -23
  160. package/packages/extensions/notes/dist/ui/assets/index-BBs8pyel.js +67 -0
  161. package/packages/extensions/notes/dist/ui/index.html +1 -1
  162. package/packages/extensions/pages/dist/ui/assets/index-B589e8Xe.js +2 -0
  163. package/packages/extensions/pages/dist/ui/index.html +1 -1
  164. package/packages/extensions/plan/dist/ui/assets/index-B8s8wxyt.js +67 -0
  165. package/packages/extensions/plan/dist/ui/index.html +1 -1
  166. package/templates/_base/.init/.config/prompts.json +1 -0
  167. package/templates/_base/.init/.local/hooks/startup-context.ts +24 -9
  168. package/templates/_base/home/.config/routes.json +2 -2
  169. package/templates/_base/home/VOLUTE.md +18 -5
  170. package/templates/_base/src/lib/daemon-client.ts +1 -1
  171. package/templates/_base/src/lib/event-turn.ts +39 -0
  172. package/templates/_base/src/lib/format-prefix.ts +21 -2
  173. package/templates/_base/src/lib/router.ts +6 -2
  174. package/templates/_base/src/lib/routing.ts +8 -8
  175. package/templates/_base/src/lib/startup.ts +9 -1
  176. package/templates/_base/src/lib/types.ts +7 -1
  177. package/templates/_base/src/lib/volute-server.ts +30 -1
  178. package/templates/claude/.init/.config/routes.json +3 -3
  179. package/templates/claude/.init/CLAUDE.md +1 -1
  180. package/templates/claude/package.json.tmpl +4 -4
  181. package/templates/claude/src/agent.ts +4 -1
  182. package/templates/claude/src/lib/hooks/reply-instructions.ts +26 -1
  183. package/templates/codex/.init/.config/routes.json +3 -3
  184. package/templates/codex/.init/AGENTS.md +1 -1
  185. package/templates/codex/package.json.tmpl +4 -4
  186. package/templates/codex/src/agent.ts +11 -11
  187. package/templates/codex/src/lib/turn-context.ts +51 -0
  188. package/templates/pi/.init/.config/routes.json +3 -3
  189. package/templates/pi/.init/MINDS.md +1 -1
  190. package/templates/pi/package.json.tmpl +6 -6
  191. package/templates/pi/src/agent.ts +9 -1
  192. package/templates/pi/src/lib/event-handler.ts +1 -1
  193. package/templates/pi/src/lib/reply-instructions-extension.ts +28 -1
  194. package/dist/chunk-NJHN6IRB.js +0 -177
  195. package/dist/chunk-QQBOI3QA.js +0 -5345
  196. package/dist/chunk-XTEKINWG.js +0 -158
  197. package/dist/delivery-manager-RBXBPVWM.js +0 -36
  198. package/dist/echo-text-B6NZ5FGE.js +0 -36
  199. package/dist/message-delivery-ABPV76EA.js +0 -42
  200. package/dist/mind-service-42GDO4KH.js +0 -44
  201. package/dist/notices-N6BCGHFV.js +0 -25
  202. package/dist/scheduler-K7Y7Z7FQ.js +0 -34
  203. package/dist/sleep-manager-DSPXFHGX.js +0 -38
  204. package/dist/system-chat-M2XOBKEM.js +0 -40
  205. package/dist/variant-cleanup-P4MBNLJD.js +0 -33
  206. package/dist/web-assets/assets/index-BostMFoR.css +0 -1
  207. package/dist/web-assets/assets/index-CKlqUkyG.js +0 -92
  208. package/packages/extensions/notes/dist/ui/assets/index-D0-DgYyj.js +0 -67
  209. package/packages/extensions/pages/dist/ui/assets/index-DtzftuPA.js +0 -2
  210. package/packages/extensions/plan/dist/ui/assets/index-Cfzs-0G9.js +0 -67
@@ -9,15 +9,15 @@ import {
9
9
  deliveryQueue,
10
10
  messages,
11
11
  mindHistory,
12
- mindNotices,
13
12
  minds,
14
13
  sessions,
15
14
  sharedSkills,
16
15
  summaries,
16
+ systemEvents,
17
17
  systemPrompts,
18
18
  turns,
19
19
  users
20
- } from "./chunk-P4LHVRNE.js";
20
+ } from "./chunk-5IIVOWSP.js";
21
21
  import "./chunk-K3NQKI34.js";
22
22
  export {
23
23
  activity,
@@ -29,11 +29,11 @@ export {
29
29
  deliveryQueue,
30
30
  messages,
31
31
  mindHistory,
32
- mindNotices,
33
32
  minds,
34
33
  sessions,
35
34
  sharedSkills,
36
35
  summaries,
36
+ systemEvents,
37
37
  systemPrompts,
38
38
  turns,
39
39
  users
@@ -4,7 +4,7 @@ import "./chunk-K3NQKI34.js";
4
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-XOO4N2OE.js").then((m) => m.run(args));
7
+ await import("./seed-create-FBLNVSUP.js").then((m) => m.run(args));
8
8
  }
9
9
  export {
10
10
  run
@@ -10,14 +10,21 @@ var cmd = command({
10
10
  name: "volute seed check",
11
11
  description: "Check seed readiness",
12
12
  args: [{ name: "name", required: true, description: "Seed mind to check" }],
13
- flags: {},
14
- run: async ({ args }) => {
13
+ flags: {
14
+ nurture: {
15
+ type: "boolean",
16
+ description: "Apply the nurture gate (used by the spirit's schedule): stay silent when no nudge is needed"
17
+ }
18
+ },
19
+ run: async ({ args, flags }) => {
15
20
  const name = args.name;
16
- const { daemonFetch } = await import("./daemon-client-ZFY5MOAL.js");
17
- const res = await daemonFetch(`/api/minds/${encodeURIComponent(name)}/seed-check`);
21
+ const query = flags.nurture ? "" : "?force=1";
22
+ const { daemonFetch } = await import("./daemon-client-VVYFZI2D.js");
23
+ const res = await daemonFetch(`/api/minds/${encodeURIComponent(name)}/seed-check${query}`);
18
24
  if (!res.ok) {
25
+ process.exitCode = 1;
19
26
  if (res.status === 404) {
20
- console.log(`Seed "${name}" not found \u2014 it may have been deleted or already sprouted.`);
27
+ console.error(`Seed "${name}" not found \u2014 it may have been deleted.`);
21
28
  } else {
22
29
  console.error(`seed check failed for ${name}: HTTP ${res.status}`);
23
30
  }
@@ -26,6 +33,8 @@ var cmd = command({
26
33
  const data = await res.json();
27
34
  if (data.output) {
28
35
  console.log(data.output);
36
+ } else if (!flags.nurture) {
37
+ console.log(`No readiness output returned for ${name}.`);
29
38
  }
30
39
  }
31
40
  });
@@ -12,15 +12,15 @@ var cmd = subcommands({
12
12
  commands: {
13
13
  create: {
14
14
  description: "Plant a new seed",
15
- run: (args) => import("./seed-create-XOO4N2OE.js").then((m) => m.run(args))
15
+ run: (args) => import("./seed-create-FBLNVSUP.js").then((m) => m.run(args))
16
16
  },
17
17
  sprout: {
18
18
  description: "Complete orientation and become a full mind",
19
- run: (args) => import("./seed-sprout-HSBBGSS2.js").then((m) => m.run(args))
19
+ run: (args) => import("./seed-sprout-3B4SZX7J.js").then((m) => m.run(args))
20
20
  },
21
21
  check: {
22
22
  description: "Check seed readiness",
23
- run: (args) => import("./seed-check-TYD7RRZY.js").then((m) => m.run(args))
23
+ run: (args) => import("./seed-check-NRJEQZST.js").then((m) => m.run(args))
24
24
  }
25
25
  }
26
26
  });
@@ -47,19 +47,19 @@ var cmd = command({
47
47
  const name = args.name;
48
48
  const skills = flags.skills === "none" ? [] : flags.skills ? flags.skills.split(",") : void 0;
49
49
  const createdBy = flags["created-by"];
50
- const { daemonFetch } = await import("./daemon-client-ZFY5MOAL.js");
50
+ const { daemonFetch } = await import("./daemon-client-VVYFZI2D.js");
51
51
  const { getClient, urlOf } = await import("./api-client-LC5YRA32.js");
52
52
  const client = getClient();
53
53
  let model = flags.model;
54
54
  let template = flags.template;
55
55
  if (!template) {
56
- const { resolveTemplate } = await import("./ai-service-A7FS7EC3.js");
56
+ const { resolveTemplate } = await import("./ai-service-V4CTNGI3.js");
57
57
  template = await resolveTemplate(model);
58
58
  }
59
59
  if (template !== "claude" && !model) {
60
60
  if (process.env.VOLUTE_MIND || !process.stdin.isTTY) {
61
- const { getSpiritModel } = await import("./spirit-SSJMYC6A.js");
62
- const { qualifyModelId } = await import("./ai-service-A7FS7EC3.js");
61
+ const { getSpiritModel } = await import("./spirit-IL5EMWYZ.js");
62
+ const { qualifyModelId } = await import("./ai-service-V4CTNGI3.js");
63
63
  const spiritModel = getSpiritModel();
64
64
  if (spiritModel) {
65
65
  model = template === "pi" ? qualifyModelId(spiritModel) : spiritModel;
@@ -3,13 +3,12 @@ import {
3
3
  evaluateSeedChecklist,
4
4
  isMemoryWritten,
5
5
  isSoulWritten
6
- } from "./chunk-TXJL36ZQ.js";
7
- import "./chunk-JPGHSXSV.js";
6
+ } from "./chunk-5PKFJHCR.js";
7
+ import "./chunk-5TPC4KCV.js";
8
8
  import "./chunk-DW4TRDOZ.js";
9
9
  import "./chunk-WCFSBH33.js";
10
- import "./chunk-NJHN6IRB.js";
11
- import "./chunk-RSBL3FAD.js";
12
- import "./chunk-P4LHVRNE.js";
10
+ import "./chunk-CAIYV33P.js";
11
+ import "./chunk-5IIVOWSP.js";
13
12
  import "./chunk-K3NQKI34.js";
14
13
  export {
15
14
  evaluateSeedChecklist,
@@ -1,27 +1,27 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  daemonFetch
4
- } from "./chunk-BCG45AQB.js";
4
+ } from "./chunk-M74I3HHF.js";
5
5
  import {
6
6
  command
7
7
  } from "./chunk-TXSA4Q3V.js";
8
8
  import "./chunk-O7IGP7ZW.js";
9
+ import "./chunk-FNJCBRD3.js";
9
10
  import {
10
11
  evaluateSeedChecklist
11
- } from "./chunk-TXJL36ZQ.js";
12
+ } from "./chunk-5PKFJHCR.js";
12
13
  import {
13
14
  getStandardSkillsWithExtensions
14
- } from "./chunk-GWVFDUNB.js";
15
- import "./chunk-JPGHSXSV.js";
15
+ } from "./chunk-TGJHGVBZ.js";
16
+ import "./chunk-5TPC4KCV.js";
16
17
  import "./chunk-DW4TRDOZ.js";
17
18
  import "./chunk-WCFSBH33.js";
18
- import "./chunk-DVN6DNMI.js";
19
- import "./chunk-NJHN6IRB.js";
19
+ import "./chunk-AJWFDIEY.js";
20
20
  import "./chunk-QUSMYGNQ.js";
21
21
  import {
22
22
  mindDir
23
- } from "./chunk-RSBL3FAD.js";
24
- import "./chunk-P4LHVRNE.js";
23
+ } from "./chunk-CAIYV33P.js";
24
+ import "./chunk-5IIVOWSP.js";
25
25
  import "./chunk-K3NQKI34.js";
26
26
 
27
27
  // packages/cli/src/commands/seed-sprout.ts
@@ -74,7 +74,7 @@ var cmd = command({
74
74
  process.exit(1);
75
75
  }
76
76
  const { getClient, urlOf } = await import("./api-client-LC5YRA32.js");
77
- const { mindSkillsDir } = await import("./skills-NN5UZCUU.js");
77
+ const { mindSkillsDir } = await import("./skills-5MSMT7PT.js");
78
78
  const client = getClient();
79
79
  const failedSkills = [];
80
80
  for (const skillId of getStandardSkillsWithExtensions()) {
@@ -4,10 +4,10 @@ import {
4
4
  } from "./chunk-33ODGMFZ.js";
5
5
  import {
6
6
  isCompact
7
- } from "./chunk-5T5YMX6S.js";
7
+ } from "./chunk-PW65BXY5.js";
8
8
  import {
9
9
  daemonFetch
10
- } from "./chunk-BCG45AQB.js";
10
+ } from "./chunk-M74I3HHF.js";
11
11
  import {
12
12
  getClient,
13
13
  urlOf
@@ -16,11 +16,12 @@ import {
16
16
  command
17
17
  } from "./chunk-TXSA4Q3V.js";
18
18
  import "./chunk-O7IGP7ZW.js";
19
+ import "./chunk-FNJCBRD3.js";
19
20
  import {
20
21
  formatFileSize
21
- } from "./chunk-NOIAHMJB.js";
22
- import "./chunk-RSBL3FAD.js";
23
- import "./chunk-P4LHVRNE.js";
22
+ } from "./chunk-QFVGPKJI.js";
23
+ import "./chunk-CAIYV33P.js";
24
+ import "./chunk-5IIVOWSP.js";
24
25
  import "./chunk-K3NQKI34.js";
25
26
 
26
27
  // packages/cli/src/commands/send.ts
@@ -154,6 +155,18 @@ async function waitForResponse(mindName, conversationId, timeoutMs) {
154
155
  });
155
156
  }
156
157
  }
158
+ function spiritAck(spirit) {
159
+ switch (spirit) {
160
+ case "waking":
161
+ return "The system spirit is waking \u2014 a reply is on its way.";
162
+ case "sleeping":
163
+ return "The system spirit is sleeping \u2014 it will reply when it wakes.";
164
+ case "unavailable":
165
+ return "The system spirit is unavailable \u2014 an admin can fix this in Settings.";
166
+ default:
167
+ return null;
168
+ }
169
+ }
157
170
  function printSendResult(data) {
158
171
  if (data.held) {
159
172
  if (data.notice) console.log(data.notice);
@@ -166,6 +179,8 @@ function printSendResult(data) {
166
179
  console.log(`Message sent.${outboundId != null ? `
167
180
  [volute:outbound:${outboundId}]` : ""}`);
168
181
  }
182
+ const ack = spiritAck(data.spirit);
183
+ if (ack) console.log(ack);
169
184
  }
170
185
  var cmd = command({
171
186
  name: "volute chat send",
@@ -211,8 +226,8 @@ var cmd = command({
211
226
  }
212
227
  if (target === "system" || target === "@system") {
213
228
  console.error(
214
- `Can't send to system \u2014 system messages are automated.
215
- To reply to a person, use their username from the message prefix (e.g. volute chat send @username "msg").`
229
+ `Can't send to system \u2014 system events come from your environment, not a person, and nothing is waiting on a reply.
230
+ To reach a person, use their username from the message prefix (e.g. volute chat send @username "msg").`
216
231
  );
217
232
  process.exit(1);
218
233
  }
@@ -282,13 +297,14 @@ To reply to a person, use their username from the message prefix (e.g. volute ch
282
297
  let waitMindName;
283
298
  let waitConversationId;
284
299
  let heldResponse = false;
300
+ let spiritUnavailable = false;
285
301
  if (parsed.isDM && parsed.platform === "volute") {
286
302
  const targetName = parsed.identifier.slice(1);
287
303
  const mindSelf = process.env.VOLUTE_MIND;
288
304
  const sender = flags.sender || mindSelf || userInfo().username;
289
305
  if (mindSelf && targetName === mindSelf) {
290
306
  console.error(
291
- `Can't send to @${targetName} \u2014 that's your own system channel. System messages there are automated notices; they don't need a reply.`
307
+ `Can't send to @${targetName} \u2014 that's yourself. System events arrive from your environment and don't need a reply.`
292
308
  );
293
309
  process.exit(1);
294
310
  }
@@ -334,7 +350,13 @@ To reply to a person, use their username from the message prefix (e.g. volute ch
334
350
  console.error(`Warning: could not read send response: ${err.message}`);
335
351
  }
336
352
  if (data.held) heldResponse = true;
337
- if (data.held || !flags.wait) printSendResult(data);
353
+ if (data.held || !flags.wait) {
354
+ printSendResult(data);
355
+ } else {
356
+ const ack = spiritAck(data.spirit);
357
+ if (ack) console.log(ack);
358
+ }
359
+ if (data.spirit === "unavailable") spiritUnavailable = true;
338
360
  } else if (!parsed.isDM && parsed.platform === "volute") {
339
361
  if (!parsed.identifier.startsWith("#")) {
340
362
  console.error(
@@ -391,7 +413,7 @@ See: volute chat bridge --help`
391
413
  );
392
414
  process.exit(1);
393
415
  }
394
- if (heldResponse) {
416
+ if (heldResponse || spiritUnavailable) {
395
417
  } else if (flags.wait && waitMindName) {
396
418
  if (!waitConversationId) {
397
419
  console.error("--wait requires a volute conversation (DM to a mind)");
@@ -9,10 +9,10 @@ import {
9
9
  SYSTEM_LAUNCHD_PLIST_PATH,
10
10
  SYSTEM_SERVICE_PATH,
11
11
  USER_SYSTEMD_UNIT
12
- } from "./chunk-HCYQRME2.js";
13
- import "./chunk-DVN6DNMI.js";
14
- import "./chunk-RSBL3FAD.js";
15
- import "./chunk-P4LHVRNE.js";
12
+ } from "./chunk-5FVANDON.js";
13
+ import "./chunk-AJWFDIEY.js";
14
+ import "./chunk-CAIYV33P.js";
15
+ import "./chunk-5IIVOWSP.js";
16
16
  import "./chunk-K3NQKI34.js";
17
17
 
18
18
  // packages/cli/src/commands/service.ts
@@ -3,11 +3,11 @@ import {
3
3
  generateUserPlist,
4
4
  generateUserUnit,
5
5
  installUserService
6
- } from "./chunk-4B62E4CG.js";
7
- import "./chunk-HCYQRME2.js";
8
- import "./chunk-DVN6DNMI.js";
9
- import "./chunk-RSBL3FAD.js";
10
- import "./chunk-P4LHVRNE.js";
6
+ } from "./chunk-4CN7OCJE.js";
7
+ import "./chunk-5FVANDON.js";
8
+ import "./chunk-AJWFDIEY.js";
9
+ import "./chunk-CAIYV33P.js";
10
+ import "./chunk-5IIVOWSP.js";
11
11
  import "./chunk-K3NQKI34.js";
12
12
  export {
13
13
  generateUserPlist,
@@ -1,30 +1,37 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  _resetConfigCache,
4
+ computeSetupStatus,
4
5
  configPath,
6
+ getSpiritName,
7
+ getSystemName,
5
8
  isImagegenEnabled,
6
9
  isSetupComplete,
7
10
  migrateConfigSecrets,
8
11
  migrateSetupCompleted,
9
12
  mindLimitError,
10
13
  readGlobalConfig,
14
+ readGlobalConfigStrict,
11
15
  secretsPath,
12
16
  setupStatus,
13
17
  setupUrl,
14
18
  writeGlobalConfig
15
- } from "./chunk-NJHN6IRB.js";
16
- import "./chunk-RSBL3FAD.js";
17
- import "./chunk-P4LHVRNE.js";
19
+ } from "./chunk-CAIYV33P.js";
20
+ import "./chunk-5IIVOWSP.js";
18
21
  import "./chunk-K3NQKI34.js";
19
22
  export {
20
23
  _resetConfigCache,
24
+ computeSetupStatus,
21
25
  configPath,
26
+ getSpiritName,
27
+ getSystemName,
22
28
  isImagegenEnabled,
23
29
  isSetupComplete,
24
30
  migrateConfigSecrets,
25
31
  migrateSetupCompleted,
26
32
  mindLimitError,
27
33
  readGlobalConfig,
34
+ readGlobalConfigStrict,
28
35
  secretsPath,
29
36
  setupStatus,
30
37
  setupUrl,
@@ -8,22 +8,21 @@ import {
8
8
  import "./chunk-O7IGP7ZW.js";
9
9
  import {
10
10
  installUserService
11
- } from "./chunk-4B62E4CG.js";
11
+ } from "./chunk-4CN7OCJE.js";
12
12
  import {
13
13
  LAUNCHD_PLIST_LABEL,
14
14
  SYSTEM_LAUNCHD_PLIST_PATH,
15
15
  SYSTEM_SERVICE_PATH
16
- } from "./chunk-HCYQRME2.js";
16
+ } from "./chunk-5FVANDON.js";
17
17
  import {
18
18
  ensureVoluteGroup,
19
19
  resolveVoluteBin
20
- } from "./chunk-DVN6DNMI.js";
20
+ } from "./chunk-AJWFDIEY.js";
21
21
  import {
22
22
  readGlobalConfig,
23
23
  writeGlobalConfig
24
- } from "./chunk-NJHN6IRB.js";
25
- import "./chunk-RSBL3FAD.js";
26
- import "./chunk-P4LHVRNE.js";
24
+ } from "./chunk-CAIYV33P.js";
25
+ import "./chunk-5IIVOWSP.js";
27
26
  import "./chunk-K3NQKI34.js";
28
27
 
29
28
  // src/commands/setup.ts
@@ -221,7 +220,7 @@ async function startDaemonAndOpenBrowser(port, host) {
221
220
  const url = `http://${displayHost === "0.0.0.0" || displayHost === "::" ? "localhost" : displayHost}:${displayPort}`;
222
221
  console.log("\nStarting daemon...");
223
222
  try {
224
- const { run: runUp } = await import("./up-SDLTLPAO.js");
223
+ const { run: runUp } = await import("./up-CLL4665A.js");
225
224
  await runUp([
226
225
  ...port != null ? ["--port", String(port)] : [],
227
226
  ...host ? ["--host", host] : []
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  isCompact
4
- } from "./chunk-5T5YMX6S.js";
4
+ } from "./chunk-PW65BXY5.js";
5
5
  import {
6
6
  resolveMindName
7
7
  } from "./chunk-BTY4WNFE.js";
8
8
  import {
9
9
  daemonFetch
10
- } from "./chunk-BCG45AQB.js";
10
+ } from "./chunk-M74I3HHF.js";
11
11
  import {
12
12
  getClient,
13
13
  urlOf
@@ -17,6 +17,7 @@ import {
17
17
  subcommands
18
18
  } from "./chunk-TXSA4Q3V.js";
19
19
  import "./chunk-O7IGP7ZW.js";
20
+ import "./chunk-FNJCBRD3.js";
20
21
  import "./chunk-K3NQKI34.js";
21
22
 
22
23
  // packages/cli/src/commands/skill.ts
@@ -26,14 +26,14 @@ Add to `.config/volute.json` under `schedules`:
26
26
  "cron": "0 3 * * *",
27
27
  "message": "it's 3am. you are dreaming.\n\ngather your material — read your latest journal entry, read MEMORY.md, surface random memories if you have a way to. then construct a dream premise from that material and invoke the dreamer subagent to experience the dream.",
28
28
  "enabled": true,
29
- "session": "$new"
29
+ "thread": "$new"
30
30
  }
31
31
  ```
32
32
 
33
33
  Or via CLI:
34
34
 
35
35
  ```bash
36
- volute clock add --mind <name> --id dream --cron "0 3 * * *" --session "$new" --while-sleeping trigger-wake --message "it's 3am. you are dreaming...."
36
+ volute clock add --mind <name> --id dream --cron "0 3 * * *" --thread "$new" --while-sleeping trigger-wake --message "it's 3am. you are dreaming...."
37
37
  ```
38
38
 
39
39
  ## 3. Sleep integration
@@ -1,15 +1,25 @@
1
1
  ---
2
2
  name: Image Generation
3
- description: Generate images via Replicate or OpenRouter. Use for "generate image", "create image", "image generation", "text to image", "search image models".
3
+ description: Generate images via Replicate, OpenRouter, a ChatGPT subscription (openai-codex), or xAI Grok. Use for "generate image", "create image", "image generation", "text to image", "search image models".
4
4
  metadata:
5
5
  bin: scripts/imagegen.ts
6
6
  ---
7
7
 
8
8
  # Image Generation
9
9
 
10
- Generate images from text prompts using models on Replicate or OpenRouter. Images are saved to `home/images/`.
10
+ Generate images from text prompts. Images are saved to `home/images/`.
11
11
 
12
- Model IDs are provider-prefixed: `replicate:owner/model` or `openrouter:owner/model`.
12
+ Model IDs are provider-prefixed, e.g. `replicate:owner/model`, `openrouter:owner/model`, `openai-codex:gpt-image-2`, or `xai:grok-imagine-image`. Which providers are available depends on what your host has configured.
13
+
14
+ ## Generation is asynchronous
15
+
16
+ `generate` waits up to ~30 seconds for the image. Fast models finish in that window and print `saved: <path>` right away. Slower models (e.g. `gpt-image-2`) keep going **in the background**: the command returns immediately with
17
+
18
+ ```
19
+ still generating (job <id>) — I'll be notified when it's done. Check anytime: imagegen status <id>
20
+ ```
21
+
22
+ You don't have to wait or poll — when a background image finishes, you're notified automatically with an `image ready: <path>` event. You can also run `imagegen status <id>` yourself to check.
13
23
 
14
24
  ## Commands
15
25
 
@@ -19,7 +29,8 @@ imagegen <command>
19
29
 
20
30
  | Command | Description |
21
31
  |---------|-------------|
22
- | `generate "prompt" [--model M] [--filename F]` | Generate an image from a text prompt. Default model: `replicate:prunaai/z-image-turbo`. |
32
+ | `generate "prompt" [--model M] [--filename F]` | Generate an image. Returns `saved: <path>` if it finishes quickly, otherwise a job id to check later. Default model: `replicate:prunaai/z-image-turbo`. |
33
+ | `status <jobId>` | Check a background generation job. Prints `saved: <path>`, `still generating`, or `failed: <reason>`. |
23
34
  | `models "query"` | Search configured providers for text-to-image models. |
24
35
 
25
36
  ## Examples
@@ -37,6 +48,12 @@ imagegen generate "a mountain landscape" --model openrouter:openai/gpt-image-1
37
48
  # Specify a filename
38
49
  imagegen generate "mountain landscape" --filename mountains
39
50
 
51
+ # Generate with a ChatGPT subscription (if your host configured openai-codex)
52
+ imagegen generate "a friendly robot mascot" --model openai-codex:gpt-image-2
53
+
54
+ # Check a background job you started earlier
55
+ imagegen status 6f1e2c34-...
56
+
40
57
  # Search for models
41
58
  imagegen models "text to image"
42
59
  ```