volute 0.32.0 → 0.33.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 (97) hide show
  1. package/README.md +16 -0
  2. package/dist/{activity-events-HETAODOK.js → activity-events-XJO3P4RR.js} +1 -1
  3. package/dist/{ai-service-ZIPCV3MX.js → ai-service-SBY2WG7O.js} +2 -2
  4. package/dist/api.d.ts +666 -848
  5. package/dist/{auth-6DMGES3I.js → auth-GKCDSO4T.js} +2 -2
  6. package/dist/{chat-XT4OBJBU.js → chat-U5ZOME3O.js} +8 -8
  7. package/dist/{chunk-QBQ424EM.js → chunk-3Z2DPESO.js} +457 -203
  8. package/dist/chunk-6LXAAQ43.js +22 -0
  9. package/dist/{spirit-N4W4UQRH.js → chunk-7J3HEVR7.js} +12 -9
  10. package/dist/{chunk-WKF5FEFK.js → chunk-A2A4KLFE.js} +54 -155
  11. package/dist/{chunk-D5G5YOPL.js → chunk-C7I35G4R.js} +3 -3
  12. package/dist/{chunk-SX5TKJBZ.js → chunk-GY5HBI7A.js} +1 -1
  13. package/dist/{chunk-2FLJ63GU.js → chunk-JUKK7FPS.js} +1 -1
  14. package/dist/{chunk-TDRYEPH4.js → chunk-JYVGHWEJ.js} +2 -2
  15. package/dist/chunk-KIEPMIM5.js +59 -0
  16. package/dist/{chunk-QZANELPX.js → chunk-KVK2DLWI.js} +1 -0
  17. package/dist/{chunk-R7E6CRVQ.js → chunk-LOEJ4HPQ.js} +1 -1
  18. package/dist/{chunk-TSXLLQZW.js → chunk-N432I7QH.js} +9 -0
  19. package/dist/{chunk-LSGWR54X.js → chunk-NNB4WIG7.js} +1 -1
  20. package/dist/{chunk-JJ7W6WSB.js → chunk-NPKSDYA2.js} +2 -2
  21. package/dist/chunk-OYAKCAVY.js +29 -0
  22. package/dist/{chunk-IYDIE3HG.js → chunk-QTUVYI7W.js} +1 -1
  23. package/dist/{chunk-S6NFERDC.js → chunk-RVGLDGMI.js} +1 -1
  24. package/dist/{chunk-LGB6JBHI.js → chunk-VH33ZWMW.js} +4 -54
  25. package/dist/cli.js +26 -18
  26. package/dist/{clock-2UOZ6JPU.js → clock-BVH3V6E3.js} +5 -5
  27. package/dist/{cloud-sync-JN3NWKEM.js → cloud-sync-4NWLMFVH.js} +15 -11
  28. package/dist/{conversations-3O5O6AS3.js → conversations-AWI5SZW2.js} +2 -2
  29. package/dist/{create-WBBYI6V7.js → create-2FK7Z46Y.js} +1 -1
  30. package/dist/{create-RNLNCORE.js → create-YWD2TIP4.js} +4 -4
  31. package/dist/{daemon-restart-NGFHFAUF.js → daemon-restart-GOBUKLX7.js} +6 -5
  32. package/dist/daemon.js +1182 -1031
  33. package/dist/delivery-manager-PFAKEJTC.js +32 -0
  34. package/dist/{down-TB3ESMNP.js → down-FWWTEKXM.js} +4 -3
  35. package/dist/{extension-FQ5D3NCC.js → extension-OBTGKQQD.js} +2 -1
  36. package/dist/{extensions-GDYWQXC4.js → extensions-KYNTVTMO.js} +7 -6
  37. package/dist/isolation-LLAYQYDY.js +22 -0
  38. package/dist/message-delivery-DFF5SJRM.js +42 -0
  39. package/dist/{mind-2B6M7Y25.js → mind-IOJFLEM5.js} +13 -7
  40. package/dist/{mind-activity-tracker-NZZT2NTT.js → mind-activity-tracker-F6O4Q2SL.js} +2 -2
  41. package/dist/mind-manager-NBJF5D26.js +32 -0
  42. package/dist/mind-profile-P67FEHOY.js +47 -0
  43. package/dist/mind-service-2MQ6UK5N.js +38 -0
  44. package/dist/{package-PK6JUFL3.js → package-U3VFO273.js} +2 -1
  45. package/dist/read-stdin-HQJ7774D.js +8 -0
  46. package/dist/{sandbox-JANNTX6U.js → sandbox-GJOK4QLQ.js} +2 -2
  47. package/dist/scheduler-ZZ7XGQG6.js +32 -0
  48. package/dist/seed-QDYVLG74.js +11 -0
  49. package/dist/seed-check-S2IX25RL.js +32 -0
  50. package/dist/seed-cmd-DKOUFEAU.js +36 -0
  51. package/dist/{seed-ALUQ55FF.js → seed-create-4XBBOLRH.js} +5 -5
  52. package/dist/{sprout-L2GFOVF7.js → seed-sprout-GQEIIQRT.js} +19 -6
  53. package/dist/{send-3MI36LEF.js → send-QIV2INHB.js} +51 -49
  54. package/dist/{setup-SZIARWI6.js → setup-TISPCO22.js} +3 -1
  55. package/dist/{setup-WENLVPVP.js → setup-XMCBE3LF.js} +7 -5
  56. package/dist/skills/imagegen/SKILL.md +11 -7
  57. package/dist/skills/imagegen/scripts/imagegen.ts +146 -25
  58. package/dist/skills/orientation/SKILL.md +9 -2
  59. package/dist/skills/seed-nurture/SKILL.md +42 -0
  60. package/dist/skills/volute-mind/SKILL.md +4 -0
  61. package/dist/{skills-XNZK6P4K.js → skills-7FV7EJTE.js} +4 -3
  62. package/dist/sleep-manager-JTXSN7NV.js +36 -0
  63. package/dist/spirit-VRONKFMF.js +23 -0
  64. package/dist/sprout-WKLZXUIQ.js +11 -0
  65. package/dist/{status-TCUMUO6M.js → status-3JBTFSMI.js} +3 -2
  66. package/dist/{system-chat-NPYFYZVI.js → system-chat-JAPOJ3KE.js} +15 -11
  67. package/dist/{systems-DHBKVYEY.js → systems-XRI52VCH.js} +2 -2
  68. package/dist/{up-6I6BHRTO.js → up-M5AS6SBV.js} +5 -4
  69. package/dist/{update-QVPRF6GR.js → update-UD543CXX.js} +3 -2
  70. package/dist/{version-notify-TCKWBZZG.js → version-notify-NBI2MTJO.js} +18 -15
  71. package/dist/volute-config-HD7WWUQC.js +10 -0
  72. package/dist/web-assets/assets/index-CWJrVveV.css +1 -0
  73. package/dist/web-assets/assets/index-DJt14FRI.js +75 -0
  74. package/dist/web-assets/index.html +2 -2
  75. package/package.json +2 -1
  76. package/templates/claude/src/lib/stream-consumer.ts +38 -0
  77. package/templates/codex/src/agent.ts +1 -0
  78. package/dist/delivery-manager-SDVXFD4W.js +0 -28
  79. package/dist/message-delivery-2FIM7QKO.js +0 -32
  80. package/dist/mind-manager-BNCMGYXW.js +0 -28
  81. package/dist/mind-service-AV273WT4.js +0 -34
  82. package/dist/sleep-manager-53DZOWW7.js +0 -32
  83. package/dist/web-assets/assets/index-Bui7U9Uu.css +0 -1
  84. package/dist/web-assets/assets/index-e36DIo1b.js +0 -73
  85. package/dist/{accept-74M7I4RZ.js → accept-D5VBM7JW.js} +3 -3
  86. package/dist/{bridge-BVCBTGPF.js → bridge-TXWWPPOJ.js} +3 -3
  87. package/dist/{env-RLYQBOOP.js → env-JCOF2222.js} +3 -3
  88. package/dist/{files-EAMPO2SJ.js → files-65PMW5IK.js} +3 -3
  89. package/dist/{history-FO5PHBQ5.js → history-DKCDI3JO.js} +3 -3
  90. package/dist/{list-DW2VRTOZ.js → list-JQ463EDA.js} +3 -3
  91. package/dist/{login-7CHPW2PN.js → login-D7ETSU4R.js} +3 -3
  92. package/dist/{mind-sleep-B7BHJLH7.js → mind-sleep-WW2IX7JT.js} +3 -3
  93. package/dist/{mind-wake-GY3RFX7Y.js → mind-wake-VSSGW465.js} +3 -3
  94. package/dist/{read-5AMJRO3D.js → read-EBY56C33.js} +3 -3
  95. package/dist/{register-V2JZZKFK.js → register-HD74C4TT.js} +3 -3
  96. package/dist/{reject-33HEZMZ4.js → reject-UJKFBHRO.js} +3 -3
  97. package/dist/{skill-TUVOTW4Z.js → skill-PSQGRRJX.js} +3 -3
