volute 0.25.0 → 0.27.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 (145) hide show
  1. package/README.md +28 -33
  2. package/dist/{activity-events-4O37J7PD.js → activity-events-BBIEA2F4.js} +2 -3
  3. package/dist/api.d.ts +886 -220
  4. package/dist/{archive-4ZQYK5MN.js → archive-UA4BDFXQ.js} +2 -2
  5. package/dist/{auth-HM2RSPY7.js → auth-D3OT2ARB.js} +3 -3
  6. package/dist/bridge-FQHZL3MC.js +206 -0
  7. package/dist/chat-MHJ3L6JQ.js +58 -0
  8. package/dist/{chunk-PHU4DEAJ.js → chunk-2WPW7OT6.js} +3 -3
  9. package/dist/{chunk-BOTQ25QT.js → chunk-2YP2TVDT.js} +138 -56
  10. package/dist/{chunk-DG7TO7EE.js → chunk-4WXYUOAK.js} +5 -7
  11. package/dist/{chunk-JTDFJWI2.js → chunk-AW7PFDVN.js} +5 -5
  12. package/dist/{chunk-2767L2RZ.js → chunk-EHYDTZTF.js} +6 -6
  13. package/dist/{chunk-ZSH4G2P5.js → chunk-GIE6CSN5.js} +17 -17
  14. package/dist/chunk-H7OZRFJB.js +432 -0
  15. package/dist/{chunk-ON3FF5JA.js → chunk-HDN7MNGD.js} +3 -3
  16. package/dist/chunk-IAYBDWVG.js +477 -0
  17. package/dist/chunk-IKRVFPWU.js +83 -0
  18. package/dist/{chunk-TRQEV3CD.js → chunk-JGFVMROS.js} +32 -6
  19. package/dist/{chunk-PHHKNGA3.js → chunk-JKOWNZ4P.js} +3 -3
  20. package/dist/{chunk-E7GOKNOT.js → chunk-K5NAC55T.js} +1 -1
  21. package/dist/{chunk-HFCBO2GL.js → chunk-KDGS53OS.js} +4 -4
  22. package/dist/chunk-KTLFDYPT.js +61 -0
  23. package/dist/{chunk-3AIBT4TW.js → chunk-LAC664WU.js} +30 -4
  24. package/dist/{chunk-PMX4EIJK.js → chunk-OQZH4PBB.js} +467 -1054
  25. package/dist/{chunk-SHSWYG2J.js → chunk-PHSAT7YL.js} +71 -58
  26. package/dist/chunk-RKQEHRBB.js +177 -0
  27. package/dist/{chunk-RVKR2R7F.js → chunk-SSI47XP2.js} +10 -2
  28. package/dist/chunk-T6HKBWXZ.js +23 -0
  29. package/dist/chunk-USUXRNVD.js +113 -0
  30. package/dist/{chunk-BFK6SOEJ.js → chunk-VIVMW2H2.js} +4 -4
  31. package/dist/{chunk-KTJGZ7M7.js → chunk-XBLSAVJF.js} +1 -1
  32. package/dist/chunk-ZYGKG6VC.js +22 -0
  33. package/dist/cli.js +51 -32
  34. package/dist/{cloud-sync-PPBBJDY6.js → cloud-sync-T7M3ESC3.js} +15 -12
  35. package/dist/connectors/discord-bridge.js +158 -0
  36. package/dist/connectors/slack-bridge.js +119 -0
  37. package/dist/connectors/telegram-bridge.js +133 -0
  38. package/dist/conversations-M2K4253F.js +55 -0
  39. package/dist/create-D7J73A6H.js +45 -0
  40. package/dist/{create-VDQJER52.js → create-QWV73WXD.js} +1 -1
  41. package/dist/{daemon-client-JOVQZ52X.js → daemon-client-I42FK2BF.js} +2 -2
  42. package/dist/{daemon-restart-FDNOZEAD.js → daemon-restart-M2QTYMEG.js} +7 -6
  43. package/dist/daemon.js +2247 -1085
  44. package/dist/db-IC4J52XQ.js +8 -0
  45. package/dist/{delete-2MRR4JX5.js → delete-4JYGD4VN.js} +1 -1
  46. package/dist/down-LVBXEULC.js +14 -0
  47. package/dist/{env-2FPOZK37.js → env-YJMUMFIY.js} +5 -5
  48. package/dist/{export-IKFAPRAO.js → export-BOJQWBMA.js} +4 -4
  49. package/dist/{file-KT3UIQM3.js → file-CR36YUPD.js} +4 -4
  50. package/dist/{history-46WZN5CN.js → history-XKRTAFS2.js} +7 -7
  51. package/dist/{import-TH26J76F.js → import-SRTQXBGH.js} +4 -4
  52. package/dist/join-J4QU42DL.js +66 -0
  53. package/dist/list-R73GENNL.js +40 -0
  54. package/dist/{log-6SGSSR3D.js → log-ABYNVYJ3.js} +4 -4
  55. package/dist/login-3QZNR2DF.js +46 -0
  56. package/dist/{login-UO6AOVEA.js → login-XX37I52P.js} +3 -3
  57. package/dist/logout-T53VKCPU.js +39 -0
  58. package/dist/{logout-UKD5LA37.js → logout-W4KOOBIT.js} +2 -2
  59. package/dist/{logs-HRBONI5I.js → logs-U35JR2KE.js} +7 -7
  60. package/dist/{merge-KSFJKX6T.js → merge-LNSMSAOF.js} +4 -4
  61. package/dist/message-delivery-LDXLGERA.js +25 -0
  62. package/dist/migrate-registry-to-db-XC7T5B7P.js +110 -0
  63. package/dist/{mind-YVWAHL2A.js → mind-DI33C74K.js} +25 -25
  64. package/dist/{mind-activity-tracker-NMDDEV3K.js → mind-activity-tracker-EN6XNXPF.js} +3 -4
  65. package/dist/{mind-manager-4NDNAYAB.js → mind-manager-M6EMUW5I.js} +6 -5
  66. package/dist/{mind-sleep-GHPTSAYN.js → mind-sleep-BTSWQNAC.js} +4 -4
  67. package/dist/{mind-wake-BJDJFMDF.js → mind-wake-SBAKIDVP.js} +4 -4
  68. package/dist/notes-XCER3I7M.js +220 -0
  69. package/dist/{package-3HF5MXU2.js → package-7WY6VKU3.js} +2 -1
  70. package/dist/{pages-Y6DRWUOJ.js → pages-6EBS6CBR.js} +2 -2
  71. package/dist/{publish-EEKTZBHW.js → publish-66UB2ZFY.js} +5 -5
  72. package/dist/{pull-D32SPFVU.js → pull-XCHJTM5M.js} +4 -4
  73. package/dist/read-36UFXN3G.js +46 -0
  74. package/dist/{register-U2UO6TC4.js → register-6B2CXTYM.js} +3 -3
  75. package/dist/{registry-D2BSQ2X5.js → registry-NDNOOYG4.js} +15 -9
  76. package/dist/{restart-5BMNV7KU.js → restart-6ESL3NBO.js} +6 -6
  77. package/dist/sandbox-TGBX22DS.js +19 -0
  78. package/dist/{schedule-YEFDLVMJ.js → schedule-QTJMFATP.js} +7 -7
  79. package/dist/{seed-6FEKB3YC.js → seed-SSUCYYDF.js} +2 -2
  80. package/dist/{send-IISDYFCL.js → send-ZNCJDSRP.js} +28 -36
  81. package/dist/service-6LIN3F3K.js +122 -0
  82. package/dist/setup-JG4QAEBV.js +371 -0
  83. package/dist/setup-JHL5ZEST.js +17 -0
  84. package/dist/{shared-LWMNTTZN.js → shared-ML5I4Q2A.js} +4 -4
  85. package/dist/{skill-T3EMR6IR.js → skill-AUAQTSP5.js} +7 -7
  86. package/dist/skills/dreaming/SKILL.md +68 -0
  87. package/dist/skills/dreaming/references/INSTALL.md +56 -0
  88. package/dist/skills/dreaming/scripts/dream.ts +289 -0
  89. package/dist/skills/dreaming/scripts/wake-context-dreams.sh +30 -0
  90. package/dist/skills/notes/SKILL.md +34 -0
  91. package/dist/skills/orientation/SKILL.md +3 -3
  92. package/dist/skills/volute-mind/SKILL.md +32 -30
  93. package/dist/sleep-manager-MWYHM5HV.js +29 -0
  94. package/dist/split-TKJ5OT3P.js +63 -0
  95. package/dist/{sprout-QJVGJDSH.js → sprout-IJVVKSJ2.js} +6 -7
  96. package/dist/{start-C7XITZ5O.js → start-EUJSS5R4.js} +4 -4
  97. package/dist/{status-SIRPLEZC.js → status-77YEPHMW.js} +5 -5
  98. package/dist/{status-LYS4NUOZ.js → status-7GA4SM4Y.js} +4 -4
  99. package/dist/{status-LV34BG6G.js → status-THLOBLWG.js} +2 -2
  100. package/dist/{stop-CVKBSLXY.js → stop-3XAITBBF.js} +6 -6
  101. package/dist/{tailscale-AJ4VL5XK.js → tailscale-NY5MUMY3.js} +1 -1
  102. package/dist/up-NKSMXBWR.js +17 -0
  103. package/dist/{update-7XCZMYBT.js → update-PTSH22AZ.js} +11 -11
  104. package/dist/{update-check-F5Z3ALXX.js → update-check-64FWC4Y2.js} +2 -2
  105. package/dist/{upgrade-7RUIXGOO.js → upgrade-HA47CS4C.js} +12 -5
  106. package/dist/variant-7TGZHOU3.js +41 -0
  107. package/dist/{version-notify-AZQMC32A.js → version-notify-5Z4MNR6M.js} +26 -28
  108. package/dist/web-assets/assets/index-CI5wgghI.css +1 -0
  109. package/dist/web-assets/assets/index-is5CvJWH.js +75 -0
  110. package/dist/web-assets/favicon.png +0 -0
  111. package/dist/web-assets/index.html +2 -2
  112. package/drizzle/0015_notes.sql +23 -0
  113. package/drizzle/0016_note_reactions_and_replies.sql +15 -0
  114. package/drizzle/0017_minds.sql +16 -0
  115. package/drizzle/meta/_journal.json +21 -0
  116. package/package.json +2 -1
  117. package/templates/_base/.init/.config/hooks/wake-context.sh +7 -0
  118. package/templates/_base/.init/.config/prompts.json +2 -2
  119. package/templates/_base/home/VOLUTE.md +5 -5
  120. package/templates/_base/src/lib/startup.ts +10 -2
  121. package/templates/claude/src/agent.ts +51 -1
  122. package/templates/claude/src/server.ts +1 -0
  123. package/templates/pi/package.json.tmpl +1 -0
  124. package/templates/pi/src/agent.ts +48 -1
  125. package/templates/pi/src/lib/subagents.ts +150 -0
  126. package/templates/pi/src/server.ts +1 -0
  127. package/dist/channel-HZOSHGNF.js +0 -260
  128. package/dist/chunk-33XAVCS4.js +0 -203
  129. package/dist/chunk-B2CPS4QU.js +0 -283
  130. package/dist/chunk-NWPT4ASZ.js +0 -89
  131. package/dist/chunk-SIAG3QMM.js +0 -42
  132. package/dist/chunk-WSLPZF72.js +0 -173
  133. package/dist/connector-M6XFI6GM.js +0 -147
  134. package/dist/connectors/discord.js +0 -177
  135. package/dist/connectors/slack.js +0 -181
  136. package/dist/connectors/telegram.js +0 -187
  137. package/dist/down-674SX2IZ.js +0 -14
  138. package/dist/message-delivery-XMGV3FUM.js +0 -23
  139. package/dist/service-FASYWLTC.js +0 -247
  140. package/dist/setup-BMLM2UTK.js +0 -230
  141. package/dist/sleep-manager-RKTFZPD3.js +0 -27
  142. package/dist/up-CJ26KQLN.js +0 -15
  143. package/dist/variant-UGREB4G5.js +0 -207
  144. package/dist/web-assets/assets/index-CGPSVu19.js +0 -69
  145. package/dist/web-assets/assets/index-V_rNDsM8.css +0 -1
