volute 0.30.1 → 0.32.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 (227) hide show
  1. package/README.md +15 -22
  2. package/dist/{accept-E3PAH3QJ.js → accept-74M7I4RZ.js} +5 -4
  3. package/dist/{activity-events-BKBPPUBP.js → activity-events-HETAODOK.js} +3 -2
  4. package/dist/{ai-service-VAJT5UBS.js → ai-service-ZIPCV3MX.js} +20 -5
  5. package/dist/api.d.ts +341 -397
  6. package/dist/{archive-WWDBWYN2.js → archive-INXYFVCW.js} +3 -2
  7. package/dist/auth-6DMGES3I.js +44 -0
  8. package/dist/{bridge-RO37CUFM.js → bridge-BVCBTGPF.js} +5 -4
  9. package/dist/{chat-TCUNPFGO.js → chat-XT4OBJBU.js} +8 -8
  10. package/dist/{chunk-P7VFDSSG.js → chunk-2FLJ63GU.js} +2 -2
  11. package/dist/{chunk-ZWKTUQEL.js → chunk-2NGTS5UU.js} +1 -1
  12. package/dist/{chunk-JGFRDMR6.js → chunk-ALEF47VT.js} +1 -1
  13. package/dist/{chunk-MDPCSXZ4.js → chunk-D5G5YOPL.js} +163 -15
  14. package/dist/{chunk-VGWJSNHS.js → chunk-G53F3JA4.js} +1 -35
  15. package/dist/{chunk-A6TUJJ3L.js → chunk-G6BSYHPK.js} +2 -2
  16. package/dist/{chunk-DTC6EH5I.js → chunk-I5KY25PQ.js} +1 -9
  17. package/dist/{chunk-NSBFETWP.js → chunk-IYDIE3HG.js} +64 -26
  18. package/dist/{chunk-W5OOPLNP.js → chunk-JJ7W6WSB.js} +3 -3
  19. package/dist/{chunk-G3GBKZGG.js → chunk-LGB6JBHI.js} +54 -2
  20. package/dist/chunk-LRCG2JLP.js +251 -0
  21. package/dist/{chunk-FXHXHI2A.js → chunk-LSGWR54X.js} +3 -6
  22. package/dist/{chunk-S5LR3XYJ.js → chunk-M7UL5S3Q.js} +1 -1
  23. package/dist/chunk-PB65JZK2.js +85 -0
  24. package/dist/chunk-PVY5W6QN.js +41 -0
  25. package/dist/{chunk-QVAQ5454.js → chunk-QBQ424EM.js} +3007 -2126
  26. package/dist/{chunk-P27RV5WM.js → chunk-QZANELPX.js} +6 -2
  27. package/dist/{chunk-FSM45XD5.js → chunk-R7E6CRVQ.js} +1 -1
  28. package/dist/{chunk-HHTXM4JT.js → chunk-RPZZSXV3.js} +39 -195
  29. package/dist/{chunk-UPA6COHU.js → chunk-RSX4OPZY.js} +5 -5
  30. package/dist/{chunk-2C2VXEBB.js → chunk-S6NFERDC.js} +21 -57
  31. package/dist/chunk-SKLSMHXO.js +208 -0
  32. package/dist/{chunk-IKHDUZRH.js → chunk-SX5TKJBZ.js} +2 -2
  33. package/dist/chunk-TDRYEPH4.js +185 -0
  34. package/dist/chunk-TSXLLQZW.js +46 -0
  35. package/dist/{chunk-EFVHR7KH.js → chunk-UKVWJRKN.js} +24 -5
  36. package/dist/{chunk-2NDZC3S7.js → chunk-WKF5FEFK.js} +688 -389
  37. package/dist/cli.js +93 -24
  38. package/dist/{clock-G3ALCMLJ.js → clock-2UOZ6JPU.js} +11 -8
  39. package/dist/{cloud-sync-JV4LJOK3.js → cloud-sync-JN3NWKEM.js} +16 -14
  40. package/dist/config-H2H4UIF7.js +72 -0
  41. package/dist/connectors/discord-bridge.js +1 -1
  42. package/dist/connectors/slack-bridge.js +1 -1
  43. package/dist/connectors/telegram-bridge.js +1 -1
  44. package/dist/{conversations-7KVQV7EZ.js → conversations-3O5O6AS3.js} +8 -7
  45. package/dist/{create-JTLS7GX3.js → create-RNLNCORE.js} +5 -4
  46. package/dist/{create-VQSQHJQW.js → create-WBBYI6V7.js} +6 -2
  47. package/dist/daemon-client-6QXHZ7US.js +12 -0
  48. package/dist/{daemon-restart-4JGBHEJ4.js → daemon-restart-NGFHFAUF.js} +7 -7
  49. package/dist/daemon.js +2446 -1999
  50. package/dist/{db-HMFPIRO2.js → db-F34YLV7D.js} +2 -1
  51. package/dist/db-RA45JBFG.js +16 -0
  52. package/dist/{delete-JESHKE7F.js → delete-QTGWEDBI.js} +1 -1
  53. package/dist/delivery-manager-SDVXFD4W.js +28 -0
  54. package/dist/delivery-router-FL45JL7N.js +21 -0
  55. package/dist/down-TB3ESMNP.js +14 -0
  56. package/dist/{env-CLXXT7M2.js → env-RLYQBOOP.js} +5 -4
  57. package/dist/{export-EGA5M5PB.js → export-SUYRLI5Q.js} +4 -3
  58. package/dist/{extension-WZ4SUPJB.js → extension-FQ5D3NCC.js} +6 -6
  59. package/dist/{extensions-ECO4RPFQ.js → extensions-GDYWQXC4.js} +9 -7
  60. package/dist/{files-4VEJDASH.js → files-EAMPO2SJ.js} +6 -5
  61. package/dist/{history-EJMMLXDO.js → history-FO5PHBQ5.js} +9 -4
  62. package/dist/{import-YCGPMBSI.js → import-DDUFE7AY.js} +4 -3
  63. package/dist/{join-2GBJKZEN.js → join-I5QEE3LG.js} +1 -1
  64. package/dist/{list-Q6O7FGAN.js → list-DW2VRTOZ.js} +5 -4
  65. package/dist/{login-RL6AU2SM.js → login-7CHPW2PN.js} +5 -4
  66. package/dist/{login-RET5WESK.js → login-RIJF2F4G.js} +3 -2
  67. package/dist/{logout-CGAGJN3L.js → logout-5MLHZALK.js} +3 -2
  68. package/dist/{logout-JRPBEMMR.js → logout-UZJRGY4Z.js} +3 -2
  69. package/dist/message-delivery-2FIM7QKO.js +32 -0
  70. package/dist/{mind-LUWRQUQ5.js → mind-2B6M7Y25.js} +18 -18
  71. package/dist/{mind-activity-tracker-VYN2ZZ2M.js → mind-activity-tracker-NZZT2NTT.js} +4 -3
  72. package/dist/{mind-list-V5WW5DUA.js → mind-list-WUPMQDYQ.js} +3 -2
  73. package/dist/mind-manager-BNCMGYXW.js +28 -0
  74. package/dist/mind-service-AV273WT4.js +34 -0
  75. package/dist/{mind-sleep-R6PTNNW4.js → mind-sleep-B7BHJLH7.js} +5 -4
  76. package/dist/{mind-status-I4ISFJ6I.js → mind-status-L3EFFRPR.js} +3 -2
  77. package/dist/{mind-wake-67ZQEWAV.js → mind-wake-GY3RFX7Y.js} +5 -4
  78. package/dist/{package-OYUD4ZJ4.js → package-PK6JUFL3.js} +3 -3
  79. package/dist/read-5AMJRO3D.js +75 -0
  80. package/dist/{register-NZDSTLP3.js → register-V2JZZKFK.js} +5 -4
  81. package/dist/{registry-ODSALQQL.js → registry-PJ4S5PHQ.js} +8 -1
  82. package/dist/{reject-2HZOJEIJ.js → reject-33HEZMZ4.js} +5 -4
  83. package/dist/{restart-QHS3NT64.js → restart-3UCMRUVC.js} +5 -4
  84. package/dist/{sandbox-O5FUSF43.js → sandbox-JANNTX6U.js} +4 -3
  85. package/dist/schema-PA3M5ZKH.js +32 -0
  86. package/dist/seed-ALUQ55FF.js +112 -0
  87. package/dist/{send-OAN3RYYY.js → send-3MI36LEF.js} +58 -69
  88. package/dist/{setup-QMDK5RZX.js → setup-SZIARWI6.js} +5 -4
  89. package/dist/{setup-XJH3E7YM.js → setup-WENLVPVP.js} +9 -9
  90. package/dist/{skill-FZIN4W4Q.js → skill-TUVOTW4Z.js} +5 -4
  91. package/dist/skills/dreaming/SKILL.md +6 -4
  92. package/dist/skills/dreaming/references/INSTALL.md +4 -5
  93. package/dist/skills/dreaming/scripts/dream.ts +5 -27
  94. package/dist/skills/dreaming/scripts/wake-context-dreams.sh +1 -1
  95. package/dist/skills/imagegen/SKILL.md +6 -5
  96. package/dist/skills/imagegen/references/INSTALL.md +1 -1
  97. package/dist/skills/resonance/SKILL.md +4 -1
  98. package/dist/skills/resonance/references/INSTALL.md +2 -2
  99. package/dist/skills/resonance/scripts/resonance-hook.sh +2 -0
  100. package/dist/skills/resonance/scripts/resonance.ts +35 -5
  101. package/dist/skills/volute-admin/SKILL.md +83 -0
  102. package/dist/skills/volute-mind/SKILL.md +12 -12
  103. package/dist/skills-XNZK6P4K.js +61 -0
  104. package/dist/sleep-manager-53DZOWW7.js +32 -0
  105. package/dist/spirit-N4W4UQRH.js +217 -0
  106. package/dist/{split-EXYGGGQN.js → split-STOROBYJ.js} +1 -1
  107. package/dist/{sprout-AXQ6H5DB.js → sprout-L2GFOVF7.js} +9 -8
  108. package/dist/{start-MTOVL6SY.js → start-K2NCUUCG.js} +5 -4
  109. package/dist/{status-ZRO37MWR.js → status-TCUMUO6M.js} +5 -5
  110. package/dist/{stop-OK5WEPVC.js → stop-H26JZDXF.js} +5 -4
  111. package/dist/system-chat-NPYFYZVI.js +32 -0
  112. package/dist/{systems-W3BBMSOZ.js → systems-DHBKVYEY.js} +6 -5
  113. package/dist/{tailscale-BM72RXCJ.js → tailscale-XHQBZROW.js} +2 -1
  114. package/dist/{template-hash-3HOR4UAJ.js → template-hash-A6VVKOXJ.js} +2 -1
  115. package/dist/up-6I6BHRTO.js +17 -0
  116. package/dist/{update-PLPHMMZ2.js → update-QVPRF6GR.js} +5 -5
  117. package/dist/{update-check-CVCN7MF6.js → update-check-ZD6OOIYQ.js} +3 -2
  118. package/dist/{upgrade-I6NPCYUU.js → upgrade-O4Q7WJM3.js} +12 -14
  119. package/dist/{version-notify-2NTWVEHL.js → version-notify-TCKWBZZG.js} +22 -23
  120. package/dist/web-assets/assets/index-Bui7U9Uu.css +1 -0
  121. package/dist/web-assets/assets/index-e36DIo1b.js +73 -0
  122. package/dist/web-assets/ext-theme.css +94 -0
  123. package/dist/web-assets/index.html +2 -2
  124. package/drizzle/0000_baseline.sql +152 -0
  125. package/drizzle/0001_add_conversation_private.sql +1 -0
  126. package/drizzle/0002_turns.sql +21 -0
  127. package/drizzle/0003_turn_feed_links.sql +11 -0
  128. package/drizzle/0004_spirits.sql +5 -0
  129. package/drizzle/meta/0000_snapshot.json +3 -223
  130. package/drizzle/meta/0001_snapshot.json +3 -294
  131. package/drizzle/meta/0002_snapshot.json +3 -335
  132. package/drizzle/meta/0003_snapshot.json +3 -413
  133. package/drizzle/meta/0004_snapshot.json +3 -406
  134. package/drizzle/meta/_journal.json +10 -101
  135. package/package.json +3 -3
  136. package/packages/extensions/notes/dist/ui/assets/index-8jWEv9SA.js +61 -0
  137. package/packages/extensions/notes/dist/ui/assets/index-DkaB7Ytd.css +1 -0
  138. package/packages/extensions/notes/dist/ui/index.html +2 -2
  139. package/packages/extensions/notes/skills/notes/SKILL.md +8 -8
  140. package/packages/extensions/pages/skills/pages/SKILL.md +17 -44
  141. package/templates/_base/.init/.config/hooks/pre-prompt/session-activity.ts +40 -0
  142. package/templates/_base/.init/.local/bin/volute +27 -0
  143. package/templates/_base/.init/.local/hooks/pre-prompt/session-activity.ts +40 -0
  144. package/templates/_base/.init/.local/hooks/startup-context.ts +58 -0
  145. package/templates/_base/home/.config/routes.json +1 -1
  146. package/templates/_base/src/lib/auto-commit.ts +82 -43
  147. package/templates/_base/src/lib/daemon-client.ts +40 -36
  148. package/templates/_base/src/lib/format-prefix.ts +1 -0
  149. package/templates/_base/src/lib/hook-loader.ts +155 -0
  150. package/templates/_base/src/lib/router.ts +17 -1
  151. package/templates/_base/src/lib/startup.ts +17 -12
  152. package/templates/_base/src/lib/transparency.ts +2 -2
  153. package/templates/_base/src/lib/volute-server.ts +2 -5
  154. package/templates/claude/.init/.claude/settings.json +1 -1
  155. package/templates/claude/.init/.config/routes.json +2 -2
  156. package/templates/claude/src/agent.ts +97 -14
  157. package/templates/claude/src/lib/hooks/auto-commit.ts +7 -3
  158. package/templates/claude/src/lib/message-channel.ts +7 -2
  159. package/templates/claude/src/server.ts +0 -9
  160. package/templates/codex/.init/.config/routes.json +11 -0
  161. package/templates/codex/.init/AGENTS.md +29 -0
  162. package/templates/codex/home/.config/config.json.tmpl +7 -0
  163. package/templates/codex/package.json.tmpl +20 -0
  164. package/templates/codex/src/agent.ts +553 -0
  165. package/templates/codex/src/lib/content.ts +16 -0
  166. package/templates/codex/src/lib/session-store.ts +56 -0
  167. package/templates/codex/src/server.ts +59 -0
  168. package/templates/codex/volute-template.json +8 -0
  169. package/templates/pi/.init/.config/routes.json +2 -2
  170. package/templates/pi/package.json.tmpl +1 -1
  171. package/templates/pi/src/agent.ts +63 -9
  172. package/templates/pi/src/lib/event-handler.ts +6 -4
  173. package/templates/pi/src/lib/reply-instructions-extension.ts +32 -11
  174. package/dist/chunk-7D47T4RB.js +0 -84
  175. package/dist/chunk-CVH6Y2YG.js +0 -59
  176. package/dist/chunk-EFP3PE6C.js +0 -232
  177. package/dist/chunk-LIRWLNAK.js +0 -729
  178. package/dist/daemon-client-BCTFGVCZ.js +0 -9
  179. package/dist/down-NGBMGORS.js +0 -14
  180. package/dist/message-delivery-6YMVNOEC.js +0 -28
  181. package/dist/migrate-registry-to-db-FK35IPEH.js +0 -110
  182. package/dist/mind-manager-YFCOIAAX.js +0 -18
  183. package/dist/pages-watcher-Z3PKNROC.js +0 -21
  184. package/dist/read-WQMPTSN2.js +0 -46
  185. package/dist/seed-WUQMPLDM.js +0 -71
  186. package/dist/skills/sessions/SKILL.md +0 -49
  187. package/dist/sleep-manager-O7YQFCV5.js +0 -30
  188. package/dist/up-BXUAIDXB.js +0 -17
  189. package/dist/web-assets/assets/index--kREqKl9.js +0 -72
  190. package/dist/web-assets/assets/index-BXYTG0nJ.css +0 -1
  191. package/drizzle/0000_flaky_mariko_yashida.sql +0 -34
  192. package/drizzle/0001_careless_warpath.sql +0 -12
  193. package/drizzle/0002_wealthy_the_call.sql +0 -6
  194. package/drizzle/0003_clean_ego.sql +0 -12
  195. package/drizzle/0004_magical_silverclaw.sql +0 -1
  196. package/drizzle/0005_rename_agents_to_minds.sql +0 -11
  197. package/drizzle/0006_mind_history.sql +0 -20
  198. package/drizzle/0007_system_prompts.sql +0 -5
  199. package/drizzle/0008_volute_channels.sql +0 -24
  200. package/drizzle/0009_shared_skills.sql +0 -9
  201. package/drizzle/0010_delivery_queue.sql +0 -12
  202. package/drizzle/0011_rename_human_to_brain.sql +0 -1
  203. package/drizzle/0012_activity.sql +0 -11
  204. package/drizzle/0013_user_profiles.sql +0 -3
  205. package/drizzle/0014_conversation_reads.sql +0 -7
  206. package/drizzle/0015_notes.sql +0 -23
  207. package/drizzle/0016_note_reactions_and_replies.sql +0 -15
  208. package/drizzle/0017_minds.sql +0 -16
  209. package/drizzle/meta/0005_snapshot.json +0 -410
  210. package/drizzle/meta/0006_snapshot.json +0 -7
  211. package/drizzle/meta/0007_snapshot.json +0 -7
  212. package/drizzle/meta/0008_snapshot.json +0 -7
  213. package/drizzle/meta/0009_snapshot.json +0 -7
  214. package/drizzle/meta/0010_snapshot.json +0 -7
  215. package/drizzle/meta/0011_snapshot.json +0 -7
  216. package/drizzle/meta/0012_snapshot.json +0 -7
  217. package/drizzle/meta/0013_snapshot.json +0 -7
  218. package/packages/extensions/notes/dist/ui/assets/index-DgawVO5g.css +0 -1
  219. package/packages/extensions/notes/dist/ui/assets/index-qUWoeC4c.js +0 -2
  220. package/packages/extensions/notes/skills/notes/scripts/notes.mjs +0 -185
  221. package/templates/_base/.init/.config/hooks/startup-context.sh +0 -46
  222. package/templates/_base/.init/.config/scripts/session-reader.ts +0 -59
  223. package/templates/_base/home/public/.gitkeep +0 -0
  224. package/templates/_base/src/lib/session-monitor.ts +0 -400
  225. package/templates/claude/src/lib/hooks/session-context.ts +0 -32
  226. package/templates/pi/src/lib/session-context-extension.ts +0 -35
  227. /package/templates/_base/.init/{.config → .local}/hooks/wake-context.sh +0 -0