@@ -11,7 +11,9 @@ function isIsolationEnabled() {
11
11
  }
12
12
  function mindUserName(mindName) {
13
13
  const err = validateMindName(mindName);
14
- if (err) throw new Error(`Invalid mind name for isolation: ${err}`);
14
+ if (err && mindName !== "volute") {
15
+ throw new Error(`Invalid mind name for isolation: ${err}`);
16
+ }
15
17
  const prefix = process.env.VOLUTE_USER_PREFIX ?? "mind-";
16
18
  return `${prefix}${mindName}`;
17
19
  }
@@ -166,54 +168,6 @@ function chownMindDir(dir, name) {
166
168
  }
167
169
  }
168
170
 
169
- // src/lib/exec.ts
170
- import { execFile as execFileCb, execFileSync as execFileSync2, spawn } from "child_process";
171
- async function exec(cmd, args, options) {
172
- const [wrappedCmd, wrappedArgs] = options?.mindName ? await wrapForIsolation(cmd, args, options.mindName) : [cmd, args];
173
- return new Promise((resolve, reject) => {
174
- execFileCb(
175
- wrappedCmd,
176
- wrappedArgs,
177
- { cwd: options?.cwd, env: options?.env },
178
- (err, stdout, stderr) => {
179
- if (err) {
180
- err.stderr = stderr;
181
- err.stdout = stdout;
182
- reject(err);
183
- } else {
184
- resolve(stdout);
185
- }
186
- }
187
- );
188
- });
189
- }
190
- function gitExec(args, options) {
191
- const fullArgs = process.env.VOLUTE_ISOLATION === "user" ? ["-c", "safe.directory=*", ...args] : args;
192
- return exec("git", fullArgs, options);
193
- }
194
- function resolveVoluteBin() {
195
- try {
196
- return execFileSync2("which", ["volute"], { encoding: "utf-8" }).trim();
197
- } catch {
198
- throw new Error("Could not find volute binary on PATH");
199
- }
200
- }
201
- async function execInherit(cmd, args, options) {
202
- const [wrappedCmd, wrappedArgs] = options?.mindName ? await wrapForIsolation(cmd, args, options.mindName) : [cmd, args];
203
- return new Promise((resolve, reject) => {
204
- const child = spawn(wrappedCmd, wrappedArgs, {
205
- cwd: options?.cwd,
206
- env: options?.env,
207
- stdio: "inherit"
208
- });
209
- child.on("error", reject);
210
- child.on("close", (code) => {
211
- if (code === 0) resolve();
212
- else reject(new Error(`${cmd} ${args.join(" ")} exited with code ${code}`));
213
- });
214
- });
215
- }
216
-
217
171
  export {
218
172
  isIsolationEnabled,
219
173
  mindUserName,
@@ -221,9 +175,5 @@ export {
221
175
  createMindUser,
222
176
  deleteMindUser,
223
177
  wrapForIsolation,
224
- chownMindDir,
225
- exec,
226
- gitExec,
227
- resolveVoluteBin,
228
- execInherit
178
+ chownMindDir
229
179
  };
package/dist/cli.js CHANGED
@@ -10,7 +10,7 @@ if (!process.env.VOLUTE_HOME) {
10
10
  var command = process.argv[2];
11
11
  var args = process.argv.slice(3);
12
12
  if (command === "--version" || command === "-v") {
13
- const { default: pkg } = await import("./package-PK6JUFL3.js");
13
+ const { default: pkg } = await import("./package-U3VFO273.js");
14
14
  console.log(pkg.version);
15
15
  process.exit(0);
16
16
  }
@@ -31,7 +31,7 @@ var ungatedCommands = /* @__PURE__ */ new Set([
31
31
  void 0
32
32
  ]);
33
33
  if (!ungatedCommands.has(command)) {
34
- const { isSetupComplete } = await import("./setup-SZIARWI6.js");
34
+ const { isSetupComplete } = await import("./setup-TISPCO22.js");
35
35
  if (!isSetupComplete()) {
36
36
  console.error("Volute is not set up. Run `volute setup` first.");
37
37
  process.exit(1);
@@ -39,49 +39,52 @@ if (!ungatedCommands.has(command)) {
39
39
  }
40
40
  switch (command) {
41
41
  case "setup":
42
- await import("./setup-WENLVPVP.js").then((m) => m.run(args));
42
+ await import("./setup-XMCBE3LF.js").then((m) => m.run(args));
43
43
  break;
44
44
  case "mind":
45
- await import("./mind-2B6M7Y25.js").then((m) => m.run(args));
45
+ await import("./mind-IOJFLEM5.js").then((m) => m.run(args));
46
+ break;
47
+ case "seed":
48
+ await import("./seed-cmd-DKOUFEAU.js").then((m) => m.run(args));
46
49
  break;
47
50
  case "chat":
48
- await import("./chat-XT4OBJBU.js").then((m) => m.run(args));
51
+ await import("./chat-U5ZOME3O.js").then((m) => m.run(args));
49
52
  break;
50
53
  case "variant":
51
54
  await import("./variant-7TGZHOU3.js").then((m) => m.run(args));
52
55
  break;
53
56
  case "clock":
54
- await import("./clock-2UOZ6JPU.js").then((m) => m.run(args));
57
+ await import("./clock-BVH3V6E3.js").then((m) => m.run(args));
55
58
  break;
56
59
  case "skill":
57
- await import("./skill-TUVOTW4Z.js").then((m) => m.run(args));
60
+ await import("./skill-PSQGRRJX.js").then((m) => m.run(args));
58
61
  break;
59
62
  case "env":
60
- await import("./env-RLYQBOOP.js").then((m) => m.run(args));
63
+ await import("./env-JCOF2222.js").then((m) => m.run(args));
61
64
  break;
62
65
  case "config":
63
66
  await import("./config-H2H4UIF7.js").then((m) => m.run(args));
64
67
  break;
65
68
  case "up":
66
- await import("./up-6I6BHRTO.js").then((m) => m.run(args));
69
+ await import("./up-M5AS6SBV.js").then((m) => m.run(args));
67
70
  break;
68
71
  case "down":
69
- await import("./down-TB3ESMNP.js").then((m) => m.run(args));
72
+ await import("./down-FWWTEKXM.js").then((m) => m.run(args));
70
73
  break;
71
74
  case "restart":
72
- await import("./daemon-restart-NGFHFAUF.js").then((m) => m.run(args));
75
+ await import("./daemon-restart-GOBUKLX7.js").then((m) => m.run(args));
73
76
  break;
74
77
  case "update":
75
- await import("./update-QVPRF6GR.js").then((m) => m.run(args));
78
+ await import("./update-UD543CXX.js").then((m) => m.run(args));
76
79
  break;
77
80
  case "status":
78
- await import("./status-TCUMUO6M.js").then((m) => m.run(args));
81
+ await import("./status-3JBTFSMI.js").then((m) => m.run(args));
79
82
  break;
80
83
  case "extension":
81
- await import("./extension-FQ5D3NCC.js").then((m) => m.run(args));
84
+ await import("./extension-OBTGKQQD.js").then((m) => m.run(args));
82
85
  break;
83
86
  case "systems":
84
- await import("./systems-DHBKVYEY.js").then((m) => m.run(args));
87
+ await import("./systems-XRI52VCH.js").then((m) => m.run(args));
85
88
  break;
86
89
  case "login":
87
90
  await import("./login-RIJF2F4G.js").then((m) => m.run(args));
@@ -101,15 +104,18 @@ Common:
101
104
 
102
105
  Mind:
103
106
  mind create <name> Create a new mind
104
- mind seed <name> Plant a seed mind (orientation mode)
105
107
  mind start/stop/restart [name] Control a mind
106
108
  mind list List all minds
107
109
  mind status [name] Check a mind's status
108
110
  mind history [name] [--full] View mind activity history
109
- mind sprout Complete orientation
111
+ mind profile [--mind] [...] Set display name, description, avatar
110
112
  mind split/join Create and merge experimental splits
111
113
  mind upgrade/import/export Lifecycle operations
112
114
 
115
+ Seed:
116
+ seed create <name> Plant a new seed mind
117
+ seed sprout Complete orientation and become a full mind
118
+
113
119
  Configuration:
114
120
  chat Conversations, messages, files, and platform bridges
115
121
  clock Schedules, timers, and sleep/wake cycles
@@ -164,10 +170,12 @@ use --mind <name> or VOLUTE_MIND env var to identify the mind.`);
164
170
  mind = cmdArgs[mindIdx + 1];
165
171
  cmdArgs.splice(mindIdx, 2);
166
172
  }
173
+ const { readStdin } = await import("./read-stdin-HQJ7774D.js");
174
+ const stdin = await readStdin();
167
175
  const cmdRes = await daemonFetch(`/api/ext/${command}/commands/${subcommand}`, {
168
176
  method: "POST",
169
177
  headers: { "Content-Type": "application/json" },
170
- body: JSON.stringify({ args: cmdArgs, mind })
178
+ body: JSON.stringify({ args: cmdArgs, mind, stdin })
171
179
  });
172
180
  if (!cmdRes.ok) {
173
181
  const text = await cmdRes.text().catch(() => "");
@@ -6,12 +6,12 @@ import {
6
6
  getClient,
7
7
  urlOf
8
8
  } from "./chunk-4RQBJWQX.js";
9
- import {
10
- parseArgs
11
- } from "./chunk-D424ZQGI.js";
12
9
  import {
13
10
  daemonFetch
14
11
  } from "./chunk-UKVWJRKN.js";
12
+ import {
13
+ parseArgs
14
+ } from "./chunk-D424ZQGI.js";
15
15
  import "./chunk-LRCG2JLP.js";
16
16
  import "./chunk-RPZZSXV3.js";
17
17
  import "./chunk-K3NQKI34.js";
@@ -34,10 +34,10 @@ async function run(args) {
34
34
  await removeSchedule(args.slice(1));
35
35
  break;
36
36
  case "sleep":
37
- await import("./mind-sleep-B7BHJLH7.js").then((m) => m.run(args.slice(1)));
37
+ await import("./mind-sleep-WW2IX7JT.js").then((m) => m.run(args.slice(1)));
38
38
  break;
39
39
  case "wake":
40
- await import("./mind-wake-GY3RFX7Y.js").then((m) => m.run(args.slice(1)));
40
+ await import("./mind-wake-VSSGW465.js").then((m) => m.run(args.slice(1)));
41
41
  break;
42
42
  case "--help":
43
43
  case "-h":
@@ -1,26 +1,30 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  deliverMessage
4
- } from "./chunk-QBQ424EM.js";
4
+ } from "./chunk-3Z2DPESO.js";
5
5
  import "./chunk-SKLSMHXO.js";
6
- import "./chunk-R7E6CRVQ.js";
6
+ import "./chunk-LOEJ4HPQ.js";
7
7
  import {
8
8
  getAuthHeaders,
9
9
  getWebhookUrl
10
- } from "./chunk-S6NFERDC.js";
11
- import "./chunk-SX5TKJBZ.js";
10
+ } from "./chunk-RVGLDGMI.js";
11
+ import "./chunk-GY5HBI7A.js";
12
+ import "./chunk-7J3HEVR7.js";
13
+ import "./chunk-G53F3JA4.js";
14
+ import "./chunk-OYAKCAVY.js";
12
15
  import "./chunk-2NGTS5UU.js";
13
- import "./chunk-WKF5FEFK.js";
16
+ import "./chunk-A2A4KLFE.js";
14
17
  import "./chunk-PB65JZK2.js";
15
- import "./chunk-TDRYEPH4.js";
16
- import "./chunk-QZANELPX.js";
17
- import "./chunk-D5G5YOPL.js";
18
- import "./chunk-IYDIE3HG.js";
18
+ import "./chunk-JYVGHWEJ.js";
19
+ import "./chunk-KVK2DLWI.js";
20
+ import "./chunk-C7I35G4R.js";
21
+ import "./chunk-QTUVYI7W.js";
19
22
  import {
20
23
  logger_default
21
24
  } from "./chunk-YUIHSKR6.js";
22
- import "./chunk-LGB6JBHI.js";
23
- import "./chunk-TSXLLQZW.js";
25
+ import "./chunk-KIEPMIM5.js";
26
+ import "./chunk-VH33ZWMW.js";
27
+ import "./chunk-N432I7QH.js";
24
28
  import "./chunk-LRCG2JLP.js";
25
29
  import "./chunk-RPZZSXV3.js";
26
30
  import "./chunk-K3NQKI34.js";
@@ -26,8 +26,8 @@ import {
26
26
  markConversationRead,
27
27
  removeParticipant,
28
28
  setConversationPrivate
29
- } from "./chunk-S6NFERDC.js";
30
- import "./chunk-QZANELPX.js";
29
+ } from "./chunk-RVGLDGMI.js";
30
+ import "./chunk-KVK2DLWI.js";
31
31
  import "./chunk-YUIHSKR6.js";
32
32
  import "./chunk-LRCG2JLP.js";
33
33
  import "./chunk-RPZZSXV3.js";
@@ -13,7 +13,7 @@ async function run(args) {
13
13
  const name = positional[0];
14
14
  let template = flags.template;
15
15
  if (!template) {
16
- const { resolveTemplate } = await import("./ai-service-ZIPCV3MX.js");
16
+ const { resolveTemplate } = await import("./ai-service-SBY2WG7O.js");
17
17
  template = resolveTemplate();
18
18
  }
19
19
  if (!name) {
@@ -2,12 +2,12 @@
2
2
  import {
3
3
  resolveMindName
4
4
  } from "./chunk-NAOW2CLO.js";
5
- import {
6
- parseArgs
7
- } from "./chunk-D424ZQGI.js";
8
5
  import {
9
6
  daemonFetch
10
7
  } from "./chunk-UKVWJRKN.js";
8
+ import {
9
+ parseArgs
10
+ } from "./chunk-D424ZQGI.js";
11
11
  import "./chunk-LRCG2JLP.js";
12
12
  import "./chunk-RPZZSXV3.js";
13
13
  import "./chunk-K3NQKI34.js";
@@ -33,7 +33,7 @@ async function run(args) {
33
33
  process.exit(1);
34
34
  }
35
35
  if (flags.channel) {
36
- const res = await daemonFetch("/api/volute/channels", {
36
+ const res = await daemonFetch("/api/v1/channels", {
37
37
  method: "POST",
38
38
  headers: { "Content-Type": "application/json" },
39
39
  body: JSON.stringify({
@@ -1,19 +1,20 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  run
4
- } from "./chunk-JJ7W6WSB.js";
4
+ } from "./chunk-NPKSDYA2.js";
5
5
  import {
6
6
  stopDaemon
7
- } from "./chunk-2FLJ63GU.js";
7
+ } from "./chunk-JUKK7FPS.js";
8
8
  import {
9
9
  getServiceMode,
10
10
  modeLabel,
11
11
  pollHealth,
12
12
  readDaemonConfig,
13
13
  restartService
14
- } from "./chunk-LSGWR54X.js";
15
- import "./chunk-LGB6JBHI.js";
16
- import "./chunk-TSXLLQZW.js";
14
+ } from "./chunk-NNB4WIG7.js";
15
+ import "./chunk-KIEPMIM5.js";
16
+ import "./chunk-VH33ZWMW.js";
17
+ import "./chunk-N432I7QH.js";
17
18
  import "./chunk-D424ZQGI.js";
18
19
  import "./chunk-LRCG2JLP.js";
19
20
  import "./chunk-RPZZSXV3.js";