volute 0.24.0 → 0.26.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 (114) hide show
  1. package/README.md +15 -20
  2. package/dist/{activity-events-4O37J7PD.js → activity-events-ZMBAKLUF.js} +2 -2
  3. package/dist/api.d.ts +590 -10
  4. package/dist/{auth-HM2RSPY7.js → auth-4TV573WE.js} +2 -2
  5. package/dist/{channel-HZOSHGNF.js → channel-ZVZV42UD.js} +3 -3
  6. package/dist/{chunk-NOBRGACV.js → chunk-2VO7453N.js} +56 -19
  7. package/dist/{chunk-OOW675I3.js → chunk-3CFRE2VC.js} +931 -775
  8. package/dist/{chunk-PHHKNGA3.js → chunk-3TV4GLFO.js} +2 -2
  9. package/dist/{chunk-4TJ72QQ3.js → chunk-5Y3PBKW6.js} +3 -3
  10. package/dist/{chunk-BFK6SOEJ.js → chunk-J2CO4WEV.js} +1 -1
  11. package/dist/{chunk-TQDITGES.js → chunk-LX22GRG7.js} +10 -13
  12. package/dist/{chunk-E7GOKNOT.js → chunk-NWI2425I.js} +1 -1
  13. package/dist/{chunk-2767L2RZ.js → chunk-OZFKBXD6.js} +1 -1
  14. package/dist/{chunk-XLC342FO.js → chunk-SIAG3QMM.js} +14 -1
  15. package/dist/{chunk-RVKR2R7F.js → chunk-SSI47XP2.js} +10 -2
  16. package/dist/chunk-TZKJLDQN.js +78 -0
  17. package/dist/{chunk-P3W36ZGD.js → chunk-USNBKHYG.js} +33 -5
  18. package/dist/chunk-UTL75LP6.js +113 -0
  19. package/dist/{chunk-3AIBT4TW.js → chunk-V63B7DX3.js} +24 -1
  20. package/dist/{chunk-33XAVCS4.js → chunk-WBHMQ5OZ.js} +49 -0
  21. package/dist/{chunk-TRQEV3CD.js → chunk-WGOGUMPO.js} +22 -3
  22. package/dist/chunk-XOXLRRR2.js +176 -0
  23. package/dist/{chunk-JTDFJWI2.js → chunk-YJA7P64S.js} +1 -1
  24. package/dist/chunk-ZYGKG6VC.js +22 -0
  25. package/dist/cli.js +44 -20
  26. package/dist/{cloud-sync-DIU3OCPV.js → cloud-sync-NI2K3C7G.js} +11 -9
  27. package/dist/{connector-M6XFI6GM.js → connector-G722WXAU.js} +4 -4
  28. package/dist/{create-VDQJER52.js → create-4YBRTTJS.js} +1 -1
  29. package/dist/{daemon-client-JOVQZ52X.js → daemon-client-Z7FAJ6JW.js} +1 -1
  30. package/dist/{daemon-restart-YMPEATQH.js → daemon-restart-BJZ3O4U4.js} +6 -5
  31. package/dist/daemon.js +982 -340
  32. package/dist/{delete-2MRR4JX5.js → delete-27OYNK25.js} +1 -1
  33. package/dist/{down-674SX2IZ.js → down-7UKFMJJZ.js} +4 -4
  34. package/dist/{env-2FPOZK37.js → env-M336ONDP.js} +4 -4
  35. package/dist/{export-IKFAPRAO.js → export-HP4G5DQC.js} +1 -1
  36. package/dist/{file-KT3UIQM3.js → file-HUDKTRAS.js} +3 -3
  37. package/dist/{history-46WZN5CN.js → history-B64GTFTD.js} +3 -3
  38. package/dist/{import-FRDPQPJ2.js → import-XIB7UV4S.js} +2 -2
  39. package/dist/{log-6SGSSR3D.js → log-PBFNILJ4.js} +3 -3
  40. package/dist/{login-UO6AOVEA.js → login-6U7U6BNG.js} +1 -1
  41. package/dist/login-B5E7N7MY.js +46 -0
  42. package/dist/logout-XSJRYS3U.js +39 -0
  43. package/dist/{logs-HRBONI5I.js → logs-3CART7O7.js} +3 -3
  44. package/dist/{merge-KSFJKX6T.js → merge-VK2HSKMA.js} +3 -3
  45. package/dist/{message-delivery-S7BCNV6Y.js → message-delivery-MS5JYPZX.js} +11 -9
  46. package/dist/{mind-KPLCRKQA.js → mind-HZ3QSDDJ.js} +17 -17
  47. package/dist/{mind-activity-tracker-NMDDEV3K.js → mind-activity-tracker-4G6FURY2.js} +3 -3
  48. package/dist/{mind-manager-ZNRIYEK3.js → mind-manager-VVK67AY3.js} +6 -4
  49. package/dist/{mind-sleep-GHPTSAYN.js → mind-sleep-DTV7L44D.js} +3 -3
  50. package/dist/{mind-wake-BJDJFMDF.js → mind-wake-PFN4FN3T.js} +3 -3
  51. package/dist/notes-37FW2UR2.js +230 -0
  52. package/dist/{package-S5YF25XV.js → package-VZWLXPHV.js} +3 -1
  53. package/dist/{pages-TWR6U7DS.js → pages-DIIT5HMQ.js} +1 -1
  54. package/dist/{publish-BZNHKUUK.js → publish-HQV7YREB.js} +4 -4
  55. package/dist/{pull-D32SPFVU.js → pull-2MB4SK3C.js} +3 -3
  56. package/dist/{register-U2UO6TC4.js → register-EFND67FQ.js} +1 -1
  57. package/dist/{restart-5BMNV7KU.js → restart-CCK7D6TV.js} +3 -3
  58. package/dist/sandbox-EHGFF52K.js +19 -0
  59. package/dist/{schedule-YEFDLVMJ.js → schedule-6F7ELB2M.js} +3 -3
  60. package/dist/{seed-6FEKB3YC.js → seed-E5OQGWX3.js} +1 -1
  61. package/dist/{send-IISDYFCL.js → send-IH6XZKPC.js} +6 -20
  62. package/dist/service-LLBV3R7M.js +122 -0
  63. package/dist/setup-F6TWFYGQ.js +371 -0
  64. package/dist/setup-YGAAIKKZ.js +17 -0
  65. package/dist/{shared-LWMNTTZN.js → shared-UMO4S7CC.js} +4 -4
  66. package/dist/{skill-BQOFACEI.js → skill-42LGFBQC.js} +13 -5
  67. package/dist/skills/dreaming/SKILL.md +68 -0
  68. package/dist/skills/dreaming/references/INSTALL.md +56 -0
  69. package/dist/skills/dreaming/scripts/dream.ts +289 -0
  70. package/dist/skills/dreaming/scripts/wake-context-dreams.sh +30 -0
  71. package/dist/skills/imagegen/SKILL.md +37 -0
  72. package/dist/skills/imagegen/references/INSTALL.md +13 -0
  73. package/dist/skills/imagegen/scripts/imagegen.ts +136 -0
  74. package/dist/skills/notes/SKILL.md +34 -0
  75. package/dist/skills/resonance/SKILL.md +73 -0
  76. package/dist/skills/resonance/assets/default-config.json +21 -0
  77. package/dist/skills/resonance/references/INSTALL.md +23 -0
  78. package/dist/skills/resonance/scripts/resonance.ts +1250 -0
  79. package/dist/skills/volute-mind/SKILL.md +23 -3
  80. package/dist/{sleep-manager-XXSWQQLE.js → sleep-manager-EE4NRN2Q.js} +11 -9
  81. package/dist/{sprout-CGSW4CF5.js → sprout-QL74KR2X.js} +5 -5
  82. package/dist/{start-C7XITZ5O.js → start-O5JQASRC.js} +3 -3
  83. package/dist/{status-SIRPLEZC.js → status-FZBEBM7Q.js} +3 -3
  84. package/dist/{status-LYS4NUOZ.js → status-WXD4HXRL.js} +3 -3
  85. package/dist/{stop-CVKBSLXY.js → stop-2SOG5NYF.js} +3 -3
  86. package/dist/up-SDMCSVI3.js +17 -0
  87. package/dist/{update-7XCZMYBT.js → update-5VUDAI3D.js} +6 -6
  88. package/dist/{upgrade-7RUIXGOO.js → upgrade-QCCO33BK.js} +1 -1
  89. package/dist/{variant-UGREB4G5.js → variant-WWLDY6D5.js} +4 -4
  90. package/dist/{version-notify-SZ75QRGO.js → version-notify-USFZBWMG.js} +11 -9
  91. package/dist/web-assets/assets/index-CUQ31ieL.js +69 -0
  92. package/dist/web-assets/assets/index-CW8NSl1o.css +1 -0
  93. package/dist/web-assets/favicon.png +0 -0
  94. package/dist/web-assets/index.html +5 -4
  95. package/dist/web-assets/logo.png +0 -0
  96. package/drizzle/0015_notes.sql +23 -0
  97. package/drizzle/0016_note_reactions_and_replies.sql +15 -0
  98. package/drizzle/meta/_journal.json +14 -0
  99. package/package.json +3 -1
  100. package/templates/_base/.init/.config/hooks/wake-context.sh +7 -0
  101. package/templates/_base/home/public/.gitkeep +0 -0
  102. package/templates/_base/src/lib/startup.ts +8 -0
  103. package/templates/claude/src/agent.ts +51 -1
  104. package/templates/claude/src/server.ts +1 -0
  105. package/templates/pi/package.json.tmpl +1 -0
  106. package/templates/pi/src/agent.ts +48 -1
  107. package/templates/pi/src/lib/subagents.ts +150 -0
  108. package/templates/pi/src/server.ts +1 -0
  109. package/dist/chunk-NWPT4ASZ.js +0 -89
  110. package/dist/service-FASYWLTC.js +0 -247
  111. package/dist/setup-BMLM2UTK.js +0 -230
  112. package/dist/up-OMHACRJL.js +0 -15
  113. package/dist/web-assets/assets/index-Bx9WDoaQ.js +0 -69
  114. package/dist/web-assets/assets/index-Clz8OhmJ.css +0 -1
