volute 0.40.2 → 0.41.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 (145) hide show
  1. package/dist/{accept-IVHOHXQS.js → accept-AHAOUFBK.js} +1 -1
  2. package/dist/{activity-events-DS4QRWBY.js → activity-events-EQGBUEZ7.js} +4 -4
  3. package/dist/{ai-service-EVLKMAJD.js → ai-service-ZHEPFC3U.js} +5 -5
  4. package/dist/{api-client-NFM6GX2N.js → api-client-LC5YRA32.js} +1 -1
  5. package/dist/{archive-UDHFZN4G.js → archive-LJAXDDEY.js} +4 -4
  6. package/dist/{auth-X6ZITZ7D.js → auth-VYW2ECCE.js} +5 -5
  7. package/dist/{bridge-MSZC4HUT.js → bridge-F3ZJEKDN.js} +1 -1
  8. package/dist/{chat-F2EEN76G.js → chat-FO722GU2.js} +9 -9
  9. package/dist/{chunk-4UMXOMZ6.js → chunk-2I7OKOYV.js} +2 -2
  10. package/dist/{chunk-3Y7UDHO7.js → chunk-2R4JIZCB.js} +3 -3
  11. package/dist/{chunk-QYI65HCL.js → chunk-2RQIIKFC.js} +2 -2
  12. package/dist/{chunk-6SYHHEQ7.js → chunk-4ED2DBNC.js} +1 -1
  13. package/dist/{chunk-E25SO3QW.js → chunk-6TPRURK5.js} +3 -3
  14. package/dist/{chunk-ITH5ZLZJ.js → chunk-6ZAT5PYV.js} +1 -1
  15. package/dist/{chunk-WOWRLBL2.js → chunk-AXNAK3HT.js} +8 -8
  16. package/dist/{chunk-PKGA23XM.js → chunk-CYUNO4BM.js} +1 -1
  17. package/dist/{chunk-MNUXL4XN.js → chunk-FEQPNCXB.js} +1 -1
  18. package/dist/{chunk-PEKG3GNZ.js → chunk-FU5YDH6Q.js} +3 -3
  19. package/dist/{chunk-NERYUSER.js → chunk-GMFCSXWB.js} +1 -1
  20. package/dist/{chunk-YHWGN4FX.js → chunk-GSOEUMVO.js} +1 -1
  21. package/dist/{chunk-UX7FPDDO.js → chunk-JIGVTFIR.js} +5 -5
  22. package/dist/chunk-K3NQKI34.js +10 -0
  23. package/dist/{chunk-2HZRJ35V.js → chunk-MHFAWJCC.js} +1 -1
  24. package/dist/{chunk-I57LLNAQ.js → chunk-MU2B7A3L.js} +1 -1
  25. package/dist/{chunk-DNU6XLE2.js → chunk-N64Q7FMP.js} +1 -1
  26. package/dist/{chunk-SVXOBKQY.js → chunk-OQ7UEW67.js} +2 -2
  27. package/dist/{chunk-42UMLIQR.js → chunk-PP5CGT2P.js} +1 -1
  28. package/dist/{chunk-TOANT6FD.js → chunk-SWY4DJ67.js} +2 -2
  29. package/dist/{chunk-KMHC36CA.js → chunk-U7UASV36.js} +1 -1
  30. package/dist/{chunk-KAB6UGOL.js → chunk-UU3Q65US.js} +1 -1
  31. package/dist/{chunk-JYQQDI3M.js → chunk-V67XMNGP.js} +2 -2
  32. package/dist/{chunk-B4WPXYPI.js → chunk-VDODEQSJ.js} +6 -1
  33. package/dist/{chunk-ZXPWTH4I.js → chunk-VK2YD7VJ.js} +1 -1
  34. package/dist/{chunk-ZOI6D2YH.js → chunk-W5Z2H3LU.js} +33 -33
  35. package/dist/{chunk-46DYYHN6.js → chunk-WSRGS4XP.js} +34 -0
  36. package/dist/{chunk-AEAZRTEV.js → chunk-Y2XLASFJ.js} +1 -1
  37. package/dist/{chunk-YMMYN2V3.js → chunk-YATR5BXD.js} +5 -5
  38. package/dist/{chunk-NRJ3ZYFP.js → chunk-YN6ISG7A.js} +9 -9
  39. package/dist/cli.js +24 -24
  40. package/dist/{clock-YLDJUKBW.js → clock-BMLJ2TR6.js} +3 -3
  41. package/dist/{cloud-sync-GOSJZIHH.js → cloud-sync-GV6O2HN2.js} +19 -19
  42. package/dist/{config-PO4EZLIK.js → config-QB7W3Z7P.js} +4 -4
  43. package/dist/connectors/discord-bridge.js +1 -1
  44. package/dist/connectors/slack-bridge.js +1 -1
  45. package/dist/connectors/telegram-bridge.js +1 -1
  46. package/dist/{conversations-AYLXPOGC.js → conversations-KW7IYESK.js} +5 -5
  47. package/dist/{create-ZMTGINV3.js → create-C3BBFYV7.js} +1 -1
  48. package/dist/{create-Y3RGU2GI.js → create-CTPXWFTL.js} +4 -4
  49. package/dist/{daemon-client-H6MEKK2W.js → daemon-client-2MIPKY3E.js} +1 -1
  50. package/dist/{daemon-restart-FSWVXPUE.js → daemon-restart-W47YDE5E.js} +9 -9
  51. package/dist/daemon.js +113 -80
  52. package/dist/db-D4FVCA5I.js +9 -0
  53. package/dist/{db-FSYOTHSN.js → db-IJL6B26S.js} +1 -1
  54. package/dist/{delete-TXVOH2OC.js → delete-NLXES2C7.js} +3 -3
  55. package/dist/delivery-manager-EB52CQ5X.js +33 -0
  56. package/dist/{delivery-router-T6CYTS3M.js → delivery-router-Y66OXJPM.js} +4 -4
  57. package/dist/down-JVHNXOFU.js +17 -0
  58. package/dist/echo-text-QVPS6QDM.js +32 -0
  59. package/dist/{env-77IOWG4U.js → env-IQ6Q2333.js} +1 -1
  60. package/dist/exec-R2WWZ6FH.js +17 -0
  61. package/dist/{export-TZKOCSCE.js → export-ZZ5WWBUH.js} +6 -6
  62. package/dist/{extension-35NB6GHW.js → extension-LZYHBNLV.js} +1 -1
  63. package/dist/{extensions-MD757RFY.js → extensions-AGANCIQA.js} +19 -19
  64. package/dist/{files-WNNVJWJB.js → files-Q2Z4LQZP.js} +4 -4
  65. package/dist/{import-BNNFCQ7U.js → import-MFYCBS4K.js} +11 -11
  66. package/dist/{isolation-4Q4P7HRV.js → isolation-7F3MA4G7.js} +4 -4
  67. package/dist/{join-E2EJEXZO.js → join-6SZCA5FX.js} +3 -3
  68. package/dist/{list-BYCEDASJ.js → list-KHJZJPEJ.js} +1 -1
  69. package/dist/{login-JNSIYFVH.js → login-GYTH67ES.js} +1 -1
  70. package/dist/{login-Y6UAYQVO.js → login-WY3DADVB.js} +3 -3
  71. package/dist/{logout-VHGWVH63.js → logout-TFZHWNVL.js} +3 -3
  72. package/dist/{logout-M6FI62BL.js → logout-YHQLOFLR.js} +1 -1
  73. package/dist/message-delivery-X4CZE2L6.js +41 -0
  74. package/dist/{mind-OOB2LEVC.js → mind-XIKEPJNS.js} +19 -19
  75. package/dist/{mind-activity-tracker-GJ5RJS32.js → mind-activity-tracker-RSIWUUJK.js} +5 -5
  76. package/dist/{mind-history-W4JPTPTV.js → mind-history-WHCNZ6I5.js} +1 -1
  77. package/dist/{mind-list-QROHCLGT.js → mind-list-H3HC2ZRG.js} +1 -1
  78. package/dist/mind-manager-VU3RGCXD.js +31 -0
  79. package/dist/{mind-profile-3LNKXNPA.js → mind-profile-7VYRJGFZ.js} +2 -2
  80. package/dist/mind-service-L7LMMDYJ.js +37 -0
  81. package/dist/{mind-sleep-PVCMLTAH.js → mind-sleep-ZL5ZXFTM.js} +1 -1
  82. package/dist/{mind-status-RAJFLRCN.js → mind-status-ZWULKOUO.js} +1 -1
  83. package/dist/{mind-wake-HZUOVE7J.js → mind-wake-HK5ORGUK.js} +1 -1
  84. package/dist/{package-PPA3VWS2.js → package-2X7UNSTQ.js} +3 -2
  85. package/dist/{read-OOINVR2H.js → read-CP7MYMJQ.js} +1 -1
  86. package/dist/{read-stdin-P6HCZUAA.js → read-stdin-4B5UYPPM.js} +1 -1
  87. package/dist/{register-ISOH34RF.js → register-XOBFEMI4.js} +1 -1
  88. package/dist/{registry-GV35XFT7.js → registry-RAXNFN7K.js} +5 -3
  89. package/dist/{reject-ZBWP62X5.js → reject-43AGXB6B.js} +1 -1
  90. package/dist/{restart-QBJV5455.js → restart-O5QIYQJT.js} +1 -1
  91. package/dist/{sandbox-5R32QKWQ.js → sandbox-O3GZTS7J.js} +5 -5
  92. package/dist/scheduler-SXELVRWO.js +31 -0
  93. package/dist/{schema-LYQUDL7G.js → schema-HHYJDG7B.js} +2 -2
  94. package/dist/{seed-BTAHXCO5.js → seed-I4CNKTKZ.js} +2 -2
  95. package/dist/{seed-check-3WXXRHTC.js → seed-check-HZPVFJKZ.js} +2 -2
  96. package/dist/{seed-cmd-VEJNJBAQ.js → seed-cmd-YTQYWCZF.js} +4 -4
  97. package/dist/{seed-create-LOU5RALI.js → seed-create-MDBTVADS.js} +6 -6
  98. package/dist/{seed-sprout-BXF5TBXD.js → seed-sprout-N6O5FBPY.js} +11 -11
  99. package/dist/{send-WO3CVG73.js → send-5XA7LRNB.js} +4 -4
  100. package/dist/{service-WMV6R6VJ.js → service-AY5TGWJX.js} +6 -6
  101. package/dist/service-install-NLGAVTQS.js +17 -0
  102. package/dist/{setup-OTEC3ZPM.js → setup-3434PQ5Q.js} +4 -4
  103. package/dist/{setup-W3545462.js → setup-47NBOCZL.js} +9 -9
  104. package/dist/{skill-QHACP7EU.js → skill-ICN6Y2ZF.js} +1 -1
  105. package/dist/{skills-3P7VQA4U.js → skills-YTLBAF32.js} +7 -7
  106. package/dist/sleep-manager-T3AXQB3R.js +35 -0
  107. package/dist/spirit-KTBHLULO.js +24 -0
  108. package/dist/{split-7AO4IO42.js → split-5YBEQTBF.js} +3 -3
  109. package/dist/{sprout-AQICF7WZ.js → sprout-4ZUJUNDQ.js} +2 -2
  110. package/dist/src-4LFGGNW7.js +2201 -0
  111. package/dist/{src-XNUXP2FP.js → src-O4PRLMKM.js} +1 -1
  112. package/dist/{src-2IMB3V27.js → src-OYWRPLC6.js} +1 -1
  113. package/dist/{start-2U57BBK7.js → start-LMXXRR3X.js} +1 -1
  114. package/dist/{status-BRYYYO7C.js → status-VMOZUIZ2.js} +7 -7
  115. package/dist/{stop-QILBDUAR.js → stop-TWDKVEUX.js} +1 -1
  116. package/dist/system-chat-HCPHUQGI.js +35 -0
  117. package/dist/{systems-3XTAHA35.js → systems-Y2WZV2K4.js} +4 -4
  118. package/dist/{tailscale-X4HRKRTW.js → tailscale-PK3AI5EV.js} +3 -3
  119. package/dist/template-hash-JARTCRGS.js +9 -0
  120. package/dist/{turn-tracker-AI6WWEBA.js → turn-tracker-SZBSL7LK.js} +6 -6
  121. package/dist/up-VGVPOB6J.js +19 -0
  122. package/dist/{update-OY2JYXYK.js → update-3ANTQO54.js} +7 -7
  123. package/dist/{update-check-IUB7QHAF.js → update-check-4O6DKUOF.js} +4 -4
  124. package/dist/{upgrade-25J6AE47.js → upgrade-RXFZR5FI.js} +3 -3
  125. package/dist/{variant-5LQOPCQA.js → variant-HHDTW74J.js} +1 -1
  126. package/dist/{version-notify-DK6AHWX7.js → version-notify-SSNAWZMX.js} +21 -21
  127. package/dist/{volute-config-7FO6QKWU.js → volute-config-TS62GS6A.js} +1 -1
  128. package/package.json +2 -1
  129. package/dist/chunk-LMMQX4CK.js +0 -49
  130. package/dist/db-ZEPKEJJD.js +0 -9
  131. package/dist/delivery-manager-3NTCDKHR.js +0 -33
  132. package/dist/down-6DYO2QV7.js +0 -17
  133. package/dist/echo-text-JUNRP4ER.js +0 -32
  134. package/dist/exec-5DGKQ5V3.js +0 -17
  135. package/dist/message-delivery-Q7TU24IA.js +0 -41
  136. package/dist/mind-manager-4NFK4GEU.js +0 -31
  137. package/dist/mind-service-X7FH3NA4.js +0 -37
  138. package/dist/scheduler-PDARH4CE.js +0 -31
  139. package/dist/service-install-W3FQXJKB.js +0 -17
  140. package/dist/sleep-manager-TTNOLIX5.js +0 -35
  141. package/dist/spirit-T6GK5GEP.js +0 -24
  142. package/dist/src-OS75U2O7.js +0 -241910
  143. package/dist/system-chat-7CA2PP6A.js +0 -35
  144. package/dist/template-hash-DMHSLRDX.js +0 -9
  145. package/dist/up-PKNNDN6M.js +0 -19
