volute 0.34.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 (209) 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-ZW4SDL2C.js} +4 -4
  4. package/dist/{ai-service-PSILB5WD.js → ai-service-LURBEDDB.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-ESU2FUN4.js} +3 -3
  8. package/dist/{auth-ZFZXJZDQ.js → auth-WX4TESEI.js} +5 -5
  9. package/dist/bridge-PXIO6PS2.js +206 -0
  10. package/dist/chat-QXAJF3FU.js +51 -0
  11. package/dist/{chunk-7F2SW2KD.js → chunk-2TGZJFAT.js} +3 -3
  12. package/dist/{chunk-6LXAAQ43.js → chunk-33ODGMFZ.js} +1 -1
  13. package/dist/{chunk-4JSR7YO7.js → chunk-5N7Y5WAM.js} +1 -1
  14. package/dist/{chunk-FYCALD4Q.js → chunk-5T5YMX6S.js} +1 -1
  15. package/dist/{chunk-B2BVAIZ4.js → chunk-5XJYUFZH.js} +21 -15
  16. package/dist/{chunk-M3K5AARV.js → chunk-A2ZLHBHG.js} +2 -2
  17. package/dist/{chunk-U5BTYSAL.js → chunk-AN2W47GW.js} +2 -2
  18. package/dist/{chunk-G53F3JA4.js → chunk-AOB6GVRM.js} +1 -1
  19. package/dist/{chunk-N7BLAHNE.js → chunk-BDYXIWA5.js} +5 -5
  20. package/dist/{chunk-YUIHSKR6.js → chunk-BKF4WQCY.js} +2 -2
  21. package/dist/{chunk-6OWJXUAR.js → chunk-BMZQYACC.js} +2 -2
  22. package/dist/{chunk-NAOW2CLO.js → chunk-BTY4WNFE.js} +1 -1
  23. package/dist/{chunk-MLOQKQNB.js → chunk-BV65KRHM.js} +2 -2
  24. package/dist/{chunk-XWXBJQBE.js → chunk-CORXD635.js} +4 -4
  25. package/dist/{chunk-PVY5W6QN.js → chunk-F7ZNLYKZ.js} +2 -2
  26. package/dist/{chunk-BFWHBQK4.js → chunk-FT5KETXZ.js} +3 -3
  27. package/dist/{chunk-N3DNFPVA.js → chunk-IJHIXLVN.js} +8 -8
  28. package/dist/{chunk-V6ZCNULL.js → chunk-J6CJQDWI.js} +37 -28
  29. package/dist/{chunk-4RQBJWQX.js → chunk-LOPXTW6H.js} +1 -1
  30. package/dist/{chunk-47ZPNLF4.js → chunk-MDJGMOSD.js} +8 -137
  31. package/dist/{chunk-BTWAGDV5.js → chunk-N446KRP7.js} +3 -3
  32. package/dist/{chunk-6WAWMWR5.js → chunk-N5LMGYXX.js} +2 -2
  33. package/dist/{chunk-G6BSYHPK.js → chunk-NJK5SDGR.js} +1 -1
  34. package/dist/{chunk-D424ZQGI.js → chunk-O7IGP7ZW.js} +11 -3
  35. package/dist/{chunk-2IOP6PHB.js → chunk-OTC67N2Z.js} +2 -2
  36. package/dist/{chunk-V45JXOWY.js → chunk-PWQ2ITYG.js} +4 -4
  37. package/dist/{chunk-KTLFDYPT.js → chunk-QCH6K235.js} +1 -1
  38. package/dist/chunk-QHG4OMZL.js +145 -0
  39. package/dist/{chunk-IS7WJ56Q.js → chunk-QWTR6AWZ.js} +3 -3
  40. package/dist/chunk-TXSA4Q3V.js +116 -0
  41. package/dist/{chunk-BDK73LK6.js → chunk-VHJRZM2S.js} +2 -2
  42. package/dist/{chunk-SSI47XP2.js → chunk-VHWGEJ4V.js} +1 -1
  43. package/dist/chunk-VY3RB2V7.js +164 -0
  44. package/dist/chunk-WJPROOU5.js +8314 -0
  45. package/dist/{chunk-E5C7OWZ2.js → chunk-WZRZFFCL.js} +8 -8
  46. package/dist/{chunk-BM474GX6.js → chunk-XRQSAMX2.js} +4 -4
  47. package/dist/{chunk-OYAKCAVY.js → chunk-ZSR72JB3.js} +1 -1
  48. package/dist/{chunk-PLDWHR4D.js → chunk-ZX7EAV5J.js} +17 -7
  49. package/dist/cli.js +90 -29
  50. package/dist/clock-HSEKS5AR.js +289 -0
  51. package/dist/{cloud-sync-TG3TIX5H.js → cloud-sync-6JL4C24T.js} +21 -22
  52. package/dist/config-UTS7QULS.js +76 -0
  53. package/dist/connectors/discord-bridge.js +3 -3
  54. package/dist/connectors/slack-bridge.js +3 -3
  55. package/dist/connectors/telegram-bridge.js +3 -3
  56. package/dist/{conversations-HL2JP5GI.js → conversations-2PW57WO2.js} +5 -5
  57. package/dist/create-5BPOOJAN.js +75 -0
  58. package/dist/create-UVCK2CS6.js +50 -0
  59. package/dist/daemon-client-RVIKXGFQ.js +12 -0
  60. package/dist/daemon-restart-HSZ3BCX5.js +65 -0
  61. package/dist/daemon.js +845 -1766
  62. package/dist/{db-PLEDCBHZ.js → db-BDMH4SZ2.js} +7 -3
  63. package/dist/{db-RYX3SS2W.js → db-BVBJ57TU.js} +2 -2
  64. package/dist/delete-L5PAVDGQ.js +42 -0
  65. package/dist/delivery-manager-H5ZVBMCQ.js +31 -0
  66. package/dist/{delivery-router-D5ELDMS2.js → delivery-router-HEJSJAHQ.js} +4 -4
  67. package/dist/down-74VXM45A.js +17 -0
  68. package/dist/env-E4XHO2BI.js +223 -0
  69. package/dist/{exec-DVLXKRIO.js → exec-PY7THYH4.js} +4 -4
  70. package/dist/export-OAS6QVBN.js +113 -0
  71. package/dist/{extension-PM42QCID.js → extension-D74CNM7G.js} +25 -33
  72. package/dist/{extensions-BBGVL5JC.js → extensions-XDDFY72A.js} +22 -11
  73. package/dist/files-CWTK6V3H.js +53 -0
  74. package/dist/import-5A3T7QV4.js +143 -0
  75. package/dist/{isolation-62MKDZN3.js → isolation-TK5RX2WM.js} +3 -3
  76. package/dist/join-DF5XSJAC.js +67 -0
  77. package/dist/list-PDMQM7ZV.js +53 -0
  78. package/dist/login-7TE6CIZF.js +60 -0
  79. package/dist/login-GOTAYLXP.js +51 -0
  80. package/dist/logout-6KIA74EV.js +29 -0
  81. package/dist/logout-T4XS6LRU.js +50 -0
  82. package/dist/message-delivery-GRC4W6P7.js +41 -0
  83. package/dist/mind-5IEYKV7I.js +97 -0
  84. package/dist/{mind-activity-tracker-2ACNHA7B.js → mind-activity-tracker-QBLIV7ZJ.js} +5 -5
  85. package/dist/{mind-history-WOYFLQAI.js → mind-history-IE2QH7U5.js} +82 -71
  86. package/dist/mind-list-GEWHWAL4.js +38 -0
  87. package/dist/mind-manager-HFLB5653.js +31 -0
  88. package/dist/mind-profile-DCBDVF5B.js +53 -0
  89. package/dist/mind-service-X2CAA6W6.js +37 -0
  90. package/dist/mind-sleep-ITCF6OQA.js +47 -0
  91. package/dist/mind-status-X4SX3YUG.js +65 -0
  92. package/dist/mind-wake-KXMKMGWX.js +42 -0
  93. package/dist/{package-V2WHWVG6.js → package-D2FSVFAX.js} +5 -5
  94. package/dist/read-67VRP2DO.js +91 -0
  95. package/dist/{read-stdin-PIRM6A2Y.js → read-stdin-3X5VYKNS.js} +1 -1
  96. package/dist/register-SB7NXCOE.js +51 -0
  97. package/dist/{registry-UYV5S6QT.js → registry-GBSNW3HG.js} +2 -2
  98. package/dist/reject-MUR2KWJ4.js +40 -0
  99. package/dist/restart-5EGG4JXU.js +42 -0
  100. package/dist/{sandbox-SI5HMBP3.js → sandbox-R37VIU36.js} +5 -5
  101. package/dist/scheduler-Y7O4CJXL.js +31 -0
  102. package/dist/{schema-ETMABTW4.js → schema-XVZ2CLKW.js} +1 -1
  103. package/dist/{seed-WNGI6PNW.js → seed-EQORWX77.js} +2 -2
  104. package/dist/seed-check-KJNTL72M.js +35 -0
  105. package/dist/seed-cmd-ZM2XGVU2.js +30 -0
  106. package/dist/seed-create-DRWGGHEI.js +113 -0
  107. package/dist/seed-sprout-JYXGXOP3.js +148 -0
  108. package/dist/send-JBJJQ7CA.js +409 -0
  109. package/dist/service-WNPCNHOX.js +121 -0
  110. package/dist/{setup-Z3DEVWV7.js → setup-BJ4YAY26.js} +153 -127
  111. package/dist/{setup-GGMKENLN.js → setup-RHJRFURI.js} +3 -3
  112. package/dist/skill-TAAKEYBV.js +389 -0
  113. package/dist/skills/volute-mind/SKILL.md +3 -7
  114. package/dist/skills/volute-mind/references/extensions.md +8 -11
  115. package/dist/{skills-Q6VZ2UGD.js → skills-EKMCQ46K.js} +7 -7
  116. package/dist/sleep-manager-7KFK3USC.js +35 -0
  117. package/dist/spirit-ZFRDXMG7.js +23 -0
  118. package/dist/split-AWVOYOPZ.js +64 -0
  119. package/dist/{sprout-E3HJIV2Z.js → sprout-HE4TITMK.js} +2 -2
  120. package/dist/start-3UXOPXQG.js +39 -0
  121. package/dist/status-ZK34WYIM.js +125 -0
  122. package/dist/stop-3XYIBGFM.js +41 -0
  123. package/dist/system-chat-IDPHYHY4.js +35 -0
  124. package/dist/systems-O43WGQY6.js +52 -0
  125. package/dist/{tailscale-ZEUK7GKZ.js → tailscale-ZIZ2HWJ5.js} +4 -4
  126. package/dist/{template-hash-EJRTKE36.js → template-hash-A7FNHTB7.js} +2 -2
  127. package/dist/up-77ICEDEW.js +19 -0
  128. package/dist/update-ANE5ZM7F.js +225 -0
  129. package/dist/{update-check-X3YG4WVP.js → update-check-UV55CBEP.js} +3 -3
  130. package/dist/upgrade-ZMDGC7M2.js +74 -0
  131. package/dist/variant-QWL2WSRI.js +62 -0
  132. package/dist/{version-notify-YCH4UVQ2.js → version-notify-FXSEMXWW.js} +28 -27
  133. package/dist/{volute-config-WBKYJGYQ.js → volute-config-D2XVS2YI.js} +1 -1
  134. package/dist/web-assets/assets/index-BhxWKvbB.css +1 -0
  135. package/dist/web-assets/assets/index-CHVKJ9II.js +75 -0
  136. package/dist/web-assets/index.html +2 -2
  137. package/dist/web-assets/sw.js +117 -0
  138. package/package.json +5 -5
  139. package/packages/extensions/pages/dist/ui/assets/index-DKZLNMED.js +2 -0
  140. package/packages/extensions/pages/dist/ui/index.html +1 -1
  141. package/packages/extensions/pages/skills/pages/SKILL.md +84 -9
  142. package/templates/_base/src/lib/auto-commit.ts +8 -8
  143. package/templates/_base/src/lib/volute-server.ts +6 -0
  144. package/templates/claude/src/agent.ts +8 -1
  145. package/dist/accept-TW6V4WI4.js +0 -42
  146. package/dist/bridge-O753D5F4.js +0 -207
  147. package/dist/chat-BHYX7DJ4.js +0 -68
  148. package/dist/chunk-47XDEWWV.js +0 -156
  149. package/dist/chunk-CVL5IGIR.js +0 -2084
  150. package/dist/chunk-PB65JZK2.js +0 -85
  151. package/dist/chunk-TAHX36HZ.js +0 -3679
  152. package/dist/clock-3X4DSC2N.js +0 -281
  153. package/dist/config-OROA5DUA.js +0 -72
  154. package/dist/create-3SEKKI6P.js +0 -71
  155. package/dist/create-UOSOQ2HN.js +0 -44
  156. package/dist/daemon-client-WOAQXXBM.js +0 -12
  157. package/dist/daemon-restart-5ABHNXJZ.js +0 -52
  158. package/dist/delete-KYOVWR23.js +0 -35
  159. package/dist/delivery-manager-2BR5NZKF.js +0 -32
  160. package/dist/down-QVFN4UPK.js +0 -15
  161. package/dist/env-R34DT7XL.js +0 -195
  162. package/dist/export-6ZXAXATG.js +0 -112
  163. package/dist/files-VQV2VZQO.js +0 -47
  164. package/dist/import-MK2I2T6F.js +0 -23
  165. package/dist/join-DGYHTJUH.js +0 -66
  166. package/dist/list-C644WTHV.js +0 -49
  167. package/dist/login-IIGEQPHL.js +0 -47
  168. package/dist/login-KZQLMAWE.js +0 -47
  169. package/dist/logout-AGTZVRGP.js +0 -40
  170. package/dist/logout-KD6GXIJJ.js +0 -21
  171. package/dist/message-delivery-V3R6NXJP.js +0 -42
  172. package/dist/mind-BI4EPBVZ.js +0 -108
  173. package/dist/mind-list-6VPM7GUQ.js +0 -30
  174. package/dist/mind-manager-MWW3BTS4.js +0 -32
  175. package/dist/mind-profile-WPG42U5Y.js +0 -47
  176. package/dist/mind-service-VIKZJK2M.js +0 -38
  177. package/dist/mind-sleep-XDISJY74.js +0 -42
  178. package/dist/mind-status-7FTZWPZF.js +0 -56
  179. package/dist/mind-wake-KIIKEI3A.js +0 -37
  180. package/dist/read-H5C26YO7.js +0 -85
  181. package/dist/register-J27WP33N.js +0 -47
  182. package/dist/reject-OEANJYIA.js +0 -40
  183. package/dist/restart-V5EGYBJG.js +0 -33
  184. package/dist/scheduler-AGG3L2FO.js +0 -32
  185. package/dist/seed-check-PXTH7YXS.js +0 -32
  186. package/dist/seed-cmd-VENFTGS3.js +0 -36
  187. package/dist/seed-create-663ALOKH.js +0 -112
  188. package/dist/seed-sprout-EH3AGKAI.js +0 -132
  189. package/dist/send-7FUUUZZH.js +0 -386
  190. package/dist/skill-DKNYJS4P.js +0 -362
  191. package/dist/skills/shared-files/SKILL.md +0 -44
  192. package/dist/skills/shared-files/scripts/merge.ts +0 -72
  193. package/dist/skills/shared-files/scripts/pull.ts +0 -52
  194. package/dist/sleep-manager-BJK2ROPX.js +0 -36
  195. package/dist/spirit-4JP4TY4C.js +0 -23
  196. package/dist/split-3YPMS2CL.js +0 -63
  197. package/dist/start-W3TPKX4D.js +0 -33
  198. package/dist/status-4OVFXFEJ.js +0 -115
  199. package/dist/stop-GTT6YWYO.js +0 -32
  200. package/dist/system-channel-DXD2JBOU.js +0 -36
  201. package/dist/system-chat-TYLOL7SX.js +0 -36
  202. package/dist/systems-AYLO727G.js +0 -61
  203. package/dist/up-PA7F2CXE.js +0 -18
  204. package/dist/update-HG4LCUSG.js +0 -215
  205. package/dist/upgrade-YGNIDICG.js +0 -67
  206. package/dist/variant-MZUMRTQO.js +0 -41
  207. package/dist/web-assets/assets/index-DiiwC-CZ.css +0 -1
  208. package/dist/web-assets/assets/index-d6y5b9Ij.js +0 -75
  209. package/packages/extensions/pages/dist/ui/assets/index-tLTROSk5.js +0 -2
