volute 0.20.0 → 0.22.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 (114) hide show
  1. package/README.md +7 -7
  2. package/dist/{activity-events-OMXKXD5N.js → activity-events-3WHHCOBB.js} +3 -4
  3. package/dist/api.d.ts +4294 -0
  4. package/dist/{archive-ZCFOSTKB.js → archive-4ZQYK5MN.js} +4 -2
  5. package/dist/auth-HM2RSPY7.js +37 -0
  6. package/dist/{channel-PUQKGSQM.js → channel-BOOMFULW.js} +2 -2
  7. package/dist/{chunk-UU7A7KLB.js → chunk-A4S7H6G6.js} +5 -7
  8. package/dist/chunk-AKPFNL7L.js +148 -0
  9. package/dist/{chunk-EBGCNDMM.js → chunk-B2CPS4QU.js} +128 -114
  10. package/dist/chunk-G5KRTU2F.js +76 -0
  11. package/dist/{chunk-FCDU5BFX.js → chunk-HFCBO2GL.js} +2 -2
  12. package/dist/{chunk-GZ7DW4YL.js → chunk-HGCDWKSP.js} +2 -2
  13. package/dist/{chunk-7UFKREVW.js → chunk-JNFRY2WU.js} +2 -2
  14. package/dist/{chunk-DYZGP3EW.js → chunk-JTDFJWI2.js} +2 -1
  15. package/dist/{chunk-WC6ZHVRL.js → chunk-KFI7TQJ6.js} +2 -2
  16. package/dist/{chunk-AW7P4EVV.js → chunk-KTJGZ7M7.js} +55 -7
  17. package/dist/{chunk-OGXOMR65.js → chunk-NWPT4ASZ.js} +1 -1
  18. package/dist/{chunk-SCUDS4US.js → chunk-ON3FF5JA.js} +1 -1
  19. package/dist/chunk-OSFGKF2T.js +2651 -0
  20. package/dist/{chunk-TIWH32HP.js → chunk-PHHKNGA3.js} +3 -3
  21. package/dist/{chunk-VDWCHYTS.js → chunk-PHU4DEAJ.js} +1 -1
  22. package/dist/{chunk-7NO7EV5Z.js → chunk-QIXPN3OO.js} +2 -2
  23. package/dist/{chunk-O6ASDHFO.js → chunk-RK627D57.js} +40 -63
  24. package/dist/{chunk-NSE7VJQA.js → chunk-SGPEZ32F.js} +29 -1
  25. package/dist/{chunk-IKMY5X76.js → chunk-TFS25FIM.js} +12 -9
  26. package/dist/{chunk-PUVXOZ6T.js → chunk-VNVCRVYI.js} +118 -69
  27. package/dist/{chunk-32VR2EOH.js → chunk-VT5QODNE.js} +2 -2
  28. package/dist/{chunk-RHEGSQFJ.js → chunk-WSLPZF72.js} +1 -1
  29. package/dist/chunk-XLC342FO.js +29 -0
  30. package/dist/cli.js +57 -119
  31. package/dist/cloud-sync-C6WRYRVR.js +96 -0
  32. package/dist/{connector-JBVNZ7VK.js → connector-PYT5UOTZ.js} +6 -6
  33. package/dist/connectors/discord.js +2 -2
  34. package/dist/connectors/slack.js +2 -2
  35. package/dist/connectors/telegram.js +2 -2
  36. package/dist/{create-HP4OVVHF.js → create-WIDA3M4C.js} +1 -1
  37. package/dist/{daemon-client-ITWUCNFO.js → daemon-client-ZHCDL4RS.js} +2 -2
  38. package/dist/{daemon-restart-KPSWNYTH.js → daemon-restart-TPQ2XBRZ.js} +6 -6
  39. package/dist/daemon.js +2250 -1985
  40. package/dist/{delete-BSU7K3RY.js → delete-LOIANQGD.js} +1 -1
  41. package/dist/down-WSUASL5E.js +14 -0
  42. package/dist/{env-A3LMO777.js → env-4PHIHTF4.js} +2 -2
  43. package/dist/{export-6QBUOQGC.js → export-XD6PJBQP.js} +19 -8
  44. package/dist/{file-C57SK5DK.js → file-X4L5TTOL.js} +2 -2
  45. package/dist/{history-WNK3DFUM.js → history-HTEKRNID.js} +2 -2
  46. package/dist/{import-XEC34Y4Z.js → import-EAXTHHXL.js} +4 -3
  47. package/dist/{log-PPPZDVEF.js → log-SRO5Q6AD.js} +2 -2
  48. package/dist/{login-HNH3EUQV.js → login-UO6AOVEA.js} +4 -4
  49. package/dist/{logout-I5CB5UZS.js → logout-UKD5LA37.js} +2 -2
  50. package/dist/{logs-SF2IMJN4.js → logs-HNTNNBDW.js} +2 -2
  51. package/dist/{merge-33C237A4.js → merge-B6SYTGI7.js} +2 -2
  52. package/dist/message-delivery-WUS4K4ZC.js +21 -0
  53. package/dist/{mind-Z7CKD6DG.js → mind-BTXR5B3C.js} +35 -11
  54. package/dist/{mind-activity-tracker-624QLQLC.js → mind-activity-tracker-PGC3DBJ7.js} +4 -5
  55. package/dist/{mind-manager-3DMYKZPB.js → mind-manager-P5OBDUKI.js} +5 -6
  56. package/dist/mind-sleep-FWRBIFBS.js +41 -0
  57. package/dist/mind-wake-LJK2YU5X.js +36 -0
  58. package/dist/{package-4NHAVUUI.js → package-A7PEYJI2.js} +10 -1
  59. package/dist/{pages-4DGQT7ZA.js → pages-YSTRWJR4.js} +6 -6
  60. package/dist/{publish-TAJUET4I.js → publish-BZNHKUUK.js} +6 -6
  61. package/dist/{pull-XAEWQJ47.js → pull-GRQAXM2E.js} +2 -2
  62. package/dist/{register-VSPCMHKX.js → register-U2UO6TC4.js} +5 -5
  63. package/dist/registry-D2BSQ2X5.js +42 -0
  64. package/dist/{restart-IQKMCK5M.js → restart-CIDAKGG2.js} +3 -6
  65. package/dist/{schedule-FFZG23IW.js → schedule-NLR3LZLY.js} +2 -2
  66. package/dist/{seed-J43YDKXG.js → seed-3H2MRREW.js} +2 -2
  67. package/dist/{send-KVIZIGCE.js → send-RP2TA7SG.js} +132 -36
  68. package/dist/{service-LUR7WDO7.js → service-7BFXDI6J.js} +31 -13
  69. package/dist/{setup-52YRV7VP.js → setup-SSIIXQMI.js} +9 -34
  70. package/dist/{shared-KO35ZM44.js → shared-2OGT3NSL.js} +4 -4
  71. package/dist/{skill-BCVNI6TV.js → skill-Q2Y6PQ3L.js} +2 -2
  72. package/dist/skills/orientation/SKILL.md +2 -2
  73. package/dist/skills/volute-mind/SKILL.md +5 -5
  74. package/dist/sleep-manager-3RWUX2ZR.js +27 -0
  75. package/dist/{sprout-QN7Y4VVO.js → sprout-UKCYBGHK.js} +34 -30
  76. package/dist/{start-I5JYB65M.js → start-JR6CUUWF.js} +3 -6
  77. package/dist/{status-D7E5HHBV.js → status-5XDGYHKP.js} +2 -2
  78. package/dist/{status-4ESFLGH4.js → status-H2MKDN6L.js} +5 -5
  79. package/dist/{status-FU2PFVVF.js → status-LV34BG6G.js} +3 -3
  80. package/dist/{stop-NBVKEFQQ.js → stop-VKPGK25U.js} +2 -5
  81. package/dist/template-hash-BIMA4ILT.js +8 -0
  82. package/dist/{up-FS7CKM6V.js → up-JKGC7PPF.js} +5 -5
  83. package/dist/{update-FJIHDJKM.js → update-ELC6MEUT.js} +5 -5
  84. package/dist/{update-check-MWE5AH4U.js → update-check-F5Z3ALXX.js} +2 -2
  85. package/dist/{upgrade-AIT24B5I.js → upgrade-GXW2EQY3.js} +12 -3
  86. package/dist/{variant-63ZWO2W7.js → variant-A4I7PHXS.js} +16 -24
  87. package/dist/version-notify-5FGUAVSF.js +181 -0
  88. package/dist/web-assets/assets/index-DWBxl4LO.js +69 -0
  89. package/dist/web-assets/assets/index-ZqMd1mx1.css +1 -0
  90. package/dist/web-assets/index.html +2 -2
  91. package/package.json +10 -1
  92. package/templates/_base/.init/.config/prompts.json +1 -0
  93. package/templates/_base/home/.config/config.json.tmpl +4 -1
  94. package/templates/_base/src/lib/logger.ts +68 -23
  95. package/templates/_base/src/lib/startup.ts +12 -3
  96. package/templates/claude/src/agent.ts +150 -29
  97. package/templates/claude/src/lib/hooks/pre-compact.ts +18 -4
  98. package/templates/claude/src/lib/message-channel.ts +6 -0
  99. package/templates/claude/src/lib/stream-consumer.ts +7 -0
  100. package/templates/claude/src/server.ts +3 -1
  101. package/templates/pi/home/.config/config.json.tmpl +4 -1
  102. package/templates/pi/src/agent.ts +87 -0
  103. package/templates/pi/src/lib/event-handler.ts +13 -1
  104. package/templates/pi/src/server.ts +3 -1
  105. package/dist/chunk-5XNT2472.js +0 -36
  106. package/dist/chunk-FGSYHIS3.js +0 -891
  107. package/dist/chunk-UJ6GHNR7.js +0 -675
  108. package/dist/db-C2CJ46ZU.js +0 -10
  109. package/dist/delivery-manager-CSG7LXA4.js +0 -16
  110. package/dist/down-ZY35KMHR.js +0 -14
  111. package/dist/schema-GFH6RV3W.js +0 -26
  112. package/dist/variants-JAGWGBXG.js +0 -26
  113. package/dist/web-assets/assets/index-CUZTZzaW.js +0 -64
  114. package/dist/web-assets/assets/index-adVuCkqy.css +0 -1