package/dist/cli.js CHANGED
@@ -10,14 +10,28 @@ 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-OYUD4ZJ4.js");
13
+ const { default: pkg } = await import("./package-PK6JUFL3.js");
14
14
  console.log(pkg.version);
15
15
  process.exit(0);
16
16
  }
17
- var ungatedCommands = /* @__PURE__ */ new Set(["setup", "--help", "-h", "--version", "-v", "update", void 0]);
17
+ var ungatedCommands = /* @__PURE__ */ new Set([
18
+ "setup",
19
+ "--help",
20
+ "-h",
21
+ "--version",
22
+ "-v",
23
+ "update",
24
+ "up",
25
+ "down",
26
+ "restart",
27
+ "status",
28
+ "login",
29
+ "logout",
30
+ "service",
31
+ void 0
32
+ ]);
18
33
  if (!ungatedCommands.has(command)) {
19
- const { isSetupComplete, migrateSetupConfig } = await import("./setup-QMDK5RZX.js");
20
- migrateSetupConfig();
34
+ const { isSetupComplete } = await import("./setup-SZIARWI6.js");
21
35
  if (!isSetupComplete()) {
22
36
  console.error("Volute is not set up. Run `volute setup` first.");
23
37
  process.exit(1);
@@ -25,55 +39,55 @@ if (!ungatedCommands.has(command)) {
25
39
  }
26
40
  switch (command) {
27
41
  case "setup":
28
- await import("./setup-XJH3E7YM.js").then((m) => m.run(args));
42
+ await import("./setup-WENLVPVP.js").then((m) => m.run(args));
29
43
  break;
30
44
  case "mind":
31
- await import("./mind-LUWRQUQ5.js").then((m) => m.run(args));
45
+ await import("./mind-2B6M7Y25.js").then((m) => m.run(args));
32
46
  break;
33
47
  case "chat":
34
- await import("./chat-TCUNPFGO.js").then((m) => m.run(args));
48
+ await import("./chat-XT4OBJBU.js").then((m) => m.run(args));
35
49
  break;
36
50
  case "variant":
37
51
  await import("./variant-7TGZHOU3.js").then((m) => m.run(args));
38
52
  break;
39
53
  case "clock":
40
- await import("./clock-G3ALCMLJ.js").then((m) => m.run(args));
41
- break;
42
- case "schedule":
43
- await import("./clock-G3ALCMLJ.js").then((m) => m.run(args));
54
+ await import("./clock-2UOZ6JPU.js").then((m) => m.run(args));
44
55
  break;
45
56
  case "skill":
46
- await import("./skill-FZIN4W4Q.js").then((m) => m.run(args));
57
+ await import("./skill-TUVOTW4Z.js").then((m) => m.run(args));
47
58
  break;
48
59
  case "env":
49
- await import("./env-CLXXT7M2.js").then((m) => m.run(args));
60
+ await import("./env-RLYQBOOP.js").then((m) => m.run(args));
61
+ break;
62
+ case "config":
63
+ await import("./config-H2H4UIF7.js").then((m) => m.run(args));
50
64
  break;
51
65
  case "up":
52
- await import("./up-BXUAIDXB.js").then((m) => m.run(args));
66
+ await import("./up-6I6BHRTO.js").then((m) => m.run(args));
53
67
  break;
54
68
  case "down":
55
- await import("./down-NGBMGORS.js").then((m) => m.run(args));
69
+ await import("./down-TB3ESMNP.js").then((m) => m.run(args));
56
70
  break;
57
71
  case "restart":
58
- await import("./daemon-restart-4JGBHEJ4.js").then((m) => m.run(args));
72
+ await import("./daemon-restart-NGFHFAUF.js").then((m) => m.run(args));
59
73
  break;
60
74
  case "update":
61
- await import("./update-PLPHMMZ2.js").then((m) => m.run(args));
75
+ await import("./update-QVPRF6GR.js").then((m) => m.run(args));
62
76
  break;
63
77
  case "status":
64
- await import("./status-ZRO37MWR.js").then((m) => m.run(args));
78
+ await import("./status-TCUMUO6M.js").then((m) => m.run(args));
65
79
  break;
66
80
  case "extension":
67
- await import("./extension-WZ4SUPJB.js").then((m) => m.run(args));
81
+ await import("./extension-FQ5D3NCC.js").then((m) => m.run(args));
68
82
  break;
69
83
  case "systems":
70
- await import("./systems-W3BBMSOZ.js").then((m) => m.run(args));
84
+ await import("./systems-DHBKVYEY.js").then((m) => m.run(args));
71
85
  break;
72
86
  case "login":
73
- await import("./login-RET5WESK.js").then((m) => m.run(args));
87
+ await import("./login-RIJF2F4G.js").then((m) => m.run(args));
74
88
  break;
75
89
  case "logout":
76
- await import("./logout-CGAGJN3L.js").then((m) => m.run(args));
90
+ await import("./logout-5MLHZALK.js").then((m) => m.run(args));
77
91
  break;
78
92
  case "--help":
79
93
  case "-h":
@@ -111,6 +125,10 @@ System:
111
125
  update Update volute
112
126
  systems register/login/logout volute.systems account
113
127
 
128
+ Extensions:
129
+ notes write/list/read/... Manage notes
130
+ pages notify Notify page updates
131
+
114
132
  Options:
115
133
  --version, -v Show version number
116
134
  --help, -h Show this help message
@@ -120,13 +138,64 @@ Run 'volute <command> --help' for details.
120
138
  Mind-scoped commands (chat, clock, skill)
121
139
  use --mind <name> or VOLUTE_MIND env var to identify the mind.`);
122
140
  break;
123
- default:
141
+ default: {
142
+ let isExtensionCommand = false;
143
+ try {
144
+ const { daemonFetch } = await import("./daemon-client-6QXHZ7US.js");
145
+ const res = await daemonFetch("/api/extensions/commands");
146
+ if (res.ok) {
147
+ const extCommands = await res.json();
148
+ if (command && command in extCommands) {
149
+ isExtensionCommand = true;
150
+ const subcommand = args[0];
151
+ const ext = extCommands[command];
152
+ if (!subcommand || !(subcommand in ext.commands)) {
153
+ console.log(`volute ${command} \u2014 ${Object.keys(ext.commands).join(", ")}
154
+ `);
155
+ for (const [name, meta] of Object.entries(ext.commands)) {
156
+ console.log(` ${name.padEnd(12)} ${meta.description}`);
157
+ }
158
+ process.exit(0);
159
+ }
160
+ const cmdArgs = args.slice(1);
161
+ let mind = process.env.VOLUTE_MIND;
162
+ const mindIdx = cmdArgs.indexOf("--mind");
163
+ if (mindIdx !== -1 && cmdArgs[mindIdx + 1]) {
164
+ mind = cmdArgs[mindIdx + 1];
165
+ cmdArgs.splice(mindIdx, 2);
166
+ }
167
+ const cmdRes = await daemonFetch(`/api/ext/${command}/commands/${subcommand}`, {
168
+ method: "POST",
169
+ headers: { "Content-Type": "application/json" },
170
+ body: JSON.stringify({ args: cmdArgs, mind })
171
+ });
172
+ if (!cmdRes.ok) {
173
+ const text = await cmdRes.text().catch(() => "");
174
+ console.error(`Extension command failed (HTTP ${cmdRes.status}): ${text}`);
175
+ process.exit(1);
176
+ }
177
+ const result = await cmdRes.json();
178
+ if (result.error) {
179
+ console.error(result.error);
180
+ process.exit(1);
181
+ }
182
+ if (result.output) console.log(result.output);
183
+ break;
184
+ }
185
+ }
186
+ } catch (err) {
187
+ if (isExtensionCommand) {
188
+ console.error(`Extension command failed: ${err instanceof Error ? err.message : err}`);
189
+ process.exit(1);
190
+ }
191
+ }
124
192
  console.error(`Unknown command: ${command}
125
193
  Run 'volute --help' for usage.`);
126
194
  process.exit(1);
195
+ }
127
196
  }
128
197
  if (command !== "update") {
129
- import("./update-check-CVCN7MF6.js").then((m) => m.checkForUpdate()).then((result) => {
198
+ import("./update-check-ZD6OOIYQ.js").then((m) => m.checkForUpdate()).then((result) => {
130
199
  if (result.updateAvailable) {
131
200
  console.error(`
132
201
  Update available: ${result.current} \u2192 ${result.latest}`);
@@ -2,9 +2,6 @@
2
2
  import {
3
3
  resolveMindName
4
4
  } from "./chunk-NAOW2CLO.js";
5
- import {
6
- daemonFetch
7
- } from "./chunk-EFVHR7KH.js";
8
5
  import {
9
6
  getClient,
10
7
  urlOf
@@ -12,7 +9,11 @@ import {
12
9
  import {
13
10
  parseArgs
14
11
  } from "./chunk-D424ZQGI.js";
15
- import "./chunk-HHTXM4JT.js";
12
+ import {
13
+ daemonFetch
14
+ } from "./chunk-UKVWJRKN.js";
15
+ import "./chunk-LRCG2JLP.js";
16
+ import "./chunk-RPZZSXV3.js";
16
17
  import "./chunk-K3NQKI34.js";
17
18
 
18
19
  // src/commands/clock.ts
@@ -33,10 +34,10 @@ async function run(args) {
33
34
  await removeSchedule(args.slice(1));
34
35
  break;
35
36
  case "sleep":
36
- await import("./mind-sleep-R6PTNNW4.js").then((m) => m.run(args.slice(1)));
37
+ await import("./mind-sleep-B7BHJLH7.js").then((m) => m.run(args.slice(1)));
37
38
  break;
38
39
  case "wake":
39
- await import("./mind-wake-67ZQEWAV.js").then((m) => m.run(args.slice(1)));
40
+ await import("./mind-wake-GY3RFX7Y.js").then((m) => m.run(args.slice(1)));
40
41
  break;
41
42
  case "--help":
42
43
  case "-h":
@@ -52,8 +53,8 @@ function printUsage() {
52
53
  console.log(`Usage:
53
54
  volute clock status [--mind <name>]
54
55
  volute clock list [--mind <name>]
55
- volute clock add [--mind <name>] --id <name> --cron "..." --message/--script "..." [--channel ch] [--while-sleeping skip|queue|trigger-wake]
56
- volute clock add [--mind <name>] --id <name> --in <duration> --message/--script "..." [--channel ch] [--while-sleeping skip|queue|trigger-wake]
56
+ volute clock add [--mind <name>] --id <name> --cron "..." --message/--script "..." [--session name] [--while-sleeping skip|queue|trigger-wake]
57
+ volute clock add [--mind <name>] --id <name> --in <duration> --message/--script "..." [--session name] [--while-sleeping skip|queue|trigger-wake]
57
58
  volute clock remove [--mind <name>] --id <id>
58
59
  volute clock sleep [name] [--wake-at <time>]
59
60
  volute clock wake [name]
@@ -158,6 +159,7 @@ async function addSchedule(args) {
158
159
  script: { type: "string" },
159
160
  id: { type: "string" },
160
161
  channel: { type: "string" },
162
+ session: { type: "string" },
161
163
  "while-sleeping": { type: "string" }
162
164
  });
163
165
  const mind = resolveMindName(flags);
@@ -203,6 +205,7 @@ async function addSchedule(args) {
203
205
  if (flags.script) body.script = flags.script;
204
206
  if (flags.id) body.id = flags.id;
205
207
  if (flags.channel) body.channel = flags.channel;
208
+ if (flags.session) body.session = flags.session;
206
209
  if (flags["while-sleeping"]) {
207
210
  const ws = flags["while-sleeping"];
208
211
  if (!["skip", "queue", "trigger-wake"].includes(ws)) {
@@ -1,26 +1,28 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  deliverMessage
4
- } from "./chunk-QVAQ5454.js";
5
- import "./chunk-FSM45XD5.js";
6
- import "./chunk-LIRWLNAK.js";
7
- import "./chunk-IKHDUZRH.js";
4
+ } from "./chunk-QBQ424EM.js";
5
+ import "./chunk-SKLSMHXO.js";
6
+ import "./chunk-R7E6CRVQ.js";
8
7
  import {
9
8
  getAuthHeaders,
10
9
  getWebhookUrl
11
- } from "./chunk-2C2VXEBB.js";
12
- import "./chunk-2NDZC3S7.js";
13
- import "./chunk-P27RV5WM.js";
14
- import "./chunk-MDPCSXZ4.js";
15
- import "./chunk-ZWKTUQEL.js";
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";
16
19
  import {
17
20
  logger_default
18
21
  } from "./chunk-YUIHSKR6.js";
19
- import "./chunk-CVH6Y2YG.js";
20
- import "./chunk-G3GBKZGG.js";
21
- import "./chunk-7D47T4RB.js";
22
- import "./chunk-A6TUJJ3L.js";
23
- import "./chunk-HHTXM4JT.js";
22
+ import "./chunk-LGB6JBHI.js";
23
+ import "./chunk-TSXLLQZW.js";
24
+ import "./chunk-LRCG2JLP.js";
25
+ import "./chunk-RPZZSXV3.js";
24
26
  import "./chunk-K3NQKI34.js";
25
27
 
26
28
  // src/lib/cloud-sync.ts
@@ -0,0 +1,72 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ parseArgs
4
+ } from "./chunk-D424ZQGI.js";
5
+ import "./chunk-K3NQKI34.js";
6
+
7
+ // src/commands/config.ts
8
+ async function run(args) {
9
+ const { positional } = parseArgs(args, {});
10
+ const subcommand = positional[0];
11
+ switch (subcommand) {
12
+ case "models": {
13
+ const { daemonFetch } = await import("./daemon-client-6QXHZ7US.js");
14
+ const res = await daemonFetch("/api/config/models");
15
+ if (!res.ok) {
16
+ console.error(`Failed to fetch models (HTTP ${res.status})`);
17
+ process.exit(1);
18
+ }
19
+ const models = await res.json();
20
+ const enabled = models.filter((m) => m.enabled);
21
+ if (enabled.length === 0) {
22
+ console.log("No models enabled.");
23
+ return;
24
+ }
25
+ for (const m of enabled) {
26
+ console.log(`${m.provider}:${m.id} ${m.name}`);
27
+ }
28
+ break;
29
+ }
30
+ case "providers": {
31
+ const { daemonFetch } = await import("./daemon-client-6QXHZ7US.js");
32
+ const res = await daemonFetch("/api/config/providers");
33
+ if (!res.ok) {
34
+ console.error(`Failed to fetch providers (HTTP ${res.status})`);
35
+ process.exit(1);
36
+ }
37
+ const providers = await res.json();
38
+ const configured = providers.filter((p) => p.configured);
39
+ if (configured.length === 0) {
40
+ console.log("No providers configured.");
41
+ return;
42
+ }
43
+ for (const p of configured) {
44
+ console.log(p.id);
45
+ }
46
+ break;
47
+ }
48
+ case "status": {
49
+ const { daemonFetch } = await import("./daemon-client-6QXHZ7US.js");
50
+ const res = await daemonFetch("/api/config/status");
51
+ if (!res.ok) {
52
+ console.error(`Failed to fetch config (HTTP ${res.status})`);
53
+ process.exit(1);
54
+ }
55
+ const data = await res.json();
56
+ for (const [key, value] of Object.entries(data)) {
57
+ console.log(`${key}: ${value}`);
58
+ }
59
+ break;
60
+ }
61
+ default:
62
+ console.error("Usage: volute config <models|providers|status>");
63
+ console.error("");
64
+ console.error(" models List enabled AI models (provider:id format)");
65
+ console.error(" providers List configured AI providers");
66
+ console.error(" status Show system configuration");
67
+ process.exit(1);
68
+ }
69
+ }
70
+ export {
71
+ run
72
+ };
@@ -6,7 +6,7 @@ import {
6
6
  } from "../chunk-KTLFDYPT.js";
7
7
  import {
8
8
  slugify
9
- } from "../chunk-A6TUJJ3L.js";
9
+ } from "../chunk-G6BSYHPK.js";
10
10
  import "../chunk-K3NQKI34.js";
11
11
 
12
12
  // src/connectors/discord-bridge.ts
@@ -6,7 +6,7 @@ import {
6
6
  } from "../chunk-KTLFDYPT.js";
7
7
  import {
8
8
  slugify
9
- } from "../chunk-A6TUJJ3L.js";
9
+ } from "../chunk-G6BSYHPK.js";
10
10
  import "../chunk-K3NQKI34.js";