@@ -0,0 +1,143 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ parseArgs
4
+ } from "./chunk-O7IGP7ZW.js";
5
+ import {
6
+ findOpenClawSession,
7
+ importOpenClawConnectors,
8
+ importPiSession,
9
+ parseNameFromIdentity,
10
+ sessionMatchesWorkspace
11
+ } from "./chunk-MDJGMOSD.js";
12
+ import "./chunk-A2ZLHBHG.js";
13
+ import "./chunk-BKF4WQCY.js";
14
+ import "./chunk-BDYXIWA5.js";
15
+ import "./chunk-5N7Y5WAM.js";
16
+ import "./chunk-7KJOFUNN.js";
17
+
18
+ // packages/cli/src/commands/import.ts
19
+ import { closeSync, existsSync, mkdirSync, openSync, readSync, rmSync } from "fs";
20
+ import { homedir, tmpdir } from "os";
21
+ import { resolve } from "path";
22
+ async function run(args) {
23
+ const { positional, flags } = parseArgs(args, {
24
+ name: { type: "string" },
25
+ session: { type: "string" },
26
+ template: { type: "string" }
27
+ });
28
+ const inputPath = positional[0];
29
+ if (inputPath && (inputPath.endsWith(".volute") || isZipFile(inputPath))) {
30
+ await importArchive(resolve(inputPath), flags.name);
31
+ return;
32
+ }
33
+ const wsDir = resolveWorkspace(inputPath);
34
+ const { daemonFetch } = await import("./daemon-client-RVIKXGFQ.js");
35
+ const { getClient, urlOf } = await import("./api-client-3A77HMH7.js");
36
+ const client = getClient();
37
+ const res = await daemonFetch(urlOf(client.api.minds.import.$url()), {
38
+ method: "POST",
39
+ headers: { "Content-Type": "application/json" },
40
+ body: JSON.stringify({
41
+ workspacePath: wsDir,
42
+ name: flags.name,
43
+ template: flags.template,
44
+ sessionPath: flags.session
45
+ })
46
+ });
47
+ const data = await res.json();
48
+ if (!res.ok) {
49
+ console.error(data.error ?? "Failed to import mind");
50
+ process.exit(1);
51
+ }
52
+ console.log(`
53
+ ${data.message ?? `Imported mind: ${data.name} (port ${data.port})`}`);
54
+ console.log(`
55
+ volute mind start ${data.name}`);
56
+ }
57
+ function isZipFile(path) {
58
+ const resolved = resolve(path);
59
+ if (!existsSync(resolved)) return false;
60
+ const fd = openSync(resolved, "r");
61
+ try {
62
+ const buf = Buffer.alloc(4);
63
+ const bytesRead = readSync(fd, buf, 0, 4, 0);
64
+ return bytesRead === 4 && buf[0] === 80 && buf[1] === 75 && buf[2] === 3 && buf[3] === 4;
65
+ } finally {
66
+ closeSync(fd);
67
+ }
68
+ }
69
+ async function importArchive(archivePath, nameOverride) {
70
+ if (!existsSync(archivePath)) {
71
+ console.error(`File not found: ${archivePath}`);
72
+ process.exit(1);
73
+ }
74
+ const { extractArchive } = await import("./archive-ESU2FUN4.js");
75
+ const tempDir = resolve(tmpdir(), `volute-import-${Date.now()}`);
76
+ mkdirSync(tempDir, { recursive: true });
77
+ let extracted;
78
+ try {
79
+ extracted = extractArchive(archivePath, tempDir);
80
+ } catch (err) {
81
+ rmSync(tempDir, { recursive: true, force: true });
82
+ console.error(`Failed to extract archive: ${err.message}`);
83
+ process.exit(1);
84
+ }
85
+ try {
86
+ const { daemonFetch } = await import("./daemon-client-RVIKXGFQ.js");
87
+ const { getClient, urlOf } = await import("./api-client-3A77HMH7.js");
88
+ const client = getClient();
89
+ const res = await daemonFetch(urlOf(client.api.minds.import.$url()), {
90
+ method: "POST",
91
+ headers: { "Content-Type": "application/json" },
92
+ body: JSON.stringify({
93
+ archivePath: tempDir,
94
+ name: nameOverride,
95
+ manifest: extracted.manifest
96
+ })
97
+ });
98
+ const data = await res.json();
99
+ if (!res.ok) {
100
+ console.error(data.error ?? "Failed to import mind");
101
+ process.exit(1);
102
+ }
103
+ console.log(`
104
+ ${data.message ?? `Imported mind: ${data.name} (port ${data.port})`}`);
105
+ console.log(`
106
+ volute mind start ${data.name}`);
107
+ } catch (err) {
108
+ rmSync(tempDir, { recursive: true, force: true });
109
+ throw err;
110
+ }
111
+ }
112
+ function resolveWorkspace(explicitPath) {
113
+ if (explicitPath) {
114
+ const wsDir = resolve(explicitPath);
115
+ if (!existsSync(resolve(wsDir, "SOUL.md")) || !existsSync(resolve(wsDir, "IDENTITY.md"))) {
116
+ console.error("Not a valid OpenClaw workspace: missing SOUL.md or IDENTITY.md");
117
+ process.exit(1);
118
+ }
119
+ return wsDir;
120
+ }
121
+ const cwd = process.cwd();
122
+ if (existsSync(resolve(cwd, "SOUL.md")) && existsSync(resolve(cwd, "IDENTITY.md"))) {
123
+ console.log(`Using workspace: ${cwd}`);
124
+ return cwd;
125
+ }
126
+ const openclawWs = resolve(homedir(), ".openclaw/workspace");
127
+ if (existsSync(resolve(openclawWs, "SOUL.md")) && existsSync(resolve(openclawWs, "IDENTITY.md"))) {
128
+ console.log(`Using workspace: ${openclawWs}`);
129
+ return openclawWs;
130
+ }
131
+ console.error(
132
+ "Usage: volute mind import [<workspace-path>] [--name <name>] [--session <path>] [--template <name>]\n\nNo OpenClaw workspace found. Provide a path, run from a workspace, or ensure ~/.openclaw/workspace exists."
133
+ );
134
+ process.exit(1);
135
+ }
136
+ export {
137
+ findOpenClawSession,
138
+ importOpenClawConnectors,
139
+ importPiSession,
140
+ parseNameFromIdentity,
141
+ run,
142
+ sessionMatchesWorkspace
143
+ };
@@ -7,9 +7,9 @@ import {
7
7
  isIsolationEnabled,
8
8
  mindUserName,
9
9
  wrapForIsolation
10
- } from "./chunk-BDK73LK6.js";
11
- import "./chunk-N7BLAHNE.js";
12
- import "./chunk-4JSR7YO7.js";
10
+ } from "./chunk-VHJRZM2S.js";
11
+ import "./chunk-BDYXIWA5.js";
12
+ import "./chunk-5N7Y5WAM.js";
13
13
  import "./chunk-7KJOFUNN.js";
