volute 0.30.1 → 0.31.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 (169) hide show
  1. package/dist/{accept-E3PAH3QJ.js → accept-GAKQ3MEH.js} +4 -4
  2. package/dist/{activity-events-BKBPPUBP.js → activity-events-T5ZRCVAL.js} +2 -2
  3. package/dist/{ai-service-VAJT5UBS.js → ai-service-UWUPM4T6.js} +5 -3
  4. package/dist/api.d.ts +238 -111
  5. package/dist/{archive-WWDBWYN2.js → archive-YBNSJYZZ.js} +2 -2
  6. package/dist/auth-T5AW2USD.js +43 -0
  7. package/dist/{bridge-RO37CUFM.js → bridge-4AJ3EY26.js} +4 -4
  8. package/dist/{chat-TCUNPFGO.js → chat-7YLT7FI3.js} +8 -8
  9. package/dist/{chunk-EFVHR7KH.js → chunk-4OUOFS23.js} +24 -5
  10. package/dist/{chunk-G3GBKZGG.js → chunk-57OKQMP3.js} +54 -2
  11. package/dist/chunk-6QIUN46C.js +38 -0
  12. package/dist/{chunk-FSM45XD5.js → chunk-AAO77TZX.js} +1 -1
  13. package/dist/{chunk-DTC6EH5I.js → chunk-BC3P3QCK.js} +1 -1
  14. package/dist/{chunk-P7VFDSSG.js → chunk-BNC43CSY.js} +2 -2
  15. package/dist/{chunk-QVAQ5454.js → chunk-BWKIHH7B.js} +3080 -2099
  16. package/dist/{chunk-IKHDUZRH.js → chunk-DAXJKPHZ.js} +2 -2
  17. package/dist/{chunk-P27RV5WM.js → chunk-EKDWA7E4.js} +3 -1
  18. package/dist/{chunk-S5LR3XYJ.js → chunk-EMPFLFTG.js} +1 -1
  19. package/dist/{chunk-2C2VXEBB.js → chunk-FAHDKPEH.js} +18 -56
  20. package/dist/{chunk-W5OOPLNP.js → chunk-HDKY4TWU.js} +3 -3
  21. package/dist/{chunk-EFP3PE6C.js → chunk-HR5JKIDG.js} +2 -12
  22. package/dist/{chunk-JGFRDMR6.js → chunk-LX6T3GKQ.js} +1 -1
  23. package/dist/{chunk-2NDZC3S7.js → chunk-NOWVQ7AL.js} +447 -299
  24. package/dist/{chunk-ZWKTUQEL.js → chunk-NV3TYNWX.js} +1 -1
  25. package/dist/{chunk-NSBFETWP.js → chunk-PNQCXLSV.js} +7 -26
  26. package/dist/chunk-R5QJBZZG.js +175 -0
  27. package/dist/{chunk-MDPCSXZ4.js → chunk-S2TZLSDH.js} +4 -4
  28. package/dist/{chunk-FXHXHI2A.js → chunk-SNVPRRT7.js} +3 -6
  29. package/dist/{chunk-UPA6COHU.js → chunk-WRS3B556.js} +5 -5
  30. package/dist/{chunk-HHTXM4JT.js → chunk-X62AXPR7.js} +36 -4
  31. package/dist/cli.js +74 -23
  32. package/dist/{clock-G3ALCMLJ.js → clock-LJCG426D.js} +10 -8
  33. package/dist/{cloud-sync-JV4LJOK3.js → cloud-sync-O3LXIRN6.js} +13 -13
  34. package/dist/{conversations-7KVQV7EZ.js → conversations-RKKGP5IA.js} +7 -7
  35. package/dist/{create-VQSQHJQW.js → create-TL623TFC.js} +1 -1
  36. package/dist/{create-JTLS7GX3.js → create-WUTIIRI2.js} +4 -4
  37. package/dist/daemon-client-CVGM25DM.js +11 -0
  38. package/dist/{daemon-restart-4JGBHEJ4.js → daemon-restart-EZP7XH3V.js} +6 -7
  39. package/dist/daemon.js +1879 -1727
  40. package/dist/{db-HMFPIRO2.js → db-SW5PL6QA.js} +1 -1
  41. package/dist/{delete-JESHKE7F.js → delete-Z6HAG35F.js} +1 -1
  42. package/dist/down-TS4XQBA4.js +13 -0
  43. package/dist/{env-CLXXT7M2.js → env-NHESNNSP.js} +4 -4
  44. package/dist/{export-EGA5M5PB.js → export-EVMP7GWY.js} +3 -3
  45. package/dist/{extension-WZ4SUPJB.js → extension-LR7EW3JF.js} +5 -6
  46. package/dist/{extensions-ECO4RPFQ.js → extensions-NGEJI7JH.js} +7 -7
  47. package/dist/{files-4VEJDASH.js → files-3SM7V33S.js} +5 -5
  48. package/dist/{history-EJMMLXDO.js → history-PQD3LXEP.js} +4 -4
  49. package/dist/{import-YCGPMBSI.js → import-PR2OCGQJ.js} +3 -3
  50. package/dist/{join-2GBJKZEN.js → join-R4EN5CWQ.js} +1 -1
  51. package/dist/{list-Q6O7FGAN.js → list-B4XNUOFO.js} +4 -4
  52. package/dist/{login-RL6AU2SM.js → login-62JVY6A2.js} +4 -4
  53. package/dist/{login-RET5WESK.js → login-URWP6S2N.js} +2 -2
  54. package/dist/{logout-CGAGJN3L.js → logout-NXJQJDLI.js} +2 -2
  55. package/dist/{logout-JRPBEMMR.js → logout-ZK2N62T3.js} +2 -2
  56. package/dist/message-delivery-UJHCLVU4.js +30 -0
  57. package/dist/{mind-LUWRQUQ5.js → mind-E2ZV2WRX.js} +17 -17
  58. package/dist/{mind-activity-tracker-VYN2ZZ2M.js → mind-activity-tracker-ASNZBMLC.js} +3 -3
  59. package/dist/{mind-list-V5WW5DUA.js → mind-list-BEI7E5WY.js} +2 -2
  60. package/dist/mind-manager-IPA6DZXD.js +26 -0
  61. package/dist/{mind-sleep-R6PTNNW4.js → mind-sleep-CANABWJI.js} +4 -4
  62. package/dist/{mind-status-I4ISFJ6I.js → mind-status-6WKZVUOP.js} +2 -2
  63. package/dist/{mind-wake-67ZQEWAV.js → mind-wake-RZKLH2IN.js} +4 -4
  64. package/dist/{package-OYUD4ZJ4.js → package-NU4CA7OU.js} +3 -3
  65. package/dist/{pages-watcher-Z3PKNROC.js → pages-watcher-72OVPRMH.js} +4 -3
  66. package/dist/read-THL362EI.js +74 -0
  67. package/dist/{register-NZDSTLP3.js → register-QAQELAS6.js} +4 -4
  68. package/dist/{registry-ODSALQQL.js → registry-ASXCQCNH.js} +1 -1
  69. package/dist/{reject-2HZOJEIJ.js → reject-AYPBNPNL.js} +4 -4
  70. package/dist/{restart-QHS3NT64.js → restart-6SKPV3T2.js} +4 -4
  71. package/dist/{sandbox-O5FUSF43.js → sandbox-6ZEWQDVU.js} +3 -3
  72. package/dist/{seed-WUQMPLDM.js → seed-OWX2AW75.js} +36 -12
  73. package/dist/{send-OAN3RYYY.js → send-ZO4BTWXK.js} +5 -5
  74. package/dist/{setup-QMDK5RZX.js → setup-7CFITEQN.js} +2 -4
  75. package/dist/{setup-XJH3E7YM.js → setup-ZXBXG7E4.js} +6 -8
  76. package/dist/{skill-FZIN4W4Q.js → skill-YFXP67A2.js} +4 -4
  77. package/dist/skills/dreaming/references/INSTALL.md +2 -3
  78. package/dist/skills/dreaming/scripts/dream.ts +3 -25
  79. package/dist/skills/volute-mind/SKILL.md +1 -1
  80. package/dist/sleep-manager-TPS6OGCA.js +30 -0
  81. package/dist/{split-EXYGGGQN.js → split-MI62KJUU.js} +1 -1
  82. package/dist/{sprout-AXQ6H5DB.js → sprout-FDVI2CGN.js} +5 -6
  83. package/dist/{start-MTOVL6SY.js → start-D64BRKPH.js} +4 -4
  84. package/dist/{status-ZRO37MWR.js → status-ZZWBYFGE.js} +4 -5
  85. package/dist/{stop-OK5WEPVC.js → stop-OP2CTXCO.js} +4 -4
  86. package/dist/system-chat-B43GIXQU.js +30 -0
  87. package/dist/{systems-W3BBMSOZ.js → systems-EQPPT4B7.js} +5 -5
  88. package/dist/{tailscale-BM72RXCJ.js → tailscale-6DJKUMNF.js} +1 -1
  89. package/dist/up-TDXEP3VA.js +16 -0
  90. package/dist/{update-PLPHMMZ2.js → update-KUJXATRS.js} +4 -5
  91. package/dist/{update-check-CVCN7MF6.js → update-check-5WVSU37T.js} +2 -2
  92. package/dist/{upgrade-I6NPCYUU.js → upgrade-KBHCWX6T.js} +1 -1
  93. package/dist/{version-notify-2NTWVEHL.js → version-notify-75ELVKPV.js} +17 -21
  94. package/dist/web-assets/assets/index-BM1cTzBg.js +72 -0
  95. package/dist/web-assets/assets/index-BfJkKTPF.css +1 -0
  96. package/dist/web-assets/ext-theme.css +1 -0
  97. package/dist/web-assets/index.html +2 -2
  98. package/drizzle/0000_baseline.sql +152 -0
  99. package/drizzle/0001_add_conversation_private.sql +1 -0
  100. package/drizzle/0002_turns.sql +21 -0
  101. package/drizzle/0003_turn_feed_links.sql +11 -0
  102. package/drizzle/meta/0000_snapshot.json +3 -223
  103. package/drizzle/meta/0001_snapshot.json +3 -294
  104. package/drizzle/meta/0002_snapshot.json +3 -335
  105. package/drizzle/meta/0003_snapshot.json +3 -413
  106. package/drizzle/meta/_journal.json +8 -106
  107. package/package.json +3 -3
  108. package/packages/extensions/notes/dist/ui/assets/{index-DgawVO5g.css → index-B8GdTnXs.css} +1 -1
  109. package/packages/extensions/notes/dist/ui/assets/index-CDpGTCWb.js +2 -0
  110. package/packages/extensions/notes/dist/ui/index.html +2 -2
  111. package/packages/extensions/notes/skills/notes/SKILL.md +8 -8
  112. package/packages/extensions/pages/skills/pages/SKILL.md +7 -4
  113. package/packages/extensions/pages/skills/pages/scripts/pages.mjs +58 -0
  114. package/templates/_base/.init/.config/bin/volute +27 -0
  115. package/templates/_base/src/lib/auto-commit.ts +82 -43
  116. package/templates/_base/src/lib/daemon-client.ts +19 -23
  117. package/templates/_base/src/lib/router.ts +17 -1
  118. package/templates/_base/src/lib/startup.ts +6 -8
  119. package/templates/_base/src/lib/volute-server.ts +2 -5
  120. package/templates/claude/src/agent.ts +2 -1
  121. package/templates/claude/src/lib/hooks/auto-commit.ts +7 -3
  122. package/templates/claude/src/server.ts +0 -9
  123. package/templates/pi/package.json.tmpl +1 -1
  124. package/templates/pi/src/agent.ts +1 -1
  125. package/templates/pi/src/lib/event-handler.ts +5 -3
  126. package/dist/chunk-7D47T4RB.js +0 -84
  127. package/dist/chunk-CVH6Y2YG.js +0 -59
  128. package/dist/chunk-LIRWLNAK.js +0 -729
  129. package/dist/daemon-client-BCTFGVCZ.js +0 -9
  130. package/dist/down-NGBMGORS.js +0 -14
  131. package/dist/message-delivery-6YMVNOEC.js +0 -28
  132. package/dist/migrate-registry-to-db-FK35IPEH.js +0 -110
  133. package/dist/mind-manager-YFCOIAAX.js +0 -18
  134. package/dist/read-WQMPTSN2.js +0 -46
  135. package/dist/sleep-manager-O7YQFCV5.js +0 -30
  136. package/dist/up-BXUAIDXB.js +0 -17
  137. package/dist/web-assets/assets/index--kREqKl9.js +0 -72
  138. package/dist/web-assets/assets/index-BXYTG0nJ.css +0 -1
  139. package/drizzle/0000_flaky_mariko_yashida.sql +0 -34
  140. package/drizzle/0001_careless_warpath.sql +0 -12
  141. package/drizzle/0002_wealthy_the_call.sql +0 -6
  142. package/drizzle/0003_clean_ego.sql +0 -12
  143. package/drizzle/0004_magical_silverclaw.sql +0 -1
  144. package/drizzle/0005_rename_agents_to_minds.sql +0 -11
  145. package/drizzle/0006_mind_history.sql +0 -20
  146. package/drizzle/0007_system_prompts.sql +0 -5
  147. package/drizzle/0008_volute_channels.sql +0 -24
  148. package/drizzle/0009_shared_skills.sql +0 -9
  149. package/drizzle/0010_delivery_queue.sql +0 -12
  150. package/drizzle/0011_rename_human_to_brain.sql +0 -1
  151. package/drizzle/0012_activity.sql +0 -11
  152. package/drizzle/0013_user_profiles.sql +0 -3
  153. package/drizzle/0014_conversation_reads.sql +0 -7
  154. package/drizzle/0015_notes.sql +0 -23
  155. package/drizzle/0016_note_reactions_and_replies.sql +0 -15
  156. package/drizzle/0017_minds.sql +0 -16
  157. package/drizzle/meta/0004_snapshot.json +0 -410
  158. package/drizzle/meta/0005_snapshot.json +0 -410
  159. package/drizzle/meta/0006_snapshot.json +0 -7
  160. package/drizzle/meta/0007_snapshot.json +0 -7
  161. package/drizzle/meta/0008_snapshot.json +0 -7
  162. package/drizzle/meta/0009_snapshot.json +0 -7
  163. package/drizzle/meta/0010_snapshot.json +0 -7
  164. package/drizzle/meta/0011_snapshot.json +0 -7
  165. package/drizzle/meta/0012_snapshot.json +0 -7
  166. package/drizzle/meta/0013_snapshot.json +0 -7
  167. package/packages/extensions/notes/dist/ui/assets/index-qUWoeC4c.js +0 -2
  168. package/packages/extensions/notes/skills/notes/scripts/notes.mjs +0 -185
  169. package/templates/_base/home/public/.gitkeep +0 -0