@@ -0,0 +1,63 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ resolveMindName
4
+ } from "./chunk-NAOW2CLO.js";
5
+ import {
6
+ parseArgs
7
+ } from "./chunk-D424ZQGI.js";
8
+ import "./chunk-K3NQKI34.js";
9
+
10
+ // src/commands/split.ts
11
+ async function run(args) {
12
+ const { positional, flags } = parseArgs(args, {
13
+ from: { type: "string" },
14
+ soul: { type: "string" },
15
+ port: { type: "number" },
16
+ "no-start": { type: "boolean" },
17
+ json: { type: "boolean" }
18
+ });
19
+ const mindName = resolveMindName({ mind: flags.from });
20
+ const variantName = positional[0];
21
+ const { soul, port, json } = flags;
22
+ const noStart = flags["no-start"];
23
+ if (!variantName) {
24
+ console.error(
25
+ 'Usage: volute mind split <name> [--from <mind>] [--soul "..."] [--port N] [--no-start] [--json]'
26
+ );
27
+ process.exit(1);
28
+ }
29
+ if (!json) console.log("Creating variant via daemon...");
30
+ const { daemonFetch } = await import("./daemon-client-I42FK2BF.js");
31
+ const { getClient, urlOf } = await import("./api-client-YPKOZP2O.js");
32
+ const client = getClient();
33
+ const res = await daemonFetch(
34
+ urlOf(client.api.minds[":name"].variants.$url({ param: { name: mindName } })),
35
+ {
36
+ method: "POST",
37
+ headers: { "Content-Type": "application/json" },
38
+ body: JSON.stringify({
39
+ name: variantName,
40
+ ...soul && { soul },
41
+ ...port && { port },
42
+ ...noStart && { noStart }
43
+ })
44
+ }
45
+ );
46
+ const data = await res.json();
47
+ if (!res.ok) {
48
+ console.error(data.error ?? "Failed to create variant");
49
+ process.exit(1);
50
+ }
51
+ if (json) {
52
+ console.log(JSON.stringify(data.variant, null, 2));
53
+ } else {
54
+ console.log(`
55
+ Variant created: ${variantName}`);
56
+ console.log(` Branch: ${data.variant?.branch}`);
57
+ console.log(` Path: ${data.variant?.path}`);
58
+ console.log(` Port: ${data.variant?.port}`);
59
+ }
60
+ }
61
+ export {
62
+ run
63
+ };
@@ -1,15 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  STANDARD_SKILLS
4
- } from "./chunk-DG7TO7EE.js";
5
- import "./chunk-33XAVCS4.js";
4
+ } from "./chunk-4WXYUOAK.js";
6
5
  import "./chunk-YUIHSKR6.js";