@@ -13,7 +13,7 @@ async function run(args) {
13
13
  force: { type: "boolean" }
14
14
  });
15
15
  const name = resolveMindName({ mind: positional[0] });
16
- const { daemonFetch } = await import("./daemon-client-ITWUCNFO.js");
16
+ const { daemonFetch } = await import("./daemon-client-ZHCDL4RS.js");
17
17
  const { getClient, urlOf } = await import("./api-client-YPKOZP2O.js");
18
18
  const client = getClient();
19
19
  const url = urlOf(client.api.minds[":name"].$url({ param: { name } })) + (flags.force ? "?force=true" : "");
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ run,
4
+ stopDaemon
5
+ } from "./chunk-QIXPN3OO.js";
6
+ import "./chunk-VT5QODNE.js";
7
+ import "./chunk-JTDFJWI2.js";
8
+ import "./chunk-NWPT4ASZ.js";
9
+ import "./chunk-B2CPS4QU.js";
10
+ import "./chunk-K3NQKI34.js";
11
+ export {
12
+ run,
13
+ stopDaemon
14
+ };
@@ -11,8 +11,8 @@ import {
11
11
  } from "./chunk-D424ZQGI.js";
12
12
  import {
13
13
  daemonFetch
14
- } from "./chunk-WC6ZHVRL.js";
15
- import "./chunk-EBGCNDMM.js";
14
+ } from "./chunk-KFI7TQJ6.js";
15
+ import "./chunk-B2CPS4QU.js";
16
16
  import "./chunk-K3NQKI34.js";
