volute 0.32.0 → 0.34.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 (187) hide show
  1. package/README.md +16 -0
  2. package/dist/{accept-74M7I4RZ.js → accept-TW6V4WI4.js} +4 -4
  3. package/dist/{activity-events-HETAODOK.js → activity-events-BN7V6KCC.js} +4 -4
  4. package/dist/{ai-service-ZIPCV3MX.js → ai-service-PSILB5WD.js} +5 -5
  5. package/dist/{api-client-YPKOZP2O.js → api-client-XUXOB7LI.js} +1 -1
  6. package/dist/api.d.ts +1198 -957
  7. package/dist/{archive-INXYFVCW.js → archive-C2VEMQOR.js} +4 -4
  8. package/dist/{auth-6DMGES3I.js → auth-ZFZXJZDQ.js} +5 -5
  9. package/dist/{bridge-BVCBTGPF.js → bridge-O753D5F4.js} +4 -4
  10. package/dist/{chat-XT4OBJBU.js → chat-BHYX7DJ4.js} +9 -9
  11. package/dist/{chunk-M7UL5S3Q.js → chunk-2IOP6PHB.js} +1 -1
  12. package/dist/{chunk-JJ7W6WSB.js → chunk-47XDEWWV.js} +5 -5
  13. package/dist/{chunk-RSX4OPZY.js → chunk-47ZPNLF4.js} +7 -7
  14. package/dist/{chunk-RPZZSXV3.js → chunk-4JSR7YO7.js} +20 -1
  15. package/dist/chunk-6LXAAQ43.js +22 -0
  16. package/dist/{chunk-TSXLLQZW.js → chunk-6OWJXUAR.js} +10 -1
  17. package/dist/{chunk-I5KY25PQ.js → chunk-6WAWMWR5.js} +1 -1
  18. package/dist/{chunk-LSGWR54X.js → chunk-7F2SW2KD.js} +2 -2
  19. package/dist/chunk-7KJOFUNN.js +22 -0
  20. package/dist/{spirit-N4W4UQRH.js → chunk-B2BVAIZ4.js} +21 -12
  21. package/dist/{chunk-LGB6JBHI.js → chunk-BDK73LK6.js} +5 -55
  22. package/dist/{chunk-IYDIE3HG.js → chunk-BFWHBQK4.js} +1 -1
  23. package/dist/{chunk-TDRYEPH4.js → chunk-BM474GX6.js} +4 -4
  24. package/dist/{chunk-R7E6CRVQ.js → chunk-BTWAGDV5.js} +1 -1
  25. package/dist/{chunk-WKF5FEFK.js → chunk-CVL5IGIR.js} +629 -174
  26. package/dist/{chunk-S6NFERDC.js → chunk-E5C7OWZ2.js} +20 -22
  27. package/dist/chunk-FYCALD4Q.js +23 -0
  28. package/dist/{chunk-SKLSMHXO.js → chunk-IS7WJ56Q.js} +1 -1
  29. package/dist/{chunk-2NGTS5UU.js → chunk-M3K5AARV.js} +1 -1
  30. package/dist/{chunk-ALEF47VT.js → chunk-MLOQKQNB.js} +1 -1
  31. package/dist/{chunk-D5G5YOPL.js → chunk-N3DNFPVA.js} +41 -5
  32. package/dist/{chunk-LRCG2JLP.js → chunk-N7BLAHNE.js} +5 -1
  33. package/dist/chunk-OYAKCAVY.js +29 -0
  34. package/dist/{chunk-UKVWJRKN.js → chunk-PLDWHR4D.js} +1 -1
  35. package/dist/{chunk-QBQ424EM.js → chunk-TAHX36HZ.js} +545 -246
  36. package/dist/chunk-U5BTYSAL.js +59 -0
  37. package/dist/{chunk-SX5TKJBZ.js → chunk-V45JXOWY.js} +2 -2
  38. package/dist/{chunk-2FLJ63GU.js → chunk-V6ZCNULL.js} +2 -2
  39. package/dist/{chunk-QZANELPX.js → chunk-XWXBJQBE.js} +3 -2
  40. package/dist/cli.js +32 -24
  41. package/dist/{clock-2UOZ6JPU.js → clock-3X4DSC2N.js} +38 -23
  42. package/dist/{cloud-sync-JN3NWKEM.js → cloud-sync-TG3TIX5H.js} +21 -17
  43. package/dist/{config-H2H4UIF7.js → config-OROA5DUA.js} +4 -4
  44. package/dist/connectors/discord-bridge.js +1 -1
  45. package/dist/connectors/slack-bridge.js +1 -1
  46. package/dist/connectors/telegram-bridge.js +1 -1
  47. package/dist/{conversations-3O5O6AS3.js → conversations-HL2JP5GI.js} +5 -5
  48. package/dist/{create-RNLNCORE.js → create-3SEKKI6P.js} +5 -5
  49. package/dist/{create-WBBYI6V7.js → create-UOSOQ2HN.js} +4 -4
  50. package/dist/daemon-client-WOAQXXBM.js +12 -0
  51. package/dist/{daemon-restart-NGFHFAUF.js → daemon-restart-5ABHNXJZ.js} +9 -8
  52. package/dist/daemon.js +2730 -1520
  53. package/dist/{db-RA45JBFG.js → db-PLEDCBHZ.js} +1 -1
  54. package/dist/db-RYX3SS2W.js +9 -0
  55. package/dist/{delete-QTGWEDBI.js → delete-KYOVWR23.js} +3 -3
  56. package/dist/delivery-manager-2BR5NZKF.js +32 -0
  57. package/dist/{delivery-router-FL45JL7N.js → delivery-router-D5ELDMS2.js} +4 -4
  58. package/dist/down-QVFN4UPK.js +15 -0
  59. package/dist/{env-RLYQBOOP.js → env-R34DT7XL.js} +10 -6
  60. package/dist/exec-DVLXKRIO.js +17 -0
  61. package/dist/{export-SUYRLI5Q.js → export-6ZXAXATG.js} +6 -6
  62. package/dist/extension-PM42QCID.js +97 -0
  63. package/dist/extensions-BBGVL5JC.js +38 -0
  64. package/dist/{files-EAMPO2SJ.js → files-VQV2VZQO.js} +5 -5
  65. package/dist/{import-DDUFE7AY.js → import-MK2I2T6F.js} +5 -5
  66. package/dist/isolation-62MKDZN3.js +22 -0
  67. package/dist/{join-I5QEE3LG.js → join-DGYHTJUH.js} +3 -3
  68. package/dist/lib-DYEZMGW7.js +6588 -0
  69. package/dist/{list-DW2VRTOZ.js → list-C644WTHV.js} +16 -8
  70. package/dist/{login-7CHPW2PN.js → login-IIGEQPHL.js} +4 -4
  71. package/dist/{login-RIJF2F4G.js → login-KZQLMAWE.js} +4 -4
  72. package/dist/{logout-5MLHZALK.js → logout-AGTZVRGP.js} +4 -4
  73. package/dist/{logout-UZJRGY4Z.js → logout-KD6GXIJJ.js} +4 -4
  74. package/dist/message-delivery-V3R6NXJP.js +42 -0
  75. package/dist/{mind-2B6M7Y25.js → mind-BI4EPBVZ.js} +25 -19
  76. package/dist/{mind-activity-tracker-NZZT2NTT.js → mind-activity-tracker-2ACNHA7B.js} +5 -5
  77. package/dist/mind-history-WOYFLQAI.js +264 -0
  78. package/dist/{mind-list-WUPMQDYQ.js → mind-list-6VPM7GUQ.js} +4 -4
  79. package/dist/mind-manager-MWW3BTS4.js +32 -0
  80. package/dist/mind-profile-WPG42U5Y.js +47 -0
  81. package/dist/mind-service-VIKZJK2M.js +38 -0
  82. package/dist/{mind-sleep-B7BHJLH7.js → mind-sleep-XDISJY74.js} +4 -4
  83. package/dist/{mind-status-L3EFFRPR.js → mind-status-7FTZWPZF.js} +4 -4
  84. package/dist/{mind-wake-GY3RFX7Y.js → mind-wake-KIIKEI3A.js} +4 -4
  85. package/dist/{package-PK6JUFL3.js → package-V2WHWVG6.js} +9 -5
  86. package/dist/{read-5AMJRO3D.js → read-H5C26YO7.js} +18 -8
  87. package/dist/read-stdin-PIRM6A2Y.js +8 -0
  88. package/dist/{register-V2JZZKFK.js → register-J27WP33N.js} +4 -4
  89. package/dist/{registry-PJ4S5PHQ.js → registry-UYV5S6QT.js} +3 -3
  90. package/dist/{reject-33HEZMZ4.js → reject-OEANJYIA.js} +4 -4
  91. package/dist/{restart-3UCMRUVC.js → restart-V5EGYBJG.js} +4 -4
  92. package/dist/{sandbox-JANNTX6U.js → sandbox-SI5HMBP3.js} +5 -5
  93. package/dist/scheduler-AGG3L2FO.js +32 -0
  94. package/dist/{schema-PA3M5ZKH.js → schema-ETMABTW4.js} +4 -2
  95. package/dist/seed-WNGI6PNW.js +11 -0
  96. package/dist/seed-check-PXTH7YXS.js +32 -0
  97. package/dist/seed-cmd-VENFTGS3.js +36 -0
  98. package/dist/{seed-ALUQ55FF.js → seed-create-663ALOKH.js} +8 -8
  99. package/dist/{sprout-L2GFOVF7.js → seed-sprout-EH3AGKAI.js} +24 -11
  100. package/dist/{send-3MI36LEF.js → send-7FUUUZZH.js} +66 -51
  101. package/dist/{setup-SZIARWI6.js → setup-GGMKENLN.js} +6 -4
  102. package/dist/{setup-WENLVPVP.js → setup-Z3DEVWV7.js} +13 -11
  103. package/dist/{skill-TUVOTW4Z.js → skill-DKNYJS4P.js} +12 -8
  104. package/dist/skills/imagegen/SKILL.md +11 -7
  105. package/dist/skills/imagegen/scripts/imagegen.ts +146 -25
  106. package/dist/skills/orientation/SKILL.md +9 -2
  107. package/dist/skills/plan-coordinator/SKILL.md +60 -0
  108. package/dist/skills/seed-nurture/SKILL.md +42 -0
  109. package/dist/skills/volute-mind/SKILL.md +11 -221
  110. package/dist/skills/volute-mind/references/extensions.md +37 -0
  111. package/dist/skills/volute-mind/references/integrations.md +48 -0
  112. package/dist/skills/volute-mind/references/routing.md +86 -0
  113. package/dist/skills/volute-mind/references/sleep.md +33 -0
  114. package/dist/skills/volute-mind/references/variants.md +31 -0
  115. package/dist/{skills-XNZK6P4K.js → skills-Q6VZ2UGD.js} +11 -6
  116. package/dist/sleep-manager-BJK2ROPX.js +36 -0
  117. package/dist/spirit-4JP4TY4C.js +23 -0
  118. package/dist/{split-STOROBYJ.js → split-3YPMS2CL.js} +3 -3
  119. package/dist/sprout-E3HJIV2Z.js +11 -0
  120. package/dist/{start-K2NCUUCG.js → start-W3TPKX4D.js} +4 -4
  121. package/dist/{status-TCUMUO6M.js → status-4OVFXFEJ.js} +7 -6
  122. package/dist/{stop-H26JZDXF.js → stop-GTT6YWYO.js} +4 -4
  123. package/dist/system-channel-DXD2JBOU.js +36 -0
  124. package/dist/system-chat-TYLOL7SX.js +36 -0
  125. package/dist/{systems-DHBKVYEY.js → systems-AYLO727G.js} +7 -7
  126. package/dist/{tailscale-XHQBZROW.js → tailscale-ZEUK7GKZ.js} +3 -3
  127. package/dist/{template-hash-A6VVKOXJ.js → template-hash-EJRTKE36.js} +1 -1
  128. package/dist/up-PA7F2CXE.js +18 -0
  129. package/dist/{update-QVPRF6GR.js → update-HG4LCUSG.js} +7 -6
  130. package/dist/{update-check-ZD6OOIYQ.js → update-check-X3YG4WVP.js} +4 -4
  131. package/dist/{upgrade-O4Q7WJM3.js → upgrade-YGNIDICG.js} +3 -3
  132. package/dist/{variant-7TGZHOU3.js → variant-MZUMRTQO.js} +1 -1
  133. package/dist/{version-notify-TCKWBZZG.js → version-notify-YCH4UVQ2.js} +23 -20
  134. package/dist/volute-config-WBKYJGYQ.js +10 -0
  135. package/dist/web-assets/assets/index-DiiwC-CZ.css +1 -0
  136. package/dist/web-assets/assets/index-d6y5b9Ij.js +75 -0
  137. package/dist/web-assets/ext-theme.css +48 -9
  138. package/dist/web-assets/index.html +2 -2
  139. package/drizzle/0005_meta_summaries.sql +15 -0
  140. package/drizzle/meta/0005_snapshot.json +7 -0
  141. package/drizzle/meta/_journal.json +7 -0
  142. package/package.json +8 -4
  143. package/packages/extensions/plan/dist/ui/assets/index-CJj2gZnZ.css +1 -0
  144. package/packages/extensions/plan/dist/ui/assets/index-FMEJmvQz.js +61 -0
  145. package/packages/extensions/plan/dist/ui/index.html +14 -0
  146. package/packages/extensions/plan/skills/plan/SKILL.md +43 -0
  147. package/packages/extensions/plan/skills/plan/scripts/plan-hook.sh +37 -0
  148. package/templates/_base/home/VOLUTE.md +12 -19
  149. package/templates/_base/src/lib/context-breakdown.ts +450 -0
  150. package/templates/_base/src/lib/format-prefix.ts +17 -0
  151. package/templates/_base/src/lib/hook-loader.ts +8 -2
  152. package/templates/_base/src/lib/router.ts +75 -33
  153. package/templates/_base/src/lib/routing.ts +4 -1
  154. package/templates/_base/src/lib/startup.ts +16 -8
  155. package/templates/_base/src/lib/types.ts +2 -1
  156. package/templates/_base/src/lib/volute-server.ts +69 -8
  157. package/templates/claude/.init/CLAUDE.md +4 -10
  158. package/templates/claude/package.json.tmpl +1 -0
  159. package/templates/claude/src/agent.ts +100 -32
  160. package/templates/claude/src/lib/hooks/reply-instructions.ts +27 -7
  161. package/templates/claude/src/lib/stream-consumer.ts +40 -2
  162. package/templates/claude/src/server.ts +1 -0
  163. package/templates/codex/package.json.tmpl +1 -0
  164. package/templates/codex/src/agent.ts +81 -8
  165. package/templates/codex/src/server.ts +1 -4
  166. package/templates/pi/package.json.tmpl +1 -0
  167. package/templates/pi/src/agent.ts +115 -36
  168. package/templates/pi/src/lib/event-handler.ts +22 -7
  169. package/templates/pi/src/lib/reply-instructions-extension.ts +23 -4
  170. package/templates/pi/src/lib/subagents.ts +20 -17
  171. package/templates/pi/src/server.ts +2 -5
  172. package/dist/chunk-K3NQKI34.js +0 -10
  173. package/dist/daemon-client-6QXHZ7US.js +0 -12
  174. package/dist/db-F34YLV7D.js +0 -9
  175. package/dist/delivery-manager-SDVXFD4W.js +0 -28
  176. package/dist/down-TB3ESMNP.js +0 -14
  177. package/dist/extension-FQ5D3NCC.js +0 -174
  178. package/dist/extensions-GDYWQXC4.js +0 -29
  179. package/dist/history-FO5PHBQ5.js +0 -128
  180. package/dist/message-delivery-2FIM7QKO.js +0 -32
  181. package/dist/mind-manager-BNCMGYXW.js +0 -28
  182. package/dist/mind-service-AV273WT4.js +0 -34
  183. package/dist/sleep-manager-53DZOWW7.js +0 -32
  184. package/dist/system-chat-NPYFYZVI.js +0 -32
  185. package/dist/up-6I6BHRTO.js +0 -17
  186. package/dist/web-assets/assets/index-Bui7U9Uu.css +0 -1
  187. package/dist/web-assets/assets/index-e36DIo1b.js +0 -73
