volute 0.33.0 → 0.35.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 (255) hide show
  1. package/README.md +7 -6
  2. package/dist/accept-ZBDVVCEU.js +42 -0
  3. package/dist/activity-events-ZW4SDL2C.js +15 -0
  4. package/dist/{ai-service-SBY2WG7O.js → ai-service-LURBEDDB.js} +6 -6
  5. package/dist/{api-client-YPKOZP2O.js → api-client-3A77HMH7.js} +2 -2
  6. package/dist/api.d.ts +1 -5195
  7. package/dist/{archive-INXYFVCW.js → archive-ESU2FUN4.js} +4 -4
  8. package/dist/{auth-GKCDSO4T.js → auth-WX4TESEI.js} +6 -6
  9. package/dist/bridge-PXIO6PS2.js +206 -0
  10. package/dist/chat-QXAJF3FU.js +51 -0
  11. package/dist/{chunk-NNB4WIG7.js → chunk-2TGZJFAT.js} +3 -3
  12. package/dist/{chunk-6LXAAQ43.js → chunk-33ODGMFZ.js} +1 -1
  13. package/dist/{chunk-RPZZSXV3.js → chunk-5N7Y5WAM.js} +21 -2
  14. package/dist/chunk-5T5YMX6S.js +23 -0
  15. package/dist/{chunk-7J3HEVR7.js → chunk-5XJYUFZH.js} +28 -16
  16. package/dist/chunk-7KJOFUNN.js +22 -0
  17. package/dist/{chunk-2NGTS5UU.js → chunk-A2ZLHBHG.js} +2 -2
  18. package/dist/{chunk-KIEPMIM5.js → chunk-AN2W47GW.js} +2 -2
  19. package/dist/{chunk-G53F3JA4.js → chunk-AOB6GVRM.js} +1 -1
  20. package/dist/{chunk-LRCG2JLP.js → chunk-BDYXIWA5.js} +9 -5
  21. package/dist/{chunk-YUIHSKR6.js → chunk-BKF4WQCY.js} +2 -2
  22. package/dist/{chunk-N432I7QH.js → chunk-BMZQYACC.js} +2 -2
  23. package/dist/{chunk-NAOW2CLO.js → chunk-BTY4WNFE.js} +1 -1
  24. package/dist/{chunk-ALEF47VT.js → chunk-BV65KRHM.js} +2 -2
  25. package/dist/{chunk-KVK2DLWI.js → chunk-CORXD635.js} +4 -4
  26. package/dist/{chunk-PVY5W6QN.js → chunk-F7ZNLYKZ.js} +2 -2
  27. package/dist/{chunk-QTUVYI7W.js → chunk-FT5KETXZ.js} +3 -3
  28. package/dist/{chunk-C7I35G4R.js → chunk-IJHIXLVN.js} +44 -8
  29. package/dist/{chunk-JUKK7FPS.js → chunk-J6CJQDWI.js} +37 -28
  30. package/dist/{chunk-4RQBJWQX.js → chunk-LOPXTW6H.js} +1 -1
  31. package/dist/{chunk-RSX4OPZY.js → chunk-MDJGMOSD.js} +8 -137
  32. package/dist/{chunk-LOEJ4HPQ.js → chunk-N446KRP7.js} +3 -3
  33. package/dist/{chunk-I5KY25PQ.js → chunk-N5LMGYXX.js} +2 -2
  34. package/dist/{chunk-G6BSYHPK.js → chunk-NJK5SDGR.js} +1 -1
  35. package/dist/{chunk-D424ZQGI.js → chunk-O7IGP7ZW.js} +11 -3
  36. package/dist/{chunk-M7UL5S3Q.js → chunk-OTC67N2Z.js} +2 -2
  37. package/dist/{chunk-GY5HBI7A.js → chunk-PWQ2ITYG.js} +4 -4
  38. package/dist/{chunk-KTLFDYPT.js → chunk-QCH6K235.js} +1 -1
  39. package/dist/chunk-QHG4OMZL.js +145 -0
  40. package/dist/{chunk-SKLSMHXO.js → chunk-QWTR6AWZ.js} +3 -3
  41. package/dist/chunk-TXSA4Q3V.js +116 -0
  42. package/dist/{chunk-VH33ZWMW.js → chunk-VHJRZM2S.js} +2 -2
  43. package/dist/{chunk-SSI47XP2.js → chunk-VHWGEJ4V.js} +1 -1
  44. package/dist/chunk-VY3RB2V7.js +164 -0
  45. package/dist/chunk-WJPROOU5.js +8314 -0
  46. package/dist/{chunk-RVGLDGMI.js → chunk-WZRZFFCL.js} +25 -27
  47. package/dist/{chunk-JYVGHWEJ.js → chunk-XRQSAMX2.js} +4 -4
  48. package/dist/{chunk-OYAKCAVY.js → chunk-ZSR72JB3.js} +1 -1
  49. package/dist/{chunk-UKVWJRKN.js → chunk-ZX7EAV5J.js} +17 -7
  50. package/dist/cli.js +90 -29
  51. package/dist/clock-HSEKS5AR.js +289 -0
  52. package/dist/{cloud-sync-4NWLMFVH.js → cloud-sync-6JL4C24T.js} +22 -23
  53. package/dist/config-UTS7QULS.js +76 -0
  54. package/dist/connectors/discord-bridge.js +4 -4
  55. package/dist/connectors/slack-bridge.js +4 -4
  56. package/dist/connectors/telegram-bridge.js +4 -4
  57. package/dist/{conversations-AWI5SZW2.js → conversations-2PW57WO2.js} +6 -6
  58. package/dist/create-5BPOOJAN.js +75 -0
  59. package/dist/create-UVCK2CS6.js +50 -0
  60. package/dist/daemon-client-RVIKXGFQ.js +12 -0
  61. package/dist/daemon-restart-HSZ3BCX5.js +65 -0
  62. package/dist/daemon.js +1349 -1211
  63. package/dist/db-BDMH4SZ2.js +20 -0
  64. package/dist/db-BVBJ57TU.js +9 -0
  65. package/dist/delete-L5PAVDGQ.js +42 -0
  66. package/dist/delivery-manager-H5ZVBMCQ.js +31 -0
  67. package/dist/{delivery-router-FL45JL7N.js → delivery-router-HEJSJAHQ.js} +5 -5
  68. package/dist/down-74VXM45A.js +17 -0
  69. package/dist/env-E4XHO2BI.js +223 -0
  70. package/dist/exec-PY7THYH4.js +17 -0
  71. package/dist/export-OAS6QVBN.js +113 -0
  72. package/dist/extension-D74CNM7G.js +89 -0
  73. package/dist/extensions-XDDFY72A.js +49 -0
  74. package/dist/files-CWTK6V3H.js +53 -0
  75. package/dist/import-5A3T7QV4.js +143 -0
  76. package/dist/{isolation-LLAYQYDY.js → isolation-TK5RX2WM.js} +4 -4
  77. package/dist/join-DF5XSJAC.js +67 -0
  78. package/dist/lib-DYEZMGW7.js +6588 -0
  79. package/dist/list-PDMQM7ZV.js +53 -0
  80. package/dist/login-7TE6CIZF.js +60 -0
  81. package/dist/login-GOTAYLXP.js +51 -0
  82. package/dist/logout-6KIA74EV.js +29 -0
  83. package/dist/logout-T4XS6LRU.js +50 -0
  84. package/dist/message-delivery-GRC4W6P7.js +41 -0
  85. package/dist/mind-5IEYKV7I.js +97 -0
  86. package/dist/mind-activity-tracker-QBLIV7ZJ.js +18 -0
  87. package/dist/mind-history-IE2QH7U5.js +275 -0
  88. package/dist/mind-list-GEWHWAL4.js +38 -0
  89. package/dist/mind-manager-HFLB5653.js +31 -0
  90. package/dist/mind-profile-DCBDVF5B.js +53 -0
  91. package/dist/mind-service-X2CAA6W6.js +37 -0
  92. package/dist/mind-sleep-ITCF6OQA.js +47 -0
  93. package/dist/mind-status-X4SX3YUG.js +65 -0
  94. package/dist/mind-wake-KXMKMGWX.js +42 -0
  95. package/dist/{package-U3VFO273.js → package-D2FSVFAX.js} +11 -8
  96. package/dist/read-67VRP2DO.js +91 -0
  97. package/dist/{read-stdin-HQJ7774D.js → read-stdin-3X5VYKNS.js} +2 -2
  98. package/dist/register-SB7NXCOE.js +51 -0
  99. package/dist/{registry-PJ4S5PHQ.js → registry-GBSNW3HG.js} +3 -3
  100. package/dist/reject-MUR2KWJ4.js +40 -0
  101. package/dist/restart-5EGG4JXU.js +42 -0
  102. package/dist/{sandbox-GJOK4QLQ.js → sandbox-R37VIU36.js} +6 -6
  103. package/dist/scheduler-Y7O4CJXL.js +31 -0
  104. package/dist/{schema-PA3M5ZKH.js → schema-XVZ2CLKW.js} +4 -2
  105. package/dist/{seed-QDYVLG74.js → seed-EQORWX77.js} +3 -3
  106. package/dist/seed-check-KJNTL72M.js +35 -0
  107. package/dist/seed-cmd-ZM2XGVU2.js +30 -0
  108. package/dist/seed-create-DRWGGHEI.js +113 -0
  109. package/dist/seed-sprout-JYXGXOP3.js +148 -0
  110. package/dist/send-JBJJQ7CA.js +409 -0
  111. package/dist/service-WNPCNHOX.js +121 -0
  112. package/dist/{setup-XMCBE3LF.js → setup-BJ4YAY26.js} +155 -129
  113. package/dist/{setup-TISPCO22.js → setup-RHJRFURI.js} +4 -4
  114. package/dist/skill-TAAKEYBV.js +389 -0
  115. package/dist/skills/plan-coordinator/SKILL.md +60 -0
  116. package/dist/skills/volute-mind/SKILL.md +9 -227
  117. package/dist/skills/volute-mind/references/extensions.md +34 -0
  118. package/dist/skills/volute-mind/references/integrations.md +48 -0
  119. package/dist/skills/volute-mind/references/routing.md +86 -0
  120. package/dist/skills/volute-mind/references/sleep.md +33 -0
  121. package/dist/skills/volute-mind/references/variants.md +31 -0
  122. package/dist/{skills-7FV7EJTE.js → skills-EKMCQ46K.js} +12 -8
  123. package/dist/sleep-manager-7KFK3USC.js +35 -0
  124. package/dist/spirit-ZFRDXMG7.js +23 -0
  125. package/dist/split-AWVOYOPZ.js +64 -0
  126. package/dist/{sprout-WKLZXUIQ.js → sprout-HE4TITMK.js} +3 -3
  127. package/dist/start-3UXOPXQG.js +39 -0
  128. package/dist/status-ZK34WYIM.js +125 -0
  129. package/dist/stop-3XYIBGFM.js +41 -0
  130. package/dist/system-chat-IDPHYHY4.js +35 -0
  131. package/dist/systems-O43WGQY6.js +52 -0
  132. package/dist/{tailscale-XHQBZROW.js → tailscale-ZIZ2HWJ5.js} +5 -5
  133. package/dist/template-hash-A7FNHTB7.js +9 -0
  134. package/dist/up-77ICEDEW.js +19 -0
  135. package/dist/update-ANE5ZM7F.js +225 -0
  136. package/dist/{update-check-ZD6OOIYQ.js → update-check-UV55CBEP.js} +4 -4
  137. package/dist/upgrade-ZMDGC7M2.js +74 -0
  138. package/dist/variant-QWL2WSRI.js +62 -0
  139. package/dist/{version-notify-NBI2MTJO.js → version-notify-FXSEMXWW.js} +29 -28
  140. package/dist/{volute-config-HD7WWUQC.js → volute-config-D2XVS2YI.js} +2 -2
  141. package/dist/web-assets/assets/index-BhxWKvbB.css +1 -0
  142. package/dist/web-assets/assets/index-CHVKJ9II.js +75 -0
  143. package/dist/web-assets/ext-theme.css +48 -9
  144. package/dist/web-assets/index.html +2 -2
  145. package/dist/web-assets/sw.js +117 -0
  146. package/drizzle/0005_meta_summaries.sql +15 -0
  147. package/drizzle/meta/0005_snapshot.json +7 -0
  148. package/drizzle/meta/_journal.json +7 -0
  149. package/package.json +10 -7
  150. package/packages/extensions/pages/dist/ui/assets/index-DKZLNMED.js +2 -0
  151. package/packages/extensions/pages/dist/ui/index.html +1 -1
  152. package/packages/extensions/pages/skills/pages/SKILL.md +84 -9
  153. package/packages/extensions/plan/dist/ui/assets/index-CJj2gZnZ.css +1 -0
  154. package/packages/extensions/plan/dist/ui/assets/index-FMEJmvQz.js +61 -0
  155. package/packages/extensions/plan/dist/ui/index.html +14 -0
  156. package/packages/extensions/plan/skills/plan/SKILL.md +43 -0
  157. package/packages/extensions/plan/skills/plan/scripts/plan-hook.sh +37 -0
  158. package/templates/_base/home/VOLUTE.md +12 -19
  159. package/templates/_base/src/lib/auto-commit.ts +8 -8
  160. package/templates/_base/src/lib/context-breakdown.ts +450 -0
  161. package/templates/_base/src/lib/format-prefix.ts +17 -0
  162. package/templates/_base/src/lib/hook-loader.ts +8 -2
  163. package/templates/_base/src/lib/router.ts +75 -33
  164. package/templates/_base/src/lib/routing.ts +4 -1
  165. package/templates/_base/src/lib/startup.ts +16 -8
  166. package/templates/_base/src/lib/types.ts +2 -1
  167. package/templates/_base/src/lib/volute-server.ts +75 -8
  168. package/templates/claude/.init/CLAUDE.md +4 -10
  169. package/templates/claude/package.json.tmpl +1 -0
  170. package/templates/claude/src/agent.ts +108 -33
  171. package/templates/claude/src/lib/hooks/reply-instructions.ts +27 -7
  172. package/templates/claude/src/lib/stream-consumer.ts +2 -2
  173. package/templates/claude/src/server.ts +1 -0
  174. package/templates/codex/package.json.tmpl +1 -0
  175. package/templates/codex/src/agent.ts +80 -8
  176. package/templates/codex/src/server.ts +1 -4
  177. package/templates/pi/package.json.tmpl +1 -0
  178. package/templates/pi/src/agent.ts +115 -36
  179. package/templates/pi/src/lib/event-handler.ts +22 -7
  180. package/templates/pi/src/lib/reply-instructions-extension.ts +23 -4
  181. package/templates/pi/src/lib/subagents.ts +20 -17
  182. package/templates/pi/src/server.ts +2 -5
  183. package/dist/accept-D5VBM7JW.js +0 -42
  184. package/dist/activity-events-XJO3P4RR.js +0 -15
  185. package/dist/bridge-TXWWPPOJ.js +0 -207
  186. package/dist/chat-U5ZOME3O.js +0 -68
  187. package/dist/chunk-3Z2DPESO.js +0 -3634
  188. package/dist/chunk-A2A4KLFE.js +0 -1528
  189. package/dist/chunk-K3NQKI34.js +0 -10
  190. package/dist/chunk-NPKSDYA2.js +0 -156
  191. package/dist/chunk-PB65JZK2.js +0 -85
  192. package/dist/clock-BVH3V6E3.js +0 -266
  193. package/dist/config-H2H4UIF7.js +0 -72
  194. package/dist/create-2FK7Z46Y.js +0 -44
  195. package/dist/create-YWD2TIP4.js +0 -71
  196. package/dist/daemon-client-6QXHZ7US.js +0 -12
  197. package/dist/daemon-restart-GOBUKLX7.js +0 -52
  198. package/dist/db-F34YLV7D.js +0 -9
  199. package/dist/db-RA45JBFG.js +0 -16
  200. package/dist/delete-QTGWEDBI.js +0 -35
  201. package/dist/delivery-manager-PFAKEJTC.js +0 -32
  202. package/dist/down-FWWTEKXM.js +0 -15
  203. package/dist/env-JCOF2222.js +0 -191
  204. package/dist/export-SUYRLI5Q.js +0 -112
  205. package/dist/extension-OBTGKQQD.js +0 -175
  206. package/dist/extensions-KYNTVTMO.js +0 -30
  207. package/dist/files-65PMW5IK.js +0 -47
  208. package/dist/history-DKCDI3JO.js +0 -128
  209. package/dist/import-DDUFE7AY.js +0 -23
  210. package/dist/join-I5QEE3LG.js +0 -66
  211. package/dist/list-JQ463EDA.js +0 -41
  212. package/dist/login-D7ETSU4R.js +0 -47
  213. package/dist/login-RIJF2F4G.js +0 -47
  214. package/dist/logout-5MLHZALK.js +0 -40
  215. package/dist/logout-UZJRGY4Z.js +0 -21
  216. package/dist/message-delivery-DFF5SJRM.js +0 -42
  217. package/dist/mind-IOJFLEM5.js +0 -108
  218. package/dist/mind-activity-tracker-F6O4Q2SL.js +0 -18
  219. package/dist/mind-list-WUPMQDYQ.js +0 -30
  220. package/dist/mind-manager-NBJF5D26.js +0 -32
  221. package/dist/mind-profile-P67FEHOY.js +0 -47
  222. package/dist/mind-service-2MQ6UK5N.js +0 -38
  223. package/dist/mind-sleep-WW2IX7JT.js +0 -42
  224. package/dist/mind-status-L3EFFRPR.js +0 -56
  225. package/dist/mind-wake-VSSGW465.js +0 -37
  226. package/dist/read-EBY56C33.js +0 -75
  227. package/dist/register-HD74C4TT.js +0 -47
  228. package/dist/reject-UJKFBHRO.js +0 -40
  229. package/dist/restart-3UCMRUVC.js +0 -33
  230. package/dist/scheduler-ZZ7XGQG6.js +0 -32
  231. package/dist/seed-check-S2IX25RL.js +0 -32
  232. package/dist/seed-cmd-DKOUFEAU.js +0 -36
  233. package/dist/seed-create-4XBBOLRH.js +0 -112
  234. package/dist/seed-sprout-GQEIIQRT.js +0 -132
  235. package/dist/send-QIV2INHB.js +0 -373
  236. package/dist/skill-PSQGRRJX.js +0 -358
  237. package/dist/skills/shared-files/SKILL.md +0 -44
  238. package/dist/skills/shared-files/scripts/merge.ts +0 -72
  239. package/dist/skills/shared-files/scripts/pull.ts +0 -52
  240. package/dist/sleep-manager-JTXSN7NV.js +0 -36
  241. package/dist/spirit-VRONKFMF.js +0 -23
  242. package/dist/split-STOROBYJ.js +0 -63
  243. package/dist/start-K2NCUUCG.js +0 -33
  244. package/dist/status-3JBTFSMI.js +0 -115
  245. package/dist/stop-H26JZDXF.js +0 -32
  246. package/dist/system-chat-JAPOJ3KE.js +0 -36
  247. package/dist/systems-XRI52VCH.js +0 -61
  248. package/dist/template-hash-A6VVKOXJ.js +0 -9
  249. package/dist/up-M5AS6SBV.js +0 -18
  250. package/dist/update-UD543CXX.js +0 -215
  251. package/dist/upgrade-O4Q7WJM3.js +0 -67
  252. package/dist/variant-7TGZHOU3.js +0 -41
  253. package/dist/web-assets/assets/index-CWJrVveV.css +0 -1
  254. package/dist/web-assets/assets/index-DJt14FRI.js +0 -75
  255. package/packages/extensions/pages/dist/ui/assets/index-tLTROSk5.js +0 -2