7
- import "./chunk-JTDFJWI2.js";
8
- import "./chunk-NWPT4ASZ.js";
6
+ import "./chunk-AW7PFDVN.js";
7
+ import "./chunk-RKQEHRBB.js";
9
8
  import {
10
9
  findMind,
11
10
  mindDir
12
- } from "./chunk-B2CPS4QU.js";
11
+ } from "./chunk-H7OZRFJB.js";
13
12
  import "./chunk-K3NQKI34.js";
14
13
 
15
14
  // src/commands/sprout.ts
@@ -22,7 +21,7 @@ async function run(_args) {
22
21
  console.error("volute mind sprout must be run by a mind (VOLUTE_MIND not set)");
23
22
  process.exit(1);
24
23
  }
25
- const entry = findMind(mindName);
24
+ const entry = await findMind(mindName);
26
25
  if (!entry) {
27
26
  console.error(`Unknown mind: ${mindName}`);
28
27
  process.exit(1);
@@ -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-JOVQZ52X.js");
51
+ const { daemonFetch } = await import("./daemon-client-I42FK2BF.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-JGFVMROS.js";
2
5
  import {
3
6
  getClient,
4
7
  urlOf
5
8
  } from "./chunk-4RQBJWQX.js";
6
- import {
7
- daemonFetch
8
- } from "./chunk-TRQEV3CD.js";
9
- import "./chunk-B2CPS4QU.js";
9
+ import "./chunk-H7OZRFJB.js";
10
10
  import "./chunk-K3NQKI34.js";
11
11
 
12
12
  // src/commands/start.ts
@@ -4,13 +4,13 @@ import {
4
4
  getServiceMode,
5
5
  modeLabel,
6
6
  readDaemonConfig
7
- } from "./chunk-3AIBT4TW.js";
8
- import "./chunk-JTDFJWI2.js";
9
- import "./chunk-NWPT4ASZ.js";
7
+ } from "./chunk-LAC664WU.js";
10
8
  import {
11
9
  checkForUpdate
12
- } from "./chunk-ON3FF5JA.js";
13
- import "./chunk-B2CPS4QU.js";
10
+ } from "./chunk-HDN7MNGD.js";
11
+ import "./chunk-AW7PFDVN.js";
12
+ import "./chunk-RKQEHRBB.js";
13
+ import "./chunk-H7OZRFJB.js";
14
14
  import "./chunk-K3NQKI34.js";