@@ -0,0 +1,59 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ wrapForIsolation
4
+ } from "./chunk-BDK73LK6.js";
5
+
6
+ // src/lib/exec.ts
7
+ import { execFile as execFileCb, execFileSync, spawn } from "child_process";
8
+ async function exec(cmd, args, options) {
9
+ const [wrappedCmd, wrappedArgs] = options?.mindName ? await wrapForIsolation(cmd, args, options.mindName) : [cmd, args];
10
+ return new Promise((resolve, reject) => {
11
+ execFileCb(
12
+ wrappedCmd,
13
+ wrappedArgs,
14
+ { cwd: options?.cwd, env: options?.env },
15
+ (err, stdout, stderr) => {
16
+ if (err) {
17
+ err.stderr = stderr;
18
+ err.stdout = stdout;
19
+ reject(err);
20
+ } else {
21
+ resolve(stdout);
22
+ }
23
+ }
24
+ );
25
+ });
26
+ }
27
+ function gitExec(args, options) {
28
+ const fullArgs = process.env.VOLUTE_ISOLATION === "user" ? ["-c", "safe.directory=*", ...args] : args;
29
+ return exec("git", fullArgs, options);
30
+ }
31
+ function resolveVoluteBin() {
32
+ try {
33
+ return execFileSync("which", ["volute"], { encoding: "utf-8" }).trim();
34
+ } catch {
35
+ throw new Error("Could not find volute binary on PATH");
36
+ }
37
+ }
38
+ async function execInherit(cmd, args, options) {
39
+ const [wrappedCmd, wrappedArgs] = options?.mindName ? await wrapForIsolation(cmd, args, options.mindName) : [cmd, args];
40
+ return new Promise((resolve, reject) => {
41
+ const child = spawn(wrappedCmd, wrappedArgs, {
42
+ cwd: options?.cwd,
43
+ env: options?.env,
44
+ stdio: "inherit"
45
+ });
46
+ child.on("error", reject);
47
+ child.on("close", (code) => {
48
+ if (code === 0) resolve();
49
+ else reject(new Error(`${cmd} ${args.join(" ")} exited with code ${code}`));
50
+ });
51
+ });
52
+ }
53
+
54
+ export {
55
+ exec,
56
+ gitExec,
57
+ resolveVoluteBin,
58
+ execInherit
59
+ };
@@ -4,14 +4,14 @@ import {
4
4
  } from "./chunk-YUIHSKR6.js";