@@ -2,13 +2,13 @@
2
2
  import {
3
3
  resolveMindName
4
4
  } from "./chunk-NAOW2CLO.js";
5
- import {
6
- daemonFetch
7
- } from "./chunk-EFVHR7KH.js";
8
5
  import {
9
6
  parseArgs
10
7
  } from "./chunk-D424ZQGI.js";
11
- import "./chunk-HHTXM4JT.js";
8
+ import {
9
+ daemonFetch
10
+ } from "./chunk-4OUOFS23.js";
11
+ import "./chunk-X62AXPR7.js";
12
12
  import "./chunk-K3NQKI34.js";
13
13
 
14
14
  // src/commands/chat/reject.ts
@@ -2,14 +2,14 @@
2
2
  import {
3
3
  resolveMindName
4
4
  } from "./chunk-NAOW2CLO.js";
5
- import {
6
- daemonFetch
7
- } from "./chunk-EFVHR7KH.js";
8
5
  import {
9
6
  getClient,
10
7
  urlOf
11
8
  } from "./chunk-4RQBJWQX.js";
12
- import "./chunk-HHTXM4JT.js";
9
+ import {
10
+ daemonFetch
11
+ } from "./chunk-4OUOFS23.js";
12
+ import "./chunk-X62AXPR7.js";
13
13
  import "./chunk-K3NQKI34.js";