15
15
 
16
16
  // src/commands/status.ts
@@ -2,13 +2,13 @@
2
2
  import {
3
3
  resolveMindName
4
4
  } from "./chunk-NAOW2CLO.js";
5
+ import {
6
+ daemonFetch
7
+ } from "./chunk-JGFVMROS.js";
5
8
  import {
6
9
  parseArgs
7
10
  } from "./chunk-D424ZQGI.js";
8
- import {
9
- daemonFetch
10
- } from "./chunk-TRQEV3CD.js";
11
- import "./chunk-B2CPS4QU.js";
11
+ import "./chunk-H7OZRFJB.js";
12
12
  import "./chunk-K3NQKI34.js";
13
13
 
14
14
  // src/commands/shared/status.ts
@@ -7,11 +7,11 @@ import {
7
7
  } from "./chunk-NAOW2CLO.js";
8
8
  import {
9
9
  readSystemsConfig
10
- } from "./chunk-HFCBO2GL.js";
10
+ } from "./chunk-KDGS53OS.js";
11
11
  import {
12
12
  parseArgs
13
13
  } from "./chunk-D424ZQGI.js";
14
- import "./chunk-B2CPS4QU.js";
14
+ import "./chunk-H7OZRFJB.js";
15
15
  import "./chunk-K3NQKI34.js";