11
11
 
12
12
  // src/connectors/slack-bridge.ts
@@ -6,7 +6,7 @@ import {
6
6
  } from "../chunk-KTLFDYPT.js";
7
7
  import {
8
8
  slugify
9
- } from "../chunk-A6TUJJ3L.js";
9
+ } from "../chunk-G6BSYHPK.js";
10
10
  import "../chunk-K3NQKI34.js";
11
11
 
12
12
  // src/connectors/telegram-bridge.ts
@@ -24,12 +24,13 @@ import {
24
24
  listConversationsForUser,
25
25
  listConversationsWithParticipants,
26
26
  markConversationRead,
27
- migrateGroupDMsToChannels,
28
- removeParticipant
29
- } from "./chunk-2C2VXEBB.js";
30
- import "./chunk-P27RV5WM.js";
27
+ removeParticipant,
28
+ setConversationPrivate
29
+ } from "./chunk-S6NFERDC.js";
30
+ import "./chunk-QZANELPX.js";
31
31
  import "./chunk-YUIHSKR6.js";
32
- import "./chunk-HHTXM4JT.js";
32
+ import "./chunk-LRCG2JLP.js";
33
+ import "./chunk-RPZZSXV3.js";
33
34
  import "./chunk-K3NQKI34.js";
34
35
  export {
35
36
  addMessage,
@@ -56,6 +57,6 @@ export {
56
57
  listConversationsForUser,
57
58
  listConversationsWithParticipants,
58
59
  markConversationRead,
59
- migrateGroupDMsToChannels,
60
- removeParticipant
60
+ removeParticipant,
61
+ setConversationPrivate
61
62
  };
@@ -2,13 +2,14 @@
2
2
  import {
3
3
  resolveMindName
4
4
  } from "./chunk-NAOW2CLO.js";
5
- import {
6
- daemonFetch
7
- } from "./chunk-EFVHR7KH.js";
8
5
  import {
9
6
  parseArgs
10
7
  } from "./chunk-D424ZQGI.js";
11
- import "./chunk-HHTXM4JT.js";
8
+ import {
9
+ daemonFetch
10
+ } from "./chunk-UKVWJRKN.js";
11
+ import "./chunk-LRCG2JLP.js";
12
+ import "./chunk-RPZZSXV3.js";
12
13
  import "./chunk-K3NQKI34.js";
13
14
 
14
15
  // src/commands/chat/create.ts
@@ -11,13 +11,17 @@ async function run(args) {
11
11
  skills: { type: "string" }
12
12
  });