@@ -1,16 +1,16 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  loadMergedEnv
4
- } from "./chunk-ITH5ZLZJ.js";
4
+ } from "./chunk-6ZAT5PYV.js";
5
5
  import {
6
6
  spiritDir
7
- } from "./chunk-NRJ3ZYFP.js";
7
+ } from "./chunk-YN6ISG7A.js";
8
8
  import {
9
9
  hashSkillDir,
10
10
  importSkillFromDir,
11
11
  removeSharedSkill,
12
12
  sharedSkillsDir
13
- } from "./chunk-UX7FPDDO.js";
13
+ } from "./chunk-JIGVTFIR.js";
14
14
  import {
15
15
  addMessage,
16
16
  createChannel,
@@ -20,7 +20,7 @@ import {
20
20
  getParticipants,
21
21
  joinChannel,
22
22
  publish as publish2
23
- } from "./chunk-3Y7UDHO7.js";
23
+ } from "./chunk-2R4JIZCB.js";
24
24
  import {
25
25
  readVoluteConfig,
26
26
  writeVoluteConfig
@@ -28,53 +28,53 @@ import {
28
28
  import {
29
29
  isSandboxEnabled,
30
30
  wrapForSandbox
31
- } from "./chunk-KMHC36CA.js";
31
+ } from "./chunk-U7UASV36.js";
32
32
  import {
33
33
  markIdle,
34
34
  onMindEvent
35
- } from "./chunk-42UMLIQR.js";
35
+ } from "./chunk-PP5CGT2P.js";
36
36
  import {
37
37
  extractTextContent,
38
38
  getRoutingConfig,
39
39
  resolveDeliveryMode,
40
40
  resolveRoute
41
- } from "./chunk-NERYUSER.js";
41
+ } from "./chunk-GMFCSXWB.js";
42
42
  import {
43
43
  clearMind,
44
44
  getActiveTurnId,
45
45
  getPrompt,
46
46
  publish as publish3,
47
47
  summarizeOrphanedTurns
48
- } from "./chunk-YMMYN2V3.js";
48
+ } from "./chunk-YATR5BXD.js";
49
49
  import {
50
50
  exec
51
- } from "./chunk-AEAZRTEV.js";
51
+ } from "./chunk-Y2XLASFJ.js";
52
52
  import {
53
53
  chownMindDir,
54
54
  isIsolationEnabled,
55
55
  mindUserName,
56
56
  wrapForIsolation
57
- } from "./chunk-6SYHHEQ7.js";
57
+ } from "./chunk-4ED2DBNC.js";
58
58
  import {
59
59
  aiCompleteUtility,
60
60
  getAiConfig,
61
61
  resolveApiKey
62
- } from "./chunk-ZXPWTH4I.js";
62
+ } from "./chunk-VK2YD7VJ.js";
63
63
  import {
64
64
  readGlobalConfig,
65
65
  writeGlobalConfig
66
- } from "./chunk-DNU6XLE2.js";
66
+ } from "./chunk-N64Q7FMP.js";
67
67
  import {
68
68
  getOrCreateMindUser,
69
69
  getOrCreateSystemUser,
70
70
  getUser,
71
71
  getUserByUsername,
72
72
  syncMindProfile
73
- } from "./chunk-E25SO3QW.js";
73
+ } from "./chunk-6TPRURK5.js";
74
74
  import {
75
75
  publish,
76
76
  subscribe
77
- } from "./chunk-QYI65HCL.js";
77
+ } from "./chunk-2RQIIKFC.js";
78
78
  import {
79
79
  logger_default
80
80
  } from "./chunk-T2TP6ZC6.js";