16
16
 
17
17
  // src/commands/pages/status.ts
@@ -1,15 +1,15 @@
1
1
  #!/usr/bin/env node
2
- import {
3
- getClient,
4
- urlOf
5
- } from "./chunk-4RQBJWQX.js";
6
2
  import {
7
3
  resolveMindName
8
4
  } from "./chunk-NAOW2CLO.js";
9
5
  import {
10
6
  daemonFetch
11
- } from "./chunk-TRQEV3CD.js";
12
- import "./chunk-B2CPS4QU.js";
7
+ } from "./chunk-JGFVMROS.js";
8
+ import {
9
+ getClient,
10
+ urlOf
11
+ } from "./chunk-4RQBJWQX.js";
12
+ import "./chunk-H7OZRFJB.js";
13
13
  import "./chunk-K3NQKI34.js";
14
14
 
15
15
  // src/commands/stop.ts
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-YUIHSKR6.js";
5
5
  import {
6
6
  voluteHome
7
- } from "./chunk-B2CPS4QU.js";
7
+ } from "./chunk-H7OZRFJB.js";
8
8
  import "./chunk-K3NQKI34.js";
9
9
 
10
10
  // src/lib/tailscale.ts
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ run
4
+ } from "./chunk-GIE6CSN5.js";
5
+ import "./chunk-LAC664WU.js";
6
+ import "./chunk-AW7PFDVN.js";
7
+ import "./chunk-RKQEHRBB.js";
8
+ import {
9
+ readGlobalConfig
10
+ } from "./chunk-IKRVFPWU.js";
11
+ import "./chunk-D424ZQGI.js";
12
+ import "./chunk-H7OZRFJB.js";
13
+ import "./chunk-K3NQKI34.js";
14
+ export {
15
+ readGlobalConfig,
16
+ run
17
+ };
@@ -5,19 +5,19 @@ import {
5
5
  pollHealth,
6
6
  readDaemonConfig,
7
7
  restartService
8
- } from "./chunk-3AIBT4TW.js";
8
+ } from "./chunk-LAC664WU.js";
9
+ import {
10
+ checkForUpdate
11
+ } from "./chunk-HDN7MNGD.js";
9
12
  import {
10
13
  exec,
11
14
  execInherit,
12
15
  resolveVoluteBin
13
- } from "./chunk-JTDFJWI2.js";
14
- import "./chunk-NWPT4ASZ.js";
15
- import {
16
- checkForUpdate
17
- } from "./chunk-ON3FF5JA.js";
16
+ } from "./chunk-AW7PFDVN.js";
17
+ import "./chunk-RKQEHRBB.js";
18
18
  import {
19
- voluteHome
20
- } from "./chunk-B2CPS4QU.js";
19
+ voluteSystemDir
20
+ } from "./chunk-H7OZRFJB.js";
21
21
  import "./chunk-K3NQKI34.js";