14
14
 
15
15
  // src/commands/restart.ts
@@ -5,10 +5,10 @@ import {
5
5
  isSandboxEnabled,
6
6
  shellEscape,
7
7
  wrapForSandbox
8
- } from "./chunk-IKHDUZRH.js";
8
+ } from "./chunk-DAXJKPHZ.js";
9
9
  import "./chunk-YUIHSKR6.js";
10
- import "./chunk-7D47T4RB.js";
11
- import "./chunk-HHTXM4JT.js";
10
+ import "./chunk-6QIUN46C.js";
11
+ import "./chunk-X62AXPR7.js";
12
12
  import "./chunk-K3NQKI34.js";
13
13
  export {
14
14
  buildDenyRead,
@@ -1,10 +1,36 @@
1
1
  #!/usr/bin/env node
2
+ import {
3
+ promptLine
4
+ } from "./chunk-SSI47XP2.js";
2
5
  import {
3
6
  parseArgs
4
7
  } from "./chunk-D424ZQGI.js";
5
8
  import "./chunk-K3NQKI34.js";
6
9
 
7
10
  // src/commands/seed.ts
11
+ async function chooseModel(daemonFetch) {
12
+ const res = await daemonFetch("/api/system/ai/models");
13
+ if (!res.ok) {
14
+ console.error(`Failed to fetch AI models (HTTP ${res.status}). Is the daemon running?`);
15
+ process.exit(1);
16
+ }
17
+ const models = await res.json();
18
+ const enabled = models.filter((m) => m.enabled);
19
+ if (enabled.length === 0) return void 0;
20
+ console.log("\nAvailable models:");
21
+ for (let i = 0; i < enabled.length; i++) {
22
+ console.log(` ${i + 1}) ${enabled[i].name} (${enabled[i].provider})`);
23
+ }
24
+ const answer = await promptLine(`
25
+ Choose a model [1-${enabled.length}]: `);
26
+ const idx = parseInt(answer, 10) - 1;
27
+ if (Number.isNaN(idx) || idx < 0 || idx >= enabled.length) {
28
+ console.error("Invalid selection");
29
+ process.exit(1);
30
+ }
31
+ const chosen = enabled[idx];
32
+ return `${chosen.provider}:${chosen.id}`;
33
+ }
8
34
  async function run(args) {
9
35
  const { positional, flags } = parseArgs(args, {
10
36
  template: { type: "string" },
@@ -21,9 +47,17 @@ async function run(args) {
21
47
  }
22
48
  const template = flags.template ?? "claude";
23
49
  const skills = flags.skills === "none" ? [] : flags.skills ? flags.skills.split(",") : void 0;
24
- const { daemonFetch } = await import("./daemon-client-BCTFGVCZ.js");
50
+ const { daemonFetch } = await import("./daemon-client-CVGM25DM.js");
25
51
  const { getClient, urlOf } = await import("./api-client-YPKOZP2O.js");
26
52
  const client = getClient();
53
+ let model = flags.model;
54
+ if (template === "pi" && !model) {
55
+ model = await chooseModel(daemonFetch);
56
+ if (!model) {
57
+ console.error("No AI models configured. Set up providers in the web dashboard first.");
58
+ process.exit(1);
59
+ }
60
+ }
27
61
  const createRes = await daemonFetch(urlOf(client.api.minds.$url()), {
28
62
  method: "POST",
29
63
  headers: { "Content-Type": "application/json" },
@@ -32,7 +66,7 @@ async function run(args) {
32
66
  template,
33
67
  stage: "seed",
34
68
  description: flags.description,
35
- model: flags.model,
69
+ model,
36
70
  skills
37
71
  })
38
72
  });
@@ -50,16 +84,6 @@ async function run(args) {
50
84
  console.error(startData.error ?? "Failed to start mind");
51
85
  process.exit(1);
52
86
  }
53
- const initialMessage = "You've just been created. A human planted you as a seed. Start a conversation with them \u2014 introduce yourself, ask questions, and begin exploring who you want to be.";
54
- await daemonFetch(urlOf(client.api.minds[":name"].message.$url({ param: { name } })), {
55
- method: "POST",
56
- headers: { "Content-Type": "application/json" },
57
- body: JSON.stringify({
58
- content: [{ type: "text", text: initialMessage }],
59
- channel: "system",
60
- sender: "system"
61
- })
62
- });
63
87
  console.log(`
64
88
  Seeded mind: ${name} (port ${createData.port})`);
65
89
  console.log(`
@@ -2,20 +2,20 @@
2
2
  import {
3
3
  resolveMindName
4
4
  } from "./chunk-NAOW2CLO.js";
5
- import {
6
- daemonFetch
7
- } from "./chunk-EFVHR7KH.js";
8
5
  import {
9
6
  getClient,
10
7
  urlOf
11
8
  } from "./chunk-4RQBJWQX.js";
12
9
  import {
13
10
  formatFileSize
14
- } from "./chunk-JGFRDMR6.js";
11
+ } from "./chunk-LX6T3GKQ.js";
15
12
  import {
16
13
  parseArgs
17
14
  } from "./chunk-D424ZQGI.js";
18
- import "./chunk-HHTXM4JT.js";
15
+ import {
16
+ daemonFetch
17
+ } from "./chunk-4OUOFS23.js";
18
+ import "./chunk-X62AXPR7.js";
19
19
  import "./chunk-K3NQKI34.js";
20
20
 
21
21
  // src/commands/send.ts
@@ -2,16 +2,14 @@
2
2
  import {
3
3
  configPath,
4
4
  isSetupComplete,
5
- migrateSetupConfig,
6
5
  readGlobalConfig,
7
6
  writeGlobalConfig
8
- } from "./chunk-7D47T4RB.js";
9
- import "./chunk-HHTXM4JT.js";
7
+ } from "./chunk-6QIUN46C.js";
8
+ import "./chunk-X62AXPR7.js";
10
9
  import "./chunk-K3NQKI34.js";
11
10
  export {
12
11
  configPath,
13
12
  isSetupComplete,
14
- migrateSetupConfig,
15
13
  readGlobalConfig,
16
14
  writeGlobalConfig
17
15
  };
@@ -5,24 +5,22 @@ import {
5
5
  SYSTEM_LAUNCHD_PLIST_PATH,
6
6
  SYSTEM_SERVICE_PATH,
7
7
  USER_SYSTEMD_UNIT
8
- } from "./chunk-FXHXHI2A.js";
8
+ } from "./chunk-SNVPRRT7.js";
9
9
  import {
10
10
  promptLine
11
11
  } from "./chunk-SSI47XP2.js";
12
12
  import {
13
+ ensureVoluteGroup,
13
14
  resolveVoluteBin
14
- } from "./chunk-CVH6Y2YG.js";
15
- import {
16
- ensureVoluteGroup
17
- } from "./chunk-G3GBKZGG.js";
15
+ } from "./chunk-57OKQMP3.js";
18
16
  import {
19
17
  readGlobalConfig,
20
18
  writeGlobalConfig
21
- } from "./chunk-7D47T4RB.js";
19
+ } from "./chunk-6QIUN46C.js";
22
20
  import {
23
21
  parseArgs
24
22
  } from "./chunk-D424ZQGI.js";
25
- import "./chunk-HHTXM4JT.js";
23
+ import "./chunk-X62AXPR7.js";
26
24
  import "./chunk-K3NQKI34.js";
27
25
 
28
26
  // src/commands/setup.ts
@@ -385,7 +383,7 @@ Install as a service (auto-start on boot)? [${serviceDefault}]: `;
385
383
  if (aiProvider) {
386
384
  const aiApiKey = (await promptLine("API key (leave empty to use env var): ")).trim();
387
385
  if (aiApiKey) {
388
- const { saveProviderConfig } = await import("./ai-service-VAJT5UBS.js");
386
+ const { saveProviderConfig } = await import("./ai-service-UWUPM4T6.js");
389
387
  saveProviderConfig(aiProvider, { apiKey: aiApiKey });
390
388
  console.log(` AI provider configured: ${aiProvider}`);
391
389
  } else {
@@ -2,9 +2,6 @@
2
2
  import {
3
3
  resolveMindName
4
4
  } from "./chunk-NAOW2CLO.js";
5
- import {
6
- daemonFetch
7
- } from "./chunk-EFVHR7KH.js";
8
5
  import {
9
6
  getClient,
10
7
  urlOf
@@ -12,7 +9,10 @@ import {
12
9
  import {
13
10
  parseArgs
14
11
  } from "./chunk-D424ZQGI.js";
15
- import "./chunk-HHTXM4JT.js";
12
+ import {
13
+ daemonFetch
14
+ } from "./chunk-4OUOFS23.js";
15
+ import "./chunk-X62AXPR7.js";
16
16
  import "./chunk-K3NQKI34.js";
17
17
 
18
18
  // src/commands/skill.ts
@@ -9,7 +9,6 @@ npx tsx .claude/skills/dreaming/scripts/dream.ts install
9
9
  ```
10
10
 
11
11
  This sets up:
12
- - `system:dream` route in `.config/routes.json`
13
12
  - `dreamer` subagent in `.config/config.json`
14
13
  - Dream checker in `.config/hooks/wake-context.sh`
15
14
 
@@ -27,14 +26,14 @@ Add to `.config/volute.json` under `schedules`:
27
26
  "cron": "0 3 * * *",
28
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.",
29
28
  "enabled": true,
30
- "channel": "system:dream"
29
+ "session": "$new"
31
30
  }
32
31
  ```
33
32
 
34
33
  Or via CLI:
35
34
 
36
35
  ```bash
37
- volute clock add --mind <name> --id dream --cron "0 3 * * *" --channel system:dream --while-sleeping trigger-wake --message "it's 3am. you are dreaming...."
36
+ volute clock add --mind <name> --id dream --cron "0 3 * * *" --session "$new" --while-sleeping trigger-wake --message "it's 3am. you are dreaming...."
38
37
  ```
39
38
 
40
39
  ## 3. Sleep integration
@@ -6,28 +6,7 @@ const dreamsDir = resolve("memory/dreams");
6
6
  function install() {
7
7
  let actions = 0;
8
8
 
9
- // 1. Add system:dream route to routes.json
10
- const routesPath = resolve(".config/routes.json");
11
- if (existsSync(routesPath)) {
12
- try {
13
- const routes = JSON.parse(readFileSync(routesPath, "utf-8"));
14
- const rules: { channel: string; session: string }[] = routes.rules ?? [];
15
- const hasDreamRoute = rules.some((r) => r.channel === "system:dream");
16
- if (!hasDreamRoute) {
17
- rules.push({ channel: "system:dream", session: "$new" });
18
- routes.rules = rules;
19
- writeFileSync(routesPath, `${JSON.stringify(routes, null, 2)}\n`);
20
- console.log("added system:dream route to .config/routes.json");
21
- actions++;
22
- }
23
- } catch (err: any) {
24
- console.error(`failed to update routes.json: ${err.message}`);
25
- }
26
- } else {
27
- console.warn("warning: .config/routes.json not found — skipping route setup");
28
- }
29
-
30
- // 2. Add dreamer subagent to config.json
9
+ // 1. Add dreamer subagent to config.json
31
10
  const configPath = resolve(".config/config.json");
32
11
  if (existsSync(configPath)) {
33
12
  try {
@@ -52,7 +31,7 @@ function install() {
52
31
  console.warn("warning: .config/config.json not found — skipping subagent setup");
53
32
  }
54
33
 
55
- // 3. Append dream checker to wake-context hook (if not already present)
34
+ // 2. Append dream checker to wake-context hook (if not already present)
56
35
  const hookPath = resolve(".config/hooks/wake-context.sh");
57
36
  if (existsSync(hookPath)) {
58
37
  try {
@@ -77,9 +56,8 @@ function install() {
77
56
  console.log(
78
57
  `\ndone (${actions} change${actions === 1 ? "" : "s"}). restart your mind to activate subagent.`,
79
58
  );
80
- console.log("\nremaining manual steps:");
59
+ console.log("\nremaining manual step:");
81
60
  console.log(" 1. add a dream schedule to volute.json (see INSTALL.md)");
82
- console.log(" 2. optionally add system:dream to sleep.wakeTriggers");
83
61
  }
84
62
  }
85
63
 
@@ -77,7 +77,7 @@ Duration format: `30s`, `10m`, `1h`, `2h30m`.
77
77
  Control what happens to a schedule when you're sleeping with `--while-sleeping`:
78
78
 
79
79
  ```sh
80
- volute clock add --id dream --cron "0 3 * * *" --message "dream time" --channel system:dream --while-sleeping trigger-wake
80
+ volute clock add --id dream --cron "0 3 * * *" --message "dream time" --session "$new" --while-sleeping trigger-wake
81
81
  volute clock add --id morning-check --cron "0 9 * * *" --message "morning check" --while-sleeping skip
82
82
  ```
83
83
 
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ SleepManager,
4
+ getSleepManager,
5
+ getSleepManagerIfReady,
6
+ initSleepManager,
7
+ matchesGlob
8
+ } from "./chunk-BWKIHH7B.js";
9
+ import "./chunk-FAHDKPEH.js";
10
+ import "./chunk-DAXJKPHZ.js";
11
+ import "./chunk-AAO77TZX.js";
12
+ import "./chunk-NOWVQ7AL.js";
13
+ import "./chunk-R5QJBZZG.js";
14
+ import "./chunk-EKDWA7E4.js";
15
+ import "./chunk-S2TZLSDH.js";
16
+ import "./chunk-NV3TYNWX.js";
17
+ import "./chunk-PNQCXLSV.js";
18
+ import "./chunk-YUIHSKR6.js";
19
+ import "./chunk-57OKQMP3.js";
20
+ import "./chunk-6QIUN46C.js";
21
+ import "./chunk-A6TUJJ3L.js";
22
+ import "./chunk-X62AXPR7.js";
23
+ import "./chunk-K3NQKI34.js";
24
+ export {
25
+ SleepManager,
26
+ getSleepManager,
27
+ getSleepManagerIfReady,
28
+ initSleepManager,
29
+ matchesGlob
30
+ };
@@ -27,7 +27,7 @@ async function run(args) {
27
27
  process.exit(1);
28
28
  }
29
29
  if (!json) console.log("Creating variant via daemon...");
30
- const { daemonFetch } = await import("./daemon-client-BCTFGVCZ.js");
30
+ const { daemonFetch } = await import("./daemon-client-CVGM25DM.js");
31
31
  const { getClient, urlOf } = await import("./api-client-YPKOZP2O.js");
32
32
  const client = getClient();
33
33
  const res = await daemonFetch(
@@ -1,15 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  getStandardSkillsWithExtensions
4
- } from "./chunk-MDPCSXZ4.js";
4
+ } from "./chunk-S2TZLSDH.js";
5
5
  import "./chunk-YUIHSKR6.js";
6
- import "./chunk-CVH6Y2YG.js";
7
- import "./chunk-G3GBKZGG.js";
8
- import "./chunk-7D47T4RB.js";
6
+ import "./chunk-57OKQMP3.js";
7
+ import "./chunk-6QIUN46C.js";
9
8
  import {
10
9
  findMind,
11
10
  mindDir
12
- } from "./chunk-HHTXM4JT.js";
11
+ } from "./chunk-X62AXPR7.js";
13
12
  import "./chunk-K3NQKI34.js";
14
13
 
15
14
  // src/commands/sprout.ts
@@ -49,7 +48,7 @@ async function run(_args) {
49
48
  console.error("Write your MEMORY.md before sprouting.");
50
49
  process.exit(1);
51
50
  }
52
- const { daemonFetch } = await import("./daemon-client-BCTFGVCZ.js");
51
+ const { daemonFetch } = await import("./daemon-client-CVGM25DM.js");
53
52
  const { getClient, urlOf } = await import("./api-client-YPKOZP2O.js");
54
53
  const client = getClient();
55
54
  const failedSkills = [];
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/env node
2
- import {
3
- daemonFetch
4
- } from "./chunk-EFVHR7KH.js";
5
2
  import {
6
3
  getClient,
7
4
  urlOf
8
5
  } from "./chunk-4RQBJWQX.js";
9
- import "./chunk-HHTXM4JT.js";
6
+ import {
7
+ daemonFetch
8
+ } from "./chunk-4OUOFS23.js";
9
+ import "./chunk-X62AXPR7.js";
10
10
  import "./chunk-K3NQKI34.js";
11
11
 
12
12
  // src/commands/start.ts
@@ -9,13 +9,12 @@ import {
9
9
  getServiceMode,
10
10
  modeLabel,
11
11
  readDaemonConfig
12
- } from "./chunk-FXHXHI2A.js";
12
+ } from "./chunk-SNVPRRT7.js";
13
13
  import {
14
14
  checkForUpdate
15
- } from "./chunk-S5LR3XYJ.js";
16
- import "./chunk-CVH6Y2YG.js";
17
- import "./chunk-G3GBKZGG.js";
18
- import "./chunk-HHTXM4JT.js";
15
+ } from "./chunk-EMPFLFTG.js";
16
+ import "./chunk-57OKQMP3.js";
17
+ import "./chunk-X62AXPR7.js";
19
18
  import "./chunk-K3NQKI34.js";
20
19
 
21
20
  // src/commands/status.ts
@@ -2,14 +2,14 @@
2
2
  import {
3
3
  resolveMindName
4
4
  } from "./chunk-NAOW2CLO.js";
5
- import {
6
- daemonFetch
7
- } from "./chunk-EFVHR7KH.js";
8
5
  import {
9
6
  getClient,
10
7
  urlOf
11
8
  } from "./chunk-4RQBJWQX.js";
12
- import "./chunk-HHTXM4JT.js";
9
+ import {
10
+ daemonFetch
11
+ } from "./chunk-4OUOFS23.js";
12
+ import "./chunk-X62AXPR7.js";
13
13
  import "./chunk-K3NQKI34.js";
14
14
 
15
15
  // src/commands/stop.ts
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ ensureSystemDM,
4
+ generateSystemReply,
5
+ resetSystemDMCache,
6
+ sendSystemMessage,
7
+ sendSystemMessageDirect
8
+ } from "./chunk-BWKIHH7B.js";
9
+ import "./chunk-FAHDKPEH.js";
10
+ import "./chunk-DAXJKPHZ.js";
11
+ import "./chunk-AAO77TZX.js";
12
+ import "./chunk-NOWVQ7AL.js";
13
+ import "./chunk-R5QJBZZG.js";
14
+ import "./chunk-EKDWA7E4.js";
15
+ import "./chunk-S2TZLSDH.js";
16
+ import "./chunk-NV3TYNWX.js";
17
+ import "./chunk-PNQCXLSV.js";
18
+ import "./chunk-YUIHSKR6.js";
19
+ import "./chunk-57OKQMP3.js";
20
+ import "./chunk-6QIUN46C.js";
21
+ import "./chunk-A6TUJJ3L.js";
22
+ import "./chunk-X62AXPR7.js";
23
+ import "./chunk-K3NQKI34.js";
24
+ export {
25
+ ensureSystemDM,
26
+ generateSystemReply,
27
+ resetSystemDMCache,
28
+ sendSystemMessage,
29
+ sendSystemMessageDirect
30
+ };
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  daemonFetch
4
- } from "./chunk-EFVHR7KH.js";
5
- import "./chunk-HHTXM4JT.js";
4
+ } from "./chunk-4OUOFS23.js";
5
+ import "./chunk-X62AXPR7.js";
6
6
  import "./chunk-K3NQKI34.js";
7
7
 
8
8
  // src/commands/systems.ts
@@ -13,13 +13,13 @@ async function run(args) {
13
13
  await showStatus();
14
14
  break;
15
15
  case "register":
16
- await import("./register-NZDSTLP3.js").then((m) => m.run(args.slice(1)));
16
+ await import("./register-QAQELAS6.js").then((m) => m.run(args.slice(1)));
17
17
  break;
18
18
  case "login":
19
- await import("./login-RL6AU2SM.js").then((m) => m.run(args.slice(1)));
19
+ await import("./login-62JVY6A2.js").then((m) => m.run(args.slice(1)));
20
20
  break;
21
21
  case "logout":
22
- await import("./logout-JRPBEMMR.js").then((m) => m.run());
22
+ await import("./logout-ZK2N62T3.js").then((m) => m.run());
23
23
  break;
24
24
  case "--help":
25
25
  case "-h":
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-YUIHSKR6.js";
5
5
  import {
6
6
  voluteHome
7
- } from "./chunk-HHTXM4JT.js";
7
+ } from "./chunk-X62AXPR7.js";
8
8
  import "./chunk-K3NQKI34.js";
9
9
 
10
10
  // src/lib/tailscale.ts
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ run
4
+ } from "./chunk-HDKY4TWU.js";
5
+ import "./chunk-SNVPRRT7.js";
6
+ import "./chunk-57OKQMP3.js";
7
+ import {
8
+ readGlobalConfig
9
+ } from "./chunk-6QIUN46C.js";
10
+ import "./chunk-D424ZQGI.js";
11
+ import "./chunk-X62AXPR7.js";
12
+ import "./chunk-K3NQKI34.js";
13
+ export {
14
+ readGlobalConfig,
15
+ run
16
+ };
@@ -5,19 +5,18 @@ import {
5
5
  pollHealth,
6
6
  readDaemonConfig,
7
7
  restartService
8
- } from "./chunk-FXHXHI2A.js";
8
+ } from "./chunk-SNVPRRT7.js";
9
9
  import {
10
10
  checkForUpdate
11
- } from "./chunk-S5LR3XYJ.js";
11
+ } from "./chunk-EMPFLFTG.js";
12
12
  import {
13
13
  exec,
14
14
  execInherit,
15
15
  resolveVoluteBin
16
- } from "./chunk-CVH6Y2YG.js";
17
- import "./chunk-G3GBKZGG.js";
16
+ } from "./chunk-57OKQMP3.js";
18
17
  import {
19
18
  voluteSystemDir
20
- } from "./chunk-HHTXM4JT.js";
19
+ } from "./chunk-X62AXPR7.js";
21
20
  import "./chunk-K3NQKI34.js";
