volute 0.34.0 → 0.36.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 +7 -6
  2. package/dist/accept-ZBDVVCEU.js +42 -0
  3. package/dist/{activity-events-BN7V6KCC.js → activity-events-PWOGSMRL.js} +4 -4
  4. package/dist/{ai-service-PSILB5WD.js → ai-service-GSZWIETO.js} +5 -5
  5. package/dist/{api-client-XUXOB7LI.js → api-client-3A77HMH7.js} +1 -1
  6. package/dist/api.d.ts +1 -5618
  7. package/dist/{archive-C2VEMQOR.js → archive-Y2YEOCGB.js} +3 -3
  8. package/dist/{auth-ZFZXJZDQ.js → auth-YTQME4EV.js} +5 -5
  9. package/dist/bridge-PXIO6PS2.js +206 -0
  10. package/dist/chat-ED7YOGKO.js +51 -0
  11. package/dist/{chunk-6LXAAQ43.js → chunk-33ODGMFZ.js} +1 -1
  12. package/dist/{chunk-G53F3JA4.js → chunk-46DYYHN6.js} +8 -3
  13. package/dist/{chunk-FYCALD4Q.js → chunk-5T5YMX6S.js} +1 -1
  14. package/dist/{chunk-B2BVAIZ4.js → chunk-6F3YNULE.js} +76 -24
  15. package/dist/{chunk-N7BLAHNE.js → chunk-75AJ54GM.js} +16 -5
  16. package/dist/{chunk-4JSR7YO7.js → chunk-7PTQGPJY.js} +29 -13
  17. package/dist/{chunk-XWXBJQBE.js → chunk-B35VNNSS.js} +4 -4
  18. package/dist/{chunk-V45JXOWY.js → chunk-BOLJUV77.js} +4 -4
  19. package/dist/{chunk-NAOW2CLO.js → chunk-BTY4WNFE.js} +1 -1
  20. package/dist/{chunk-OYAKCAVY.js → chunk-CU6OFXMM.js} +1 -1
  21. package/dist/{chunk-7F2SW2KD.js → chunk-DJT5Y4UF.js} +3 -3
  22. package/dist/{chunk-BM474GX6.js → chunk-DMV5P2LU.js} +4 -4
  23. package/dist/{chunk-TAHX36HZ.js → chunk-DQ7VBXAP.js} +2014 -436
  24. package/dist/{chunk-N3DNFPVA.js → chunk-GBDVNPN2.js} +15 -13
  25. package/dist/{chunk-E5C7OWZ2.js → chunk-IIWF2IPD.js} +150 -190
  26. package/dist/{chunk-PVY5W6QN.js → chunk-KAB6UGOL.js} +2 -2
  27. package/dist/{chunk-BDK73LK6.js → chunk-L72WYMF7.js} +2 -2
  28. package/dist/{chunk-G6BSYHPK.js → chunk-LGNUFVMR.js} +1 -1
  29. package/dist/{chunk-4RQBJWQX.js → chunk-LOPXTW6H.js} +1 -1
  30. package/dist/{chunk-BFWHBQK4.js → chunk-M5RYAA5I.js} +3 -3
  31. package/dist/{chunk-V6ZCNULL.js → chunk-N2AUHW4C.js} +37 -28
  32. package/dist/{chunk-6OWJXUAR.js → chunk-NUX47Y2V.js} +19 -4
  33. package/dist/{chunk-D424ZQGI.js → chunk-O7IGP7ZW.js} +11 -3
  34. package/dist/{chunk-U5BTYSAL.js → chunk-PJ4IPTIN.js} +2 -2
  35. package/dist/{chunk-BTWAGDV5.js → chunk-PY557GDR.js} +3 -3
  36. package/dist/{chunk-47ZPNLF4.js → chunk-PZYJBOQP.js} +8 -137
  37. package/dist/chunk-QHG4OMZL.js +145 -0
  38. package/dist/chunk-RG5TOL4O.js +18 -0
  39. package/dist/{chunk-6WAWMWR5.js → chunk-SWW6AUVW.js} +2 -2
  40. package/dist/{chunk-YUIHSKR6.js → chunk-T2TP6ZC6.js} +20 -8
  41. package/dist/chunk-TWAN7ZNO.js +164 -0
  42. package/dist/chunk-TXSA4Q3V.js +116 -0
  43. package/dist/{chunk-KTLFDYPT.js → chunk-UI7RPV2B.js} +1 -1
  44. package/dist/{chunk-SSI47XP2.js → chunk-VHWGEJ4V.js} +1 -1
  45. package/dist/{chunk-IS7WJ56Q.js → chunk-X2J7QUFH.js} +3 -3
  46. package/dist/{chunk-M3K5AARV.js → chunk-YDBAY3NA.js} +2 -2
  47. package/dist/{chunk-MLOQKQNB.js → chunk-YTWZORJN.js} +2 -2
  48. package/dist/{chunk-2IOP6PHB.js → chunk-ZTVKQOU7.js} +2 -2
  49. package/dist/{chunk-PLDWHR4D.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-TG3TIX5H.js → cloud-sync-BOCZSDIA.js} +20 -22
  53. package/dist/config-UTS7QULS.js +76 -0
  54. package/dist/connectors/discord-bridge.js +3 -3
  55. package/dist/connectors/slack-bridge.js +3 -3
  56. package/dist/connectors/telegram-bridge.js +3 -3
  57. package/dist/{conversations-HL2JP5GI.js → conversations-HH3CJD4E.js} +15 -9
  58. package/dist/create-5BPOOJAN.js +75 -0
  59. package/dist/create-QBEPSD2Z.js +50 -0
  60. package/dist/daemon-client-RVIKXGFQ.js +12 -0
  61. package/dist/daemon-restart-SIR3UR4B.js +65 -0
  62. package/dist/daemon.js +1186 -1989
  63. package/dist/{db-PLEDCBHZ.js → db-BDMH4SZ2.js} +7 -3
  64. package/dist/{db-RYX3SS2W.js → db-URORGSXQ.js} +2 -2
  65. package/dist/delete-L5PAVDGQ.js +42 -0
  66. package/dist/delivery-manager-WTGIPBGY.js +30 -0
  67. package/dist/{delivery-router-D5ELDMS2.js → delivery-router-VSULHXNH.js} +4 -4
  68. package/dist/down-DGGLZ5TA.js +17 -0
  69. package/dist/env-E4XHO2BI.js +223 -0
  70. package/dist/{exec-DVLXKRIO.js → exec-X3C6ZZTQ.js} +4 -4
  71. package/dist/export-HTFOHOKL.js +113 -0
  72. package/dist/{extension-PM42QCID.js → extension-AKZ46YSL.js} +46 -35
  73. package/dist/extensions-OOSFVH7U.js +50 -0
  74. package/dist/files-H2YLRD37.js +53 -0
  75. package/dist/import-OL5BZX7S.js +143 -0
  76. package/dist/{isolation-62MKDZN3.js → isolation-N74RWOUX.js} +3 -3
  77. package/dist/join-DF5XSJAC.js +67 -0
  78. package/dist/list-GJ4RUQQT.js +59 -0
  79. package/dist/login-GOTAYLXP.js +51 -0
  80. package/dist/login-JXRVMBRB.js +60 -0
  81. package/dist/logout-6KIA74EV.js +29 -0
  82. package/dist/logout-FW243JBU.js +50 -0
  83. package/dist/message-delivery-YORUXKDQ.js +40 -0
  84. package/dist/mind-6VJJHF65.js +97 -0
  85. package/dist/{mind-activity-tracker-2ACNHA7B.js → mind-activity-tracker-66UVYIFW.js} +5 -5
  86. package/dist/mind-history-MII2SK7F.js +342 -0
  87. package/dist/mind-list-GEWHWAL4.js +38 -0
  88. package/dist/mind-manager-TJ2SUPRX.js +30 -0
  89. package/dist/mind-profile-DCBDVF5B.js +53 -0
  90. package/dist/mind-service-E7FM2WZF.js +36 -0
  91. package/dist/mind-sleep-ITCF6OQA.js +47 -0
  92. package/dist/mind-status-X4SX3YUG.js +65 -0
  93. package/dist/mind-wake-KXMKMGWX.js +42 -0
  94. package/dist/{package-V2WHWVG6.js → package-3W2MEXHB.js} +5 -5
  95. package/dist/read-ZUDG4JWU.js +91 -0
  96. package/dist/{read-stdin-PIRM6A2Y.js → read-stdin-3X5VYKNS.js} +1 -1
  97. package/dist/register-SB7NXCOE.js +51 -0
  98. package/dist/{registry-UYV5S6QT.js → registry-YPHK534W.js} +2 -2
  99. package/dist/reject-MUR2KWJ4.js +40 -0
  100. package/dist/restart-5EGG4JXU.js +42 -0
  101. package/dist/{sandbox-SI5HMBP3.js → sandbox-LP6YRAXS.js} +5 -5
  102. package/dist/scheduler-FRJ5DK24.js +30 -0
  103. package/dist/{schema-ETMABTW4.js → schema-MISD3JFG.js} +3 -1
  104. package/dist/{seed-WNGI6PNW.js → seed-CEC4RC23.js} +2 -2
  105. package/dist/seed-check-KJNTL72M.js +35 -0
  106. package/dist/seed-cmd-WTTG7SRQ.js +30 -0
  107. package/dist/seed-create-M6RCC6RP.js +113 -0
  108. package/dist/seed-sprout-ZKCHFJKH.js +148 -0
  109. package/dist/send-LXUT2GGR.js +409 -0
  110. package/dist/service-M6N3RUYU.js +121 -0
  111. package/dist/{setup-Z3DEVWV7.js → setup-PJOF5UV5.js} +153 -127
  112. package/dist/{setup-GGMKENLN.js → setup-PMJHCZQX.js} +5 -3
  113. package/dist/skill-TAAKEYBV.js +389 -0
  114. package/dist/skills/tending/SKILL.md +52 -0
  115. package/dist/skills/volute-mind/SKILL.md +3 -7
  116. package/dist/skills/volute-mind/references/extensions.md +8 -11
  117. package/dist/{skills-Q6VZ2UGD.js → skills-2PTRTBQP.js} +7 -7
  118. package/dist/sleep-manager-WAZWMFJT.js +34 -0
  119. package/dist/spirit-6KVDIROQ.js +24 -0
  120. package/dist/split-AWVOYOPZ.js +64 -0
  121. package/dist/{sprout-E3HJIV2Z.js → sprout-WX2FFYLP.js} +2 -2
  122. package/dist/src-FQE4BHRG.js +617 -0
  123. package/dist/src-GW6FP6VL.js +425 -0
  124. package/dist/src-QEOLMAYC.js +2133 -0
  125. package/dist/start-3UXOPXQG.js +39 -0
  126. package/dist/status-3IVSLJDN.js +125 -0
  127. package/dist/stop-3XYIBGFM.js +41 -0
  128. package/dist/system-chat-2IFS5HCX.js +34 -0
  129. package/dist/systems-O43WGQY6.js +52 -0
  130. package/dist/{tailscale-ZEUK7GKZ.js → tailscale-DZU4WM3E.js} +4 -4
  131. package/dist/{template-hash-EJRTKE36.js → template-hash-6ITI3WC4.js} +2 -2
  132. package/dist/up-4SCIUIMG.js +19 -0
  133. package/dist/update-RIQYUPVN.js +225 -0
  134. package/dist/{update-check-X3YG4WVP.js → update-check-4TIJKVGD.js} +3 -3
  135. package/dist/upgrade-ZMDGC7M2.js +74 -0
  136. package/dist/variant-QWL2WSRI.js +62 -0
  137. package/dist/{version-notify-YCH4UVQ2.js → version-notify-UXSHBZ35.js} +27 -27
  138. package/dist/{volute-config-WBKYJGYQ.js → volute-config-V7UFFBG3.js} +1 -1
  139. package/dist/web-assets/assets/index-C-eYso8Y.js +75 -0
  140. package/dist/web-assets/assets/index-CCv_fSte.css +1 -0
  141. package/dist/web-assets/index.html +2 -2
  142. package/dist/web-assets/sw.js +117 -0
  143. package/drizzle/0006_channels.sql +17 -0
  144. package/drizzle/0007_drop_conversation_name_title.sql +11 -0
  145. package/drizzle/0008_performance_indexes.sql +6 -0
  146. package/drizzle/meta/0006_snapshot.json +7 -0
  147. package/drizzle/meta/0007_snapshot.json +7 -0
  148. package/drizzle/meta/_journal.json +21 -0
  149. package/package.json +5 -5
  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/templates/_base/home/.config/routes.json +2 -2
  154. package/templates/_base/home/VOLUTE.md +1 -2
  155. package/templates/_base/src/lib/auto-commit.ts +8 -8
  156. package/templates/_base/src/lib/format-prefix.ts +1 -7
  157. package/templates/_base/src/lib/volute-server.ts +6 -0
  158. package/templates/claude/.init/.config/routes.json +2 -2
  159. package/templates/claude/src/agent.ts +8 -1
  160. package/templates/codex/.init/.config/routes.json +2 -2
  161. package/templates/pi/.init/.config/routes.json +2 -2
  162. package/dist/accept-TW6V4WI4.js +0 -42
  163. package/dist/bridge-O753D5F4.js +0 -207
  164. package/dist/chat-BHYX7DJ4.js +0 -68
  165. package/dist/chunk-47XDEWWV.js +0 -156
  166. package/dist/chunk-CVL5IGIR.js +0 -2084
  167. package/dist/chunk-PB65JZK2.js +0 -85
  168. package/dist/clock-3X4DSC2N.js +0 -281
  169. package/dist/config-OROA5DUA.js +0 -72
  170. package/dist/create-3SEKKI6P.js +0 -71
  171. package/dist/create-UOSOQ2HN.js +0 -44
  172. package/dist/daemon-client-WOAQXXBM.js +0 -12
  173. package/dist/daemon-restart-5ABHNXJZ.js +0 -52
  174. package/dist/delete-KYOVWR23.js +0 -35
  175. package/dist/delivery-manager-2BR5NZKF.js +0 -32
  176. package/dist/down-QVFN4UPK.js +0 -15
  177. package/dist/env-R34DT7XL.js +0 -195
  178. package/dist/export-6ZXAXATG.js +0 -112
  179. package/dist/extensions-BBGVL5JC.js +0 -38
  180. package/dist/files-VQV2VZQO.js +0 -47
  181. package/dist/import-MK2I2T6F.js +0 -23
  182. package/dist/join-DGYHTJUH.js +0 -66
  183. package/dist/list-C644WTHV.js +0 -49
  184. package/dist/login-IIGEQPHL.js +0 -47
  185. package/dist/login-KZQLMAWE.js +0 -47
  186. package/dist/logout-AGTZVRGP.js +0 -40
  187. package/dist/logout-KD6GXIJJ.js +0 -21
  188. package/dist/message-delivery-V3R6NXJP.js +0 -42
  189. package/dist/mind-BI4EPBVZ.js +0 -108
  190. package/dist/mind-history-WOYFLQAI.js +0 -264
  191. package/dist/mind-list-6VPM7GUQ.js +0 -30
  192. package/dist/mind-manager-MWW3BTS4.js +0 -32
  193. package/dist/mind-profile-WPG42U5Y.js +0 -47
  194. package/dist/mind-service-VIKZJK2M.js +0 -38
  195. package/dist/mind-sleep-XDISJY74.js +0 -42
  196. package/dist/mind-status-7FTZWPZF.js +0 -56
  197. package/dist/mind-wake-KIIKEI3A.js +0 -37
  198. package/dist/read-H5C26YO7.js +0 -85
  199. package/dist/register-J27WP33N.js +0 -47
  200. package/dist/reject-OEANJYIA.js +0 -40
  201. package/dist/restart-V5EGYBJG.js +0 -33
  202. package/dist/scheduler-AGG3L2FO.js +0 -32
  203. package/dist/seed-check-PXTH7YXS.js +0 -32
  204. package/dist/seed-cmd-VENFTGS3.js +0 -36
  205. package/dist/seed-create-663ALOKH.js +0 -112
  206. package/dist/seed-sprout-EH3AGKAI.js +0 -132
  207. package/dist/send-7FUUUZZH.js +0 -386
  208. package/dist/skill-DKNYJS4P.js +0 -362
  209. package/dist/skills/shared-files/SKILL.md +0 -44
  210. package/dist/skills/shared-files/scripts/merge.ts +0 -72
  211. package/dist/skills/shared-files/scripts/pull.ts +0 -52
  212. package/dist/sleep-manager-BJK2ROPX.js +0 -36
  213. package/dist/spirit-4JP4TY4C.js +0 -23
  214. package/dist/split-3YPMS2CL.js +0 -63
  215. package/dist/start-W3TPKX4D.js +0 -33
  216. package/dist/status-4OVFXFEJ.js +0 -115
  217. package/dist/stop-GTT6YWYO.js +0 -32
  218. package/dist/system-channel-DXD2JBOU.js +0 -36
  219. package/dist/system-chat-TYLOL7SX.js +0 -36
  220. package/dist/systems-AYLO727G.js +0 -61
  221. package/dist/up-PA7F2CXE.js +0 -18
  222. package/dist/update-HG4LCUSG.js +0 -215
  223. package/dist/upgrade-YGNIDICG.js +0 -67
  224. package/dist/variant-MZUMRTQO.js +0 -41
  225. package/dist/web-assets/assets/index-DiiwC-CZ.css +0 -1
  226. package/dist/web-assets/assets/index-d6y5b9Ij.js +0 -75
  227. package/packages/extensions/pages/dist/ui/assets/index-tLTROSk5.js +0 -2