22
22
 
23
23
  // src/commands/update.ts
@@ -102,9 +102,9 @@ Updated to volute v${result.latest}`);
102
102
  }
103
103
  return;
104
104
  }
105
- const home = voluteHome();
106
- const pidPath = resolve(home, "daemon.pid");
107
- const configPath = resolve(home, "daemon.json");
105
+ const systemDir = voluteSystemDir();
106
+ const pidPath = resolve(systemDir, "daemon.pid");
107
+ const configPath = resolve(systemDir, "daemon.json");
108
108
  let daemonWasRunning = false;
109
109
  let daemonPort = 1618;
110
110
  let daemonHost = "127.0.0.1";
@@ -5,8 +5,8 @@ import {
5
5
  fetchLatestVersion,
6
6
  getCurrentVersion,
7
7
  isNewer
8
- } from "./chunk-ON3FF5JA.js";
9
- import "./chunk-B2CPS4QU.js";
8
+ } from "./chunk-HDN7MNGD.js";
9
+ import "./chunk-H7OZRFJB.js";
10
10
  import "./chunk-K3NQKI34.js";
11
11
  export {
12
12
  checkForUpdate,
@@ -12,10 +12,11 @@ async function run(args) {
12
12
  const { positional, flags } = parseArgs(args, {
13
13
  template: { type: "string" },
14
14
  continue: { type: "boolean" },
15
- abort: { type: "boolean" }
15
+ abort: { type: "boolean" },
16
+ accept: { type: "boolean" }
16
17
  });
17
18
  const mindName = resolveMindName({ mind: positional[0] });
18
- const { daemonFetch } = await import("./daemon-client-JOVQZ52X.js");
19
+ const { daemonFetch } = await import("./daemon-client-I42FK2BF.js");
19
20
  const { getClient, urlOf } = await import("./api-client-YPKOZP2O.js");
20
21
  const client = getClient();
21
22
  const res = await daemonFetch(
@@ -26,7 +27,8 @@ async function run(args) {
26
27
  body: JSON.stringify({
27
28
  template: flags.template,
28
29
  continue: flags.continue,
29
- abort: flags.abort
30
+ abort: flags.abort,
31
+ accept: flags.accept
30
32
  })
31
33
  }
32
34
  );
@@ -39,6 +41,10 @@ async function run(args) {
39
41
  console.log(`Upgrade aborted for ${mindName}.`);
40
42
  return;
41
43
  }
44
+ if (flags.accept) {
45
+ console.log(`Upgrade accepted for ${mindName}.`);
46
+ return;
47
+ }
42
48
  if (data.conflicts) {
43
49
  console.log("\nMerge conflicts detected. Resolve them in:");
44
50
  console.log(` ${data.worktreeDir}`);
@@ -50,12 +56,13 @@ Or abort:`);
50
56
  console.log(` volute mind upgrade ${mindName} --abort`);