5
5
  import {
6
6
  readGlobalConfig
7
- } from "./chunk-TSXLLQZW.js";
7
+ } from "./chunk-6OWJXUAR.js";
8
8
  import {
9
9
  getBaseName,
10
10
  readRegistry,
11
11
  voluteHome,
12
12
  voluteSystemDir,
13
13
  voluteUserHome
14
- } from "./chunk-LRCG2JLP.js";
14
+ } from "./chunk-N7BLAHNE.js";
15
15
 
16
16
  // src/lib/sandbox.ts
17
17
  import { resolve } from "path";
@@ -5,10 +5,10 @@ import {
5
5
  pollHealthDown,
6
6
  readDaemonConfig,
7
7
  stopService
8
- } from "./chunk-LSGWR54X.js";
8
+ } from "./chunk-7F2SW2KD.js";
9
9
  import {
10
10
  voluteSystemDir
11
- } from "./chunk-LRCG2JLP.js";
11
+ } from "./chunk-N7BLAHNE.js";
12
12
 
13
13
  // src/commands/down.ts
14
14
  import { existsSync, readFileSync, unlinkSync } from "fs";
@@ -4,10 +4,10 @@ import {
4
4
  } from "./chunk-YUIHSKR6.js";
5
5
  import {
6
6
  getDb
7
- } from "./chunk-LRCG2JLP.js";
7
+ } from "./chunk-N7BLAHNE.js";
8
8
  import {
9
9
  activity
10
- } from "./chunk-RPZZSXV3.js";
10
+ } from "./chunk-4JSR7YO7.js";
11
11
 
