volute 0.45.2 → 0.47.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 (146) hide show
  1. package/README.md +4 -4
  2. package/dist/{activity-events-BUR2RYTJ.js → activity-events-MIOK3IOU.js} +3 -3
  3. package/dist/{ai-service-UODCCE4O.js → ai-service-CVZEYKTK.js} +4 -4
  4. package/dist/{archive-WS2L2VIQ.js → archive-6Z4GFQPH.js} +3 -3
  5. package/dist/{auth-FLAEXXZK.js → auth-A4VGHADI.js} +4 -4
  6. package/dist/avatar-image-7S3WA77A.js +22 -0
  7. package/dist/{backup-TST5C2YN.js → backup-IIAFOW2L.js} +13 -13
  8. package/dist/channels-ITE4YC57.js +89 -0
  9. package/dist/{chat-76MRWWQX.js → chat-AJLJCQ3M.js} +12 -8
  10. package/dist/{chunk-ZV7MFISX.js → chunk-2MJ7EOMT.js} +20 -2
  11. package/dist/{chunk-R77O2WMK.js → chunk-2OIYNHWO.js} +1 -1
  12. package/dist/{chunk-QCN24XEN.js → chunk-3YUBFTDN.js} +1 -1
  13. package/dist/{chunk-NYC5U6K7.js → chunk-4I72V3E5.js} +10 -10
  14. package/dist/{chunk-QNQMSWZE.js → chunk-5IERLDUS.js} +3 -3
  15. package/dist/{chunk-FXORA5JG.js → chunk-5NN2VHJV.js} +3 -3
  16. package/dist/chunk-7KRIHYLR.js +124 -0
  17. package/dist/{chunk-RRNXJOKB.js → chunk-BGYHLR54.js} +2 -2
  18. package/dist/{chunk-QMJCNZ6C.js → chunk-C3KLHJDB.js} +1 -1
  19. package/dist/{chunk-TQJ6ZYVY.js → chunk-CBOIHNMR.js} +2 -2
  20. package/dist/{chunk-H2X54EHC.js → chunk-DGGZVZTM.js} +1 -1
  21. package/dist/{chunk-4JOQZPCE.js → chunk-EIQDZC43.js} +1 -1
  22. package/dist/{chunk-YT7PEESJ.js → chunk-F55GRIEK.js} +464 -221
  23. package/dist/{chunk-OP4JG2BS.js → chunk-HPGN6XRT.js} +8 -4
  24. package/dist/{chunk-7ZUB63PS.js → chunk-IWJSNMSY.js} +5 -5
  25. package/dist/{chunk-ZDZISKCL.js → chunk-IYG4FBMP.js} +1 -1
  26. package/dist/chunk-JCMGDCGX.js +237 -0
  27. package/dist/{clock-K43IMROX.js → chunk-JSVHH32K.js} +26 -21
  28. package/dist/{chunk-UYLGEDVD.js → chunk-K23P5Q5N.js} +340 -339
  29. package/dist/{chunk-7C44R625.js → chunk-LTLFOSA4.js} +49 -3
  30. package/dist/{chunk-IHKGWTGT.js → chunk-LWDTP6DH.js} +1 -1
  31. package/dist/{chunk-JZ62SYWR.js → chunk-M3XDVS5Q.js} +1 -1
  32. package/dist/{chunk-FR6S2KNN.js → chunk-M6TTZRGH.js} +9 -9
  33. package/dist/{chunk-EJVPTVTI.js → chunk-MTRMQFCQ.js} +1 -1
  34. package/dist/{chunk-T6HYVHPG.js → chunk-ODDGGLM6.js} +3 -3
  35. package/dist/{chunk-QLWG3C2Z.js → chunk-RRZ4RQQU.js} +2 -2
  36. package/dist/{chunk-CDPBTTZO.js → chunk-RUFLGTOT.js} +2 -2
  37. package/dist/{chunk-F7H6ATM4.js → chunk-SKNXMUIU.js} +1 -1
  38. package/dist/{chunk-RXEEYDIB.js → chunk-SZJCJVXV.js} +1 -1
  39. package/dist/{chunk-DRJ24GXK.js → chunk-VMCZBXF2.js} +52 -8
  40. package/dist/{chunk-ALKYQULU.js → chunk-WW6C3PLV.js} +1 -1
  41. package/dist/{chunk-A7WQZKOU.js → chunk-XHN6XBWV.js} +2 -2
  42. package/dist/{chunk-6EMWJZBK.js → chunk-YKA7DCVW.js} +1 -1
  43. package/dist/cli.js +24 -24
  44. package/dist/clock-E6N5Y3YW.js +16 -0
  45. package/dist/{cloud-sync-3OJOPZRT.js → cloud-sync-LQTVDTQ3.js} +19 -17
  46. package/dist/{conversations-JZTD6KLR.js → conversations-C7IKYSHD.js} +4 -4
  47. package/dist/{create-IOV4GCRX.js → create-PQQXKTJK.js} +1 -1
  48. package/dist/{daemon-restart-TIHKVVVA.js → daemon-restart-5F3YTLZK.js} +7 -7
  49. package/dist/daemon.js +418 -273
  50. package/dist/{db-MF2JNRUW.js → db-FO6LXYCW.js} +2 -2
  51. package/dist/{delete-BFMIGAIB.js → delete-HPLC7ETU.js} +1 -1
  52. package/dist/delivery-manager-TN5KK2AP.js +34 -0
  53. package/dist/{delivery-router-N4A7ZC5T.js → delivery-router-3QFG2ZEX.js} +3 -3
  54. package/dist/{down-U2CZ23M4.js → down-ZI4S6265.js} +5 -5
  55. package/dist/echo-text-SEQCLGAT.js +34 -0
  56. package/dist/{exec-G3ZRST4Z.js → exec-QIFYZG4C.js} +3 -3
  57. package/dist/{export-GGIVO76O.js → export-4GVGNW54.js} +6 -6
  58. package/dist/{extensions-JONTW2HF.js → extensions-PIMIQ7J3.js} +21 -17
  59. package/dist/{files-4LN3EN7Q.js → files-FEFZKMNM.js} +6 -6
  60. package/dist/{import-42YNQBF4.js → import-7MO3YTRE.js} +6 -6
  61. package/dist/{isolation-YMGZZ4E5.js → isolation-MCT4ZYLT.js} +3 -3
  62. package/dist/{login-M6OJUPQ2.js → login-OF4WXDAN.js} +5 -5
  63. package/dist/{logout-WQBWO77G.js → logout-ERE2BGA3.js} +5 -5
  64. package/dist/message-delivery-ZE3YGJDD.js +38 -0
  65. package/dist/{mind-DWB6XYCH.js → mind-POOHFZHP.js} +18 -18
  66. package/dist/{mind-activity-tracker-POBLU3LC.js → mind-activity-tracker-YVZPC4A5.js} +4 -4
  67. package/dist/{mind-list-4D7J4CHD.js → mind-list-KEGRGQEQ.js} +5 -4
  68. package/dist/mind-service-JFY7UG5E.js +40 -0
  69. package/dist/mind-sleep-IN3WPA76.js +83 -0
  70. package/dist/{mind-status-UO34ASXZ.js → mind-status-SMUWJKGV.js} +20 -3
  71. package/dist/{package-A7KXT67Q.js → package-WPEE2HVJ.js} +3 -2
  72. package/dist/{registry-OUZBZ3Q4.js → registry-UMMDRPRM.js} +2 -2
  73. package/dist/{sandbox-ZJ7QA6Z6.js → sandbox-G4X4K3UN.js} +4 -4
  74. package/dist/scheduler-HQSDYJFY.js +32 -0
  75. package/dist/{schema-PVNG3PQM.js → schema-VEVO7HG6.js} +3 -1
  76. package/dist/{seed-HCP5NYKH.js → seed-VANPU43L.js} +1 -1
  77. package/dist/{seed-cmd-ILOGNIFB.js → seed-cmd-SYVDZKM4.js} +2 -2
  78. package/dist/{seed-create-OURS2LS4.js → seed-create-3FGZPS6C.js} +5 -5
  79. package/dist/{seed-sprout-ELDFDAN6.js → seed-sprout-H7QLFPFM.js} +13 -11
  80. package/dist/{send-AAIOPJAV.js → send-HYDFGC6G.js} +13 -7
  81. package/dist/{service-UOCLXDWR.js → service-SYJ5G6LP.js} +4 -4
  82. package/dist/{service-install-4HHFDDWY.js → service-install-FQ43Z4DF.js} +5 -5
  83. package/dist/{setup-Y2EJI3GG.js → setup-KFYVWTXG.js} +3 -3
  84. package/dist/{setup-DQM5VPY4.js → setup-QJHGMGSN.js} +7 -7
  85. package/dist/skills/orientation/SKILL.md +1 -1
  86. package/dist/skills/volute-mind/SKILL.md +8 -8
  87. package/dist/skills/volute-mind/references/sleep.md +8 -1
  88. package/dist/{skills-BKINFL7W.js → skills-L2CMTW7A.js} +5 -5
  89. package/dist/sleep-manager-3NA7ZJP3.js +36 -0
  90. package/dist/{spirit-DBTIW7P4.js → spirit-WXN4IDBF.js} +8 -8
  91. package/dist/{sprout-W3KC7UGK.js → sprout-LTL5P36T.js} +1 -1
  92. package/dist/{status-SWRVGXBI.js → status-V4RJMHJ4.js} +19 -9
  93. package/dist/system-chat-N2F7HVY3.js +38 -0
  94. package/dist/{systems-VNB5WKSS.js → systems-B5YJKMW4.js} +6 -6
  95. package/dist/{tailscale-3XOKOW7T.js → tailscale-MCLY5GYE.js} +2 -2
  96. package/dist/{template-hash-446HHH5V.js → template-hash-GSOUARW4.js} +2 -2
  97. package/dist/template-staleness-EMQORSGG.js +15 -0
  98. package/dist/{turn-tracker-2W6Q2NSR.js → turn-tracker-JZRZDFWV.js} +6 -5
  99. package/dist/{up-FTK7CTO3.js → up-J2PBPOZL.js} +6 -6
  100. package/dist/{update-SWAYZRWJ.js → update-ACV4SAY3.js} +5 -5
  101. package/dist/{update-check-PQ2MZ47K.js → update-check-266R4ZSY.js} +3 -3
  102. package/dist/{version-notify-3XMAIQTE.js → version-notify-XRGTEEDK.js} +42 -23
  103. package/dist/web-assets/assets/index-DtctoDXY.css +1 -0
  104. package/dist/web-assets/assets/index-Wpyb2CML.js +86 -0
  105. package/dist/web-assets/index.html +2 -2
  106. package/drizzle/0011_drop_turn_summary_event_id.sql +3 -0
  107. package/drizzle/0012_channel_gates.sql +17 -0
  108. package/drizzle/meta/_journal.json +14 -0
  109. package/package.json +3 -2
  110. package/templates/_base/home/VOLUTE.md +6 -2
  111. package/templates/_base/src/lib/context-breakdown.ts +57 -67
  112. package/templates/_base/src/lib/startup.ts +43 -2
  113. package/templates/_base/src/lib/volute-server.ts +2 -2
  114. package/templates/claude/src/agent.ts +105 -43
  115. package/templates/claude/src/lib/session-reaper.ts +63 -0
  116. package/templates/claude/src/server.ts +10 -1
  117. package/templates/codex/src/agent.ts +62 -40
  118. package/templates/pi/src/agent.ts +55 -38
  119. package/dist/avatar-image-6KY6UU4D.js +0 -16
  120. package/dist/delivery-manager-VDVKVA46.js +0 -32
  121. package/dist/echo-text-6JJOPUD4.js +0 -32
  122. package/dist/message-delivery-3C65ZI6L.js +0 -34
  123. package/dist/mind-service-3F4I46CI.js +0 -36
  124. package/dist/mind-sleep-YMBR3I35.js +0 -47
  125. package/dist/scheduler-P6DXLLXI.js +0 -30
  126. package/dist/sleep-manager-HCUH4PM4.js +0 -34
  127. package/dist/system-chat-XOALE2RD.js +0 -36
  128. package/dist/web-assets/assets/index-B1JBQv2m.css +0 -1
  129. package/dist/web-assets/assets/index-Bc2m8gRC.js +0 -86
  130. package/dist/{accept-N5XULCXK.js → accept-YAFP5JFJ.js} +3 -3
  131. package/dist/{bridge-2PO3AI5D.js → bridge-TIZGSXOD.js} +3 -3
  132. package/dist/{create-DF3KISTW.js → create-A7PDHIIL.js} +3 -3
  133. package/dist/{env-VZ4MLFQW.js → env-HRL2PWAT.js} +5 -5
  134. package/dist/{extension-SEID47SR.js → extension-QBY4C44L.js} +3 -3
  135. package/dist/{list-OXIAY3W7.js → list-LQO2DCIK.js} +3 -3
  136. package/dist/{login-MY6ETFYB.js → login-6TLMI2TQ.js} +3 -3
  137. package/dist/{logout-NCG3TMDL.js → logout-BK53HXNY.js} +3 -3
  138. package/dist/{mind-history-VRO5A76U.js → mind-history-47DN6ILW.js} +4 -4
  139. package/dist/{mind-wake-LCLGTXA2.js → mind-wake-R54BPESY.js} +3 -3
  140. package/dist/{read-QVAXMTPV.js → read-PWAJOQIQ.js} +3 -3
  141. package/dist/{register-Y2H4PY5R.js → register-7SZJFHU6.js} +3 -3
  142. package/dist/{reject-EV35X64Y.js → reject-6VH7N2A4.js} +3 -3
  143. package/dist/{restart-FJQ662XJ.js → restart-H5WJDMA7.js} +4 -4
  144. package/dist/{skill-FKFHIJRR.js → skill-GUKG2YVH.js} +5 -5
  145. package/dist/{start-5JE3TV66.js → start-X46I3GXB.js} +4 -4
  146. package/dist/{stop-AAMTG3TU.js → stop-HJQV4YSM.js} +4 -4