51
57
  return;
52
58
  }
59
+ const variantMindName = `${mindName}-${data.variant}`;
53
60
  console.log(`
54
61
  Upgrade variant running on port ${data.port}`);
55
62
  console.log(`
56
63
  Next steps:`);
57
- console.log(` volute send @${mindName}@${data.variant} "hello" # chat with upgraded variant`);
58
- console.log(` volute variant merge ${data.variant} # merge back when satisfied`);
64
+ console.log(` volute chat send @${variantMindName} "hello" # chat with upgraded variant`);
65
+ console.log(` volute mind upgrade ${mindName} --accept # accept the upgrade`);
59
66
  }
60
67
  export {
61
68
  run
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/env node
2
+ import "./chunk-K3NQKI34.js";
3
+
4
+ // src/commands/variant.ts
5
+ async function run(args) {
6
+ const subcommand = args[0];
7
+ switch (subcommand) {
8
+ case "create":
9
+ console.error(
10
+ "'volute variant create' has been replaced. Use 'volute mind split' to create variants."
11
+ );
12
+ console.error("Usage: volute mind split <name> [--from <mind>] [--soul '...'] [--no-start]");
13
+ process.exit(1);
14
+ break;
15
+ case "merge":
16
+ console.error(
17
+ "'volute variant merge' has been replaced. Use 'volute mind join' to merge variants."
18
+ );
19
+ console.error(
20
+ "Usage: volute mind join <name> [--summary '...' --memory '...' --justification '...']"
21
+ );
22
+ process.exit(1);
23
+ break;
24
+ case "list":
25
+ case "delete":
26
+ console.error(`'volute variant ${subcommand}' is no longer available.`);
27
+ console.error(
28
+ "Use 'volute mind list' to see variants, or 'volute mind delete <variant-name>' to delete."
29
+ );
30
+ process.exit(1);
31
+ break;
32
+ default:
33
+ console.error(
34
+ "'volute variant' has been replaced. Use 'volute mind split' and 'volute mind join'."
35
+ );
36
+ process.exit(1);
37
+ }
38
+ }
39
+ export {
40
+ run
41
+ };
@@ -1,30 +1,32 @@
1
1
  #!/usr/bin/env node
2
+ import {
3
+ deliverMessage
4
+ } from "./chunk-OQZH4PBB.js";
5
+ import "./chunk-KDGS53OS.js";
6
+ import "./chunk-K5NAC55T.js";
7
+ import "./chunk-PHSAT7YL.js";
8
+ import "./chunk-USUXRNVD.js";
9
+ import "./chunk-IAYBDWVG.js";
10
+ import "./chunk-VIVMW2H2.js";
2
11
  import {
3
12
  computeTemplateHash
4
13
  } from "./chunk-AKPFNL7L.js";
5
14
  import {
6
- deliverMessage
7
- } from "./chunk-PMX4EIJK.js";
8
- import "./chunk-HFCBO2GL.js";
9
- import "./chunk-E7GOKNOT.js";
10
- import "./chunk-BFK6SOEJ.js";
11
- import "./chunk-SHSWYG2J.js";
12
- import "./chunk-SIAG3QMM.js";
13
- import "./chunk-PHU4DEAJ.js";
14
- import "./chunk-33XAVCS4.js";
15
+ getCurrentVersion
16
+ } from "./chunk-HDN7MNGD.js";
17
+ import "./chunk-2WPW7OT6.js";
15
18
  import {
16
19
  logger_default
17
20
  } from "./chunk-YUIHSKR6.js";