12
12
  // src/lib/events/activity-events.ts
13
13
  var subscribers = /* @__PURE__ */ new Set();
@@ -37,6 +37,7 @@ async function publish(event) {
37
37
  }
38
38
  const full = { ...event, id, created_at };
39
39
  notify(full);
40
+ return id;
40
41
  }
41
42
  function broadcast(event) {
42
43
  const created_at = event.created_at ?? (/* @__PURE__ */ new Date()).toISOString().replace("T", " ").slice(0, 19);
package/dist/cli.js CHANGED
@@ -10,7 +10,7 @@ if (!process.env.VOLUTE_HOME) {
10
10
  var command = process.argv[2];
11
11
  var args = process.argv.slice(3);
12
12
  if (command === "--version" || command === "-v") {
13
- const { default: pkg } = await import("./package-PK6JUFL3.js");
13
+ const { default: pkg } = await import("./package-V2WHWVG6.js");
14
14
  console.log(pkg.version);
15
15
  process.exit(0);
16
16
  }
@@ -31,7 +31,7 @@ var ungatedCommands = /* @__PURE__ */ new Set([
31
31
  void 0
32
32
  ]);
33
33
  if (!ungatedCommands.has(command)) {
34
- const { isSetupComplete } = await import("./setup-SZIARWI6.js");
34
+ const { isSetupComplete } = await import("./setup-GGMKENLN.js");
35
35
  if (!isSetupComplete()) {
36
36
  console.error("Volute is not set up. Run `volute setup` first.");
37
37
  process.exit(1);
@@ -39,55 +39,58 @@ if (!ungatedCommands.has(command)) {
39
39
  }
40
40
  switch (command) {
41
41
  case "setup":
42
- await import("./setup-WENLVPVP.js").then((m) => m.run(args));
42
+ await import("./setup-Z3DEVWV7.js").then((m) => m.run(args));
43
43
  break;
44
44
  case "mind":
45
- await import("./mind-2B6M7Y25.js").then((m) => m.run(args));
45
+ await import("./mind-BI4EPBVZ.js").then((m) => m.run(args));
46
+ break;
47
+ case "seed":
48
+ await import("./seed-cmd-VENFTGS3.js").then((m) => m.run(args));
46
49
  break;
47
50
  case "chat":
48
- await import("./chat-XT4OBJBU.js").then((m) => m.run(args));
51
+ await import("./chat-BHYX7DJ4.js").then((m) => m.run(args));
49
52
  break;
50
53
  case "variant":
51
- await import("./variant-7TGZHOU3.js").then((m) => m.run(args));
54
+ await import("./variant-MZUMRTQO.js").then((m) => m.run(args));
52
55
  break;
53
56
  case "clock":
54
- await import("./clock-2UOZ6JPU.js").then((m) => m.run(args));
57
+ await import("./clock-3X4DSC2N.js").then((m) => m.run(args));
55
58
  break;
56
59
  case "skill":
57
- await import("./skill-TUVOTW4Z.js").then((m) => m.run(args));
60
+ await import("./skill-DKNYJS4P.js").then((m) => m.run(args));
58
61
  break;
59
62
  case "env":
60
- await import("./env-RLYQBOOP.js").then((m) => m.run(args));
63
+ await import("./env-R34DT7XL.js").then((m) => m.run(args));
61
64
  break;
62
65
  case "config":
63
- await import("./config-H2H4UIF7.js").then((m) => m.run(args));
66
+ await import("./config-OROA5DUA.js").then((m) => m.run(args));
64
67
  break;
65
68
  case "up":
66
- await import("./up-6I6BHRTO.js").then((m) => m.run(args));
69
+ await import("./up-PA7F2CXE.js").then((m) => m.run(args));
67
70
  break;
68
71
  case "down":
69
- await import("./down-TB3ESMNP.js").then((m) => m.run(args));
72
+ await import("./down-QVFN4UPK.js").then((m) => m.run(args));
70
73
  break;
71
74
  case "restart":
72
- await import("./daemon-restart-NGFHFAUF.js").then((m) => m.run(args));
75
+ await import("./daemon-restart-5ABHNXJZ.js").then((m) => m.run(args));
73
76
  break;
74
77
  case "update":
75
- await import("./update-QVPRF6GR.js").then((m) => m.run(args));
78
+ await import("./update-HG4LCUSG.js").then((m) => m.run(args));
76
79
  break;
77
80
  case "status":
78
- await import("./status-TCUMUO6M.js").then((m) => m.run(args));
81
+ await import("./status-4OVFXFEJ.js").then((m) => m.run(args));
79
82
  break;
80
83
  case "extension":
81
- await import("./extension-FQ5D3NCC.js").then((m) => m.run(args));
84
+ await import("./extension-PM42QCID.js").then((m) => m.run(args));
82
85
  break;
83
86
  case "systems":
84
- await import("./systems-DHBKVYEY.js").then((m) => m.run(args));
87
+ await import("./systems-AYLO727G.js").then((m) => m.run(args));
85
88
  break;
86
89
  case "login":
87
- await import("./login-RIJF2F4G.js").then((m) => m.run(args));
90
+ await import("./login-KZQLMAWE.js").then((m) => m.run(args));
88
91
  break;
89
92
  case "logout":
90
- await import("./logout-5MLHZALK.js").then((m) => m.run(args));
93
+ await import("./logout-AGTZVRGP.js").then((m) => m.run(args));
91
94
  break;
92
95
  case "--help":
93
96
  case "-h":
@@ -101,15 +104,18 @@ Common:
101
104
 
102
105
  Mind:
103
106
  mind create <name> Create a new mind
104
- mind seed <name> Plant a seed mind (orientation mode)
105
107
  mind start/stop/restart [name] Control a mind
106
108
  mind list List all minds
107
109
  mind status [name] Check a mind's status
108
110
  mind history [name] [--full] View mind activity history
109
- mind sprout Complete orientation
111
+ mind profile [--mind] [...] Set display name, description, avatar
110
112
  mind split/join Create and merge experimental splits
111
113
  mind upgrade/import/export Lifecycle operations
112
114
 
115
+ Seed:
116
+ seed create <name> Plant a new seed mind
117
+ seed sprout Complete orientation and become a full mind
118
+
113
119
  Configuration:
114
120
  chat Conversations, messages, files, and platform bridges
115
121
  clock Schedules, timers, and sleep/wake cycles
@@ -141,7 +147,7 @@ use --mind <name> or VOLUTE_MIND env var to identify the mind.`);
141
147
  default: {
142
148
  let isExtensionCommand = false;
143
149
  try {
144
- const { daemonFetch } = await import("./daemon-client-6QXHZ7US.js");
150
+ const { daemonFetch } = await import("./daemon-client-WOAQXXBM.js");
145
151
  const res = await daemonFetch("/api/extensions/commands");
146
152
  if (res.ok) {
147
153
  const extCommands = await res.json();
@@ -164,10 +170,12 @@ use --mind <name> or VOLUTE_MIND env var to identify the mind.`);
164
170
  mind = cmdArgs[mindIdx + 1];
165
171
  cmdArgs.splice(mindIdx, 2);
166
172
  }
173
+ const { readStdin } = await import("./read-stdin-PIRM6A2Y.js");
174
+ const stdin = await readStdin();
167
175
  const cmdRes = await daemonFetch(`/api/ext/${command}/commands/${subcommand}`, {
168
176
  method: "POST",
169
177
  headers: { "Content-Type": "application/json" },
170
- body: JSON.stringify({ args: cmdArgs, mind })
178
+ body: JSON.stringify({ args: cmdArgs, mind, stdin })
171
179
  });
172
180
  if (!cmdRes.ok) {
173
181
  const text = await cmdRes.text().catch(() => "");
@@ -195,7 +203,7 @@ Run 'volute --help' for usage.`);
195
203
  }
196
204
  }
197
205
  if (command !== "update") {
198
- import("./update-check-ZD6OOIYQ.js").then((m) => m.checkForUpdate()).then((result) => {
206
+ import("./update-check-X3YG4WVP.js").then((m) => m.checkForUpdate()).then((result) => {
199
207
  if (result.updateAvailable) {
200
208
  console.error(`
201
209
  Update available: ${result.current} \u2192 ${result.latest}`);
@@ -1,4 +1,8 @@
1
1
  #!/usr/bin/env node
2
+ import {
3
+ compactDateTime,
4
+ isCompact
5
+ } from "./chunk-FYCALD4Q.js";
2
6
  import {
3
7
  resolveMindName
4
8
  } from "./chunk-NAOW2CLO.js";
@@ -11,10 +15,10 @@ import {
11
15
  } from "./chunk-D424ZQGI.js";
12
16
  import {
13
17
  daemonFetch
14
- } from "./chunk-UKVWJRKN.js";
15
- import "./chunk-LRCG2JLP.js";
16
- import "./chunk-RPZZSXV3.js";
17
- import "./chunk-K3NQKI34.js";
18
+ } from "./chunk-PLDWHR4D.js";
19
+ import "./chunk-N7BLAHNE.js";
20
+ import "./chunk-4JSR7YO7.js";
21
+ import "./chunk-7KJOFUNN.js";
18
22
 
19
23
  // src/commands/clock.ts
20
24
  import { CronExpressionParser } from "cron-parser";
@@ -34,10 +38,10 @@ async function run(args) {
34
38
  await removeSchedule(args.slice(1));
35
39
  break;
36
40
  case "sleep":
37
- await import("./mind-sleep-B7BHJLH7.js").then((m) => m.run(args.slice(1)));
41
+ await import("./mind-sleep-XDISJY74.js").then((m) => m.run(args.slice(1)));
38
42
  break;
39
43
  case "wake":
40
- await import("./mind-wake-GY3RFX7Y.js").then((m) => m.run(args.slice(1)));
44
+ await import("./mind-wake-KIIKEI3A.js").then((m) => m.run(args.slice(1)));
41
45
  break;
42
46
  case "--help":
43
47
  case "-h":
@@ -85,16 +89,16 @@ async function clockStatus(args) {
85
89
  process.exit(1);
86
90
  }
87
91
  const status = await res.json();
92
+ const compact = isCompact();
93
+ const fmtTime = (s) => compact ? compactDateTime(s) : new Date(s).toLocaleString();
88
94
  if (status.sleep?.sleeping) {
89
- const since = status.sleep.sleepingSince ? new Date(status.sleep.sleepingSince).toLocaleString() : "unknown";
95
+ const since = status.sleep.sleepingSince ? fmtTime(status.sleep.sleepingSince) : "unknown";
90
96
  console.log(`Sleep: sleeping since ${since}`);
91
97
  if (status.sleep.scheduledWakeAt) {
92
- console.log(` Wake at: ${new Date(status.sleep.scheduledWakeAt).toLocaleString()}`);
98
+ console.log(` Wake at: ${fmtTime(status.sleep.scheduledWakeAt)}`);
93
99
  }
94
100
  if (status.sleep.voluntaryWakeAt) {
95
- console.log(
96
- ` Voluntary wake at: ${new Date(status.sleep.voluntaryWakeAt).toLocaleString()}`
97
- );
101
+ console.log(` Voluntary wake at: ${fmtTime(status.sleep.voluntaryWakeAt)}`);
98
102
  }
99
103
  if (status.sleep.queuedMessageCount > 0) {
100
104
  console.log(` Queued messages: ${status.sleep.queuedMessageCount}`);
@@ -108,17 +112,21 @@ async function clockStatus(args) {
108
112
  );
109
113
  }
110
114
  if (status.upcoming.length > 0) {
111
- console.log("\nUpcoming (next 24h):");
115
+ if (!compact) console.log("");
116
+ console.log("Upcoming (next 24h):");
112
117
  for (const u of status.upcoming) {
113
- const time = new Date(u.at).toLocaleString();
118
+ const time = fmtTime(u.at);
114
119
  const label = u.type === "timer" ? "[timer]" : "[cron]";
115
120
  console.log(` ${u.id.padEnd(20)} ${label} ${time}`);
116
121
  }
117
122
  } else {
118
- console.log("\nNo upcoming events in next 24h.");
123
+ if (!compact) console.log("");
124
+ console.log("No upcoming events in next 24h.");
119
125
  }
120
- console.log(`
126
+ if (!compact) {
127
+ console.log(`
121
128
  ${status.schedules.length} schedule(s) configured.`);
129
+ }
122
130
  }
123
131
  async function listSchedules(args) {
124
132
  const { flags } = parseArgs(args, {
@@ -139,15 +147,22 @@ async function listSchedules(args) {
139
147
  console.log("No schedules configured.");
140
148
  return;
141
149
  }
142
- const idW = Math.max(2, ...schedules.map((s) => s.id.length));
143
- const schedW = Math.max(8, ...schedules.map((s) => (s.cron ?? s.fireAt ?? "").length));
144
150
  const actionLabel = (s) => s.script ? `[script] ${s.script}` : s.message ?? "";
145
- console.log(`${"ID".padEnd(idW)} ${"SCHEDULE".padEnd(schedW)} ENABLED ACTION`);
146
- for (const s of schedules) {
147
- const sched = s.cron ?? (s.fireAt ? `at ${s.fireAt}` : "");
148
- console.log(
149
- `${s.id.padEnd(idW)} ${sched.padEnd(schedW)} ${String(s.enabled).padEnd(7)} ${actionLabel(s)}`
150
- );
151
+ if (isCompact()) {
152
+ for (const s of schedules) {
153
+ const sched = s.cron ?? (s.fireAt ? `at ${s.fireAt}` : "");
154
+ console.log(`${s.id} ${sched} ${actionLabel(s)}`);
155
+ }
156
+ } else {
157
+ const idW = Math.max(2, ...schedules.map((s) => s.id.length));
158
+ const schedW = Math.max(8, ...schedules.map((s) => (s.cron ?? s.fireAt ?? "").length));
159
+ console.log(`${"ID".padEnd(idW)} ${"SCHEDULE".padEnd(schedW)} ENABLED ACTION`);
160
+ for (const s of schedules) {
161
+ const sched = s.cron ?? (s.fireAt ? `at ${s.fireAt}` : "");
162
+ console.log(
163
+ `${s.id.padEnd(idW)} ${sched.padEnd(schedW)} ${String(s.enabled).padEnd(7)} ${actionLabel(s)}`
164
+ );
165
+ }
151
166
  }
152
167
  }
153
168
  async function addSchedule(args) {
@@ -1,29 +1,33 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  deliverMessage
4
- } from "./chunk-QBQ424EM.js";
5
- import "./chunk-SKLSMHXO.js";
6
- import "./chunk-R7E6CRVQ.js";
4
+ } from "./chunk-TAHX36HZ.js";
5
+ import "./chunk-CVL5IGIR.js";
6
+ import "./chunk-B2BVAIZ4.js";
7
+ import "./chunk-G53F3JA4.js";
8
+ import "./chunk-N3DNFPVA.js";
9
+ import "./chunk-OYAKCAVY.js";
10
+ import "./chunk-V45JXOWY.js";
11
+ import "./chunk-IS7WJ56Q.js";
12
+ import "./chunk-BTWAGDV5.js";
13
+ import "./chunk-M3K5AARV.js";
14
+ import "./chunk-PB65JZK2.js";
15
+ import "./chunk-BM474GX6.js";
7
16
  import {
8
17
  getAuthHeaders,
9
18
  getWebhookUrl
10
- } from "./chunk-S6NFERDC.js";
11
- import "./chunk-SX5TKJBZ.js";
12
- import "./chunk-2NGTS5UU.js";
13
- import "./chunk-WKF5FEFK.js";
14
- import "./chunk-PB65JZK2.js";
15
- import "./chunk-TDRYEPH4.js";
16
- import "./chunk-QZANELPX.js";
17
- import "./chunk-D5G5YOPL.js";
18
- import "./chunk-IYDIE3HG.js";
19
+ } from "./chunk-E5C7OWZ2.js";
20
+ import "./chunk-XWXBJQBE.js";
21
+ import "./chunk-BFWHBQK4.js";
19
22
  import {
20
23
  logger_default
21
24
  } from "./chunk-YUIHSKR6.js";
22
- import "./chunk-LGB6JBHI.js";
23
- import "./chunk-TSXLLQZW.js";
24
- import "./chunk-LRCG2JLP.js";
25
- import "./chunk-RPZZSXV3.js";
26
- import "./chunk-K3NQKI34.js";
25
+ import "./chunk-U5BTYSAL.js";
26
+ import "./chunk-BDK73LK6.js";
27
+ import "./chunk-6OWJXUAR.js";
28
+ import "./chunk-N7BLAHNE.js";
29
+ import "./chunk-4JSR7YO7.js";
30
+ import "./chunk-7KJOFUNN.js";
27
31
 
28
32
  // src/lib/cloud-sync.ts
29
33
  var slog = logger_default.child("cloud-sync");
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  parseArgs
4
4
  } from "./chunk-D424ZQGI.js";
5
- import "./chunk-K3NQKI34.js";
5
+ import "./chunk-7KJOFUNN.js";
6
6
 
7
7
  // src/commands/config.ts
8
8
  async function run(args) {
@@ -10,7 +10,7 @@ async function run(args) {
10
10
  const subcommand = positional[0];
11
11
  switch (subcommand) {
12
12
  case "models": {
13
- const { daemonFetch } = await import("./daemon-client-6QXHZ7US.js");
13
+ const { daemonFetch } = await import("./daemon-client-WOAQXXBM.js");
14
14
  const res = await daemonFetch("/api/config/models");
15
15
  if (!res.ok) {
16
16
  console.error(`Failed to fetch models (HTTP ${res.status})`);
@@ -28,7 +28,7 @@ async function run(args) {
28
28
  break;
29
29
  }
30
30
  case "providers": {
31
- const { daemonFetch } = await import("./daemon-client-6QXHZ7US.js");
31
+ const { daemonFetch } = await import("./daemon-client-WOAQXXBM.js");
32
32
  const res = await daemonFetch("/api/config/providers");
33
33
  if (!res.ok) {
34
34
  console.error(`Failed to fetch providers (HTTP ${res.status})`);
@@ -46,7 +46,7 @@ async function run(args) {
46
46
  break;
47
47
  }
48
48
  case "status": {
49
- const { daemonFetch } = await import("./daemon-client-6QXHZ7US.js");
49
+ const { daemonFetch } = await import("./daemon-client-WOAQXXBM.js");
50
50
  const res = await daemonFetch("/api/config/status");
51
51
  if (!res.ok) {
52
52
  console.error(`Failed to fetch config (HTTP ${res.status})`);
@@ -7,7 +7,7 @@ import {
7
7
  import {
8
8
  slugify
9
9
  } from "../chunk-G6BSYHPK.js";
10
- import "../chunk-K3NQKI34.js";
10
+ import "../chunk-7KJOFUNN.js";
11
11
 
12
12
  // src/connectors/discord-bridge.ts
13
13
  import { Client, Events, GatewayIntentBits, Partials } from "discord.js";
@@ -7,7 +7,7 @@ import {
7
7
  import {
8
8
  slugify
9
9
  } from "../chunk-G6BSYHPK.js";
10
- import "../chunk-K3NQKI34.js";
10
+ import "../chunk-7KJOFUNN.js";
11
11
 
12
12
  // src/connectors/slack-bridge.ts
13
13
  import { App } from "@slack/bolt";
@@ -7,7 +7,7 @@ import {
7
7
  import {
8
8
  slugify
9
9
  } from "../chunk-G6BSYHPK.js";
10
- import "../chunk-K3NQKI34.js";
10
+ import "../chunk-7KJOFUNN.js";
11
11
 
12
12
  // src/connectors/telegram-bridge.ts
13
13
  import { Telegraf } from "telegraf";
@@ -26,12 +26,12 @@ import {
26
26
  markConversationRead,
27
27
  removeParticipant,
28
28
  setConversationPrivate
29
- } from "./chunk-S6NFERDC.js";
30
- import "./chunk-QZANELPX.js";
29
+ } from "./chunk-E5C7OWZ2.js";
30
+ import "./chunk-XWXBJQBE.js";
31
31
  import "./chunk-YUIHSKR6.js";
32
- import "./chunk-LRCG2JLP.js";
33
- import "./chunk-RPZZSXV3.js";
34
- import "./chunk-K3NQKI34.js";
32
+ import "./chunk-N7BLAHNE.js";
33
+ import "./chunk-4JSR7YO7.js";
34
+ import "./chunk-7KJOFUNN.js";
35
35
  export {
36
36
  addMessage,
37
37
  addParticipant,
@@ -7,10 +7,10 @@ import {
7
7
  } from "./chunk-D424ZQGI.js";
8
8
  import {
9
9
  daemonFetch
10
- } from "./chunk-UKVWJRKN.js";
11
- import "./chunk-LRCG2JLP.js";
12
- import "./chunk-RPZZSXV3.js";
13
- import "./chunk-K3NQKI34.js";
10
+ } from "./chunk-PLDWHR4D.js";
11
+ import "./chunk-N7BLAHNE.js";
12
+ import "./chunk-4JSR7YO7.js";
13
+ import "./chunk-7KJOFUNN.js";
14
14
 
15
15
  // src/commands/chat/create.ts
16
16
  async function run(args) {
@@ -33,7 +33,7 @@ async function run(args) {
33
33
  process.exit(1);
34
34
  }
35
35
  if (flags.channel) {
36
- const res = await daemonFetch("/api/volute/channels", {
36
+ const res = await daemonFetch("/api/v1/channels", {
37
37
  method: "POST",
38
38
  headers: { "Content-Type": "application/json" },
39
39
  body: JSON.stringify({
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  parseArgs
4
4
  } from "./chunk-D424ZQGI.js";
5
- import "./chunk-K3NQKI34.js";
5
+ import "./chunk-7KJOFUNN.js";
6
6
 
7
7
  // src/commands/create.ts
8
8
  async function run(args) {
@@ -13,7 +13,7 @@ async function run(args) {
13
13
  const name = positional[0];
14
14
  let template = flags.template;
15
15
  if (!template) {
16
- const { resolveTemplate } = await import("./ai-service-ZIPCV3MX.js");
16
+ const { resolveTemplate } = await import("./ai-service-PSILB5WD.js");
17
17
  template = resolveTemplate();
18
18
  }
19
19
  if (!name) {
@@ -21,8 +21,8 @@ async function run(args) {
21
21
  process.exit(1);
22
22
  }
23
23
  const skills = flags.skills === "none" ? [] : flags.skills ? flags.skills.split(",") : void 0;
24
- const { daemonFetch } = await import("./daemon-client-6QXHZ7US.js");
25
- const { getClient, urlOf } = await import("./api-client-YPKOZP2O.js");
24
+ const { daemonFetch } = await import("./daemon-client-WOAQXXBM.js");
25
+ const { getClient, urlOf } = await import("./api-client-XUXOB7LI.js");
26
26
  const client = getClient();
27
27
  const res = await daemonFetch(urlOf(client.api.minds.$url()), {
28
28
  method: "POST",
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ daemonFetch,
4
+ readSessionFile
5
+ } from "./chunk-PLDWHR4D.js";
6
+ import "./chunk-N7BLAHNE.js";
7
+ import "./chunk-4JSR7YO7.js";
8
+ import "./chunk-7KJOFUNN.js";
9
+ export {
10
+ daemonFetch,
11
+ readSessionFile
12
+ };
@@ -1,23 +1,24 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  run
4
- } from "./chunk-JJ7W6WSB.js";
4
+ } from "./chunk-47XDEWWV.js";
5
5
  import {
6
6
  stopDaemon
7
- } from "./chunk-2FLJ63GU.js";
7
+ } from "./chunk-V6ZCNULL.js";
8
8
  import {
9
9
  getServiceMode,
10
10
  modeLabel,
11
11
  pollHealth,
12
12
  readDaemonConfig,
13
13
  restartService
14
- } from "./chunk-LSGWR54X.js";
15
- import "./chunk-LGB6JBHI.js";
16
- import "./chunk-TSXLLQZW.js";
14
+ } from "./chunk-7F2SW2KD.js";
17
15
  import "./chunk-D424ZQGI.js";
18
- import "./chunk-LRCG2JLP.js";
19
- import "./chunk-RPZZSXV3.js";
20
- import "./chunk-K3NQKI34.js";
16
+ import "./chunk-U5BTYSAL.js";
17
+ import "./chunk-BDK73LK6.js";
18
+ import "./chunk-6OWJXUAR.js";
19
+ import "./chunk-N7BLAHNE.js";
20
+ import "./chunk-4JSR7YO7.js";
21
+ import "./chunk-7KJOFUNN.js";
21
22
 
22
23
  // src/commands/daemon-restart.ts
23
24
  async function run2(args) {