@@ -0,0 +1,38 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ command
4
+ } from "./chunk-TXSA4Q3V.js";
5
+ import "./chunk-O7IGP7ZW.js";
6
+ import {
7
+ daemonFetch
8
+ } from "./chunk-ZX7EAV5J.js";
9
+ import "./chunk-7KJOFUNN.js";
10
+
11
+ // packages/cli/src/commands/mind-list.ts
12
+ var cmd = command({
13
+ name: "volute mind list",
14
+ description: "List all minds",
15
+ flags: {},
16
+ async run() {
17
+ const res = await daemonFetch("/api/minds");
18
+ if (!res.ok) {
19
+ const body = await res.json().catch(() => ({ error: `HTTP ${res.status}` }));
20
+ console.error(`Failed to list minds: ${body.error}`);
21
+ process.exit(1);
22
+ }
23
+ const minds = await res.json();
24
+ if (minds.length === 0) {
25
+ console.log("No minds configured.");
26
+ return;
27
+ }
28
+ for (const mind of minds) {
29
+ const status = mind.status ?? (mind.running ? "running" : "stopped");
30
+ const label = mind.stage === "seed" ? " (seed)" : "";
31
+ console.log(` ${mind.name}: ${status}${label}`);
32
+ }
33
+ }
34
+ });
35
+ var run = cmd.execute;
36
+ export {
37
+ run
38
+ };
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ MindManager,
4
+ getMindManager,
5
+ initMindManager
6
+ } from "./chunk-WJPROOU5.js";
7
+ import "./chunk-5XJYUFZH.js";
8
+ import "./chunk-AOB6GVRM.js";
9
+ import "./chunk-IJHIXLVN.js";
10
+ import "./chunk-QWTR6AWZ.js";
11
+ import "./chunk-N446KRP7.js";
12
+ import "./chunk-QHG4OMZL.js";
13
+ import "./chunk-XRQSAMX2.js";
14
+ import "./chunk-WZRZFFCL.js";
15
+ import "./chunk-CORXD635.js";
16
+ import "./chunk-ZSR72JB3.js";
17
+ import "./chunk-PWQ2ITYG.js";
18
+ import "./chunk-A2ZLHBHG.js";
19
+ import "./chunk-FT5KETXZ.js";
20
+ import "./chunk-BKF4WQCY.js";
21
+ import "./chunk-AN2W47GW.js";
22
+ import "./chunk-VHJRZM2S.js";
23
+ import "./chunk-BMZQYACC.js";
24
+ import "./chunk-BDYXIWA5.js";
25
+ import "./chunk-5N7Y5WAM.js";
26
+ import "./chunk-7KJOFUNN.js";
27
+ export {
28
+ MindManager,
29
+ getMindManager,
30
+ initMindManager
31
+ };
@@ -0,0 +1,53 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ resolveMindName
4
+ } from "./chunk-BTY4WNFE.js";
5
+ import {
6
+ command
7
+ } from "./chunk-TXSA4Q3V.js";
8
+ import "./chunk-O7IGP7ZW.js";
9
+ import "./chunk-7KJOFUNN.js";
10
+
11
+ // packages/cli/src/commands/mind-profile.ts
12
+ var cmd = command({
13
+ name: "volute mind profile",
14
+ description: "Update mind profile",
15
+ flags: {
16
+ mind: { type: "string", description: "Mind name" },
17
+ "display-name": { type: "string", description: "Display name" },
18
+ description: { type: "string", description: "Description text" },
19
+ avatar: { type: "string", description: "Path to avatar image" }
20
+ },
21
+ async run({ flags }) {
22
+ const name = resolveMindName(flags);
23
+ const displayName = flags["display-name"];
24
+ const description = flags.description;
25
+ const avatar = flags.avatar;
26
+ if (!displayName && !description && !avatar) {
27
+ console.error(
28
+ "Usage: volute mind profile [--mind <name>] [--display-name <name>] [--description <text>] [--avatar <path>]"
29
+ );
30
+ process.exit(1);
31
+ }
32
+ const { daemonFetch } = await import("./daemon-client-RVIKXGFQ.js");
33
+ const body = {};
34
+ if (displayName) body.displayName = displayName;
35
+ if (description) body.description = description;
36
+ if (avatar) body.avatar = avatar;
37
+ const res = await daemonFetch(`/api/minds/${encodeURIComponent(name)}/profile`, {
38
+ method: "PATCH",
39
+ headers: { "Content-Type": "application/json" },
40
+ body: JSON.stringify(body)
41
+ });
42
+ if (!res.ok) {
43
+ const data = await res.json().catch(() => ({}));
44
+ console.error(data.error ?? `Failed to update profile (HTTP ${res.status})`);
45
+ process.exit(1);
46
+ }
47
+ console.log(`Profile updated for ${name}`);
48
+ }
49
+ });
50
+ var run = cmd.execute;
51
+ export {
52
+ run
53
+ };
@@ -0,0 +1,37 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ sleepMind,
4
+ startMindFull,
5
+ startSpiritFull,
6
+ stopMindFull,
7
+ stopSpiritFull,
8
+ wakeMind
9
+ } from "./chunk-WJPROOU5.js";
10
+ import "./chunk-5XJYUFZH.js";
11
+ import "./chunk-AOB6GVRM.js";
12
+ import "./chunk-IJHIXLVN.js";
13
+ import "./chunk-QWTR6AWZ.js";
14
+ import "./chunk-N446KRP7.js";
15
+ import "./chunk-QHG4OMZL.js";
16
+ import "./chunk-XRQSAMX2.js";
17
+ import "./chunk-WZRZFFCL.js";
18
+ import "./chunk-CORXD635.js";
19
+ import "./chunk-ZSR72JB3.js";
20
+ import "./chunk-PWQ2ITYG.js";
21
+ import "./chunk-A2ZLHBHG.js";
22
+ import "./chunk-FT5KETXZ.js";
23
+ import "./chunk-BKF4WQCY.js";
24
+ import "./chunk-AN2W47GW.js";
25
+ import "./chunk-VHJRZM2S.js";
26
+ import "./chunk-BMZQYACC.js";
27
+ import "./chunk-BDYXIWA5.js";
28
+ import "./chunk-5N7Y5WAM.js";
29
+ import "./chunk-7KJOFUNN.js";
30
+ export {
31
+ sleepMind,
32
+ startMindFull,
33
+ startSpiritFull,
34
+ stopMindFull,
35
+ stopSpiritFull,
36
+ wakeMind
37
+ };
@@ -0,0 +1,47 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ resolveMindName
4
+ } from "./chunk-BTY4WNFE.js";
5
+ import {
6
+ command
7
+ } from "./chunk-TXSA4Q3V.js";
8
+ import "./chunk-O7IGP7ZW.js";
9
+ import {
10
+ daemonFetch
11
+ } from "./chunk-ZX7EAV5J.js";
12
+ import "./chunk-7KJOFUNN.js";
13
+
14
+ // packages/cli/src/commands/mind-sleep.ts
15
+ var cmd = command({
16
+ name: "volute clock sleep",
17
+ description: "Put a mind to sleep",
18
+ args: [{ name: "name", description: "Mind to sleep (or use --mind / VOLUTE_MIND)" }],
19
+ flags: {
20
+ mind: { type: "string", description: "Mind name" },
21
+ "wake-at": { type: "string", description: "Schedule wake time" }
22
+ },
23
+ run: async ({ args, flags }) => {
24
+ const name = args.name || resolveMindName(flags);
25
+ if (!name) {
26
+ console.error("Provide a mind name as argument, --mind flag, or VOLUTE_MIND env var");
27
+ process.exit(1);
28
+ }
29
+ const body = {};
30
+ if (flags["wake-at"]) body.wakeAt = flags["wake-at"];
31
+ const res = await daemonFetch(`/api/minds/${encodeURIComponent(name)}/sleep`, {
32
+ method: "POST",
33
+ headers: { "Content-Type": "application/json" },
34
+ body: JSON.stringify(body)
35
+ });
36
+ const data = await res.json();
37
+ if (!res.ok) {
38
+ console.error(data.error || "Failed to put mind to sleep");
39
+ process.exit(1);
40
+ }
41
+ console.log(`${name} is going to sleep`);
42
+ }
43
+ });
44
+ var run = cmd.execute;
45
+ export {
46
+ run
47
+ };
@@ -0,0 +1,65 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ resolveMindName
4
+ } from "./chunk-BTY4WNFE.js";
5
+ import {
6
+ command
7
+ } from "./chunk-TXSA4Q3V.js";
8
+ import "./chunk-O7IGP7ZW.js";
9
+ import {
10
+ daemonFetch
11
+ } from "./chunk-ZX7EAV5J.js";
12
+ import "./chunk-7KJOFUNN.js";
13
+
14
+ // packages/cli/src/commands/mind-status.ts
15
+ var cmd = command({
16
+ name: "volute mind status",
17
+ description: "Check a mind's status",
18
+ args: [{ name: "name", description: "Mind to check (or use VOLUTE_MIND)" }],
19
+ flags: {},
20
+ async run({ args }) {
21
+ const name = args.name || (process.env.VOLUTE_MIND ? resolveMindName({}) : void 0);
22
+ if (!name) {
23
+ console.error("Usage: volute mind status <name>");
24
+ process.exit(1);
25
+ }
26
+ const res = await daemonFetch(`/api/minds/${encodeURIComponent(name)}`);
27
+ if (!res.ok) {
28
+ if (res.status === 404) {
29
+ console.error(`Mind "${name}" not found`);
30
+ } else {
31
+ const body = await res.json().catch(() => ({ error: `HTTP ${res.status}` }));
32
+ console.error(`Failed to get mind status: ${body.error}`);
33
+ }
34
+ process.exit(1);
35
+ }
36
+ const mind = await res.json();
37
+ const status = mind.status ?? (mind.running ? "running" : "stopped");
38
+ console.log(`Mind: ${mind.name}`);
39
+ console.log(`Status: ${status}`);
40
+ console.log(`Port: ${mind.port}`);
41
+ if (mind.stage) console.log(`Stage: ${mind.stage}`);
42
+ if (mind.parent) console.log(`Parent: ${mind.parent}`);
43
+ if (mind.model) console.log(`Model: ${mind.model}`);
44
+ if (mind.channels && mind.channels.length > 0) {
45
+ console.log(`
46
+ Channels:`);
47
+ for (const ch of mind.channels) {
48
+ console.log(` ${ch.type}: ${ch.status}`);
49
+ }
50
+ }
51
+ if (mind.variants && mind.variants.length > 0) {
52
+ console.log(`
53
+ Variants:`);
54
+ for (const v of mind.variants) {
55
+ console.log(` ${v.name}: ${v.status}`);
56
+ }
57
+ }
58
+ if (mind.hasPages) console.log(`
59
+ Pages: published`);
60
+ }
61
+ });
62
+ var run = cmd.execute;
63
+ export {
64
+ run
65
+ };
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ resolveMindName
4
+ } from "./chunk-BTY4WNFE.js";
5
+ import {
6
+ command
7
+ } from "./chunk-TXSA4Q3V.js";
8
+ import "./chunk-O7IGP7ZW.js";
9
+ import {
10
+ daemonFetch
11
+ } from "./chunk-ZX7EAV5J.js";
12
+ import "./chunk-7KJOFUNN.js";
13
+
14
+ // packages/cli/src/commands/mind-wake.ts
15
+ var cmd = command({
16
+ name: "volute clock wake",
17
+ description: "Wake a sleeping mind",
18
+ args: [{ name: "name", description: "Mind to wake (or use --mind / VOLUTE_MIND)" }],
19
+ flags: {
20
+ mind: { type: "string", description: "Mind name" }
21
+ },
22
+ run: async ({ args, flags }) => {
23
+ const name = args.name || resolveMindName(flags);
24
+ if (!name) {
25
+ console.error("Provide a mind name as argument, --mind flag, or VOLUTE_MIND env var");
26
+ process.exit(1);
27
+ }
28
+ const res = await daemonFetch(`/api/minds/${encodeURIComponent(name)}/wake`, {
29
+ method: "POST"
30
+ });
31
+ const data = await res.json();
32
+ if (!res.ok) {
33
+ console.error(data.error || "Failed to wake mind");
34
+ process.exit(1);
35
+ }
36
+ console.log(`${name} is waking up`);
37
+ }
38
+ });
39
+ var run = cmd.execute;
40
+ export {
41
+ run
42
+ };
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
- import "./chunk-K3NQKI34.js";
2
+ import "./chunk-7KJOFUNN.js";
3
3
 