@@ -1,20 +1,24 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
- loadMergedEnv
4
- } from "./chunk-PHU4DEAJ.js";
3
+ isSandboxEnabled,
4
+ wrapForSandbox
5
+ } from "./chunk-UTL75LP6.js";
5
6
  import {
6
7
  getDb,
7
8
  mindHistory,
8
9
  systemPrompts
9
- } from "./chunk-33XAVCS4.js";
10
+ } from "./chunk-WBHMQ5OZ.js";
10
11
  import {
11
12
  logger_default
12
13
  } from "./chunk-YUIHSKR6.js";
14
+ import {
15
+ loadMergedEnv
16
+ } from "./chunk-PHU4DEAJ.js";
13
17
  import {
14
18
  chownMindDir,
15
19
  isIsolationEnabled,
16
20
  wrapForIsolation
17
- } from "./chunk-NWPT4ASZ.js";
21
+ } from "./chunk-XOXLRRR2.js";
18
22
  import {
19
23
  findMind,
20
24
  findVariant,
@@ -82,8 +86,7 @@ var PROMPT_KEYS = [
82
86
  "reply_instructions",
83
87
  "channel_invite",
84
88
  "pre_sleep",
85
- "wake_summary",
86
- "wake_trigger_summary"
89
+ "wake_summary"
87
90
  ];
88
91
  var PROMPT_DEFAULTS = {
89
92
  seed_soul: {
@@ -179,15 +182,9 @@ To reject, delete \${filePath}`,
179
182
  category: "system"
180
183
  },
181
184
  wake_summary: {
182
- content: "Good morning \u2014 it's ${currentDate}. You slept from ${sleepTime} to now (${duration}).\n\n${queuedSummary}",
185
+ content: "Good morning \u2014 it's ${currentDate}. You slept from ${sleepTime} to now (${duration}).\n\n${sleepActivity}",
183
186
  description: "Wake-up summary after scheduled sleep",
184
- variables: ["currentDate", "sleepTime", "duration", "queuedSummary"],
185
- category: "system"
186
- },
187
- wake_trigger_summary: {
188
- content: "You were woken during sleep by a message on ${triggerChannel}. It's ${currentDate} \u2014 you've been asleep since ${sleepTime} (${duration}).\n\nYou have this full turn to respond and handle anything else. You'll return to sleep when you go idle.\n\n${queuedSummary}",
189
- description: "Wake-up summary when woken by a trigger message",
190
- variables: ["currentDate", "triggerChannel", "sleepTime", "duration", "queuedSummary"],
187
+ variables: ["currentDate", "sleepTime", "duration", "sleepActivity"],
191
188
  category: "system"
192
189
  }
193
190
  };
@@ -295,6 +292,31 @@ var RotatingLog = class extends Writable {
295
292
  }
296
293
  };
297
294
 
295
+ // src/lib/daemon/mind-tokens.ts
296
+ import { randomUUID } from "crypto";
297
+ var tokenToMind = /* @__PURE__ */ new Map();
298
+ var mindToToken = /* @__PURE__ */ new Map();
299
+ function generateMindToken(mindName) {
300
+ revokeMindToken(mindName);
301
+ const token = randomUUID();
302
+ tokenToMind.set(token, mindName);
303
+ mindToToken.set(mindName, token);
304
+ return token;
305
+ }
306
+ function revokeMindToken(mindName) {
307
+ const token = mindToToken.get(mindName);
308
+ if (token) {
309
+ tokenToMind.delete(token);
310
+ mindToToken.delete(mindName);
311
+ }
312
+ }
313
+ function resolveMindToken(token) {
314
+ return tokenToMind.get(token) ?? null;
315
+ }
316
+ function getMindToken(mindName) {
317
+ return mindToToken.get(mindName) ?? null;
318
+ }
319
+
298
320
  // src/lib/daemon/restart-tracker.ts
299
321
  var DEFAULT_MAX_ATTEMPTS = 5;
300
322
  var DEFAULT_BASE_DELAY = 3e3;
@@ -420,6 +442,7 @@ var MindManager = class {
420
442
  }
421
443
  }
422
444
  const logStream = new RotatingLog(resolve(logsDir, "mind.log"));
445
+ const mindToken = generateMindToken(name);
423
446
  const mindEnv = loadMergedEnv(name);
424
447
  const env = {
425
448
  ...process.env,
@@ -428,6 +451,7 @@ var MindManager = class {
428
451
  VOLUTE_STATE_DIR: stateDir(name),
429
452
  VOLUTE_MIND_DIR: dir,
430
453
  VOLUTE_MIND_PORT: String(port),
454
+ VOLUTE_DAEMON_TOKEN: mindToken,
431
455
  // Strip CLAUDECODE so the Agent SDK can spawn Claude Code subprocesses
432
456
  CLAUDECODE: void 0
433
457
  };
@@ -436,7 +460,16 @@ var MindManager = class {
436
460
  }
437
461
  const tsxBin = resolve(dir, "node_modules", ".bin", "tsx");
438
462
  const tsxArgs = ["src/server.ts", "--port", String(port)];
439
- const [spawnCmd, spawnArgs] = wrapForIsolation(tsxBin, tsxArgs, name);
463
+ let spawnCmd;
464
+ let spawnArgs;
465
+ if (isIsolationEnabled()) {
466
+ [spawnCmd, spawnArgs] = wrapForIsolation(tsxBin, tsxArgs, name);
467
+ } else if (isSandboxEnabled()) {
468
+ [spawnCmd, spawnArgs] = await wrapForSandbox(tsxBin, tsxArgs, dir, name);
469
+ } else {
470
+ spawnCmd = tsxBin;
471
+ spawnArgs = tsxArgs;
472
+ }
440
473
  const spawnOpts = {
441
474
  cwd: dir,
442
475
  stdio: ["ignore", "pipe", "pipe"],
@@ -548,16 +581,17 @@ var MindManager = class {
548
581
  if (this.shuttingDown || this.stopping.has(name)) return;
549
582
  mlog.error(`mind ${name} exited with code ${code}`);
550
583
  try {
551
- const { getSleepManagerIfReady } = await import("./sleep-manager-XXSWQQLE.js");
552
- if (getSleepManagerIfReady()?.isSleeping(name)) {
584
+ const { getSleepManagerIfReady } = await import("./sleep-manager-EE4NRN2Q.js");
585
+ const sleepState = getSleepManagerIfReady()?.getState(name);
586
+ if (sleepState?.sleeping) {
553
587
  mlog.info(`${name} is sleeping \u2014 skipping crash recovery`);
554
588
  return;
555
589
  }
556
590
  } catch (err) {
557
591
  mlog.warn(`failed to check sleep state for ${name}`, logger_default.errorData(err));
558
592
  }
559
- import("./mind-activity-tracker-NMDDEV3K.js").then(({ markIdle }) => markIdle(name)).catch((err) => mlog.warn(`failed to mark ${name} idle after crash`, logger_default.errorData(err)));
560
- import("./activity-events-4O37J7PD.js").then(
593
+ import("./mind-activity-tracker-4G6FURY2.js").then(({ markIdle }) => markIdle(name)).catch((err) => mlog.warn(`failed to mark ${name} idle after crash`, logger_default.errorData(err)));
594
+ import("./activity-events-ZMBAKLUF.js").then(
561
595
  ({ publish }) => publish({ type: "mind_stopped", mind: name, summary: `${name} crashed (exit ${code})` })
562
596
  ).catch((err) => mlog.warn(`failed to publish crash event for ${name}`, logger_default.errorData(err)));
563
597
  const { shouldRestart, delay, attempt } = this.restartTracker.recordCrash(name);
@@ -605,6 +639,7 @@ var MindManager = class {
605
639
  }, 5e3);
606
640
  });
607
641
  this.stopping.delete(name);
642
+ revokeMindToken(name);
608
643
  if (this.restartTracker.reset(name)) this.saveCrashAttempts();
609
644
  rmSync2(mindPidPath(name), { force: true });
610
645
  if (!this.shuttingDown) {
@@ -686,6 +721,8 @@ function getMindManager() {
686
721
 
687
722
  export {
688
723
  RotatingLog,
724
+ resolveMindToken,
725
+ getMindToken,
689
726
  RestartTracker,
690
727
  PROMPT_KEYS,
691
728
  PROMPT_DEFAULTS,