17
17
 
18
18
  // src/commands/env.ts
@@ -2,14 +2,14 @@
2
2
  import {
3
3
  addHistoryToArchive,
4
4
  createExportArchive
5
- } from "./chunk-AW7P4EVV.js";
5
+ } from "./chunk-KTJGZ7M7.js";
6
6
  import {
7
7
  parseArgs
8
8
  } from "./chunk-D424ZQGI.js";
9
9
  import {
10
10
  findMind,
11
11
  mindDir
12
- } from "./chunk-EBGCNDMM.js";
12
+ } from "./chunk-B2CPS4QU.js";
13
13
  import "./chunk-K3NQKI34.js";
14
14
 
15
15
  // src/commands/export.ts
@@ -22,13 +22,14 @@ async function run(args) {
22
22
  "include-connectors": { type: "boolean" },
23
23
  "include-history": { type: "boolean" },
24
24
  "include-sessions": { type: "boolean" },
25
+ "include-src": { type: "boolean" },
25
26
  all: { type: "boolean" },
26
27
  output: { type: "string" }
27
28
  });
28
29
  const name = positional[0];
29
30
  if (!name) {
30
31
  console.error(
31
- "Usage: volute mind export <name> [--include-env] [--include-identity] [--include-connectors] [--include-history] [--include-sessions] [--all] [--output <path>]"
32
+ "Usage: volute mind export <name> [--include-env] [--include-identity] [--include-connectors] [--include-history] [--include-sessions] [--include-src] [--all] [--output <path>]"
32
33
  );
33
34
  process.exit(1);
34
35
  }
