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
@@ -1,4 +1,7 @@
1
1
  #!/usr/bin/env node
2
+ import {
3
+ isCompact
4
+ } from "./chunk-FYCALD4Q.js";
2
5
  import {
3
6
  resolveMindName
4
7
  } from "./chunk-NAOW2CLO.js";
@@ -7,10 +10,10 @@ import {
7
10
  } from "./chunk-D424ZQGI.js";
8
11
  import {
9
12
  daemonFetch
10
- } from "./chunk-UKVWJRKN.js";
11
- import "./chunk-LRCG2JLP.js";
12
- import "./chunk-RPZZSXV3.js";
13
- import "./chunk-K3NQKI34.js";
13
+ } from "./chunk-PLDWHR4D.js";
14
+ import "./chunk-N7BLAHNE.js";
15
+ import "./chunk-4JSR7YO7.js";
16
+ import "./chunk-7KJOFUNN.js";
14
17
 
15
18
  // src/commands/chat/list.ts
16
19
  async function run(args) {
@@ -28,12 +31,17 @@ async function run(args) {
28
31
  console.log("No conversations.");
29
32
  return;
30
33
  }
34
+ const compact = isCompact();
31
35
  for (const conv of convs) {
32
36
  const label = conv.type === "channel" ? `#${conv.name}` : conv.title ?? conv.id.slice(0, 8);
33
- const time = new Date(
34
- conv.updated_at.endsWith("Z") ? conv.updated_at : `${conv.updated_at}Z`
35
- ).toLocaleString();
36
- console.log(` ${label} (${conv.type}) ${time}`);
37
+ if (compact) {
38
+ console.log(`${label} (${conv.type})`);
39
+ } else {
40
+ const time = new Date(
41
+ conv.updated_at.endsWith("Z") ? conv.updated_at : `${conv.updated_at}Z`
42
+ ).toLocaleString();
43
+ console.log(` ${label} (${conv.type}) ${time}`);
44
+ }
37
45
  }
38
46
  }
39
47
  export {
@@ -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/systems/login.ts
16
16
  async function run(args) {
@@ -5,12 +5,12 @@ import {
5
5
  } from "./chunk-SSI47XP2.js";
6
6
  import {
7
7
  daemonFetch
8
- } from "./chunk-UKVWJRKN.js";
8
+ } from "./chunk-PLDWHR4D.js";
9
9
  import {
10
10
  voluteUserHome
11
- } from "./chunk-LRCG2JLP.js";
12
- import "./chunk-RPZZSXV3.js";
13
- import "./chunk-K3NQKI34.js";
11
+ } from "./chunk-N7BLAHNE.js";
12
+ import "./chunk-4JSR7YO7.js";
13
+ import "./chunk-7KJOFUNN.js";
14
14
 
15
15
  // src/commands/login.ts
16
16
  import { writeFileSync } from "fs";
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  daemonFetch
4
- } from "./chunk-UKVWJRKN.js";
4
+ } from "./chunk-PLDWHR4D.js";
5
5
  import {
6
6
  voluteUserHome
7
- } from "./chunk-LRCG2JLP.js";
8
- import "./chunk-RPZZSXV3.js";
9
- import "./chunk-K3NQKI34.js";
7
+ } from "./chunk-N7BLAHNE.js";
8
+ import "./chunk-4JSR7YO7.js";
9
+ import "./chunk-7KJOFUNN.js";
10
10
 
11
11
  // src/commands/logout.ts
12
12
  import { existsSync, readFileSync, unlinkSync } from "fs";
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  daemonFetch
4
- } from "./chunk-UKVWJRKN.js";
5
- import "./chunk-LRCG2JLP.js";
6
- import "./chunk-RPZZSXV3.js";
7
- import "./chunk-K3NQKI34.js";
4
+ } from "./chunk-PLDWHR4D.js";
5
+ import "./chunk-N7BLAHNE.js";
6
+ import "./chunk-4JSR7YO7.js";
7
+ import "./chunk-7KJOFUNN.js";
8
8
 
9
9
  // src/commands/systems/logout.ts