22
21
 
23
22
  // src/commands/update.ts
@@ -5,8 +5,8 @@ import {
5
5
  fetchLatestVersion,
6
6
  getCurrentVersion,
7
7
  isNewer
8
- } from "./chunk-S5LR3XYJ.js";
9
- import "./chunk-HHTXM4JT.js";
8
+ } from "./chunk-EMPFLFTG.js";
9
+ import "./chunk-X62AXPR7.js";
10
10
  import "./chunk-K3NQKI34.js";
11
11
  export {
12
12
  checkForUpdate,
@@ -16,7 +16,7 @@ async function run(args) {
16
16
  accept: { type: "boolean" }
17
17
  });
18
18
  const mindName = resolveMindName({ mind: positional[0] });
19
- const { daemonFetch } = await import("./daemon-client-BCTFGVCZ.js");
19
+ const { daemonFetch } = await import("./daemon-client-CVGM25DM.js");
20
20
  const { getClient, urlOf } = await import("./api-client-YPKOZP2O.js");
21
21
  const client = getClient();
22
22
  const res = await daemonFetch(
@@ -1,33 +1,33 @@
1
1
  #!/usr/bin/env node
2
- import {
3
- deliverMessage
4
- } from "./chunk-QVAQ5454.js";
5
- import "./chunk-FSM45XD5.js";
6
- import "./chunk-LIRWLNAK.js";
7
- import "./chunk-IKHDUZRH.js";
8
- import "./chunk-2C2VXEBB.js";
9
2
  import {
10
3
  getCurrentVersion
11
- } from "./chunk-S5LR3XYJ.js";
4
+ } from "./chunk-EMPFLFTG.js";
12
5
  import {
13
6
  computeTemplateHash
14
7
  } from "./chunk-VGWJSNHS.js";