@@ -48,9 +49,12 @@ async function run(args) {
48
49
  const includeConnectors = includeAll || flags["include-connectors"];
49
50
  const includeHistory = includeAll || flags["include-history"];
50
51
  const includeSessions = includeAll || flags["include-sessions"];
52
+ const includeSrc = includeAll || flags["include-src"];
51
53
  const zip = createExportArchive({
52
54
  name,
53
55
  template: entry.template ?? "claude",
56
+ stage: entry.stage,
57
+ includeSrc,
54
58
  includeEnv,
55
59
  includeIdentity,
56
60
  includeConnectors,
@@ -59,11 +63,17 @@ async function run(args) {
59
63
  });
60
64
  if (includeHistory) {
61
65
  try {
62
- const { getDb } = await import("./db-C2CJ46ZU.js");
63
- const { eq } = await import("drizzle-orm");
64
- const { mindHistory } = await import("./schema-GFH6RV3W.js");
65
- const db = await getDb();
66
- const rows = await db.select().from(mindHistory).where(eq(mindHistory.mind, name));
66
+ const { daemonFetch } = await import("./daemon-client-ZHCDL4RS.js");
67
+ const { getClient, urlOf } = await import("./api-client-YPKOZP2O.js");
68
+ const client = getClient();
69
+ const res = await daemonFetch(
70
+ urlOf(client.api.minds[":name"].history.export.$url({ param: { name } }))
71
+ );
72
+ if (!res.ok) {
73
+ const text = await res.text().catch(() => "");
74
+ throw new Error(`Failed to fetch history: HTTP ${res.status}${text ? ` - ${text}` : ""}`);
75
+ }
76
+ const rows = await res.json();
67
77
  addHistoryToArchive(zip, rows);
68
78
  } catch (err) {
69
79
  console.error(`Error: could not export history: ${err.message}`);
@@ -84,6 +94,7 @@ Exported ${name} \u2192 ${outputPath} (${sizeMB} MB)`);
84
94
  const included = [];
85
95
  const excluded = [];
86
96
  for (const [key, val] of [
97
+ ["src", includeSrc],
87
98
  ["env", includeEnv],
88
99
  ["identity", includeIdentity],
89
100
  ["connectors", includeConnectors],
@@ -7,8 +7,8 @@ import {
7
7
  } from "./chunk-D424ZQGI.js";
8
8
  import {
9
9
  daemonFetch
10
- } from "./chunk-WC6ZHVRL.js";
11
- import "./chunk-EBGCNDMM.js";
10
+ } from "./chunk-KFI7TQJ6.js";
11
+ import "./chunk-B2CPS4QU.js";
12
12
  import "./chunk-K3NQKI34.js";
13
13
 
14
14
  // src/commands/file.ts
@@ -11,8 +11,8 @@ import {
11
11
  } from "./chunk-D424ZQGI.js";
12
12
  import {
13
13
  daemonFetch
14
- } from "./chunk-WC6ZHVRL.js";
15
- import "./chunk-EBGCNDMM.js";
14
+ } from "./chunk-KFI7TQJ6.js";
15
+ import "./chunk-B2CPS4QU.js";
16
16
  import "./chunk-K3NQKI34.js";
17
17
 
18
18
  // src/commands/history.ts
@@ -6,10 +6,11 @@ import {
6
6
  parseNameFromIdentity,
7
7
  run,
8
8
  sessionMatchesWorkspace
9
- } from "./chunk-O6ASDHFO.js";
10
- import "./chunk-VDWCHYTS.js";
9
+ } from "./chunk-RK627D57.js";
10
+ import "./chunk-XLC342FO.js";
11
+ import "./chunk-PHU4DEAJ.js";
11
12
  import "./chunk-D424ZQGI.js";
12
- import "./chunk-EBGCNDMM.js";
13
+ import "./chunk-B2CPS4QU.js";
13
14
  import "./chunk-K3NQKI34.js";
14
15
  export {
15
16
  findOpenClawSession,
@@ -7,8 +7,8 @@ import {
7
7
  } from "./chunk-D424ZQGI.js";
8
8
  import {
9
9
  daemonFetch
10
- } from "./chunk-WC6ZHVRL.js";
11
- import "./chunk-EBGCNDMM.js";
10
+ } from "./chunk-KFI7TQJ6.js";
11
+ import "./chunk-B2CPS4QU.js";
12
12
  import "./chunk-K3NQKI34.js";
13
13
 
14
14
  // src/commands/shared/log.ts
@@ -8,11 +8,11 @@ import {
8
8
  import {
9
9
  readSystemsConfig,
10
10
  writeSystemsConfig
11
- } from "./chunk-FCDU5BFX.js";
11
+ } from "./chunk-HFCBO2GL.js";
12
12
  import {
13
13
  parseArgs
14
14
  } from "./chunk-D424ZQGI.js";
15
- import "./chunk-EBGCNDMM.js";
15
+ import "./chunk-B2CPS4QU.js";
16
16
  import "./chunk-K3NQKI34.js";
17
17
 
18
18
  // src/commands/pages/login.ts
@@ -23,13 +23,13 @@ async function run(args) {
23
23
  });
24
24
  const existing = readSystemsConfig();
25
25
  if (existing) {
26
- console.error(`Already logged in as "${existing.system}". Run "volute logout" first.`);
26
+ console.error(`Already logged in as "${existing.system}". Run "volute auth logout" first.`);
27
27
  process.exit(1);
28
28
  }
29
29
  let key = flags.key;
30
30
  if (!key) {
31
31
  if (!process.stdin.isTTY) {
32
- console.error("Usage: volute pages login --key <api-key>");
32
+ console.error("Usage: volute auth login --key <api-key>");
33
33
  process.exit(1);
34
34
  }
35
35
  key = await promptLine("API key: ");
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  deleteSystemsConfig
4
- } from "./chunk-FCDU5BFX.js";
5
- import "./chunk-EBGCNDMM.js";
4
+ } from "./chunk-HFCBO2GL.js";
5
+ import "./chunk-B2CPS4QU.js";
6
6
  import "./chunk-K3NQKI34.js";
7
7
 
8
8
  // src/commands/pages/logout.ts
@@ -11,8 +11,8 @@ import {
11
11
  } from "./chunk-D424ZQGI.js";
12
12
  import {
13
13
  daemonFetch
14
- } from "./chunk-WC6ZHVRL.js";
15
- import "./chunk-EBGCNDMM.js";
14
+ } from "./chunk-KFI7TQJ6.js";
15
+ import "./chunk-B2CPS4QU.js";
16
16
  import "./chunk-K3NQKI34.js";
17
17
 
18
18
  // src/commands/logs.ts
@@ -7,8 +7,8 @@ import {
7
7
  } from "./chunk-D424ZQGI.js";
8
8
  import {
9
9
  daemonFetch
10
- } from "./chunk-WC6ZHVRL.js";
11
- import "./chunk-EBGCNDMM.js";
10
+ } from "./chunk-KFI7TQJ6.js";
11
+ import "./chunk-B2CPS4QU.js";
12
12
  import "./chunk-K3NQKI34.js";
13
13
 
14
14
  // src/commands/shared/merge.ts
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ deliverMessage,
4
+ extractTextContent
5
+ } from "./chunk-OSFGKF2T.js";
6
+ import "./chunk-HFCBO2GL.js";
7
+ import "./chunk-HGCDWKSP.js";
8
+ import "./chunk-A4S7H6G6.js";
9
+ import "./chunk-VNVCRVYI.js";
10
+ import "./chunk-XLC342FO.js";
11
+ import "./chunk-PHU4DEAJ.js";
12
+ import "./chunk-SGPEZ32F.js";
13
+ import "./chunk-YUIHSKR6.js";
14
+ import "./chunk-JTDFJWI2.js";
15
+ import "./chunk-NWPT4ASZ.js";
16
+ import "./chunk-B2CPS4QU.js";
17
+ import "./chunk-K3NQKI34.js";
18
+ export {
19
+ deliverMessage,
20
+ extractTextContent
21
+ };
@@ -6,45 +6,63 @@ async function run(args) {
6
6
  const subcommand = args[0];
7
7
  switch (subcommand) {
8
8
  case "create":
9
- await import("./create-HP4OVVHF.js").then((m) => m.run(args.slice(1)));
9
+ await import("./create-WIDA3M4C.js").then((m) => m.run(args.slice(1)));
10
10
  break;
11
11
  case "start":
12
- await import("./start-I5JYB65M.js").then((m) => m.run(args.slice(1)));
12
+ await import("./start-JR6CUUWF.js").then((m) => m.run(args.slice(1)));
13
13
  break;
14
14
  case "stop":
15
- await import("./stop-NBVKEFQQ.js").then((m) => m.run(args.slice(1)));
15
+ await import("./stop-VKPGK25U.js").then((m) => m.run(args.slice(1)));
16
16
  break;
17
17
  case "restart":
18
- await import("./restart-IQKMCK5M.js").then((m) => m.run(args.slice(1)));
18
+ await import("./restart-CIDAKGG2.js").then((m) => m.run(args.slice(1)));
19
19
  break;
20
20
  case "delete":
21
- await import("./delete-BSU7K3RY.js").then((m) => m.run(args.slice(1)));
21
+ await import("./delete-LOIANQGD.js").then((m) => m.run(args.slice(1)));
22
22
  break;
23
23
  case "list":
24
- await import("./status-4ESFLGH4.js").then((m) => m.run(args.slice(1)));
24
+ await import("./status-H2MKDN6L.js").then((m) => m.run(args.slice(1)));
25
25
  break;
26
26
  case "status": {
27
27
  const rest = args.slice(1);
28
28
  if (!rest[0] && process.env.VOLUTE_MIND) {
29
29
  rest.unshift(process.env.VOLUTE_MIND);
30
30
  }
31
- await import("./status-4ESFLGH4.js").then((m) => m.run(rest));
31
+ await import("./status-H2MKDN6L.js").then((m) => m.run(rest));
32
32
  break;
33
33
  }
34
34
  case "logs": {
35
35
  const rest = args.slice(1);
36
36
  const logsArgs = transformMindFlag(rest);
37
- await import("./logs-SF2IMJN4.js").then((m) => m.run(logsArgs));
37
+ await import("./logs-HNTNNBDW.js").then((m) => m.run(logsArgs));
38
38
  break;
39
39
  }
40
40
  case "upgrade":
41
- await import("./upgrade-AIT24B5I.js").then((m) => m.run(args.slice(1)));
41
+ await import("./upgrade-GXW2EQY3.js").then((m) => m.run(args.slice(1)));
42
42
  break;
43
43
  case "import":
44
- await import("./import-XEC34Y4Z.js").then((m) => m.run(args.slice(1)));
44
+ await import("./import-EAXTHHXL.js").then((m) => m.run(args.slice(1)));
45
45
  break;
46
46
  case "export":
47
- await import("./export-6QBUOQGC.js").then((m) => m.run(args.slice(1)));
47
+ await import("./export-XD6PJBQP.js").then((m) => m.run(args.slice(1)));
48
+ break;
49
+ case "connect":
50
+ await import("./connector-PYT5UOTZ.js").then((m) => m.run(["connect", ...args.slice(1)]));
51
+ break;
52
+ case "disconnect":
53
+ await import("./connector-PYT5UOTZ.js").then((m) => m.run(["disconnect", ...args.slice(1)]));
54
+ break;
55
+ case "seed":
56
+ await import("./seed-3H2MRREW.js").then((m) => m.run(args.slice(1)));
57
+ break;
58
+ case "sprout":
59
+ await import("./sprout-UKCYBGHK.js").then((m) => m.run(args.slice(1)));
60
+ break;
61
+ case "sleep":
62
+ await import("./mind-sleep-FWRBIFBS.js").then((m) => m.run(args.slice(1)));
63
+ break;
64
+ case "wake":
65
+ await import("./mind-wake-LJK2YU5X.js").then((m) => m.run(args.slice(1)));
48
66
  break;
49
67
  case "--help":
50
68
  case "-h":
@@ -65,6 +83,7 @@ function transformMindFlag(args) {
65
83
  function printUsage() {
66
84
  console.log(`Usage:
67
85
  volute mind create <name> [--template <name>]
86
+ volute mind seed <name> [--template <name>]
68
87
  volute mind start <name>
69
88
  volute mind stop [name]
70
89
  volute mind restart [name]
@@ -72,6 +91,11 @@ function printUsage() {
72
91
  volute mind list
73
92
  volute mind status [name]
74
93
  volute mind logs [name] [--follow] [-n N]
94
+ volute mind connect <type> [--mind <name>]
95
+ volute mind disconnect <type> [--mind <name>]
96
+ volute mind sprout
97
+ volute mind sleep [name] [--wake-at <time>]
98
+ volute mind wake [name]
75
99
  volute mind upgrade [name] [--template <name>] [--continue]
76
100
  volute mind import <path> [--name <name>] [--session <path>] [--template <name>]
77
101
  volute mind export <name> [--include-env] [--include-identity] [--include-connectors] [--include-history] [--include-sessions] [--all] [--output <path>]
@@ -4,12 +4,11 @@ import {
4
4
  markIdle,
5
5
  onMindEvent,
6
6
  stopAll
7
- } from "./chunk-GZ7DW4YL.js";
8
- import "./chunk-UU7A7KLB.js";
7
+ } from "./chunk-HGCDWKSP.js";
8
+ import "./chunk-A4S7H6G6.js";
9
+ import "./chunk-SGPEZ32F.js";
9
10
  import "./chunk-YUIHSKR6.js";
10
- import "./chunk-5XNT2472.js";
11
- import "./chunk-NSE7VJQA.js";
12
- import "./chunk-EBGCNDMM.js";
11
+ import "./chunk-B2CPS4QU.js";
13
12
  import "./chunk-K3NQKI34.js";
14
13
  export {
15
14
  getActiveMinds,
@@ -3,13 +3,12 @@ import {
3
3
  MindManager,
4
4
  getMindManager,
5
5
  initMindManager
6
- } from "./chunk-PUVXOZ6T.js";
6
+ } from "./chunk-VNVCRVYI.js";
7
+ import "./chunk-PHU4DEAJ.js";
8
+ import "./chunk-SGPEZ32F.js";
7
9
  import "./chunk-YUIHSKR6.js";
8
- import "./chunk-VDWCHYTS.js";
9
- import "./chunk-5XNT2472.js";
10
- import "./chunk-NSE7VJQA.js";
11
- import "./chunk-OGXOMR65.js";
12
- import "./chunk-EBGCNDMM.js";
10
+ import "./chunk-NWPT4ASZ.js";
11
+ import "./chunk-B2CPS4QU.js";
13
12
  import "./chunk-K3NQKI34.js";
14
13
  export {
15
14
  MindManager,
@@ -0,0 +1,41 @@
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 {
9
+ daemonFetch
10
+ } from "./chunk-KFI7TQJ6.js";
11
+ import "./chunk-B2CPS4QU.js";
12
+ import "./chunk-K3NQKI34.js";
13
+
14
+ // src/commands/mind-sleep.ts
15
+ async function run(args) {
16
+ const { positional, flags } = parseArgs(args, {
17
+ mind: { type: "string" },
18
+ "wake-at": { type: "string" }
19
+ });
20
+ const name = positional[0] || resolveMindName(flags);
21
+ if (!name) {
22
+ console.error("Usage: volute mind sleep <name> [--wake-at <time>]");
23
+ process.exit(1);
24
+ }
25
+ const body = {};
26
+ if (flags["wake-at"]) body.wakeAt = flags["wake-at"];
27
+ const res = await daemonFetch(`/api/minds/${encodeURIComponent(name)}/sleep`, {
28
+ method: "POST",
29
+ headers: { "Content-Type": "application/json" },
30
+ body: JSON.stringify(body)
31
+ });
32
+ const data = await res.json();
33
+ if (!res.ok) {
34
+ console.error(data.error || "Failed to put mind to sleep");
35
+ process.exit(1);
36
+ }
37
+ console.log(`${name} is going to sleep`);
38
+ }
39
+ export {
40
+ run
41
+ };
@@ -0,0 +1,36 @@
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 {
9
+ daemonFetch
10
+ } from "./chunk-KFI7TQJ6.js";
11
+ import "./chunk-B2CPS4QU.js";
12
+ import "./chunk-K3NQKI34.js";
13
+
14
+ // src/commands/mind-wake.ts
15
+ async function run(args) {
16
+ const { positional, flags } = parseArgs(args, {
17
+ mind: { type: "string" }
18
+ });
19
+ const name = positional[0] || resolveMindName(flags);
20
+ if (!name) {
21
+ console.error("Usage: volute mind wake <name>");
22
+ process.exit(1);
23
+ }
24
+ const res = await daemonFetch(`/api/minds/${encodeURIComponent(name)}/wake`, {
25
+ method: "POST"
26
+ });
27
+ const data = await res.json();
28
+ if (!res.ok) {
29
+ console.error(data.error || "Failed to wake mind");
30
+ process.exit(1);
31
+ }
32
+ console.log(`${name} is waking up`);
33
+ }
34
+ export {
35
+ run
36
+ };
@@ -4,7 +4,7 @@ import "./chunk-K3NQKI34.js";
4
4
  // package.json
5
5
  var package_default = {
6
6
  name: "volute",
7
- version: "0.20.0",
7
+ version: "0.22.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",
@@ -19,12 +19,21 @@ var package_default = {
19
19
  "claude",
20
20
  "anthropic"
21
21
  ],
22
+ workspaces: [
23
+ "packages/*"
24
+ ],
22
25
  engines: {
23
26
  node: ">=24"
24
27
  },
25
28
  bin: {
26
29
  volute: "dist/cli.js"
27
30
  },
31
+ exports: {
32
+ ".": "./dist/cli.js",
33
+ "./api": {
34
+ types: "./dist/api.d.ts"
35
+ }
36
+ },
28
37
  files: [
29
38
  "dist/",
30
39
  "drizzle/",
@@ -6,10 +6,10 @@ async function run(args) {
6
6
  const subcommand = args[0];
7
7
  switch (subcommand) {
8
8
  case "publish":
9
- await import("./publish-TAJUET4I.js").then((m) => m.run(args.slice(1)));
9
+ await import("./publish-BZNHKUUK.js").then((m) => m.run(args.slice(1)));
10
10
  break;
11
11
  case "status":
12
- await import("./status-FU2PFVVF.js").then((m) => m.run(args.slice(1)));
12
+ await import("./status-LV34BG6G.js").then((m) => m.run(args.slice(1)));
13
13
  break;
14
14
  case "--help":
15
15
  case "-h":
@@ -26,10 +26,10 @@ function printUsage() {
26
26
  volute pages publish [--mind <name>] Publish mind's pages/ directory
27
27
  volute pages status [--mind <name>] Show publish status
28
28
 
29
- Account commands (register, login, logout) are now top-level:
30
- volute register [--name <name>]
31
- volute login [--key <key>]
32
- volute logout`);
29
+ Account commands:
30
+ volute auth register [--name <name>]
31
+ volute auth login [--key <key>]
32
+ volute auth logout`);
33
33
  }
34
34
  export {
35
35
  run
@@ -7,19 +7,19 @@ import {
7
7
  } from "./chunk-NAOW2CLO.js";
8
8
  import {
9
9
  sharedDir
10
- } from "./chunk-TIWH32HP.js";
10
+ } from "./chunk-PHHKNGA3.js";
11
11
  import {
12
12
  readSystemsConfig
13
- } from "./chunk-FCDU5BFX.js";
13
+ } from "./chunk-HFCBO2GL.js";
14
14
  import "./chunk-YUIHSKR6.js";
15
15
  import {
16
16
  parseArgs
17
17
  } from "./chunk-D424ZQGI.js";
18
- import "./chunk-DYZGP3EW.js";
19
- import "./chunk-OGXOMR65.js";
18
+ import "./chunk-JTDFJWI2.js";
19
+ import "./chunk-NWPT4ASZ.js";
20
20
  import {
21
21
  mindDir
22
- } from "./chunk-EBGCNDMM.js";
22
+ } from "./chunk-B2CPS4QU.js";
23
23
  import "./chunk-K3NQKI34.js";
24
24
 
25
25
  // src/commands/pages/publish.ts
@@ -32,7 +32,7 @@ async function run(args) {
32
32
  });
33
33
  const config = readSystemsConfig();
34
34
  if (!config) {
35
- console.error('Not logged in. Run "volute pages register" or "volute pages login" first.');
35
+ console.error('Not logged in. Run "volute auth register" or "volute auth login" first.');
36
36
  process.exit(1);
37
37
  }
38
38
  let mindName;
@@ -7,8 +7,8 @@ import {
7
7
  } from "./chunk-D424ZQGI.js";
8
8
  import {
9
9
  daemonFetch
10
- } from "./chunk-WC6ZHVRL.js";
11
- import "./chunk-EBGCNDMM.js";
10
+ } from "./chunk-KFI7TQJ6.js";
11
+ import "./chunk-B2CPS4QU.js";
12
12
  import "./chunk-K3NQKI34.js";
13
13
 
14
14
  // src/commands/shared/pull.ts
@@ -8,11 +8,11 @@ import {
8
8
  import {
9
9
  readSystemsConfig,
10
10
  writeSystemsConfig
11
- } from "./chunk-FCDU5BFX.js";
11
+ } from "./chunk-HFCBO2GL.js";
12
12
  import {
13
13
  parseArgs
14
14
  } from "./chunk-D424ZQGI.js";
15
- import "./chunk-EBGCNDMM.js";
15
+ import "./chunk-B2CPS4QU.js";
16
16
  import "./chunk-K3NQKI34.js";
17
17
 
18
18
  // src/commands/pages/register.ts
@@ -23,13 +23,13 @@ async function run(args) {
23
23
  });
24
24
  const existing = readSystemsConfig();
25
25
  if (existing) {
26
- console.error(`Already registered as "${existing.system}". Run "volute logout" first.`);
26
+ console.error(`Already registered as "${existing.system}". Run "volute auth logout" first.`);
27
27
  process.exit(1);
28
28
  }
29
29
  let name = flags.name;
30
30
  if (!name) {
31
31
  if (!process.stdin.isTTY) {
32
- console.error("Usage: volute pages register --name <system-name>");
32
+ console.error("Usage: volute auth register --name <system-name>");
33
33
  process.exit(1);
34
34
  }
35
35
  name = await promptLine("Choose a system name: ");
@@ -55,7 +55,7 @@ async function run(args) {
55
55
  } catch (err) {
56
56
  console.error(`Failed to save credentials: ${err.message}`);
57
57
  console.error(`Your API key is: ${apiKey}`);
58
- console.error(`Save it and run: volute pages login --key ${apiKey}`);
58
+ console.error(`Save it and run: volute auth login --key ${apiKey}`);
59
59
  process.exit(1);
60
60
  }
61
61
  console.log(`Registered as "${system}". Credentials saved.`);
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ addMind,
4
+ daemonLoopback,
5
+ ensureVoluteHome,
6
+ findMind,
7
+ getRegistryCache,
8
+ initRegistryCache,
9
+ mindDir,
10
+ nextPort,
11
+ readRegistry,
12
+ removeMind,
13
+ resolveMind,
14
+ setMindRunning,
15
+ setMindStage,
16
+ setMindTemplateHash,
17
+ stateDir,
18
+ validateMindName,
19
+ voluteHome,
20
+ writeRegistry
21
+ } from "./chunk-B2CPS4QU.js";
22
+ import "./chunk-K3NQKI34.js";
23
+ export {
24
+ addMind,
25
+ daemonLoopback,
26
+ ensureVoluteHome,
27
+ findMind,
28
+ getRegistryCache,
29
+ initRegistryCache,
30
+ mindDir,
31
+ nextPort,
32
+ readRegistry,
33
+ removeMind,
34
+ resolveMind,
35
+ setMindRunning,
36
+ setMindStage,
37
+ setMindTemplateHash,
38
+ stateDir,
39
+ validateMindName,
40
+ voluteHome,
41
+ writeRegistry
42
+ };