10
10
  async function run() {
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ deliverMessage,
4
+ linkToolResultToTurn,
5
+ recordInbound,
6
+ recordOutbound,
7
+ resolveSleepAction,
8
+ tagRecentInbound,
9
+ tagUntaggedInbound,
10
+ tagUntaggedOutbound
11
+ } from "./chunk-TAHX36HZ.js";
12
+ import "./chunk-CVL5IGIR.js";
13
+ import "./chunk-B2BVAIZ4.js";
14
+ import "./chunk-G53F3JA4.js";
15
+ import "./chunk-N3DNFPVA.js";
16
+ import "./chunk-OYAKCAVY.js";
17
+ import "./chunk-V45JXOWY.js";
18
+ import "./chunk-IS7WJ56Q.js";
19
+ import "./chunk-BTWAGDV5.js";
20
+ import "./chunk-M3K5AARV.js";
21
+ import "./chunk-PB65JZK2.js";
22
+ import "./chunk-BM474GX6.js";
23
+ import "./chunk-E5C7OWZ2.js";
24
+ import "./chunk-XWXBJQBE.js";
25
+ import "./chunk-BFWHBQK4.js";
26
+ import "./chunk-YUIHSKR6.js";
27
+ import "./chunk-U5BTYSAL.js";
28
+ import "./chunk-BDK73LK6.js";
29
+ import "./chunk-6OWJXUAR.js";
30
+ import "./chunk-N7BLAHNE.js";
31
+ import "./chunk-4JSR7YO7.js";
32
+ import "./chunk-7KJOFUNN.js";
33
+ export {
34
+ deliverMessage,
35
+ linkToolResultToTurn,
36
+ recordInbound,
37
+ recordOutbound,
38
+ resolveSleepAction,
39
+ tagRecentInbound,
40
+ tagUntaggedInbound,
41
+ tagUntaggedOutbound
42
+ };
@@ -1,63 +1,66 @@
1
1
  #!/usr/bin/env node
2
- import "./chunk-K3NQKI34.js";
2
+ import "./chunk-7KJOFUNN.js";
3
3
 
4
4
  // src/commands/mind.ts