@@ -87,7 +87,7 @@ import {
87
87
  stateDir,
88
88
  voluteHome,
89
89
  voluteSystemDir
90
- } from "./chunk-B4WPXYPI.js";
90
+ } from "./chunk-VDODEQSJ.js";
91
91
  import {
92
92
  activity,
93
93
  conversationParticipants,
@@ -97,7 +97,7 @@ import {
97
97
  mindNotices,
98
98
  turns,
99
99
  users
100
- } from "./chunk-2HZRJ35V.js";
100
+ } from "./chunk-MHFAWJCC.js";
101
101
 
102
102
  // packages/daemon/src/lib/delivery/message-delivery.ts
103
103
  import { and as and4, desc, eq as eq4, inArray as inArray2, sql as sql3 } from "drizzle-orm";
@@ -787,7 +787,7 @@ var MindManager = class {
787
787
  if (this.shuttingDown || this.stopping.has(name)) return;
788
788
  mlog.error(`mind ${name} exited with code ${code}`);
789
789
  try {
790
- const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-TTNOLIX5.js");
790
+ const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-T3AXQB3R.js");
791
791
  const sleepState = getSleepManagerIfReady2()?.getState(name);
792
792
  if (sleepState?.sleeping) {
793
793
  mlog.info(`${name} is sleeping \u2014 skipping crash recovery`);
@@ -811,15 +811,15 @@ var MindManager = class {
811
811
  (err) => mlog.warn(`failed to clear turn state for ${name} after crash`, logger_default.errorData(err))
812
812
  );
813
813
  try {
814
- const { getDeliveryManager: getDeliveryManager2 } = await import("./delivery-manager-3NTCDKHR.js");
814
+ const { getDeliveryManager: getDeliveryManager2 } = await import("./delivery-manager-EB52CQ5X.js");
815
815
  getDeliveryManager2().clearMindSessions(name);
816
816
  } catch (err) {
817
817
  if (!(err instanceof Error && err.message.includes("not initialized"))) {
818
818
  mlog.warn(`failed to clear delivery state for ${name} after crash`, logger_default.errorData(err));
819
819
  }
820
820
  }
821
- import("./mind-activity-tracker-GJ5RJS32.js").then(({ markIdle: markIdle2 }) => markIdle2(name)).catch((err) => mlog.warn(`failed to mark ${name} idle after crash`, logger_default.errorData(err)));
822
- import("./activity-events-DS4QRWBY.js").then(
821
+ import("./mind-activity-tracker-RSIWUUJK.js").then(({ markIdle: markIdle2 }) => markIdle2(name)).catch((err) => mlog.warn(`failed to mark ${name} idle after crash`, logger_default.errorData(err)));
822
+ import("./activity-events-EQGBUEZ7.js").then(
823
823
  ({ publish: publish4 }) => publish4({ type: "mind_stopped", mind: name, summary: `${name} crashed (exit ${code})` })
824
824
  ).catch((err) => mlog.warn(`failed to publish crash event for ${name}`, logger_default.errorData(err)));
825
825
  const { shouldRestart, delay, attempt } = this.restartTracker.recordCrash(name);
@@ -870,7 +870,7 @@ var MindManager = class {
870
870
  mlog.warn(`failed to clear turn state for ${name} on stop`, logger_default.errorData(err));
871
871
  }
872
872
  try {
873
- const { getDeliveryManager: getDeliveryManager2 } = await import("./delivery-manager-3NTCDKHR.js");
873
+ const { getDeliveryManager: getDeliveryManager2 } = await import("./delivery-manager-EB52CQ5X.js");
874
874
  getDeliveryManager2().clearMindSessions(name);
875
875
  } catch (err) {
876
876
  if (!(err instanceof Error && err.message.includes("not initialized"))) {
@@ -878,7 +878,7 @@ var MindManager = class {
878
878
  }
879
879
  }
880
880
  try {
881
- const { clearEchoTextCache } = await import("./echo-text-JUNRP4ER.js");
881
+ const { clearEchoTextCache } = await import("./echo-text-QVPS6QDM.js");
882
882
  clearEchoTextCache(name);
883
883
  } catch (err) {
884
884
  mlog.debug(`failed to clear echo-text cache for ${name}`, logger_default.errorData(err));
@@ -1361,9 +1361,9 @@ function resolveSkillsDir(manifest) {
1361
1361
  }
1362
1362
  async function discoverBuiltinExtensions(disabledIds) {
1363
1363
  const builtins = [
1364
- { id: "notes", load: async () => (await import("./src-2IMB3V27.js")).default },
1365
- { id: "pages", load: async () => (await import("./src-OS75U2O7.js")).default },
1366
- { id: "plan", load: async () => (await import("./src-XNUXP2FP.js")).default }
1364
+ { id: "notes", load: async () => (await import("./src-OYWRPLC6.js")).default },
1365
+ { id: "pages", load: async () => (await import("./src-4LFGGNW7.js")).default },
1366
+ { id: "plan", load: async () => (await import("./src-O4PRLMKM.js")).default }
1367
1367
  ];
1368
1368
  const results = [];
1369
1369
  for (const { id, load } of builtins) {
@@ -1603,7 +1603,7 @@ async function installNpmExtension(pkg) {
1603
1603
  throw new Error(`Extension "${pkg}" is already installed`);
1604
1604
  }
1605
1605
  const dir = ensureExtensionsNpmDir();
1606
- const { exec: exec2 } = await import("./exec-5DGKQ5V3.js");
1606
+ const { exec: exec2 } = await import("./exec-R2WWZ6FH.js");
1607
1607
  try {
1608
1608
  await exec2("npm", ["install", pkg], { cwd: dir });
1609
1609
  } catch (err) {
@@ -1624,7 +1624,7 @@ async function uninstallNpmExtension(pkg) {
1624
1624
  packages.splice(idx, 1);
1625
1625
  writeExtensionsConfig(packages);
1626
1626
  try {
1627
- const { exec: exec2 } = await import("./exec-5DGKQ5V3.js");
1627
+ const { exec: exec2 } = await import("./exec-R2WWZ6FH.js");
1628
1628
  await exec2("npm", ["uninstall", pkg], { cwd: extensionsNpmDir() });
1629
1629
  } catch (err) {
1630
1630
  logger_default.warn(
@@ -2417,7 +2417,7 @@ async function wakeMind(name) {
2417
2417
  async function startSpiritFull(name) {
2418
2418
  const entry = await findMind(name);
2419
2419
  if (entry?.dir) {
2420
- const { registerMindDir } = await import("./delivery-router-T6CYTS3M.js");
2420
+ const { registerMindDir } = await import("./delivery-router-Y66OXJPM.js");
2421
2421
  registerMindDir(name, entry.dir);
2422
2422
  }
2423
2423
  await getMindManager().startMind(name);
@@ -2439,8 +2439,8 @@ async function stopSpiritFull(name) {
2439
2439
  }).catch((err) => logger_default.error("failed to publish spirit_stopped activity", logger_default.errorData(err)));
2440
2440
  }
2441
2441
  async function ensureCreatorDM(mindName, creatorUsername) {
2442
- const { getOrCreateMindUser: getOrCreateMindUser2, getUserByUsername: getUserByUsername2 } = await import("./auth-X6ZITZ7D.js");
2443
- const { findDMConversation: findDMConversation2, createConversation: createConversation2 } = await import("./conversations-AYLXPOGC.js");
2442
+ const { getOrCreateMindUser: getOrCreateMindUser2, getUserByUsername: getUserByUsername2 } = await import("./auth-VYW2ECCE.js");
2443
+ const { findDMConversation: findDMConversation2, createConversation: createConversation2 } = await import("./conversations-KW7IYESK.js");
2444
2444
  const mindUser = await getOrCreateMindUser2(mindName);
2445
2445
  const creatorUser = await getUserByUsername2(creatorUsername);
2446
2446
  if (!creatorUser) {
@@ -2784,7 +2784,7 @@ var SleepManager = class {
2784
2784
  const db = await getDb();
2785
2785
  const rows = await db.select().from(deliveryQueue).where(and2(eq2(deliveryQueue.mind, name), eq2(deliveryQueue.status, "sleep-queued"))).all();
2786
2786
  if (rows.length === 0) return 0;
2787
- const { deliverMessage: deliverMessage2 } = await import("./message-delivery-Q7TU24IA.js");
2787
+ const { deliverMessage: deliverMessage2 } = await import("./message-delivery-X4CZE2L6.js");
2788
2788
  const delivered = [];
2789
2789
  for (const row of rows) {
2790
2790
  try {
@@ -3716,7 +3716,7 @@ var DeliveryManager = class {
3716
3716
  `To accept this channel, add a routing rule for "${channel}" to your routes.json.`,
3717
3717
  `Messages are being held until a route is configured.`
3718
3718
  ].filter((line) => line !== null).join("\n");
3719
- const { sendSystemMessage: sendSystemMessage2 } = await import("./system-chat-7CA2PP6A.js");
3719
+ const { sendSystemMessage: sendSystemMessage2 } = await import("./system-chat-HCPHUQGI.js");
3720
3720
  await sendSystemMessage2(mindName, notification);
3721
3721
  }
3722
3722
  async persistToQueue(mindName, session, payload, status = "pending") {
@@ -4242,7 +4242,7 @@ async function generateSystemReply(conversationId, mindName, message) {
4242
4242
  if (config.sleep.schedule?.wake) contextParts.push(`Wake cron: ${config.sleep.schedule.wake}`);
4243
4243
  }
4244
4244
  try {
4245
- const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-TTNOLIX5.js");
4245
+ const { getSleepManagerIfReady: getSleepManagerIfReady2 } = await import("./sleep-manager-T3AXQB3R.js");
4246
4246
  const sm = getSleepManagerIfReady2();
4247
4247
  if (sm) {
4248
4248
  const state = sm.getState(mindName);
@@ -93,6 +93,38 @@ function applyInitFiles(destDir) {
93
93
  }
94
94
  rmSync(initDir, { recursive: true, force: true });
95
95
  }
96
+ var MECHANICS_DOCS = {
97
+ claude: "CLAUDE.md",
98
+ pi: "MINDS.md",
99
+ codex: "AGENTS.md"
100
+ };
101
+ function isKnownTemplate(template) {
102
+ return template in MECHANICS_DOCS;
103
+ }
104
+ function applyTemplateHomeFiles(homeDir, template) {
105
+ const root = findTemplatesRoot();
106
+ const newDoc = MECHANICS_DOCS[template];
107
+ const newDocSrc = newDoc ? resolve(root, template, ".init", newDoc) : void 0;
108
+ if (!newDocSrc || !existsSync(newDocSrc)) {
109
+ throw new Error(`No mechanics doc for template "${template}"`);
110
+ }
111
+ for (const doc of Object.values(MECHANICS_DOCS)) {
112
+ rmSync(resolve(homeDir, doc), { force: true });
113
+ }
114
+ cpSync(newDocSrc, resolve(homeDir, newDoc));
115
+ const settingsDest = resolve(homeDir, ".claude", "settings.json");
116
+ if (template === "claude") {
117
+ mkdirSync(dirname(settingsDest), { recursive: true });
118
+ cpSync(resolve(root, "claude", ".init", ".claude", "settings.json"), settingsDest);
119
+ } else {
120
+ rmSync(settingsDest, { force: true });
121
+ }
122
+ const templateConfig = resolve(root, template, "home", ".config", "config.json.tmpl");
123
+ const configTmpl = existsSync(templateConfig) ? templateConfig : resolve(root, "_base", "home", ".config", "config.json.tmpl");
124
+ const configDest = resolve(homeDir, ".config", "config.json");
125
+ mkdirSync(dirname(configDest), { recursive: true });
126
+ writeFileSync(configDest, readFileSync(configTmpl, "utf-8"));
127
+ }
96
128
  function listFiles(dir) {
97
129
  const results = [];
98
130
  function walk(current) {
@@ -115,5 +147,7 @@ export {
115
147
  composeTemplate,
116
148
  copyTemplateToDir,
117
149
  applyInitFiles,
150
+ isKnownTemplate,
151
+ applyTemplateHomeFiles,
118
152
  listFiles
119
153
  };
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  wrapForIsolation
4
- } from "./chunk-6SYHHEQ7.js";
4
+ } from "./chunk-4ED2DBNC.js";
5
5
 
6
6
  // packages/daemon/src/lib/util/exec.ts
7
7
  import { execFile as execFileCb, execFileSync, spawn } from "child_process";
@@ -1,20 +1,20 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  aiCompleteUtility
4
- } from "./chunk-ZXPWTH4I.js";
4
+ } from "./chunk-VK2YD7VJ.js";
5
5
  import {
6
6
  logger_default
7
7
  } from "./chunk-T2TP6ZC6.js";
8
8
  import {
9
9
  getDb
10
- } from "./chunk-B4WPXYPI.js";
10
+ } from "./chunk-VDODEQSJ.js";
11
11
  import {
12
12
  messages,
13
13
  mindHistory,
14
14
  summaries,
15
15
  systemPrompts,
16
16
  turns
17
- } from "./chunk-2HZRJ35V.js";
17
+ } from "./chunk-MHFAWJCC.js";
18
18
 
19
19
  // packages/daemon/src/lib/daemon/turn-tracker.ts
20
20
  import { randomUUID } from "crypto";
@@ -1013,11 +1013,11 @@ var Summarizer = class {
1013
1013
  }
1014
1014
  };
1015
1015
  async function reconcileWedgedTurns(idleMs) {
1016
- const { sweepWedgedTurns: sweepWedgedTurns2, summarizeOrphanedTurns: summarizeOrphanedTurns2 } = await import("./turn-tracker-AI6WWEBA.js");
1016
+ const { sweepWedgedTurns: sweepWedgedTurns2, summarizeOrphanedTurns: summarizeOrphanedTurns2 } = await import("./turn-tracker-SZBSL7LK.js");
1017
1017
  const wedged = await sweepWedgedTurns2(idleMs);
1018
1018
  if (wedged.length === 0) return;
1019
1019
  summarizeOrphanedTurns2(wedged);
1020
- const { tryGetDeliveryManager } = await import("./delivery-manager-3NTCDKHR.js");
1020
+ const { tryGetDeliveryManager } = await import("./delivery-manager-EB52CQ5X.js");
1021
1021
  const dm = tryGetDeliveryManager();
1022
1022
  if (!dm) return;
1023
1023
  for (const t of wedged) {
@@ -4,26 +4,26 @@ import {
4
4
  composeTemplate,
5
5
  copyTemplateToDir,
6
6
  findTemplatesRoot
7
- } from "./chunk-46DYYHN6.js";
7
+ } from "./chunk-WSRGS4XP.js";
8
8
  import {
9
9
  getSharedSkill,
10
10
  installSkill,
11
11
  mindSkillsDir
12
- } from "./chunk-UX7FPDDO.js";
12
+ } from "./chunk-JIGVTFIR.js";
13
13
  import {
14
14
  readVoluteConfig,
15
15
  writeVoluteConfig
16
16
  } from "./chunk-CU6OFXMM.js";
17
17
  import {
18
18
  exec
19
- } from "./chunk-AEAZRTEV.js";
19
+ } from "./chunk-Y2XLASFJ.js";
20
20
  import {
21
21
  qualifyModelId,
22
22
  resolveTemplate
23
- } from "./chunk-ZXPWTH4I.js";
23
+ } from "./chunk-VK2YD7VJ.js";
24
24
  import {
25
25
  readGlobalConfig
26
- } from "./chunk-DNU6XLE2.js";
26
+ } from "./chunk-N64Q7FMP.js";
27
27
  import {
28
28
  logger_default
29
29
  } from "./chunk-T2TP6ZC6.js";
@@ -32,7 +32,7 @@ import {
32
32
  findMind,
33
33
  nextPort,
34
34
  voluteSystemDir
35
- } from "./chunk-B4WPXYPI.js";
35
+ } from "./chunk-VDODEQSJ.js";
36
36
 
37
37
  // packages/daemon/src/lib/mind/spirit.ts
38
38
  import { cpSync, existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "fs";
@@ -128,7 +128,7 @@ async function ensureSpiritProject() {
128
128
  } catch (err) {
129
129
  slog.warn("failed to add tending schedule to spirit config", logger_default.errorData(err));
130
130
  }
131
- const { createMindUser, chownMindDir, ensureVoluteGroup } = await import("./isolation-4Q4P7HRV.js");
131
+ const { createMindUser, chownMindDir, ensureVoluteGroup } = await import("./isolation-7F3MA4G7.js");
132
132
  ensureVoluteGroup();
133
133
  createMindUser("volute", resolve(dir, "home"));
134
134
  chownMindDir(dir, "volute");
@@ -162,8 +162,8 @@ async function syncSpiritTemplate() {
162
162
  cpSync(newPkg, resolve(dir, "package.json"));
163
163
  await exec("npm", ["install"], { cwd: dir, env: npmEnv() });
164
164
  }
165
- const db = await (await import("./db-ZEPKEJJD.js")).getDb();
166
- const { minds } = await import("./schema-LYQUDL7G.js");
165
+ const db = await (await import("./db-D4FVCA5I.js")).getDb();
166
+ const { minds } = await import("./schema-HHYJDG7B.js");
167
167
  const { eq } = await import("drizzle-orm");
168
168
  await db.update(minds).set({ template: expectedTemplate }).where(eq(minds.name, "volute"));
169
169
  }
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-PPA3VWS2.js");
13
+ const { default: pkg } = await import("./package-2X7UNSTQ.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-OTEC3ZPM.js");
34
+ const { isSetupComplete } = await import("./setup-3434PQ5Q.js");
35
35
  if (!isSetupComplete()) {
36
36
  console.error("Volute is not set up. Run `volute setup` first.");
37
37
  process.exit(1);
@@ -39,61 +39,61 @@ if (!ungatedCommands.has(command)) {
39
39
  }
40
40
  switch (command) {
41
41
  case "setup":
42
- await import("./setup-W3545462.js").then((m) => m.run(args));
42
+ await import("./setup-47NBOCZL.js").then((m) => m.run(args));
43
43
  break;
44
44
  case "mind":
45
- await import("./mind-OOB2LEVC.js").then((m) => m.run(args));
45
+ await import("./mind-XIKEPJNS.js").then((m) => m.run(args));
46
46
  break;
47
47
  case "seed":
48
- await import("./seed-cmd-VEJNJBAQ.js").then((m) => m.run(args));
48
+ await import("./seed-cmd-YTQYWCZF.js").then((m) => m.run(args));
49
49
  break;
50
50
  case "chat":
51
- await import("./chat-F2EEN76G.js").then((m) => m.run(args));
51
+ await import("./chat-FO722GU2.js").then((m) => m.run(args));
52
52
  break;
53
53
  case "variant":
54
- await import("./variant-5LQOPCQA.js").then((m) => m.run(args));
54
+ await import("./variant-HHDTW74J.js").then((m) => m.run(args));
55
55
  break;
56
56
  case "clock":
57
- await import("./clock-YLDJUKBW.js").then((m) => m.run(args));
57
+ await import("./clock-BMLJ2TR6.js").then((m) => m.run(args));
58
58
  break;
59
59
  case "skill":
60
- await import("./skill-QHACP7EU.js").then((m) => m.run(args));
60
+ await import("./skill-ICN6Y2ZF.js").then((m) => m.run(args));
61
61
  break;
62
62
  case "env":
63
- await import("./env-77IOWG4U.js").then((m) => m.run(args));
63
+ await import("./env-IQ6Q2333.js").then((m) => m.run(args));
64
64
  break;
65
65
  case "config":
66
- await import("./config-PO4EZLIK.js").then((m) => m.run(args));
66
+ await import("./config-QB7W3Z7P.js").then((m) => m.run(args));
67
67
  break;
68
68
  case "up":
69
- await import("./up-PKNNDN6M.js").then((m) => m.run(args));
69
+ await import("./up-VGVPOB6J.js").then((m) => m.run(args));
70
70
  break;
71
71
  case "down":
72
- await import("./down-6DYO2QV7.js").then((m) => m.run(args));
72
+ await import("./down-JVHNXOFU.js").then((m) => m.run(args));
73
73
  break;
74
74
  case "restart":
75
- await import("./daemon-restart-FSWVXPUE.js").then((m) => m.run(args));
75
+ await import("./daemon-restart-W47YDE5E.js").then((m) => m.run(args));
76
76
  break;
77
77
  case "update":
78
- await import("./update-OY2JYXYK.js").then((m) => m.run(args));
78
+ await import("./update-3ANTQO54.js").then((m) => m.run(args));
79
79
  break;
80
80
  case "status":
81
- await import("./status-BRYYYO7C.js").then((m) => m.run(args));
81
+ await import("./status-VMOZUIZ2.js").then((m) => m.run(args));
82
82
  break;
83
83
  case "extension":
84
- await import("./extension-35NB6GHW.js").then((m) => m.run(args));
84
+ await import("./extension-LZYHBNLV.js").then((m) => m.run(args));
85
85
  break;
86
86
  case "systems":
87
- await import("./systems-3XTAHA35.js").then((m) => m.run(args));
87
+ await import("./systems-Y2WZV2K4.js").then((m) => m.run(args));
88
88
  break;
89
89
  case "login":
90
- await import("./login-Y6UAYQVO.js").then((m) => m.run(args));
90
+ await import("./login-WY3DADVB.js").then((m) => m.run(args));
91
91
  break;
92
92
  case "logout":
93
- await import("./logout-VHGWVH63.js").then((m) => m.run(args));
93
+ await import("./logout-TFZHWNVL.js").then((m) => m.run(args));
94
94
  break;
95
95
  case "service":
96
- await import("./service-WMV6R6VJ.js").then((m) => m.run(args));
96
+ await import("./service-AY5TGWJX.js").then((m) => m.run(args));
97
97
  break;
98
98
  case "--help":
99
99
  case "-h":
@@ -150,7 +150,7 @@ use --mind <name> or VOLUTE_MIND env var to identify the mind.`);
150
150
  default: {
151
151
  let isExtensionCommand = false;
152
152
  try {
153
- const { daemonFetch } = await import("./daemon-client-H6MEKK2W.js");
153
+ const { daemonFetch } = await import("./daemon-client-2MIPKY3E.js");
154
154
  const res = await daemonFetch("/api/extensions/commands");
155
155
  if (res.ok) {
156
156
  const extCommands = await res.json();
@@ -231,7 +231,7 @@ Use --mind <name> or VOLUTE_MIND to specify the mind.
231
231
  mind = cmdArgs[mindIdx + 1];
232
232
  cmdArgs.splice(mindIdx, 2);
233
233
  }
234
- const { readStdin } = await import("./read-stdin-P6HCZUAA.js");
234
+ const { readStdin } = await import("./read-stdin-4B5UYPPM.js");
235
235
  const stdin = await readStdin();
236
236
  const cmdRes = await daemonFetch(`/api/ext/${command}/commands/${subcommand}`, {
237
237
  method: "POST",
@@ -264,7 +264,7 @@ Run 'volute --help' for usage.`);
264
264
  }
265
265
  }
266
266
  if (command !== "update") {
267
- import("./update-check-IUB7QHAF.js").then((m) => m.checkForUpdate()).then((result) => {
267
+ import("./update-check-4O6DKUOF.js").then((m) => m.checkForUpdate()).then((result) => {
268
268
  if (result.updateAvailable) {
269
269
  console.error(`
270
270
  Update available: ${result.current} \u2192 ${result.latest}`);
@@ -18,7 +18,7 @@ import {
18
18
  subcommands
19
19
  } from "./chunk-TXSA4Q3V.js";
20
20
  import "./chunk-O7IGP7ZW.js";
21
- import "./chunk-LMMQX4CK.js";
21
+ import "./chunk-K3NQKI34.js";
22
22
 
23
23
  // packages/cli/src/commands/clock.ts
24
24
  import { CronExpressionParser } from "cron-parser";
@@ -274,11 +274,11 @@ var cmd = subcommands({
274
274
  },
275
275
  sleep: {
276
276
  description: "Put a mind to sleep",
277
- run: (args) => import("./mind-sleep-PVCMLTAH.js").then((m) => m.run(args))
277
+ run: (args) => import("./mind-sleep-ZL5ZXFTM.js").then((m) => m.run(args))
278
278
  },
279
279
  wake: {
280
280
  description: "Wake a sleeping mind",
281
- run: (args) => import("./mind-wake-HZUOVE7J.js").then((m) => m.run(args))
281
+ run: (args) => import("./mind-wake-HK5ORGUK.js").then((m) => m.run(args))
282
282
  }
283
283
  },
284
284
  footer: "Use --mind <name> or VOLUTE_MIND to identify the mind."
@@ -1,32 +1,32 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  deliverMessage
4
- } from "./chunk-ZOI6D2YH.js";
5
- import "./chunk-ITH5ZLZJ.js";
6
- import "./chunk-NRJ3ZYFP.js";
7
- import "./chunk-46DYYHN6.js";
8
- import "./chunk-UX7FPDDO.js";
4
+ } from "./chunk-W5Z2H3LU.js";
5
+ import "./chunk-6ZAT5PYV.js";
6
+ import "./chunk-YN6ISG7A.js";
7
+ import "./chunk-WSRGS4XP.js";
8
+ import "./chunk-JIGVTFIR.js";
9
9
  import {
10
10
  getAuthHeaders,
11
11
  getWebhookUrl
12
- } from "./chunk-3Y7UDHO7.js";
12
+ } from "./chunk-2R4JIZCB.js";
13
13
  import "./chunk-CU6OFXMM.js";
14
- import "./chunk-KMHC36CA.js";
15
- import "./chunk-42UMLIQR.js";
16
- import "./chunk-NERYUSER.js";
17
- import "./chunk-YMMYN2V3.js";
18
- import "./chunk-AEAZRTEV.js";
19
- import "./chunk-6SYHHEQ7.js";
20
- import "./chunk-ZXPWTH4I.js";
21
- import "./chunk-DNU6XLE2.js";
22
- import "./chunk-E25SO3QW.js";
23
- import "./chunk-QYI65HCL.js";
14
+ import "./chunk-U7UASV36.js";
15
+ import "./chunk-PP5CGT2P.js";
16
+ import "./chunk-GMFCSXWB.js";
17
+ import "./chunk-YATR5BXD.js";
18
+ import "./chunk-Y2XLASFJ.js";
19
+ import "./chunk-4ED2DBNC.js";
20
+ import "./chunk-VK2YD7VJ.js";
21
+ import "./chunk-N64Q7FMP.js";
22
+ import "./chunk-6TPRURK5.js";
23
+ import "./chunk-2RQIIKFC.js";
24
24
  import {
25
25
  logger_default
26
26
  } from "./chunk-T2TP6ZC6.js";
27
- import "./chunk-B4WPXYPI.js";
28
- import "./chunk-2HZRJ35V.js";
29
- import "./chunk-LMMQX4CK.js";
27
+ import "./chunk-VDODEQSJ.js";
28
+ import "./chunk-MHFAWJCC.js";
29
+ import "./chunk-K3NQKI34.js";
30
30
 
31
31
  // packages/daemon/src/lib/cloud-sync.ts
32
32
  var slog = logger_default.child("cloud-sync");
@@ -3,11 +3,11 @@ import {
3
3
  subcommands
4
4
  } from "./chunk-TXSA4Q3V.js";
5
5
  import "./chunk-O7IGP7ZW.js";
6
- import "./chunk-LMMQX4CK.js";
6
+ import "./chunk-K3NQKI34.js";
7
7
 
8
8
  // packages/cli/src/commands/config.ts
9
9
  async function listModels() {
10
- const { daemonFetch } = await import("./daemon-client-H6MEKK2W.js");
10
+ const { daemonFetch } = await import("./daemon-client-2MIPKY3E.js");
11
11
  const res = await daemonFetch("/api/config/models");
12
12
  if (!res.ok) {
13
13
  console.error(`Failed to fetch models (HTTP ${res.status})`);
@@ -24,7 +24,7 @@ async function listModels() {
24
24
  }
25
25
  }
26
26
  async function listProviders() {
27
- const { daemonFetch } = await import("./daemon-client-H6MEKK2W.js");
27
+ const { daemonFetch } = await import("./daemon-client-2MIPKY3E.js");
28
28
  const res = await daemonFetch("/api/config/providers");
29
29
  if (!res.ok) {
30
30
  console.error(`Failed to fetch providers (HTTP ${res.status})`);
@@ -41,7 +41,7 @@ async function listProviders() {
41
41
  }
42
42
  }
43
43
  async function showStatus() {
44
- const { daemonFetch } = await import("./daemon-client-H6MEKK2W.js");
44
+ const { daemonFetch } = await import("./daemon-client-2MIPKY3E.js");
45
45
  const res = await daemonFetch("/api/config/status");
46
46
  if (!res.ok) {
47
47
  console.error(`Failed to fetch config (HTTP ${res.status})`);
@@ -7,7 +7,7 @@ import {
7
7
  import {
8
8
  slugify
9
9
  } from "../chunk-LGNUFVMR.js";
10
- import "../chunk-LMMQX4CK.js";
10
+ import "../chunk-K3NQKI34.js";
11
11
 
12
12
  // packages/daemon/src/lib/bridges/discord-bridge.ts
13
13
  import { Client, Events, GatewayIntentBits, Partials } from "discord.js";
@@ -7,7 +7,7 @@ import {
7
7
  import {
8
8
  slugify
9
9
  } from "../chunk-LGNUFVMR.js";
10
- import "../chunk-LMMQX4CK.js";
10
+ import "../chunk-K3NQKI34.js";
11
11
 
12
12
  // packages/daemon/src/lib/bridges/slack-bridge.ts
13
13
  import { App } from "@slack/bolt";
@@ -7,7 +7,7 @@ import {
7
7
  import {
8
8
  slugify
9
9
  } from "../chunk-LGNUFVMR.js";
10
- import "../chunk-LMMQX4CK.js";
10
+ import "../chunk-K3NQKI34.js";
11
11
 
12
12
  // packages/daemon/src/lib/bridges/telegram-bridge.ts
13
13
  import { Telegraf } from "telegraf";