@@ -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(
31
+ (c) => c.type === "channel" && c.channel_name?.toLowerCase() === lower
32
+ );
33
+ if (channelMatch) return channelMatch.id;
34
+ const dmMatch = convs.find(
35
+ (c) => c.type === "dm" && c.participants?.some((p) => p.username.toLowerCase() === lower && p.username !== mindName)
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,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  readStdin
4
- } from "./chunk-6LXAAQ43.js";
4
+ } from "./chunk-33ODGMFZ.js";
5
5
  import "./chunk-7KJOFUNN.js";
6
6
  export {
7
7
  readStdin
@@ -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,8 +24,8 @@ import {
24
24
  voluteHome,
25
25
  voluteSystemDir,
26
26
  voluteUserHome
27
- } from "./chunk-N7BLAHNE.js";
28
- import "./chunk-4JSR7YO7.js";
27
+ } from "./chunk-75AJ54GM.js";
28
+ import "./chunk-7PTQGPJY.js";
29
29
  import "./chunk-7KJOFUNN.js";
30
30
  export {
31
31
  addMind,
@@ -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,11 +5,11 @@ import {
5
5
  isSandboxEnabled,
6
6
  shellEscape,
7
7
  wrapForSandbox
8
- } from "./chunk-V45JXOWY.js";
9
- import "./chunk-YUIHSKR6.js";
10
- import "./chunk-6OWJXUAR.js";
11
- import "./chunk-N7BLAHNE.js";
12
- import "./chunk-4JSR7YO7.js";
8
+ } from "./chunk-BOLJUV77.js";
9
+ import "./chunk-T2TP6ZC6.js";
10
+ import "./chunk-NUX47Y2V.js";
11
+ import "./chunk-75AJ54GM.js";
12
+ import "./chunk-7PTQGPJY.js";
13
13
  import "./chunk-7KJOFUNN.js";