15
- import "./chunk-2NDZC3S7.js";
16
- import "./chunk-P27RV5WM.js";
17
- import "./chunk-MDPCSXZ4.js";
18
- import "./chunk-ZWKTUQEL.js";
8
+ import {
9
+ sendSystemMessage
10
+ } from "./chunk-BWKIHH7B.js";
11
+ import "./chunk-FAHDKPEH.js";
12
+ import "./chunk-DAXJKPHZ.js";
13
+ import "./chunk-AAO77TZX.js";
14
+ import "./chunk-NOWVQ7AL.js";
15
+ import "./chunk-R5QJBZZG.js";
16
+ import "./chunk-EKDWA7E4.js";
17
+ import "./chunk-S2TZLSDH.js";
18
+ import "./chunk-NV3TYNWX.js";
19
+ import "./chunk-PNQCXLSV.js";
19
20
  import {
20
21
  logger_default
21
22
  } from "./chunk-YUIHSKR6.js";
22
- import "./chunk-CVH6Y2YG.js";
23
- import "./chunk-G3GBKZGG.js";
24
- import "./chunk-7D47T4RB.js";
23
+ import "./chunk-57OKQMP3.js";
24
+ import "./chunk-6QIUN46C.js";
25
25
  import "./chunk-A6TUJJ3L.js";
26
26
  import {
27
27
  readRegistry,
28
28
  setMindTemplateHash,
29
29
  voluteSystemDir
30
- } from "./chunk-HHTXM4JT.js";
30
+ } from "./chunk-X62AXPR7.js";
31
31
  import "./chunk-K3NQKI34.js";
32
32
 
33
33
  // src/lib/version-notify.ts
@@ -143,11 +143,7 @@ async function notifyVersionUpdate() {
143
143
  const currentHash = templateHashes.get(tmpl);
144
144
  const needsUpgrade = entry.templateHash != null && currentHash != null && entry.templateHash !== currentHash;
145
145
  const message = formatNotification(currentVersion, releaseNotes, needsUpgrade, entry.name);
146
- await deliverMessage(entry.name, {
147
- channel: "system:version",
148
- sender: "volute",
149
- content: message
150
- });
146
+ await sendSystemMessage(entry.name, message);
151
147
  });
152
148
  const results = await Promise.allSettled(promises);
153
149
  for (const result of results) {