13
13
  const name = positional[0];
14
- const template = flags.template ?? "claude";
14
+ let template = flags.template;
15
+ if (!template) {
16
+ const { resolveTemplate } = await import("./ai-service-ZIPCV3MX.js");
17
+ template = resolveTemplate();
18
+ }
15
19
  if (!name) {
16
20
  console.error("Usage: volute mind create <name> [--template <name>] [--skills <list|none>]");
17
21
  process.exit(1);
18
22
  }
19
23
  const skills = flags.skills === "none" ? [] : flags.skills ? flags.skills.split(",") : void 0;
20
- const { daemonFetch } = await import("./daemon-client-BCTFGVCZ.js");
24
+ const { daemonFetch } = await import("./daemon-client-6QXHZ7US.js");
21
25
  const { getClient, urlOf } = await import("./api-client-YPKOZP2O.js");
22
26
  const client = getClient();
23
27
  const res = await daemonFetch(urlOf(client.api.minds.$url()), {
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ daemonFetch,
4
+ readSessionFile
5
+ } from "./chunk-UKVWJRKN.js";
6
+ import "./chunk-LRCG2JLP.js";
7
+ import "./chunk-RPZZSXV3.js";
8
+ import "./chunk-K3NQKI34.js";
9
+ export {
10
+ daemonFetch,
11
+ readSessionFile
12
+ };
@@ -1,22 +1,22 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  run
4
- } from "./chunk-W5OOPLNP.js";
4
+ } from "./chunk-JJ7W6WSB.js";
5
5
  import {
6
6
  stopDaemon
7
- } from "./chunk-P7VFDSSG.js";
7
+ } from "./chunk-2FLJ63GU.js";
8
8
  import {
9
9
  getServiceMode,
10
10
  modeLabel,
11
11
  pollHealth,
12
12
  readDaemonConfig,
13
13
  restartService
14
- } from "./chunk-FXHXHI2A.js";
15
- import "./chunk-CVH6Y2YG.js";
16
- import "./chunk-G3GBKZGG.js";
17
- import "./chunk-7D47T4RB.js";
14
+ } from "./chunk-LSGWR54X.js";
15
+ import "./chunk-LGB6JBHI.js";
16
+ import "./chunk-TSXLLQZW.js";
18
17
  import "./chunk-D424ZQGI.js";
19
- import "./chunk-HHTXM4JT.js";
18
+ import "./chunk-LRCG2JLP.js";
19
+ import "./chunk-RPZZSXV3.js";
20
20
  import "./chunk-K3NQKI34.js";
21
21
 
22
22
  // src/commands/daemon-restart.ts