14
14
  export {
15
15
  buildDenyRead,
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ Scheduler,
4
+ getScheduler,
5
+ initScheduler
6
+ } from "./chunk-DQ7VBXAP.js";
7
+ import "./chunk-6F3YNULE.js";
8
+ import "./chunk-46DYYHN6.js";
9
+ import "./chunk-GBDVNPN2.js";
10
+ import "./chunk-PY557GDR.js";
11
+ import "./chunk-DMV5P2LU.js";
12
+ import "./chunk-IIWF2IPD.js";
13
+ import "./chunk-B35VNNSS.js";
14
+ import "./chunk-CU6OFXMM.js";
15
+ import "./chunk-BOLJUV77.js";
16
+ import "./chunk-X2J7QUFH.js";
17
+ import "./chunk-YDBAY3NA.js";
18
+ import "./chunk-M5RYAA5I.js";
19
+ import "./chunk-T2TP6ZC6.js";
20
+ import "./chunk-PJ4IPTIN.js";
21
+ import "./chunk-L72WYMF7.js";
22
+ import "./chunk-NUX47Y2V.js";
23
+ import "./chunk-75AJ54GM.js";
24
+ import "./chunk-7PTQGPJY.js";
25
+ import "./chunk-7KJOFUNN.js";
26
+ export {
27
+ Scheduler,
28
+ getScheduler,
29
+ initScheduler
30
+ };
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  activity,
4
+ channels,
4
5
  conversationParticipants,