5
5
  async function run(args) {
6
6
  const subcommand = args[0];
7
7
  switch (subcommand) {
8
8
  case "create":
9
- await import("./create-WBBYI6V7.js").then((m) => m.run(args.slice(1)));
9
+ await import("./create-UOSOQ2HN.js").then((m) => m.run(args.slice(1)));
10
10
  break;
11
11
  case "start":
12
- await import("./start-K2NCUUCG.js").then((m) => m.run(args.slice(1)));
12
+ await import("./start-W3TPKX4D.js").then((m) => m.run(args.slice(1)));
13
13
  break;
14
14
  case "stop":
15
- await import("./stop-H26JZDXF.js").then((m) => m.run(args.slice(1)));
15
+ await import("./stop-GTT6YWYO.js").then((m) => m.run(args.slice(1)));
16
16
  break;
17
17
  case "restart":
18
- await import("./restart-3UCMRUVC.js").then((m) => m.run(args.slice(1)));
18
+ await import("./restart-V5EGYBJG.js").then((m) => m.run(args.slice(1)));
19
19
  break;
20
20
  case "delete":
21
- await import("./delete-QTGWEDBI.js").then((m) => m.run(args.slice(1)));
21
+ await import("./delete-KYOVWR23.js").then((m) => m.run(args.slice(1)));
22
22
  break;
23
23
  case "list":
24
- await import("./mind-list-WUPMQDYQ.js").then((m) => m.run(args.slice(1)));
24
+ await import("./mind-list-6VPM7GUQ.js").then((m) => m.run(args.slice(1)));
25
25
  break;
26
26
  case "status":
27
- await import("./mind-status-L3EFFRPR.js").then((m) => m.run(args.slice(1)));
27
+ await import("./mind-status-7FTZWPZF.js").then((m) => m.run(args.slice(1)));
28
28
  break;
29
29
  case "history": {
30
30
  const rest = args.slice(1);
31
31
  const historyArgs = transformMindFlag(rest);
32
- await import("./history-FO5PHBQ5.js").then((m) => m.run(historyArgs));
32
+ await import("./mind-history-WOYFLQAI.js").then((m) => m.run(historyArgs));
33
33
  break;
34
34
  }
35
35
  case "upgrade":
36
- await import("./upgrade-O4Q7WJM3.js").then((m) => m.run(args.slice(1)));
36
+ await import("./upgrade-YGNIDICG.js").then((m) => m.run(args.slice(1)));
37
37
  break;
38
38
  case "import":
39
- await import("./import-DDUFE7AY.js").then((m) => m.run(args.slice(1)));
39
+ await import("./import-MK2I2T6F.js").then((m) => m.run(args.slice(1)));
40
40
  break;
41
41
  case "export":
42
- await import("./export-SUYRLI5Q.js").then((m) => m.run(args.slice(1)));
42
+ await import("./export-6ZXAXATG.js").then((m) => m.run(args.slice(1)));
43
43
  break;
44
44
  case "seed":
45
- await import("./seed-ALUQ55FF.js").then((m) => m.run(args.slice(1)));
45
+ await import("./seed-WNGI6PNW.js").then((m) => m.run(args.slice(1)));
46
46
  break;
47
47
  case "sprout":
48
- await import("./sprout-L2GFOVF7.js").then((m) => m.run(args.slice(1)));
48
+ await import("./sprout-E3HJIV2Z.js").then((m) => m.run(args.slice(1)));
49
+ break;
50
+ case "profile":
51
+ await import("./mind-profile-WPG42U5Y.js").then((m) => m.run(args.slice(1)));
49
52
  break;
50
53
  case "sleep":
51
- await import("./mind-sleep-B7BHJLH7.js").then((m) => m.run(args.slice(1)));
54
+ await import("./mind-sleep-XDISJY74.js").then((m) => m.run(args.slice(1)));
52
55
  break;
53
56
  case "wake":
54
- await import("./mind-wake-GY3RFX7Y.js").then((m) => m.run(args.slice(1)));
57
+ await import("./mind-wake-KIIKEI3A.js").then((m) => m.run(args.slice(1)));
55
58
  break;
56
59
  case "split":
57
- await import("./split-STOROBYJ.js").then((m) => m.run(args.slice(1)));
60
+ await import("./split-3YPMS2CL.js").then((m) => m.run(args.slice(1)));
58
61
  break;
59
62
  case "join":
60
- await import("./join-I5QEE3LG.js").then((m) => m.run(args.slice(1)));
63
+ await import("./join-DGYHTJUH.js").then((m) => m.run(args.slice(1)));
61
64
  break;
62
65
  case "--help":
63
66
  case "-h":
@@ -86,6 +89,7 @@ function printUsage() {
86
89
  volute mind list
87
90
  volute mind status [name]
88
91
  volute mind history [name] [--channel <ch>] [--limit N] [--full]
92
+ volute mind profile [--mind <name>] [--display-name <name>] [--description <text>] [--avatar <path>]
89
93
  volute mind sprout
90
94
  volute mind sleep [name] [--wake-at <time>]
91
95
  volute mind wake [name]
@@ -95,7 +99,9 @@ function printUsage() {
95
99
  volute mind import <path> [--name <name>] [--session <path>] [--template <name>]
96
100
  volute mind export <name> [--include-env] [--include-identity] [--include-history] [--include-sessions] [--all] [--output <path>]
97
101
 
98
- Mind name can be omitted (where shown as [name]) if VOLUTE_MIND is set.`);
102
+ Mind name can be omitted (where shown as [name]) if VOLUTE_MIND is set.
103
+
104
+ Note: 'volute mind seed' and 'volute mind sprout' are now 'volute seed create' and 'volute seed sprout'.`);
99
105
  }
100
106
  export {
101
107
  run
@@ -4,12 +4,12 @@ import {
4
4
  markIdle,
5
5
  onMindEvent,
6
6
  stopAll
7
- } from "./chunk-R7E6CRVQ.js";
8
- import "./chunk-QZANELPX.js";
7
+ } from "./chunk-BTWAGDV5.js";
8
+ import "./chunk-XWXBJQBE.js";
9
9
  import "./chunk-YUIHSKR6.js";
10
- import "./chunk-LRCG2JLP.js";
11
- import "./chunk-RPZZSXV3.js";
12
- import "./chunk-K3NQKI34.js";
10
+ import "./chunk-N7BLAHNE.js";
11
+ import "./chunk-4JSR7YO7.js";
12
+ import "./chunk-7KJOFUNN.js";
13
13
  export {
14
14
  getActiveMinds,
15
15
  markIdle,
@@ -0,0 +1,264 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ compactTime,
4
+ isCompact
5
+ } from "./chunk-FYCALD4Q.js";
6
+ import {
7
+ resolveMindName
8
+ } from "./chunk-NAOW2CLO.js";
9
+ import {
10
+ getClient,
11
+ urlOf
12
+ } from "./chunk-4RQBJWQX.js";
13
+ import {
14
+ parseArgs
15
+ } from "./chunk-D424ZQGI.js";
16
+ import {
17
+ daemonFetch
18
+ } from "./chunk-PLDWHR4D.js";
19
+ import "./chunk-N7BLAHNE.js";
20
+ import "./chunk-4JSR7YO7.js";
21
+ import "./chunk-7KJOFUNN.js";
22
+
23
+ // src/commands/mind-history.ts
24
+ function normalizeTimestamp(dateStr) {
25
+ return dateStr.endsWith("Z") ? dateStr : `${dateStr}Z`;
26
+ }
27
+ function formatRow(row) {
28
+ const time = new Date(normalizeTimestamp(row.created_at)).toLocaleString();
29
+ const channel = row.channel ?? "";
30
+ switch (row.type) {
31
+ case "inbound":
32
+ case "outbound": {
33
+ const sender = row.sender ?? (row.type === "outbound" ? "mind" : "unknown");
34
+ return `[${time}] [${channel}] ${sender}: ${row.content ?? ""}`;
35
+ }
36
+ case "text":
37
+ return `[${time}] [text] ${row.content ?? ""}`;
38
+ case "thinking":
39
+ return `[${time}] [thinking] ${(row.content ?? "").slice(0, 200)}${(row.content?.length ?? 0) > 200 ? "..." : ""}`;
40
+ case "tool_use": {
41
+ let toolName = "unknown";
42
+ if (row.metadata) {
43
+ try {
44
+ const meta = JSON.parse(row.metadata);
45
+ toolName = meta.name ?? toolName;
46
+ } catch {
47
+ }
48
+ }
49
+ return `[${time}] [tool] ${toolName}${row.content ? `: ${row.content.slice(0, 100)}` : ""}`;
50
+ }
51
+ case "tool_result":
52
+ return `[${time}] [result] ${(row.content ?? "").slice(0, 200)}${(row.content?.length ?? 0) > 200 ? "..." : ""}`;
53
+ case "usage": {
54
+ if (row.metadata) {
55
+ try {
56
+ const meta = JSON.parse(row.metadata);
57
+ return `[${time}] [usage] in=${meta.input_tokens ?? 0} out=${meta.output_tokens ?? 0}`;
58
+ } catch {
59
+ }
60
+ }
61
+ return `[${time}] [usage]`;
62
+ }
63
+ case "done":
64
+ return `[${time}] [done]`;
65
+ case "log": {
66
+ let category = "";
67
+ if (row.metadata) {
68
+ try {
69
+ const meta = JSON.parse(row.metadata);
70
+ category = meta.category ? `${meta.category}: ` : "";
71
+ } catch {
72
+ }
73
+ }
74
+ return `[${time}] [log] ${category}${row.content ?? ""}`;
75
+ }
76
+ case "summary": {
77
+ let range = "";
78
+ if (row.metadata) {
79
+ try {
80
+ const meta = JSON.parse(row.metadata);
81
+ if (meta.from_time && meta.to_time) {
82
+ const from = new Date(normalizeTimestamp(meta.from_time)).toLocaleTimeString();
83
+ const to = new Date(normalizeTimestamp(meta.to_time)).toLocaleTimeString();
84
+ range = ` (${from}\u2013${to})`;
85
+ }
86
+ } catch {
87
+ }
88
+ }
89
+ return `[${time}] [summary${range}] ${row.content ?? ""}`;
90
+ }
91
+ case "session_start":
92
+ return `[${time}] [session_start] ${row.session ?? ""}`;
93
+ default:
94
+ return `[${time}] [${row.type}] ${row.content ?? ""}`;
95
+ }
96
+ }
97
+ function formatRowCompact(row) {
98
+ const time = compactTime(row.created_at);
99
+ const channel = row.channel ?? "";
100
+ switch (row.type) {
101
+ case "inbound":
102
+ case "outbound": {
103
+ const sender = row.sender ?? (row.type === "outbound" ? "mind" : "unknown");
104
+ return `[${time}] [${channel}] ${sender}: ${row.content ?? ""}`;
105
+ }
106
+ case "text":
107
+ return `[${time}] [text] ${row.content ?? ""}`;
108
+ case "thinking":
109
+ return `[${time}] [thinking] ${(row.content ?? "").slice(0, 200)}${(row.content?.length ?? 0) > 200 ? "..." : ""}`;
110
+ case "tool_use": {
111
+ let toolName = "unknown";
112
+ if (row.metadata) {
113
+ try {
114
+ const meta = JSON.parse(row.metadata);
115
+ toolName = meta.name ?? toolName;
116
+ } catch {
117
+ }
118
+ }
119
+ return `[${time}] [tool] ${toolName}${row.content ? `: ${row.content.slice(0, 100)}` : ""}`;
120
+ }
121
+ case "tool_result":
122
+ return `[${time}] [result] ${(row.content ?? "").slice(0, 200)}${(row.content?.length ?? 0) > 200 ? "..." : ""}`;
123
+ case "log": {
124
+ let category = "";
125
+ if (row.metadata) {
126
+ try {
127
+ const meta = JSON.parse(row.metadata);
128
+ category = meta.category ? `${meta.category}: ` : "";
129
+ } catch {
130
+ }
131
+ }
132
+ return `[${time}] [log] ${category}${row.content ?? ""}`;
133
+ }
134
+ case "summary": {
135
+ let range = "";
136
+ if (row.metadata) {
137
+ try {
138
+ const meta = JSON.parse(row.metadata);
139
+ if (meta.from_time && meta.to_time) {
140
+ range = ` (${compactTime(meta.from_time)}\u2013${compactTime(meta.to_time)})`;
141
+ }
142
+ } catch {
143
+ }
144
+ }
145
+ return `[${time}] [summary${range}] ${row.content ?? ""}`;
146
+ }
147
+ case "session_start":
148
+ return `[${time}] [session_start] ${row.session ?? ""}`;
149
+ default:
150
+ return `[${time}] [${row.type}] ${row.content ?? ""}`;
151
+ }
152
+ }
153
+ var PERIOD_LABELS = {
154
+ hour: "Hourly",
155
+ day: "Daily",
156
+ week: "Weekly",
157
+ month: "Monthly"
158
+ };
159
+ function formatMetaSummary(row) {
160
+ const label = PERIOD_LABELS[row.period] ?? row.period;
161
+ return `
162
+ === ${row.period_key} (${label}) ===
163
+ ${row.content ?? ""}
164
+ `;
165
+ }
166
+ function getDefaultRange(period) {
167
+ const now = /* @__PURE__ */ new Date();
168
+ switch (period) {
169
+ case "hour": {
170
+ const d = new Date(now);
171
+ d.setUTCDate(d.getUTCDate() - 1);
172
+ return d.toISOString().slice(0, 10);
173
+ }
174
+ case "day": {
175
+ const d = new Date(now);
176
+ d.setUTCDate(d.getUTCDate() - 7);
177
+ return d.toISOString().slice(0, 10);
178
+ }
179
+ case "week": {
180
+ const d = new Date(now);
181
+ d.setUTCDate(d.getUTCDate() - 28);
182
+ return d.toISOString().slice(0, 10);
183
+ }
184
+ case "month": {
185
+ const d = new Date(now);
186
+ d.setUTCMonth(d.getUTCMonth() - 6);
187
+ return d.toISOString().slice(0, 7);
188
+ }
189
+ default:
190
+ return "";
191
+ }
192
+ }
193
+ async function run(args) {
194
+ const { flags } = parseArgs(args, {
195
+ mind: { type: "string" },
196
+ channel: { type: "string" },
197
+ session: { type: "string" },
198
+ preset: { type: "string" },
199
+ limit: { type: "string" },
200
+ full: { type: "boolean" },
201
+ period: { type: "string" },
202
+ from: { type: "string" },
203
+ to: { type: "string" }
204
+ });
205
+ if (flags.period) {
206
+ const validPeriods = ["hour", "day", "week", "month"];
207
+ if (!validPeriods.includes(flags.period)) {
208
+ console.error(`Invalid period: ${flags.period}. Must be one of: ${validPeriods.join(", ")}`);
209
+ process.exit(1);
210
+ }
211
+ const name2 = resolveMindName(flags);
212
+ const params = new URLSearchParams();
213
+ params.set("mind", name2);
214
+ params.set("period", flags.period);
215
+ if (flags.from) params.set("from", flags.from);
216
+ else params.set("from", getDefaultRange(flags.period));
217
+ if (flags.to) params.set("to", flags.to);
218
+ if (flags.limit) params.set("limit", flags.limit);
219
+ const res2 = await daemonFetch(`/api/v1/history/summaries?${params}`);
220
+ if (!res2.ok) {
221
+ let errorMsg = `Failed to get summaries: ${res2.status}`;
222
+ try {
223
+ const data = await res2.json();
224
+ if (data.error) errorMsg = data.error;
225
+ } catch {
226
+ }
227
+ console.error(errorMsg);
228
+ process.exit(1);
229
+ }
230
+ const rows2 = await res2.json();
231
+ for (const row of rows2.reverse()) {
232
+ console.log(formatMetaSummary(row));
233
+ }
234
+ return;
235
+ }
236
+ const name = resolveMindName(flags);
237
+ const client = getClient();
238
+ const url = client.api.minds[":name"].history.$url({ param: { name } });
239
+ if (flags.channel) url.searchParams.set("channel", flags.channel);
240
+ if (flags.session) url.searchParams.set("session", flags.session);
241
+ if (flags.preset) url.searchParams.set("preset", flags.preset);
242
+ if (flags.limit) url.searchParams.set("limit", flags.limit);
243
+ if (flags.full) url.searchParams.set("full", "true");
244
+ const res = await daemonFetch(urlOf(url));
245
+ if (!res.ok) {
246
+ let errorMsg = `Failed to get history: ${res.status}`;
247
+ try {
248
+ const data = await res.json();
249
+ if (data.error) errorMsg = data.error;
250
+ } catch {
251
+ }
252
+ console.error(errorMsg);
253
+ process.exit(1);
254
+ }
255
+ const rows = await res.json();
256
+ const compact = isCompact();
257
+ for (const row of rows.reverse()) {
258
+ if (compact && (row.type === "done" || row.type === "usage")) continue;
259
+ console.log(compact ? formatRowCompact(row) : formatRow(row));
260
+ }
261
+ }
262
+ export {
263
+ run
264
+ };
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  daemonFetch
4
- } from "./chunk-UKVWJRKN.js";
5
- import "./chunk-LRCG2JLP.js";
6
- import "./chunk-RPZZSXV3.js";
7
- import "./chunk-K3NQKI34.js";
4
+ } from "./chunk-PLDWHR4D.js";
5
+ import "./chunk-N7BLAHNE.js";
6
+ import "./chunk-4JSR7YO7.js";
7
+ import "./chunk-7KJOFUNN.js";
8
8
 