14
14
  export {
15
15
  chownMindDir,
@@ -0,0 +1,67 @@
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/join.ts
9
+ var cmd = command({
10
+ name: "volute mind join",
11
+ description: "Merge a variant back into its parent",
12
+ args: [{ name: "variant", required: true, description: "Variant to merge back" }],
13
+ flags: {
14
+ summary: { type: "string", description: "Summary of changes" },
15
+ justification: { type: "string", description: "Justification for merge" },
16
+ memory: { type: "string", description: "Memory to add" },
17
+ "skip-verify": { type: "boolean", description: "Skip verification step" }
18
+ },
19
+ run: async ({ args, flags }) => {
20
+ const variantName = args.variant;
21
+ console.log(`Joining variant ${variantName}...`);
22
+ const { daemonFetch } = await import("./daemon-client-RVIKXGFQ.js");
23
+ const { getClient, urlOf } = await import("./api-client-3A77HMH7.js");
24
+ const client = getClient();
25
+ const statusRes = await daemonFetch(
26
+ urlOf(client.api.minds[":name"].$url({ param: { name: variantName } }))
27
+ );
28
+ if (!statusRes.ok) {
29
+ const data2 = await statusRes.json().catch(() => ({}));
30
+ console.error(data2.error ?? `Variant '${variantName}' not found (HTTP ${statusRes.status})`);
31
+ process.exit(1);
32
+ }
33
+ const statusData = await statusRes.json();
34
+ const parentName = statusData.parent;
35
+ if (!parentName) {
36
+ console.error(`'${variantName}' is not a variant \u2014 it has no parent mind`);
37
+ process.exit(1);
38
+ }
39
+ const res = await daemonFetch(
40
+ urlOf(
41
+ client.api.minds[":name"].variants[":variant"].merge.$url({
42
+ param: { name: parentName, variant: variantName }
43
+ })
44
+ ),
45
+ {
46
+ method: "POST",
47
+ headers: { "Content-Type": "application/json" },
48
+ body: JSON.stringify({
49
+ ...flags.summary && { summary: flags.summary },
50
+ ...flags.justification && { justification: flags.justification },
51
+ ...flags.memory && { memory: flags.memory },
52
+ ...flags["skip-verify"] && { skipVerify: true }
53
+ })
54
+ }
55
+ );
56
+ const data = await res.json();
57
+ if (!res.ok) {
58
+ console.error(data.error ?? "Failed to join variant");
59
+ process.exit(1);
60
+ }
61
+ console.log(`Variant ${variantName} joined and cleaned up.`);
62
+ }
63
+ });
64
+ var run = cmd.execute;
65
+ export {
66
+ run
67
+ };
@@ -0,0 +1,53 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ isCompact
4
+ } from "./chunk-5T5YMX6S.js";
5
+ import {
6
+ resolveMindName
7
+ } from "./chunk-BTY4WNFE.js";
8
+ import {
9
+ command
10
+ } from "./chunk-TXSA4Q3V.js";
11
+ import "./chunk-O7IGP7ZW.js";
12
+ import {
13
+ daemonFetch
14
+ } from "./chunk-ZX7EAV5J.js";
15
+ import "./chunk-7KJOFUNN.js";
16
+
17
+ // packages/cli/src/commands/chat/list.ts
18
+ var cmd = command({
19
+ name: "volute chat list",
20
+ description: "List conversations",
21
+ flags: {
22
+ mind: { type: "string", description: "Mind name" }
23
+ },
24
+ async run({ flags }) {
25
+ const mindName = resolveMindName(flags);
26
+ const res = await daemonFetch(`/api/minds/${encodeURIComponent(mindName)}/conversations`);
27
+ if (!res.ok) {
28
+ console.error(`Failed to list conversations: ${res.status}`);
29
+ process.exit(1);
30
+ }
31
+ const convs = await res.json();
32
+ if (convs.length === 0) {
33
+ console.log("No conversations.");
34
+ return;
35
+ }
36
+ const compact = isCompact();
37
+ for (const conv of convs) {
38
+ const label = conv.type === "channel" ? `#${conv.name}` : conv.title ?? conv.id.slice(0, 8);
39
+ if (compact) {
40
+ console.log(`${label} (${conv.type})`);
41
+ } else {
42
+ const time = new Date(
43
+ conv.updated_at.endsWith("Z") ? conv.updated_at : `${conv.updated_at}Z`
44
+ ).toLocaleString();
45
+ console.log(` ${label} (${conv.type}) ${time}`);
46
+ }
47
+ }
48
+ }
49
+ });
50
+ var run = cmd.execute;
51
+ export {
52
+ run
53
+ };
@@ -0,0 +1,60 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ promptLine,
4
+ promptPassword
5
+ } from "./chunk-VHWGEJ4V.js";
6
+ import {
7
+ command
8
+ } from "./chunk-TXSA4Q3V.js";
9
+ import "./chunk-O7IGP7ZW.js";
10
+ import {
11
+ daemonFetch
12
+ } from "./chunk-ZX7EAV5J.js";
13
+ import {
14
+ voluteUserHome
15
+ } from "./chunk-BDYXIWA5.js";
16
+ import "./chunk-5N7Y5WAM.js";
17
+ import "./chunk-7KJOFUNN.js";
18
+
19
+ // packages/cli/src/commands/login.ts
20
+ import { writeFileSync } from "fs";
21
+ import { resolve } from "path";
22
+ var cmd = command({
23
+ name: "volute login",
24
+ description: "Log in to the daemon",
25
+ flags: {},
26
+ run: async () => {
27
+ const username = await promptLine("Username: ");
28
+ const password = await promptPassword("Password: ");
29
+ const res = await daemonFetch("/api/auth/login", {
30
+ method: "POST",
31
+ headers: { "Content-Type": "application/json" },
32
+ body: JSON.stringify({ username, password })
33
+ });
34
+ if (!res.ok) {
35
+ const data = await res.json().catch(() => ({}));
36
+ console.error(data.error || "Login failed");
37
+ process.exit(1);
38
+ }
39
+ const {
40
+ username: name,
41
+ role,
42
+ sessionId
43
+ } = await res.json();
44
+ const sessionPath = resolve(voluteUserHome(), "cli-session.json");
45
+ try {
46
+ const sessionData = { sessionId, username: name };
47
+ const daemonUrl = process.env.VOLUTE_DAEMON_URL;
48
+ if (daemonUrl) sessionData.daemonUrl = daemonUrl;
49
+ writeFileSync(sessionPath, JSON.stringify(sessionData), { mode: 384 });
50
+ } catch (err) {
51
+ console.error(`Login succeeded but failed to save session: ${err.message}`);
52
+ process.exit(1);
53
+ }
54
+ console.log(`Logged in as ${name} (role: ${role})`);
55
+ }
56
+ });
57
+ var run = cmd.execute;
58
+ export {
59
+ run
60
+ };
@@ -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/login.ts
15
+ var cmd = command({
16
+ name: "volute systems login",
17
+ description: "Log in with an existing API key",
18
+ flags: {
19
+ key: { type: "string", description: "API key" }
20
+ },
21
+ run: async ({ flags }) => {
22
+ let key = flags.key;
23
+ if (!key) {
24
+ if (!process.stdin.isTTY) {
25
+ console.error("Usage: volute systems login --key <api-key>");
26
+ process.exit(1);
27
+ }
28
+ key = await promptLine("API key: ");
29
+ if (!key) {
30
+ console.error("No key provided.");
31
+ process.exit(1);
32
+ }
33
+ }
34
+ const res = await daemonFetch("/api/system/login", {
35
+ method: "POST",
36
+ headers: { "Content-Type": "application/json" },
37
+ body: JSON.stringify({ key })
38
+ });
39
+ if (!res.ok) {
40
+ const body = await res.json().catch(() => ({ error: `HTTP ${res.status}` }));
41
+ console.error(`Login failed: ${body.error}`);
42
+ process.exit(1);
43
+ }
44
+ const { system } = await res.json();
45
+ console.log(`Logged in as "${system}". Credentials saved.`);
46
+ }
47
+ });
48
+ var run = cmd.execute;
49
+ export {
50
+ run
51
+ };
@@ -0,0 +1,29 @@
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/systems/logout.ts
12
+ var cmd = command({
13
+ name: "volute systems logout",
14
+ description: "Remove stored volute.systems credentials",
15
+ flags: {},
16
+ run: async () => {
17
+ const res = await daemonFetch("/api/system/logout", { method: "POST" });
18
+ if (!res.ok) {
19
+ const body = await res.json().catch(() => ({ error: `HTTP ${res.status}` }));
20
+ console.error(`Logout failed: ${body.error}`);
21
+ process.exit(1);
22
+ }
23
+ console.log("Logged out. Credentials removed.");
24
+ }
25
+ });
26
+ var run = cmd.execute;
27
+ export {
28
+ run
29
+ };
@@ -0,0 +1,50 @@
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
+ voluteUserHome
11
+ } from "./chunk-BDYXIWA5.js";
12
+ import "./chunk-5N7Y5WAM.js";
13
+ import "./chunk-7KJOFUNN.js";
14
+
15
+ // packages/cli/src/commands/logout.ts
16
+ import { existsSync, readFileSync, unlinkSync } from "fs";
17
+ import { resolve } from "path";
18
+ var cmd = command({
19
+ name: "volute logout",
20
+ description: "Log out of the daemon",
21
+ flags: {},
22
+ run: async () => {
23
+ const sessionPath = resolve(voluteUserHome(), "cli-session.json");
24
+ if (!existsSync(sessionPath)) {
25
+ console.log("Not logged in");
26
+ return;
27
+ }
28
+ let sessionId;
29
+ try {
30
+ const data = JSON.parse(readFileSync(sessionPath, "utf-8"));
31
+ sessionId = data.sessionId;
32
+ } catch {
33
+ }
34
+ if (sessionId) {
35
+ try {
36
+ await daemonFetch("/api/auth/logout", {
37
+ method: "POST",
38
+ headers: { Authorization: `Bearer ${sessionId}` }
39
+ });
40
+ } catch {
41
+ }
42
+ }
43
+ unlinkSync(sessionPath);
44
+ console.log("Logged out");
45
+ }
46
+ });
47
+ var run = cmd.execute;
48
+ export {
49
+ run
50
+ };
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ deliverMessage,
4
+ linkToolResultToTurn,
5
+ recordInbound,
6
+ recordOutbound,
7
+ resolveSleepAction,
8
+ tagRecentInbound,
9
+ tagUntaggedInbound,
10
+ tagUntaggedOutbound
11
+ } from "./chunk-WJPROOU5.js";
12
+ import "./chunk-5XJYUFZH.js";
13
+ import "./chunk-AOB6GVRM.js";
14
+ import "./chunk-IJHIXLVN.js";
15
+ import "./chunk-QWTR6AWZ.js";
16
+ import "./chunk-N446KRP7.js";
17
+ import "./chunk-QHG4OMZL.js";
18
+ import "./chunk-XRQSAMX2.js";
19
+ import "./chunk-WZRZFFCL.js";
20
+ import "./chunk-CORXD635.js";
21
+ import "./chunk-ZSR72JB3.js";
22
+ import "./chunk-PWQ2ITYG.js";
23
+ import "./chunk-A2ZLHBHG.js";
24
+ import "./chunk-FT5KETXZ.js";
25
+ import "./chunk-BKF4WQCY.js";
26
+ import "./chunk-AN2W47GW.js";
27
+ import "./chunk-VHJRZM2S.js";
28
+ import "./chunk-BMZQYACC.js";
29
+ import "./chunk-BDYXIWA5.js";
30
+ import "./chunk-5N7Y5WAM.js";
31
+ import "./chunk-7KJOFUNN.js";
32
+ export {
33
+ deliverMessage,
34
+ linkToolResultToTurn,
35
+ recordInbound,
36
+ recordOutbound,
37
+ resolveSleepAction,
38
+ tagRecentInbound,
39
+ tagUntaggedInbound,
40
+ tagUntaggedOutbound
41
+ };
@@ -0,0 +1,97 @@
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/mind.ts
9
+ function transformMindFlag(args) {
10
+ if (args.length > 0 && args[0] && !args[0].startsWith("-")) {
11
+ return ["--mind", args[0], ...args.slice(1)];
12
+ }
13
+ return args;
14
+ }
15
+ var cmd = subcommands({
16
+ name: "volute mind",
17
+ description: "Manage minds",
18
+ commands: {
19
+ create: {
20
+ description: "Create a new mind",
21
+ run: (args) => import("./create-UVCK2CS6.js").then((m) => m.run(args))
22
+ },
23
+ start: {
24
+ description: "Start a mind",
25
+ run: (args) => import("./start-3UXOPXQG.js").then((m) => m.run(args))
26
+ },
27
+ stop: {
28
+ description: "Stop a mind",
29
+ run: (args) => import("./stop-3XYIBGFM.js").then((m) => m.run(args))
30
+ },
31
+ restart: {
32
+ description: "Restart a mind",
33
+ run: (args) => import("./restart-5EGG4JXU.js").then((m) => m.run(args))
34
+ },
35
+ delete: {
36
+ description: "Delete a mind",
37
+ run: (args) => import("./delete-L5PAVDGQ.js").then((m) => m.run(args))
38
+ },
39
+ list: {
40
+ description: "List all minds",
41
+ run: (args) => import("./mind-list-GEWHWAL4.js").then((m) => m.run(args))
42
+ },
43
+ status: {
44
+ description: "Check mind status",
45
+ run: (args) => import("./mind-status-X4SX3YUG.js").then((m) => m.run(args))
46
+ },
47
+ history: {
48
+ description: "View mind activity history",
49
+ run: (args) => import("./mind-history-IE2QH7U5.js").then((m) => m.run(transformMindFlag(args)))
50
+ },
51
+ profile: {
52
+ description: "Update mind profile",
53
+ run: (args) => import("./mind-profile-DCBDVF5B.js").then((m) => m.run(args))
54
+ },
55
+ upgrade: {
56
+ description: "Upgrade mind to latest template",
57
+ run: (args) => import("./upgrade-ZMDGC7M2.js").then((m) => m.run(args))
58
+ },
59
+ import: {
60
+ description: "Import an OpenClaw workspace",
61
+ run: (args) => import("./import-5A3T7QV4.js").then((m) => m.run(args))
62
+ },
63
+ export: {
64
+ description: "Export a mind",
65
+ run: (args) => import("./export-OAS6QVBN.js").then((m) => m.run(args))
66
+ },
67
+ split: {
68
+ description: "Create a variant",
69
+ run: (args) => import("./split-AWVOYOPZ.js").then((m) => m.run(args))
70
+ },
71
+ join: {
72
+ description: "Merge variant back",
73
+ run: (args) => import("./join-DF5XSJAC.js").then((m) => m.run(args))
74
+ },
75
+ sleep: {
76
+ description: "Put a mind to sleep",
77
+ run: (args) => import("./mind-sleep-ITCF6OQA.js").then((m) => m.run(args))
78
+ },
79
+ wake: {
80
+ description: "Wake a sleeping mind",
81
+ run: (args) => import("./mind-wake-KXMKMGWX.js").then((m) => m.run(args))
82
+ },
83
+ seed: {
84
+ description: "(legacy) Use 'volute seed create' instead",
85
+ run: (args) => import("./seed-EQORWX77.js").then((m) => m.run(args))
86
+ },
87
+ sprout: {
88
+ description: "(legacy) Use 'volute seed sprout' instead",
89
+ run: (args) => import("./sprout-HE4TITMK.js").then((m) => m.run(args))
90
+ }
91
+ },
92
+ footer: "Mind name can be omitted (where applicable) if VOLUTE_MIND is set."
93
+ });
94
+ var run = cmd.execute;
95
+ export {
96
+ run
97
+ };
@@ -4,11 +4,11 @@ import {
4
4
  markIdle,
5
5
  onMindEvent,
6
6
  stopAll
7
- } from "./chunk-BTWAGDV5.js";
8
- import "./chunk-XWXBJQBE.js";
9
- import "./chunk-YUIHSKR6.js";
10
- import "./chunk-N7BLAHNE.js";
11
- import "./chunk-4JSR7YO7.js";
7
+ } from "./chunk-N446KRP7.js";
8
+ import "./chunk-CORXD635.js";
9
+ import "./chunk-BKF4WQCY.js";
10
+ import "./chunk-BDYXIWA5.js";
11
+ import "./chunk-5N7Y5WAM.js";
12
12
  import "./chunk-7KJOFUNN.js";
13
13
  export {
14
14
  getActiveMinds,