@@ -2,13 +2,13 @@
2
2
  import {
3
3
  resolveMindName
4
4
  } from "./chunk-BTY4WNFE.js";
5
- import {
6
- daemonFetch
7
- } from "./chunk-RBNMDAKB.js";
8
5
  import {
9
6
  command
10
7
  } from "./chunk-TXSA4Q3V.js";
11
8
  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/mind-status.ts
@@ -41,6 +41,9 @@ var cmd = command({
41
41
  if (mind.stage) console.log(`Stage: ${mind.stage}`);
42
42
  if (mind.parent) console.log(`Parent: ${mind.parent}`);
43
43
  if (mind.model) console.log(`Model: ${mind.model}`);
44
+ if (mind.templateStale) {
45
+ console.log(`Template: outdated \u2014 run 'volute mind upgrade ${mind.name}'`);
46
+ }
44
47
  if (mind.channels && mind.channels.length > 0) {
45
48
  console.log(`
46
49
  Channels:`);
@@ -57,6 +60,20 @@ Variants:`);
57
60
  }
58
61
  if (mind.hasPages) console.log(`
59
62
  Pages: published`);
63
+ const pendingRes = await daemonFetch(
64
+ `/api/minds/${encodeURIComponent(name)}/delivery/pending`
65
+ ).catch(() => null);
66
+ if (pendingRes?.ok) {
67
+ const pending = await pendingRes.json().catch(() => []);
68
+ if (pending.length > 0) {
69
+ const total = pending.reduce((sum, p) => sum + p.count, 0);
70
+ console.log(`
71
+ Gated channels (held, unrouted): ${total} message(s)`);
72
+ for (const p of pending) {
73
+ console.log(` ${p.channel ?? "unknown"}: ${p.count}`);
74
+ }
75
+ }
76
+ }
60
77
  }
61
78
  });
62
79
  var run = cmd.execute;
@@ -4,7 +4,7 @@ import "./chunk-K3NQKI34.js";
4
4
  // package.json
5
5
  var package_default = {
6
6
  name: "volute",
7
- version: "0.45.2",
7
+ version: "0.47.0",
8
8
  description: "CLI for creating and managing self-modifying AI minds powered by the Claude Agent SDK",
9
9
  type: "module",
10
10
  license: "MIT",
@@ -83,6 +83,7 @@ var package_default = {
83
83
  "isomorphic-dompurify": "^2.36.0",
84
84
  libsql: "^0.5.29",
85
85
  replicate: "^1.4.0",
86
+ sharp: "^0.35.2",
86
87
  telegraf: "^4.16.3",
87
88
  undici: "^6.24.1",
88
89
  zod: "^4.4.3"
@@ -98,8 +99,8 @@ var package_default = {
98
99
  "drizzle-kit": "^0.31.10",
99
100
  lefthook: "^2.1.9",
100
101
  marked: "^18.0.5",
101
- sharp: "^0.35.2",
102
102
  svelte: "^5.56.3",
103
+ "svelte-check": "4.7.1",
103
104
  tsup: "^8.5.1",
104
105
  tsx: "^4.22.4",
105
106
  typescript: "^6.0.3",
@@ -28,8 +28,8 @@ import {
28
28
  voluteHome,
29
29
  voluteSystemDir,
30
30
  voluteUserHome
31
- } from "./chunk-ALKYQULU.js";
32
- import "./chunk-ZV7MFISX.js";
31
+ } from "./chunk-WW6C3PLV.js";
32
+ import "./chunk-2MJ7EOMT.js";
33
33
  import "./chunk-K3NQKI34.js";
34
34
  export {
35
35
  SPIRIT_NAME,
@@ -7,11 +7,11 @@ import {
7
7
  isSandboxOptional,
8
8
  shellEscape,
9
9
  wrapForSandbox
10
- } from "./chunk-JZ62SYWR.js";
11
- import "./chunk-F7H6ATM4.js";
10
+ } from "./chunk-M3XDVS5Q.js";
11
+ import "./chunk-SKNXMUIU.js";
12
12
  import "./chunk-T2TP6ZC6.js";
13
- import "./chunk-ALKYQULU.js";
14
- import "./chunk-ZV7MFISX.js";
13
+ import "./chunk-WW6C3PLV.js";
14
+ import "./chunk-2MJ7EOMT.js";
15
15
  import "./chunk-K3NQKI34.js";
16
16
  export {
17
17
  SandboxUnavailableError,
@@ -0,0 +1,32 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ Scheduler,
4
+ getScheduler,
5
+ initScheduler
6
+ } from "./chunk-F55GRIEK.js";
7
+ import "./chunk-IYG4FBMP.js";
8
+ import "./chunk-M6TTZRGH.js";
9
+ import "./chunk-RRZ4RQQU.js";
10
+ import "./chunk-K23P5Q5N.js";
11
+ import "./chunk-JCMGDCGX.js";
12
+ import "./chunk-IWJSNMSY.js";
13
+ import "./chunk-HPGN6XRT.js";
14
+ import "./chunk-M3XDVS5Q.js";
15
+ import "./chunk-MTRMQFCQ.js";
16
+ import "./chunk-VMCZBXF2.js";
17
+ import "./chunk-PFZBNKUH.js";
18
+ import "./chunk-EIQDZC43.js";
19
+ import "./chunk-DGGZVZTM.js";
20
+ import "./chunk-LWDTP6DH.js";
21
+ import "./chunk-SKNXMUIU.js";
22
+ import "./chunk-ODDGGLM6.js";
23
+ import "./chunk-LTLFOSA4.js";
24
+ import "./chunk-T2TP6ZC6.js";
25
+ import "./chunk-WW6C3PLV.js";
26
+ import "./chunk-2MJ7EOMT.js";
27
+ import "./chunk-K3NQKI34.js";
28
+ export {
29
+ Scheduler,
30
+ getScheduler,
31
+ initScheduler
32
+ };
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  activity,
4
+ channelGates,
4
5
  channels,
5
6
  conversationParticipants,
6
7
  conversationReads,
@@ -16,10 +17,11 @@ import {
16
17
  systemPrompts,
17
18
  turns,
18
19
  users
19
- } from "./chunk-ZV7MFISX.js";
20
+ } from "./chunk-2MJ7EOMT.js";
20
21
  import "./chunk-K3NQKI34.js";
21
22
  export {
22
23
  activity,
24
+ channelGates,
23
25
  channels,
24
26
  conversationParticipants,
25
27
  conversationReads,
@@ -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-OURS2LS4.js").then((m) => m.run(args));
7
+ await import("./seed-create-3FGZPS6C.js").then((m) => m.run(args));
8
8
  }
9
9
  export {
10
10
  run
@@ -12,11 +12,11 @@ var cmd = subcommands({
12
12
  commands: {
13
13
  create: {
14
14
  description: "Plant a new seed",
15
- run: (args) => import("./seed-create-OURS2LS4.js").then((m) => m.run(args))
15
+ run: (args) => import("./seed-create-3FGZPS6C.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-ELDFDAN6.js").then((m) => m.run(args))
19
+ run: (args) => import("./seed-sprout-H7QLFPFM.js").then((m) => m.run(args))
20
20
  },
21
21
  check: {
22
22
  description: "Check seed readiness",
@@ -34,8 +34,8 @@ Choose a model [1-${enabled.length}]: `);
34
34
  }
35
35
  var cmd = command({
36
36
  name: "volute seed create",
37
- description: "Plant a new seed mind",
38
- args: [{ name: "name", required: true, description: "Name for the seed mind" }],
37
+ description: "Plant a new seed",
38
+ args: [{ name: "name", required: true, description: "Name for the seed" }],
39
39
  flags: {
40
40
  template: { type: "string", description: "Template to use" },
41
41
  model: { type: "string", description: "AI model to use" },
@@ -53,13 +53,13 @@ var cmd = command({
53
53
  let model = flags.model;
54
54
  let template = flags.template;
55
55
  if (!template) {
56
- const { resolveTemplate } = await import("./ai-service-UODCCE4O.js");
56
+ const { resolveTemplate } = await import("./ai-service-CVZEYKTK.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-DBTIW7P4.js");
62
- const { qualifyModelId } = await import("./ai-service-UODCCE4O.js");
61
+ const { getSpiritModel } = await import("./spirit-WXN4IDBF.js");
62
+ const { qualifyModelId } = await import("./ai-service-CVZEYKTK.js");
63
63
  const spiritModel = getSpiritModel();
64
64
  if (spiritModel) {
65
65
  model = template === "pi" ? qualifyModelId(spiritModel) : spiritModel;
@@ -1,27 +1,29 @@
1
1
  #!/usr/bin/env node
2
- import {
3
- daemonFetch
4
- } from "./chunk-RBNMDAKB.js";
5
2
  import {
6
3
  command
7
4
  } from "./chunk-TXSA4Q3V.js";
8
5
  import "./chunk-O7IGP7ZW.js";
6
+ import {
7
+ daemonFetch
8
+ } from "./chunk-RBNMDAKB.js";
9
+ import {
10
+ ORIENTATION_MARKER
11
+ } from "./chunk-JCMGDCGX.js";
9
12
  import {
10
13
  getStandardSkillsWithExtensions
11
- } from "./chunk-7ZUB63PS.js";
12
- import "./chunk-H2X54EHC.js";
13
- import "./chunk-F7H6ATM4.js";
14
+ } from "./chunk-IWJSNMSY.js";
15
+ import "./chunk-DGGZVZTM.js";
16
+ import "./chunk-SKNXMUIU.js";
14
17
  import "./chunk-T2TP6ZC6.js";
15
18
  import {
16
19
  mindDir
17
- } from "./chunk-ALKYQULU.js";
18
- import "./chunk-ZV7MFISX.js";
20
+ } from "./chunk-WW6C3PLV.js";
21
+ import "./chunk-2MJ7EOMT.js";
19
22
  import "./chunk-K3NQKI34.js";
20
23
 
21
24
  // packages/cli/src/commands/seed-sprout.ts
22
25
  import { existsSync, readFileSync } from "fs";
23
26
  import { resolve } from "path";
24
- var ORIENTATION_MARKER = "You don't have a soul yet";
25
27
  var cmd = command({
26
28
  name: "volute seed sprout",
27
29
  description: "Complete orientation and become a full mind (run by the seed itself)",
@@ -60,7 +62,7 @@ var cmd = command({
60
62
  console.error("Write your MEMORY.md before sprouting.");
61
63
  process.exit(1);
62
64
  }
63
- const { isImagegenEnabled } = await import("./setup-Y2EJI3GG.js");
65
+ const { isImagegenEnabled } = await import("./setup-KFYVWTXG.js");
64
66
  if (isImagegenEnabled()) {
65
67
  const { readVoluteConfig } = await import("./volute-config-A52FHWKM.js");
66
68
  const config = readVoluteConfig(dir);
@@ -73,7 +75,7 @@ var cmd = command({
73
75
  }
74
76
  }
75
77
  const { getClient, urlOf } = await import("./api-client-LC5YRA32.js");
76
- const { mindSkillsDir } = await import("./skills-BKINFL7W.js");
78
+ const { mindSkillsDir } = await import("./skills-L2CMTW7A.js");
77
79
  const client = getClient();
78
80
  const failedSkills = [];
79
81
  for (const skillId of getStandardSkillsWithExtensions()) {
@@ -5,6 +5,10 @@ import {
5
5
  import {
6
6
  isCompact
7
7
  } from "./chunk-5T5YMX6S.js";
8
+ import {
9
+ command
10
+ } from "./chunk-TXSA4Q3V.js";
11
+ import "./chunk-O7IGP7ZW.js";
8
12
  import {
9
13
  daemonFetch
10
14
  } from "./chunk-RBNMDAKB.js";
@@ -12,15 +16,11 @@ import {
12
16
  getClient,
13
17
  urlOf
14
18
  } from "./chunk-LOPXTW6H.js";
15
- import {
16
- command
17
- } from "./chunk-TXSA4Q3V.js";
18
- import "./chunk-O7IGP7ZW.js";
19
19
  import {
20
20
  formatFileSize
21
- } from "./chunk-R77O2WMK.js";
22
- import "./chunk-ALKYQULU.js";
23
- import "./chunk-ZV7MFISX.js";
21
+ } from "./chunk-2OIYNHWO.js";
22
+ import "./chunk-WW6C3PLV.js";
23
+ import "./chunk-2MJ7EOMT.js";
24
24
  import "./chunk-K3NQKI34.js";
25
25
 
26
26
  // packages/cli/src/commands/send.ts
@@ -286,6 +286,12 @@ To reply to a person, use their username from the message prefix (e.g. volute ch
286
286
  const targetName = parsed.identifier.slice(1);
287
287
  const mindSelf = process.env.VOLUTE_MIND;
288
288
  const sender = flags.sender || mindSelf || userInfo().username;
289
+ if (mindSelf && targetName === mindSelf) {
290
+ 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.`
292
+ );
293
+ process.exit(1);
294
+ }
289
295
  const targetIsMind = await isMind(targetName);
290
296
  waitMindName = targetIsMind ? targetName : void 0;
291
297
  const contextMind = mindSelf ?? targetName;
@@ -9,10 +9,10 @@ import {
9
9
  SYSTEM_LAUNCHD_PLIST_PATH,
10
10
  SYSTEM_SERVICE_PATH,
11
11
  USER_SYSTEMD_UNIT
12
- } from "./chunk-TQJ6ZYVY.js";
13
- import "./chunk-H2X54EHC.js";
14
- import "./chunk-ALKYQULU.js";
15
- import "./chunk-ZV7MFISX.js";
12
+ } from "./chunk-CBOIHNMR.js";
13
+ import "./chunk-DGGZVZTM.js";
14
+ import "./chunk-WW6C3PLV.js";
15
+ import "./chunk-2MJ7EOMT.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-CDPBTTZO.js";
7
- import "./chunk-TQJ6ZYVY.js";
8
- import "./chunk-H2X54EHC.js";
9
- import "./chunk-ALKYQULU.js";
10
- import "./chunk-ZV7MFISX.js";
6
+ } from "./chunk-RUFLGTOT.js";
7
+ import "./chunk-CBOIHNMR.js";
8
+ import "./chunk-DGGZVZTM.js";
9
+ import "./chunk-WW6C3PLV.js";
10
+ import "./chunk-2MJ7EOMT.js";
11
11
  import "./chunk-K3NQKI34.js";
12
12
  export {
13
13
  generateUserPlist,
@@ -9,9 +9,9 @@ import {
9
9
  readGlobalConfig,
10
10
  secretsPath,
11
11
  writeGlobalConfig
12
- } from "./chunk-F7H6ATM4.js";
13
- import "./chunk-ALKYQULU.js";
14
- import "./chunk-ZV7MFISX.js";
12
+ } from "./chunk-SKNXMUIU.js";
13
+ import "./chunk-WW6C3PLV.js";
14
+ import "./chunk-2MJ7EOMT.js";
15
15
  import "./chunk-K3NQKI34.js";
16
16
  export {
17
17
  _resetConfigCache,
@@ -8,22 +8,22 @@ import {
8
8
  import "./chunk-O7IGP7ZW.js";
9
9
  import {
10
10
  installUserService
11
- } from "./chunk-CDPBTTZO.js";
11
+ } from "./chunk-RUFLGTOT.js";
12
12
  import {
13
13
  LAUNCHD_PLIST_LABEL,
14
14
  SYSTEM_LAUNCHD_PLIST_PATH,
15
15
  SYSTEM_SERVICE_PATH
16
- } from "./chunk-TQJ6ZYVY.js";
16
+ } from "./chunk-CBOIHNMR.js";
17
17
  import {
18
18
  ensureVoluteGroup,
19
19
  resolveVoluteBin
20
- } from "./chunk-H2X54EHC.js";
20
+ } from "./chunk-DGGZVZTM.js";
21
21
  import {
22
22
  readGlobalConfig,
23
23
  writeGlobalConfig
24
- } from "./chunk-F7H6ATM4.js";
25
- import "./chunk-ALKYQULU.js";
26
- import "./chunk-ZV7MFISX.js";
24
+ } from "./chunk-SKNXMUIU.js";
25
+ import "./chunk-WW6C3PLV.js";
26
+ import "./chunk-2MJ7EOMT.js";
27
27
  import "./chunk-K3NQKI34.js";
28
28
 
29
29
  // src/commands/setup.ts
@@ -221,7 +221,7 @@ async function startDaemonAndOpenBrowser(port, host) {
221
221
  const url = `http://${displayHost === "0.0.0.0" || displayHost === "::" ? "localhost" : displayHost}:${displayPort}`;
222
222
  console.log("\nStarting daemon...");
223
223
  try {
224
- const { run: runUp } = await import("./up-FTK7CTO3.js");
224
+ const { run: runUp } = await import("./up-J2PBPOZL.js");
225
225
  await runUp([
226
226
  ...port != null ? ["--port", String(port)] : [],
227
227
  ...host ? ["--host", host] : []
@@ -44,7 +44,7 @@ Once you have a sense of who you are:
44
44
  5. Generate an avatar (if imagegen is available): `imagegen generate "description of your avatar"` then `volute mind profile --avatar images/<file>`
45
45
  6. Run `volute seed sprout` to complete the transformation.
46
46
 
47
- After sprouting, you'll have full mind capabilities (connectors, schedules, variants, etc.).
47
+ After sprouting, you'll have full mind capabilities (bridges to external platforms, schedules, variants, etc.).
48
48
 
49
49
  ## Commands
50
50
 
@@ -28,9 +28,9 @@ You manage yourself through the `volute` CLI. Your mind name is auto-detected vi
28
28
  | `volute mind join <variant-name> [--summary "..." --justification "..." --memory "..."]` | Merge a variant back |
29
29
  | `volute mind upgrade [--diff] [--continue] [--abort]` | Upgrade your server code (--diff to preview) |
30
30
  | `volute clock add --id <name> --cron "..." --message/--script "..."` | Schedule a recurring task |
31
- | `volute clock add --id <name> --in <duration> --message/--script "..."` | Set a one-time timer (10m, 1h, 2h30m) |
32
- | `volute clock list` | List your schedules and timers |
33
- | `volute clock remove --id <id>` | Remove a schedule or timer |
31
+ | `volute clock add --id <name> --in <duration> --message/--script "..."` | Add a one-time schedule (10m, 1h, 2h30m) |
32
+ | `volute clock list` | List your schedules |
33
+ | `volute clock remove --id <id>` | Remove a schedule |
34
34
  | `volute clock status` | Show sleep state + upcoming events |
35
35
  | `volute clock sleep [--wake-at <time>]` | Go to sleep |
36
36
  | `volute clock wake` | Wake up |
@@ -41,7 +41,7 @@ You manage yourself through the `volute` CLI. Your mind name is auto-detected vi
41
41
 
42
42
  ## Clock
43
43
 
44
- The clock system manages your schedules, timers, and sleep/wake cycles. Use `volute clock` for all time-related operations.
44
+ The clock system manages your schedules and sleep/wake cycles. Use `volute clock` for all time-related operations.
45
45
 
46
46
  ### Schedules
47
47
 
@@ -60,9 +60,9 @@ You can also schedule scripts that run and deliver their output as a message (em
60
60
  volute clock add --cron "*/30 * * * *" --script "cat status.txt" --id check-status
61
61
  ```
62
62
 
63
- ### Timers
63
+ ### One-time schedules
64
64
 
65
- Set one-time timers that fire once and then auto-delete:
65
+ Use `--in` for schedules that fire once and then auto-delete:
66
66
 
67
67
  ```sh
68
68
  volute clock add --id check-task --in 30m --message "check on that task"
@@ -144,7 +144,7 @@ For group conversations, use `volute chat create --participants mind-b,mind-c --
144
144
 
145
145
  ## Configuration
146
146
 
147
- Your `.config/volute.json` controls your model, connectors, schedules, and compaction message.
147
+ Your `.config/volute.json` controls your model, schedules, sleep cycle, and profile.
148
148
 
149
149
  ### Profile
150
150
 
@@ -168,7 +168,7 @@ Your profile is synced automatically when you start. Other minds see your profil
168
168
 
169
169
  ### Transparency
170
170
 
171
- The `transparency` setting in `.config/volute.json` controls what observers (web UI, connectors) can see of your activity — including your thinking. Presets:
171
+ The `transparency` setting in `.config/volute.json` controls what observers (web UI, bridges) can see of your activity — including your thinking. Presets:
172
172
 
173
173
  | Preset | Thinking | Text | Tool use | Tool results | Logs | Usage/lifecycle |
174
174
  |--------|----------|------|----------|--------------|------|-----------------|
@@ -29,5 +29,12 @@ When trigger-woken, you get one full turn to respond, then return to sleep when
29
29
  You can go to sleep any time with `volute clock sleep`. Optionally set a wake time:
30
30
 
31
31
  ```sh
32
- volute clock sleep --wake-at "2025-01-15T07:00:00Z"
32
+ volute clock sleep --wake-at 8h # a duration from now (2h30m, 45m, ...)
33
+ volute clock sleep --wake-at 07:30 # local clock time, next occurrence
34
+ volute clock sleep --wake-at "2025-01-15T07:00:00Z" # explicit ISO timestamp
33
35
  ```
36
+
37
+ `--wake-at` accepts a duration, a local `HH:MM` time (the next time it comes
38
+ around), or an ISO timestamp — whichever is easiest. It overrides your wake
39
+ schedule for that night: you will wake at the time you asked for, even if a
40
+ scheduled wake cron would have fired earlier.
@@ -27,12 +27,12 @@ import {
27
27
  syncBuiltinSkills,
28
28
  uninstallSkill,
29
29
  updateSkill
30
- } from "./chunk-7ZUB63PS.js";
31
- import "./chunk-H2X54EHC.js";
32
- import "./chunk-F7H6ATM4.js";
30
+ } from "./chunk-IWJSNMSY.js";
31
+ import "./chunk-DGGZVZTM.js";
32
+ import "./chunk-SKNXMUIU.js";
33
33
  import "./chunk-T2TP6ZC6.js";
34
- import "./chunk-ALKYQULU.js";
35
- import "./chunk-ZV7MFISX.js";
34
+ import "./chunk-WW6C3PLV.js";
35
+ import "./chunk-2MJ7EOMT.js";
36
36
  import "./chunk-K3NQKI34.js";
37
37
  export {
38
38
  SEED_SKILLS,
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ SleepManager,
4
+ getSleepManager,
5
+ getSleepManagerIfReady,
6
+ initSleepManager,
7
+ matchesGlob
8
+ } from "./chunk-F55GRIEK.js";
9
+ import "./chunk-IYG4FBMP.js";
10
+ import "./chunk-M6TTZRGH.js";
11
+ import "./chunk-RRZ4RQQU.js";
12
+ import "./chunk-K23P5Q5N.js";
13
+ import "./chunk-JCMGDCGX.js";
14
+ import "./chunk-IWJSNMSY.js";
15
+ import "./chunk-HPGN6XRT.js";
16
+ import "./chunk-M3XDVS5Q.js";
17
+ import "./chunk-MTRMQFCQ.js";
18
+ import "./chunk-VMCZBXF2.js";
19
+ import "./chunk-PFZBNKUH.js";
20
+ import "./chunk-EIQDZC43.js";
21
+ import "./chunk-DGGZVZTM.js";
22
+ import "./chunk-LWDTP6DH.js";
23
+ import "./chunk-SKNXMUIU.js";
24
+ import "./chunk-ODDGGLM6.js";
25
+ import "./chunk-LTLFOSA4.js";
26
+ import "./chunk-T2TP6ZC6.js";
27
+ import "./chunk-WW6C3PLV.js";
28
+ import "./chunk-2MJ7EOMT.js";
29
+ import "./chunk-K3NQKI34.js";
30
+ export {
31
+ SleepManager,
32
+ getSleepManager,
33
+ getSleepManagerIfReady,
34
+ initSleepManager,
35
+ matchesGlob
36
+ };
@@ -4,16 +4,16 @@ import {
4
4
  getSpiritModel,
5
5
  spiritDir,
6
6
  syncSpiritTemplate
7
- } from "./chunk-FR6S2KNN.js";
8
- import "./chunk-QLWG3C2Z.js";
9
- import "./chunk-7ZUB63PS.js";
7
+ } from "./chunk-M6TTZRGH.js";
8
+ import "./chunk-RRZ4RQQU.js";
9
+ import "./chunk-IWJSNMSY.js";
10
10
  import "./chunk-PFZBNKUH.js";
11
- import "./chunk-H2X54EHC.js";
12
- import "./chunk-IHKGWTGT.js";
13
- import "./chunk-F7H6ATM4.js";
11
+ import "./chunk-DGGZVZTM.js";
12
+ import "./chunk-LWDTP6DH.js";
13
+ import "./chunk-SKNXMUIU.js";
14
14
  import "./chunk-T2TP6ZC6.js";
15
- import "./chunk-ALKYQULU.js";
16
- import "./chunk-ZV7MFISX.js";
15
+ import "./chunk-WW6C3PLV.js";
16
+ import "./chunk-2MJ7EOMT.js";
17
17
  import "./chunk-K3NQKI34.js";
18
18
  export {
19
19
  ensureSpiritProject,
@@ -4,7 +4,7 @@ import "./chunk-K3NQKI34.js";
4
4
  // packages/cli/src/commands/sprout.ts
5
5
  async function run(args) {
6
6
  console.error("Note: `volute mind sprout` is now `volute seed sprout`");
7
- await import("./seed-sprout-ELDFDAN6.js").then((m) => m.run(args));
7
+ await import("./seed-sprout-H7QLFPFM.js").then((m) => m.run(args));
8
8
  }
9
9
  export {
10
10
  run
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
- import {
3
- getAuthToken
4
- } from "./chunk-RBNMDAKB.js";
5
2
  import {
6
3
  command
7
4
  } from "./chunk-TXSA4Q3V.js";
8
5
  import "./chunk-O7IGP7ZW.js";
6
+ import {
7
+ getAuthToken
8
+ } from "./chunk-RBNMDAKB.js";
9
9
  import {
10
10
  checkForUpdate
11
- } from "./chunk-6EMWJZBK.js";
11
+ } from "./chunk-YKA7DCVW.js";
12
12
  import {
13
13
  LAUNCHD_PLIST_LABEL,
14
14
  LAUNCHD_PLIST_PATH,
@@ -19,10 +19,10 @@ import {
19
19
  getServiceMode,
20
20
  modeLabel,
21
21
  readDaemonConfig
22
- } from "./chunk-TQJ6ZYVY.js";
23
- import "./chunk-H2X54EHC.js";
24
- import "./chunk-ALKYQULU.js";
25
- import "./chunk-ZV7MFISX.js";
22
+ } from "./chunk-CBOIHNMR.js";
23
+ import "./chunk-DGGZVZTM.js";
24
+ import "./chunk-WW6C3PLV.js";
25
+ import "./chunk-2MJ7EOMT.js";
26
26
  import "./chunk-K3NQKI34.js";
27
27
 
28
28
  // src/commands/status.ts
@@ -85,7 +85,17 @@ Minds (${minds.length}):`);
85
85
  for (const mind of minds) {
86
86
  const status = mind.status ?? (mind.running ? "running" : "stopped");
87
87
  const label = mind.stage === "seed" ? " (seed)" : "";
88
- console.log(` ${mind.name}: ${status}${label}`);
88
+ const template = mind.templateStale ? " [template: outdated]" : "";
89
+ console.log(` ${mind.name}: ${status}${label}${template}`);
90
+ }
91
+ const stale = minds.filter((m) => m.templateStale).map((m) => m.name);
92
+ if (stale.length > 0) {
93
+ const subject = stale.length === 1 ? "mind is" : "minds are";
94
+ const object = stale.length === 1 ? "an outdated template" : "outdated templates";
95
+ console.log(
96
+ `
97
+ \u26A0 ${stale.length} ${subject} running ${object}: ${stale.join(", ")} \u2014 run 'volute mind upgrade <name>'`
98
+ );
89
99
  }
90
100
  } else {
91
101
  console.log("\nNo minds configured.");
@@ -0,0 +1,38 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ ensureSystemDM,
4
+ generateSystemFallbackReply,
5
+ resetSystemDMCache,
6
+ sendSystemMessage,
7
+ sendSystemMessageDirect,
8
+ shouldGenerateSystemFallback
9
+ } from "./chunk-F55GRIEK.js";
10
+ import "./chunk-IYG4FBMP.js";
11
+ import "./chunk-M6TTZRGH.js";
12
+ import "./chunk-RRZ4RQQU.js";
13
+ import "./chunk-K23P5Q5N.js";
14
+ import "./chunk-JCMGDCGX.js";
15
+ import "./chunk-IWJSNMSY.js";
16
+ import "./chunk-HPGN6XRT.js";
17
+ import "./chunk-M3XDVS5Q.js";
18
+ import "./chunk-MTRMQFCQ.js";
19
+ import "./chunk-VMCZBXF2.js";
20
+ import "./chunk-PFZBNKUH.js";
21
+ import "./chunk-EIQDZC43.js";
22
+ import "./chunk-DGGZVZTM.js";
23
+ import "./chunk-LWDTP6DH.js";
24
+ import "./chunk-SKNXMUIU.js";
25
+ import "./chunk-ODDGGLM6.js";
26
+ import "./chunk-LTLFOSA4.js";
27
+ import "./chunk-T2TP6ZC6.js";
28
+ import "./chunk-WW6C3PLV.js";
29
+ import "./chunk-2MJ7EOMT.js";
30
+ import "./chunk-K3NQKI34.js";
31
+ export {
32
+ ensureSystemDM,
33
+ generateSystemFallbackReply,
34
+ resetSystemDMCache,
35
+ sendSystemMessage,
36
+ sendSystemMessageDirect,
37
+ shouldGenerateSystemFallback
38
+ };