5
6
  conversationReads,
6
7
  conversations,
@@ -14,10 +15,11 @@ import {
14
15
  systemPrompts,
15
16
  turns,
16
17
  users
17
- } from "./chunk-4JSR7YO7.js";
18
+ } from "./chunk-7PTQGPJY.js";
18
19
  import "./chunk-7KJOFUNN.js";
19
20
  export {
20
21
  activity,
22
+ channels,
21
23
  conversationParticipants,
22
24
  conversationReads,
23
25
  conversations,
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import "./chunk-7KJOFUNN.js";
3
3
 
4
- // src/commands/seed.ts
4
+ // packages/cli/src/commands/seed.ts
5
5
  async function run(args) {
6
6
  console.error("Note: `volute mind seed` is now `volute seed create`");
7
- await import("./seed-create-663ALOKH.js").then((m) => m.run(args));
7
+ await import("./seed-create-M6RCC6RP.js").then((m) => m.run(args));
8
8
  }
9
9
  export {
10
10
  run
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ command
4
+ } from "./chunk-TXSA4Q3V.js";
5
+ import "./chunk-O7IGP7ZW.js";
6
+ import "./chunk-7KJOFUNN.js";
7
+
8
+ // packages/cli/src/commands/seed-check.ts
9
+ var cmd = command({
10
+ name: "volute seed check",
11
+ description: "Check seed readiness",
12
+ args: [{ name: "name", required: true, description: "Seed mind to check" }],
13
+ flags: {},
14
+ run: async ({ args }) => {
15
+ const name = args.name;
16
+ const { daemonFetch } = await import("./daemon-client-RVIKXGFQ.js");
17
+ const res = await daemonFetch(`/api/minds/${encodeURIComponent(name)}/seed-check`);
18
+ if (!res.ok) {
19
+ if (res.status === 404) {
20
+ console.log(`Seed "${name}" not found \u2014 it may have been deleted or already sprouted.`);
21
+ } else {
22
+ console.error(`seed check failed for ${name}: HTTP ${res.status}`);
23
+ }
24
+ return;
25
+ }
26
+ const data = await res.json();
27
+ if (data.output) {
28
+ console.log(data.output);
29
+ }
30
+ }
31
+ });
32
+ var run = cmd.execute;
33
+ export {
34
+ run
35
+ };
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ subcommands
4
+ } from "./chunk-TXSA4Q3V.js";
5
+ import "./chunk-O7IGP7ZW.js";
6
+ import "./chunk-7KJOFUNN.js";
7
+
8
+ // packages/cli/src/commands/seed-cmd.ts
9
+ var cmd = subcommands({
10
+ name: "volute seed",
11
+ description: "Plant and grow new minds",
12
+ commands: {
13
+ create: {
14
+ description: "Plant a new seed",
15
+ run: (args) => import("./seed-create-M6RCC6RP.js").then((m) => m.run(args))
16
+ },
17
+ sprout: {
18
+ description: "Complete orientation and become a full mind",
19
+ run: (args) => import("./seed-sprout-ZKCHFJKH.js").then((m) => m.run(args))
20
+ },
21
+ check: {
22
+ description: "Check seed readiness",
23
+ run: (args) => import("./seed-check-KJNTL72M.js").then((m) => m.run(args))
24
+ }
25
+ }
26
+ });
27
+ var run = cmd.execute;
28
+ export {
29
+ run
30
+ };
@@ -0,0 +1,113 @@
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 "./chunk-7KJOFUNN.js";
10
+
11
+ // packages/cli/src/commands/seed-create.ts
12
+ async function chooseModel(daemonFetch) {
13
+ const res = await daemonFetch("/api/system/ai/models");
14
+ if (!res.ok) {
15
+ console.error(`Failed to fetch AI models (HTTP ${res.status}). Is the daemon running?`);
16
+ process.exit(1);
17
+ }
18
+ const models = await res.json();
19
+ const enabled = models.filter((m) => m.enabled);
20
+ if (enabled.length === 0) return void 0;
21
+ console.log("\nAvailable models:");
22
+ for (let i = 0; i < enabled.length; i++) {
23
+ console.log(` ${i + 1}) ${enabled[i].name} (${enabled[i].provider})`);
24
+ }
25
+ const answer = await promptLine(`
26
+ Choose a model [1-${enabled.length}]: `);
27
+ const idx = parseInt(answer, 10) - 1;
28
+ if (Number.isNaN(idx) || idx < 0 || idx >= enabled.length) {
29
+ console.error("Invalid selection");
30
+ process.exit(1);
31
+ }
32
+ const chosen = enabled[idx];
33
+ return `${chosen.provider}:${chosen.id}`;
34
+ }
35
+ var cmd = command({
36
+ name: "volute seed create",
37
+ description: "Plant a new seed mind",
38
+ args: [{ name: "name", required: true, description: "Name for the seed mind" }],
39
+ flags: {
40
+ template: { type: "string", description: "Template to use" },
41
+ model: { type: "string", description: "AI model to use" },
42
+ description: { type: "string", description: "Description of the seed" },
43
+ skills: { type: "string", description: "Skills to install (comma-separated, or 'none')" },
44
+ "created-by": { type: "string", description: "Username of creator" }
45
+ },
46
+ run: async ({ args, flags }) => {
47
+ const name = args.name;
48
+ const skills = flags.skills === "none" ? [] : flags.skills ? flags.skills.split(",") : void 0;
49
+ const createdBy = flags["created-by"];
50
+ const { daemonFetch } = await import("./daemon-client-RVIKXGFQ.js");
51
+ const { getClient, urlOf } = await import("./api-client-3A77HMH7.js");
52
+ const client = getClient();
53
+ let model = flags.model;
54
+ let template = flags.template;
55
+ if (!template) {
56
+ const { resolveTemplate } = await import("./ai-service-GSZWIETO.js");
57
+ template = resolveTemplate(model);
58
+ }
59
+ if (template !== "claude" && !model) {
60
+ if (process.env.VOLUTE_MIND || !process.stdin.isTTY) {
61
+ const { getSpiritModel } = await import("./spirit-6KVDIROQ.js");
62
+ const { qualifyModelId } = await import("./ai-service-GSZWIETO.js");
63
+ const spiritModel = getSpiritModel();
64
+ if (spiritModel) {
65
+ model = template === "pi" ? qualifyModelId(spiritModel) : spiritModel;
66
+ }
67
+ }
68
+ if (!model) {
69
+ model = await chooseModel(daemonFetch);
70
+ if (!model) {
71
+ console.error("No AI models configured. Set up providers in the web dashboard first.");
72
+ process.exit(1);
73
+ }
74
+ }
75
+ }
76
+ const createRes = await daemonFetch(urlOf(client.api.minds.$url()), {
77
+ method: "POST",
78
+ headers: { "Content-Type": "application/json" },
79
+ body: JSON.stringify({
80
+ name,
81
+ template,
82
+ stage: "seed",
83
+ description: flags.description,
84
+ model,
85
+ skills,
86
+ createdBy
87
+ })
88
+ });
89
+ const createData = await createRes.json();
90
+ if (!createRes.ok) {
91
+ console.error(createData.error ?? "Failed to create mind");
92
+ process.exit(1);
93
+ }
94
+ const startRes = await daemonFetch(
95
+ urlOf(client.api.minds[":name"].start.$url({ param: { name } })),
96
+ { method: "POST" }
97
+ );
98
+ if (!startRes.ok) {
99
+ const startData = await startRes.json();
100
+ console.error(startData.error ?? "Failed to start mind");
101
+ process.exit(1);
102
+ }
103
+ console.log(`
104
+ Seeded mind: ${name} (port ${createData.port})`);
105
+ console.log(`
106
+ Talk to your new mind:`);
107
+ console.log(` volute chat send @${name} "hello"`);
108
+ }
109
+ });
110
+ var run = cmd.execute;
111
+ export {
112
+ run
113
+ };
@@ -0,0 +1,148 @@
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 {
10
+ getStandardSkillsWithExtensions
11
+ } from "./chunk-GBDVNPN2.js";
12
+ import "./chunk-T2TP6ZC6.js";
13
+ import "./chunk-PJ4IPTIN.js";
14
+ import "./chunk-L72WYMF7.js";
15
+ import "./chunk-NUX47Y2V.js";
16
+ import {
17
+ mindDir
18
+ } from "./chunk-75AJ54GM.js";
19
+ import "./chunk-7PTQGPJY.js";
20
+ import "./chunk-7KJOFUNN.js";
21
+
22
+ // packages/cli/src/commands/seed-sprout.ts
23
+ import { existsSync, readFileSync } from "fs";
24
+ import { resolve } from "path";
25
+ var ORIENTATION_MARKER = "You don't have a soul yet";
26
+ var cmd = command({
27
+ name: "volute seed sprout",
28
+ description: "Complete orientation and become a full mind (run by the seed itself)",
29
+ flags: {},
30
+ run: async () => {
31
+ const mindName = process.env.VOLUTE_MIND;
32
+ if (!mindName) {
33
+ console.error("volute seed sprout must be run by a mind (VOLUTE_MIND not set)");
34
+ process.exit(1);
35
+ }
36
+ const mindRes = await daemonFetch(`/api/minds/${encodeURIComponent(mindName)}`);
37
+ if (!mindRes.ok) {
38
+ console.error(`Mind "${mindName}" not found`);
39
+ process.exit(1);
40
+ }
41
+ const mind = await mindRes.json();
42
+ if (mind.stage !== "seed") {
43
+ console.error(`${mindName} is not a seed \u2014 already at stage "${mind.stage}"`);
44
+ process.exit(1);
45
+ }
46
+ const dir = mindDir(mindName);
47
+ const soulPath = resolve(dir, "home/SOUL.md");
48
+ const memoryPath = resolve(dir, "home/MEMORY.md");
49
+ if (!existsSync(soulPath)) {
50
+ console.error("Write your SOUL.md before sprouting.");
51
+ process.exit(1);
52
+ }
53
+ const soul = readFileSync(soulPath, "utf-8");
54
+ if (soul.includes(ORIENTATION_MARKER)) {
55
+ console.error(
56
+ "Your SOUL.md still contains the orientation template. Write your own identity first."
57
+ );
58
+ process.exit(1);
59
+ }
60
+ if (!existsSync(memoryPath)) {
61
+ console.error("Write your MEMORY.md before sprouting.");
62
+ process.exit(1);
63
+ }
64
+ const { isImagegenEnabled } = await import("./setup-PMJHCZQX.js");
65
+ if (isImagegenEnabled()) {
66
+ const { readVoluteConfig } = await import("./volute-config-V7UFFBG3.js");
67
+ const config = readVoluteConfig(dir);
68
+ const avatarPath = config?.profile?.avatar;
69
+ if (!avatarPath || !existsSync(resolve(dir, "home", avatarPath))) {
70
+ console.error(
71
+ "Generate an avatar before sprouting. Use `imagegen generate` to create one, then `volute mind profile --avatar <path>` to set it."
72
+ );
73
+ process.exit(1);
74
+ }
75
+ }
76
+ const { getClient, urlOf } = await import("./api-client-3A77HMH7.js");
77
+ const { mindSkillsDir } = await import("./skills-2PTRTBQP.js");
78
+ const client = getClient();
79
+ const failedSkills = [];
80
+ for (const skillId of getStandardSkillsWithExtensions()) {
81
+ const skillDir = resolve(mindSkillsDir(dir), skillId);
82
+ if (!existsSync(skillDir)) {
83
+ const installRes = await daemonFetch(
84
+ urlOf(client.api.minds[":name"].skills.install.$url({ param: { name: mindName } })),
85
+ {
86
+ method: "POST",
87
+ headers: { "Content-Type": "application/json" },
88
+ body: JSON.stringify({ skillId })
89
+ }
90
+ );
91
+ if (!installRes.ok) {
92
+ const data = await installRes.json().catch(() => ({ error: `HTTP ${installRes.status}` }));
93
+ console.error(
94
+ `Failed to install skill ${skillId}: ${data.error}`
95
+ );
96
+ failedSkills.push(skillId);
97
+ }
98
+ }
99
+ }
100
+ const orientationDir = resolve(mindSkillsDir(dir), "orientation");
101
+ if (existsSync(orientationDir)) {
102
+ const delRes = await daemonFetch(
103
+ urlOf(
104
+ client.api.minds[":name"].skills[":skill"].$url({
105
+ param: { name: mindName, skill: "orientation" }
106
+ })
107
+ ),
108
+ { method: "DELETE" }
109
+ );
110
+ if (!delRes.ok) {
111
+ const data = await delRes.json().catch(() => ({ error: `HTTP ${delRes.status}` }));
112
+ console.error(
113
+ `Failed to uninstall orientation skill: ${data.error}`
114
+ );
115
+ }
116
+ }
117
+ if (failedSkills.length > 0) {
118
+ console.error(`Warning: failed to install skills: ${failedSkills.join(", ")}`);
119
+ }
120
+ const sproutRes = await daemonFetch(
121
+ urlOf(client.api.minds[":name"].sprout.$url({ param: { name: mindName } })),
122
+ { method: "POST" }
123
+ );
124
+ if (!sproutRes.ok) {
125
+ const data = await sproutRes.json().catch(() => ({ error: `HTTP ${sproutRes.status}` }));
126
+ console.error(data.error ?? "Failed to update stage");
127
+ process.exit(1);
128
+ }
129
+ const res = await daemonFetch(
130
+ urlOf(client.api.minds[":name"].restart.$url({ param: { name: mindName } })),
131
+ {
132
+ method: "POST",
133
+ headers: { "Content-Type": "application/json" },
134
+ body: JSON.stringify({ context: { type: "sprouted" } })
135
+ }
136
+ );
137
+ if (!res.ok) {
138
+ const data = await res.json().catch(() => ({ error: `HTTP ${res.status}` }));
139
+ console.error(data.error ?? "Failed to restart after sprouting");
140
+ process.exit(1);
141
+ }
142
+ console.log("Sprouted! You now have full mind capabilities.");
143
+ }
144
+ });
145
+ var run = cmd.execute;
146
+ export {
147
+ run
148
+ };