9
9
  // src/commands/mind-list.ts
10
10
  async function run(_args) {
@@ -0,0 +1,32 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ MindManager,
4
+ getMindManager,
5
+ initMindManager
6
+ } from "./chunk-TAHX36HZ.js";
7
+ import "./chunk-CVL5IGIR.js";
8
+ import "./chunk-B2BVAIZ4.js";
9
+ import "./chunk-G53F3JA4.js";
10
+ import "./chunk-N3DNFPVA.js";
11
+ import "./chunk-OYAKCAVY.js";
12
+ import "./chunk-V45JXOWY.js";
13
+ import "./chunk-IS7WJ56Q.js";
14
+ import "./chunk-BTWAGDV5.js";
15
+ import "./chunk-M3K5AARV.js";
16
+ import "./chunk-PB65JZK2.js";
17
+ import "./chunk-BM474GX6.js";
18
+ import "./chunk-E5C7OWZ2.js";
19
+ import "./chunk-XWXBJQBE.js";
20
+ import "./chunk-BFWHBQK4.js";
21
+ import "./chunk-YUIHSKR6.js";
22
+ import "./chunk-U5BTYSAL.js";
23
+ import "./chunk-BDK73LK6.js";
24
+ import "./chunk-6OWJXUAR.js";
25
+ import "./chunk-N7BLAHNE.js";
26
+ import "./chunk-4JSR7YO7.js";
27
+ import "./chunk-7KJOFUNN.js";
28
+ export {
29
+ MindManager,
30
+ getMindManager,
31
+ initMindManager
32
+ };
@@ -0,0 +1,47 @@
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-7KJOFUNN.js";
9
+
10
+ // src/commands/mind-profile.ts
11
+ async function run(args) {
12
+ const { flags } = parseArgs(args, {
13
+ mind: { type: "string" },
14
+ "display-name": { type: "string" },
15
+ description: { type: "string" },
16
+ avatar: { type: "string" }
17
+ });
18
+ const name = resolveMindName(flags);
19
+ const displayName = flags["display-name"];
20
+ const description = flags.description;
21
+ const avatar = flags.avatar;
22
+ if (!displayName && !description && !avatar) {
23
+ console.error(
24
+ "Usage: volute mind profile [--mind <name>] [--display-name <name>] [--description <text>] [--avatar <path>]"
25
+ );
26
+ process.exit(1);
27
+ }
28
+ const { daemonFetch } = await import("./daemon-client-WOAQXXBM.js");
29
+ const body = {};
30
+ if (displayName) body.displayName = displayName;
31
+ if (description) body.description = description;
32
+ if (avatar) body.avatar = avatar;
33
+ const res = await daemonFetch(`/api/minds/${encodeURIComponent(name)}/profile`, {
34
+ method: "PATCH",
35
+ headers: { "Content-Type": "application/json" },
36
+ body: JSON.stringify(body)
37
+ });
38
+ if (!res.ok) {
39
+ const data = await res.json().catch(() => ({}));
40
+ console.error(data.error ?? `Failed to update profile (HTTP ${res.status})`);
41
+ process.exit(1);
42
+ }
43
+ console.log(`Profile updated for ${name}`);
44
+ }
45
+ export {
46
+ run
47
+ };
@@ -0,0 +1,38 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ sleepMind,
4
+ startMindFull,
5
+ startSpiritFull,
6
+ stopMindFull,
7
+ stopSpiritFull,
8
+ wakeMind
9
+ } from "./chunk-TAHX36HZ.js";
10
+ import "./chunk-CVL5IGIR.js";
11
+ import "./chunk-B2BVAIZ4.js";
12
+ import "./chunk-G53F3JA4.js";
13
+ import "./chunk-N3DNFPVA.js";
14
+ import "./chunk-OYAKCAVY.js";
15
+ import "./chunk-V45JXOWY.js";
16
+ import "./chunk-IS7WJ56Q.js";
17
+ import "./chunk-BTWAGDV5.js";
18
+ import "./chunk-M3K5AARV.js";
19
+ import "./chunk-PB65JZK2.js";
20
+ import "./chunk-BM474GX6.js";
21
+ import "./chunk-E5C7OWZ2.js";
22
+ import "./chunk-XWXBJQBE.js";
23
+ import "./chunk-BFWHBQK4.js";
24
+ import "./chunk-YUIHSKR6.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";
31
+ export {
32
+ sleepMind,
33
+ startMindFull,
34
+ startSpiritFull,
35
+ stopMindFull,
36
+ stopSpiritFull,
37
+ wakeMind
38
+ };