18
- import "./chunk-JTDFJWI2.js";
19
- import "./chunk-NWPT4ASZ.js";
20
- import {
21
- getCurrentVersion
22
- } from "./chunk-ON3FF5JA.js";
21
+ import "./chunk-AW7PFDVN.js";
22
+ import "./chunk-RKQEHRBB.js";
23
+ import "./chunk-IKRVFPWU.js";
24
+ import "./chunk-T6HKBWXZ.js";
23
25
  import {
24
26
  readRegistry,
25
- voluteHome,
26
- writeRegistry
27
- } from "./chunk-B2CPS4QU.js";
27
+ setMindTemplateHash,
28
+ voluteSystemDir
29
+ } from "./chunk-H7OZRFJB.js";
28
30
  import "./chunk-K3NQKI34.js";
29
31
 
30
32
  // src/lib/version-notify.ts
@@ -81,7 +83,7 @@ function findChangelog() {
81
83
 
82
84
  // src/lib/version-notify.ts
83
85
  function statePath() {
84
- return resolve2(voluteHome(), "version-notify.json");
86
+ return resolve2(voluteSystemDir(), "version-notify.json");
85
87
  }
86
88
  function readState() {
87
89
  try {
@@ -95,23 +97,19 @@ function writeState(state) {
95
97
  writeFileSync(statePath(), `${JSON.stringify(state, null, 2)}
96
98
  `);
97
99
  }
98
- function backfillTemplateHashes() {
99
- const entries = readRegistry();
100
- let changed = false;
100
+ async function backfillTemplateHashes() {
101
+ const entries = await readRegistry();
101
102
  for (const entry of entries) {
102
103
  if (entry.templateHash != null) continue;
103
104
  if (entry.stage === "seed") continue;
104
105
  const tmpl = entry.template ?? "claude";
105
106
  try {
106
- entry.templateHash = computeTemplateHash(tmpl);
107
- changed = true;
107
+ const hash = computeTemplateHash(tmpl);
108
+ await setMindTemplateHash(entry.name, hash);
108
109
  } catch (err) {
109
110
  logger_default.warn(`failed to compute template hash for ${entry.name}`, logger_default.errorData(err));
110
111
  }
111
112
  }
112
- if (changed) {
113
- writeRegistry(entries);
114
- }
115
113
  }
116
114
  async function notifyVersionUpdate() {
117
115
  const currentVersion = getCurrentVersion();
@@ -121,7 +119,7 @@ async function notifyVersionUpdate() {
121
119
  return;
122
120
  }
123
121
  if (state.lastNotifiedVersion === currentVersion) return;
124
- const entries = readRegistry();
122
+ const entries = await readRegistry();
125
123
  const runningMinds = entries.filter((e) => e.running && e.stage !== "seed");
126
124
  if (runningMinds.length === 0) {
127
125
  writeState({ lastNotifiedVersion: currentVersion });
@@ -170,7 +168,7 @@ ${releaseNotes}`;
170
168
 
171
169
  ---
172
170
 
173
- A template update is available for you. To upgrade, your operator can run:
171
+ A template update is available for you. To upgrade, run:
174
172
  volute mind upgrade ${mindName}`;
175
173
  }
176
174
  return message;