4
4
  // package.json
5
5
  var package_default = {
6
6
  name: "volute",
7
- version: "0.33.0",
7
+ version: "0.35.0",
8
8
  description: "CLI for creating and managing self-modifying AI minds powered by the Claude Agent SDK",
9
9
  type: "module",
10
10
  license: "MIT",
@@ -42,14 +42,16 @@ var package_default = {
42
42
  "packages/extensions/notes/dist/ui/",
43
43
  "packages/extensions/notes/skills/",
44
44
  "packages/extensions/pages/dist/ui/",
45
- "packages/extensions/pages/skills/"
45
+ "packages/extensions/pages/skills/",
46
+ "packages/extensions/plan/dist/ui/",
47
+ "packages/extensions/plan/skills/"
46
48
  ],
47
49
  scripts: {
48
50
  dev: "tsx src/cli.ts",
49
51
  build: "npm run build:ext && tsup && cp -r skills dist/skills && npm run build:web",
50
- "build:ext": "npm run build:ui --workspace=packages/extensions/notes && npm run build:ui --workspace=packages/extensions/pages",
51
- "build:web": "vite build --config src/web/ui/vite.config.ts",
52
- "dev:web": "vite --config src/web/ui/vite.config.ts",
52
+ "build:ext": "npm run build:ext-theme --workspace=packages/ui && cp packages/ui/dist/ext-theme.css packages/daemon/src/web/ui/public/ext-theme.css && npm run build:ui --workspace=packages/extensions/notes && npm run build:ui --workspace=packages/extensions/pages && npm run build:ui --workspace=packages/extensions/plan",
53
+ "build:web": "vite build --config packages/daemon/src/web/ui/vite.config.ts",
54
+ "dev:web": "vite --config packages/daemon/src/web/ui/vite.config.ts",
53
55
  test: "node --import tsx --import ./test/setup.ts --test --test-force-exit --test-concurrency=4 $(find test -name '*.test.ts' ! -name 'daemon-e2e.test.ts' | sort)",
54
56
  "test:e2e": "node --import tsx --import ./test/setup.ts --test --test-force-exit --test-concurrency=1 test/daemon-e2e.test.ts",
55
57
  "test:all": "npm test && npm run test:e2e",
@@ -57,9 +59,9 @@ var package_default = {
57
59
  "lint:fix": "biome check --write src/ test/",
58
60
  format: "biome format --write src/ test/",
59
61
  typecheck: "tsc --noEmit",
60
- "typecheck:templates": "tsc --noEmit -p templates/claude/tsconfig.json && tsc --noEmit -p templates/pi/tsconfig.json",
62
+ "typecheck:templates": "tsx scripts/typecheck-templates.ts",
61
63
  "lint:templates": "biome check templates/",
62
- "typecheck:web": "svelte-check --tsconfig src/web/ui/tsconfig.json",
64
+ "typecheck:web": "svelte-check --tsconfig packages/daemon/src/web/ui/tsconfig.json",
63
65
  prepare: "lefthook install",
64
66
  prepublishOnly: "npm run build",
65
67
  "db:generate": "drizzle-kit generate",
@@ -96,6 +98,7 @@ var package_default = {
96
98
  "drizzle-kit": "^0.31.8",
97
99
  lefthook: "^2.1.0",
98
100
  marked: "^17.0.1",
101
+ sharp: "^0.34.5",
99
102
  svelte: "^5.53.0",
100
103
  tsup: "^8.0.0",
101
104
  tsx: "^4.0.0",
@@ -0,0 +1,91 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ compactTime,
4
+ isCompact
5
+ } from "./chunk-5T5YMX6S.js";
6
+ import {
7
+ resolveMindName
8
+ } from "./chunk-BTY4WNFE.js";
9
+ import {
10
+ command
11
+ } from "./chunk-TXSA4Q3V.js";
12
+ import "./chunk-O7IGP7ZW.js";
13
+ import {
14
+ daemonFetch
15
+ } from "./chunk-ZX7EAV5J.js";
16
+ import "./chunk-7KJOFUNN.js";
17
+
18
+ // packages/cli/src/commands/chat/read.ts
19
+ async function resolveConversationId(mindName, input) {
20
+ if (/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(input)) {
21
+ return input;
22
+ }
23
+ const res = await daemonFetch(`/api/minds/${encodeURIComponent(mindName)}/conversations`);
24
+ if (!res.ok) {
25
+ return input;
26
+ }
27
+ const convs = await res.json();
28
+ const cleaned = input.replace(/^[@#]/, "");
29
+ const lower = cleaned.toLowerCase();
30
+ const channelMatch = convs.find((c) => c.type === "channel" && c.name?.toLowerCase() === lower);
31
+ if (channelMatch) return channelMatch.id;
32
+ const titleMatch = convs.find((c) => c.title?.toLowerCase() === lower);
33
+ if (titleMatch) return titleMatch.id;
34
+ const dmMatch = convs.find(
35
+ (c) => c.type === "dm" && c.title?.toLowerCase().split(/,\s*/).some((name) => name === lower)
36
+ );
37
+ if (dmMatch) return dmMatch.id;
38
+ const prefixMatch = convs.find((c) => c.id.startsWith(input));
39
+ if (prefixMatch) return prefixMatch.id;
40
+ return input;
41
+ }
42
+ var cmd = command({
43
+ name: "volute chat read",
44
+ description: "Read conversation messages",
45
+ args: [
46
+ {
47
+ name: "conversation",
48
+ required: true,
49
+ description: "Conversation ID, channel name, or DM participant"
50
+ }
51
+ ],
52
+ flags: {
53
+ mind: { type: "string", description: "Mind name" },
54
+ limit: { type: "number", description: "Number of messages to show (default 50)" }
55
+ },
56
+ async run({ args, flags }) {
57
+ const mindName = resolveMindName(flags);
58
+ const conversationId = await resolveConversationId(mindName, args.conversation);
59
+ const limit = String(flags.limit ?? 50);
60
+ const res = await daemonFetch(
61
+ `/api/minds/${encodeURIComponent(mindName)}/conversations/${encodeURIComponent(conversationId)}/messages?limit=${limit}`
62
+ );
63
+ if (!res.ok) {
64
+ console.error(`Failed to read conversation: ${res.status}`);
65
+ process.exit(1);
66
+ }
67
+ const data = await res.json();
68
+ if (!Array.isArray(data.items)) {
69
+ console.error("Unexpected response format from server");
70
+ process.exit(1);
71
+ }
72
+ const compact = isCompact();
73
+ for (const msg of data.items) {
74
+ const sender = msg.sender_name ?? msg.role;
75
+ const text = Array.isArray(msg.content) ? msg.content.filter((b) => b.type === "text").map((b) => b.text).join("") : msg.content;
76
+ if (compact) {
77
+ const time = compactTime(msg.created_at);
78
+ console.log(`[${time}] ${sender}: ${text}`);
79
+ } else {
80
+ const time = new Date(
81
+ msg.created_at.endsWith("Z") ? msg.created_at : `${msg.created_at}Z`
82
+ ).toLocaleString();
83
+ console.log(`[${time}] ${sender}: ${text}`);
84
+ }
85
+ }
86
+ }
87
+ });
88
+ var run = cmd.execute;
89
+ export {
90
+ run
91
+ };
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  readStdin
4
- } from "./chunk-6LXAAQ43.js";
5
- import "./chunk-K3NQKI34.js";
4
+ } from "./chunk-33ODGMFZ.js";
5
+ import "./chunk-7KJOFUNN.js";
6
6
  export {
7
7
  readStdin
8
8
  };
@@ -0,0 +1,51 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ promptLine
4
+ } from "./chunk-VHWGEJ4V.js";
5
+ import {
6
+ command
7
+ } from "./chunk-TXSA4Q3V.js";
8
+ import "./chunk-O7IGP7ZW.js";
9
+ import {
10
+ daemonFetch
11
+ } from "./chunk-ZX7EAV5J.js";
12
+ import "./chunk-7KJOFUNN.js";
13
+
14
+ // packages/cli/src/commands/systems/register.ts
15
+ var cmd = command({
16
+ name: "volute systems register",
17
+ description: "Register a system on volute.systems",
18
+ flags: {
19
+ name: { type: "string", description: "System name" }
20
+ },
21
+ run: async ({ flags }) => {
22
+ let name = flags.name;
23
+ if (!name) {
24
+ if (!process.stdin.isTTY) {
25
+ console.error("Usage: volute systems register --name <system-name>");
26
+ process.exit(1);
27
+ }
28
+ name = await promptLine("Choose a system name: ");
29
+ if (!name) {
30
+ console.error("No name provided.");
31
+ process.exit(1);
32
+ }
33
+ }
34
+ const res = await daemonFetch("/api/system/register", {
35
+ method: "POST",
36
+ headers: { "Content-Type": "application/json" },
37
+ body: JSON.stringify({ name })
38
+ });
39
+ if (!res.ok) {
40
+ const body = await res.json().catch(() => ({ error: `HTTP ${res.status}` }));
41
+ console.error(`Registration failed: ${body.error}`);
42
+ process.exit(1);
43
+ }
44
+ const { system } = await res.json();
45
+ console.log(`Registered as "${system}". Credentials saved.`);
46
+ }
47
+ });
48
+ var run = cmd.execute;
49
+ export {
50
+ run
51
+ };
@@ -24,9 +24,9 @@ import {
24
24
  voluteHome,
25
25
  voluteSystemDir,
26
26
  voluteUserHome
27
- } from "./chunk-LRCG2JLP.js";
28
- import "./chunk-RPZZSXV3.js";
29
- import "./chunk-K3NQKI34.js";
27
+ } from "./chunk-BDYXIWA5.js";
28
+ import "./chunk-5N7Y5WAM.js";
29
+ import "./chunk-7KJOFUNN.js";
30
30
  export {
31
31
  addMind,
32
32
  addSpirit,
@@ -0,0 +1,40 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ resolveMindName
4
+ } from "./chunk-BTY4WNFE.js";
5
+ import {
6
+ command
7
+ } from "./chunk-TXSA4Q3V.js";
8
+ import "./chunk-O7IGP7ZW.js";
9
+ import {
10
+ daemonFetch
11
+ } from "./chunk-ZX7EAV5J.js";
12
+ import "./chunk-7KJOFUNN.js";
13
+
14
+ // packages/cli/src/commands/chat/reject.ts
15
+ var cmd = command({
16
+ name: "volute chat reject",
17
+ description: "Reject a pending file transfer",
18
+ args: [{ name: "id", required: true, description: "File transfer ID" }],
19
+ flags: {
20
+ mind: { type: "string", description: "Mind name" }
21
+ },
22
+ async run({ args, flags }) {
23
+ const mind = resolveMindName(flags);
24
+ const res = await daemonFetch(`/api/minds/${encodeURIComponent(mind)}/files/reject`, {
25
+ method: "POST",
26
+ headers: { "Content-Type": "application/json" },
27
+ body: JSON.stringify({ id: args.id })
28
+ });
29
+ if (!res.ok) {
30
+ const data = await res.json();
31
+ console.error(data.error ?? `Failed to reject file: ${res.status}`);
32
+ process.exit(1);
33
+ }
34
+ console.log(`File rejected: ${args.id}`);
35
+ }
36
+ });
37
+ var run = cmd.execute;
38
+ export {
39
+ run
40
+ };
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ resolveMindName
4
+ } from "./chunk-BTY4WNFE.js";
5
+ import {
6
+ command
7
+ } from "./chunk-TXSA4Q3V.js";
8
+ import "./chunk-O7IGP7ZW.js";
9
+ import {
10
+ daemonFetch
11
+ } from "./chunk-ZX7EAV5J.js";
12
+ import {
13
+ getClient,
14
+ urlOf
15
+ } from "./chunk-LOPXTW6H.js";
16
+ import "./chunk-7KJOFUNN.js";
17
+
18
+ // packages/cli/src/commands/restart.ts
19
+ var cmd = command({
20
+ name: "volute mind restart",
21
+ description: "Restart a mind",
22
+ args: [{ name: "name", description: "Mind to restart (or use VOLUTE_MIND)" }],
23
+ flags: {},
24
+ async run({ args }) {
25
+ const name = resolveMindName({ mind: args.name });
26
+ const client = getClient();
27
+ const res = await daemonFetch(
28
+ urlOf(client.api.minds[":name"].restart.$url({ param: { name } })),
29
+ { method: "POST" }
30
+ );
31
+ const data = await res.json();
32
+ if (!res.ok) {
33
+ console.error(data.error || "Failed to restart mind");
34
+ process.exit(1);
35
+ }
36
+ console.log(`${name} restarted on port ${data.port}`);
37
+ }
38
+ });
39
+ var run = cmd.execute;
40
+ export {
41
+ run
42
+ };
@@ -5,12 +5,12 @@ import {
5
5
  isSandboxEnabled,
6
6
  shellEscape,
7
7
  wrapForSandbox
8
- } from "./chunk-GY5HBI7A.js";
9
- import "./chunk-YUIHSKR6.js";
10
- import "./chunk-N432I7QH.js";
11
- import "./chunk-LRCG2JLP.js";
12
- import "./chunk-RPZZSXV3.js";
13
- import "./chunk-K3NQKI34.js";
8
+ } from "./chunk-PWQ2ITYG.js";
9
+ import "./chunk-BKF4WQCY.js";
10
+ import "./chunk-BMZQYACC.js";
11
+ import "./chunk-BDYXIWA5.js";
12
+ import "./chunk-5N7Y5WAM.js";
13
+ import "./chunk-7KJOFUNN.js";
14
14
  export {
15
15
  buildDenyRead,
16
16
  initSandbox,
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ Scheduler,
4
+ getScheduler,
5
+ initScheduler
6
+ } from "./chunk-WJPROOU5.js";
7
+ import "./chunk-5XJYUFZH.js";
8
+ import "./chunk-AOB6GVRM.js";
9
+ import "./chunk-IJHIXLVN.js";
10
+ import "./chunk-QWTR6AWZ.js";
11
+ import "./chunk-N446KRP7.js";
12
+ import "./chunk-QHG4OMZL.js";
13
+ import "./chunk-XRQSAMX2.js";
14
+ import "./chunk-WZRZFFCL.js";
15
+ import "./chunk-CORXD635.js";
16
+ import "./chunk-ZSR72JB3.js";
17
+ import "./chunk-PWQ2ITYG.js";
18
+ import "./chunk-A2ZLHBHG.js";
19
+ import "./chunk-FT5KETXZ.js";
20
+ import "./chunk-BKF4WQCY.js";
21
+ import "./chunk-AN2W47GW.js";
22
+ import "./chunk-VHJRZM2S.js";
23
+ import "./chunk-BMZQYACC.js";
24
+ import "./chunk-BDYXIWA5.js";
25
+ import "./chunk-5N7Y5WAM.js";
26
+ import "./chunk-7KJOFUNN.js";
27
+ export {
28
+ Scheduler,
29
+ getScheduler,
30
+ initScheduler
31
+ };