volute 0.53.0 → 0.55.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 (210) hide show
  1. package/dist/{activity-events-LQII6PZS.js → activity-events-TFAJBNBW.js} +2 -2
  2. package/dist/{ai-service-YW5SWCSB.js → ai-service-KEK2V3AP.js} +2 -2
  3. package/dist/{auth-KRDSM55Q.js → auth-Y27LTNZK.js} +3 -3
  4. package/dist/auto-upgrade-2MZF7NG3.js +46 -0
  5. package/dist/{avatar-image-52WGXLHV.js → avatar-image-SN576P45.js} +2 -2
  6. package/dist/{backup-WWXVIMYQ.js → backup-GDCWH6MC.js} +12 -12
  7. package/dist/channels-AFJWGX7W.js +203 -0
  8. package/dist/{chat-WK2BLM7B.js → chat-HVPOZK3O.js} +9 -9
  9. package/dist/{chunk-QUSMYGNQ.js → chunk-2674KIGI.js} +1 -0
  10. package/dist/chunk-2GATCSZK.js +520 -0
  11. package/dist/{chunk-P2TBUKLW.js → chunk-3SFKY4GI.js} +4 -4
  12. package/dist/{chunk-RMADJFA7.js → chunk-45QTYKQQ.js} +4 -4
  13. package/dist/{chunk-TAWRJ24T.js → chunk-4VAQKLMU.js} +8 -5
  14. package/dist/{chunk-OXWUEU5V.js → chunk-5U5GLZSD.js} +2 -2
  15. package/dist/{chunk-TPX6E6PL.js → chunk-6HBGUPBA.js} +2 -2
  16. package/dist/{chunk-UFTDRTCP.js → chunk-7AA4T2RT.js} +2 -2
  17. package/dist/{chunk-LN7XJ56R.js → chunk-7XKPG66D.js} +9 -9
  18. package/dist/{chunk-VDZ4I4ZP.js → chunk-BP2X5AIK.js} +8 -14
  19. package/dist/{chunk-PIZDPY4G.js → chunk-CKOA4LWV.js} +12 -12
  20. package/dist/{chunk-6NLW72HP.js → chunk-CKPAVQNK.js} +1 -1
  21. package/dist/{chunk-IQ7VNWH6.js → chunk-DUV4EMNW.js} +37 -3
  22. package/dist/{chunk-CV6BNGFK.js → chunk-FSXPPOPM.js} +3 -3
  23. package/dist/{chunk-UTKUO2KY.js → chunk-FZUPIS3T.js} +3 -3
  24. package/dist/{chunk-L7BKTZ5U.js → chunk-G3XAB4DK.js} +1 -1
  25. package/dist/{chunk-23UJGVYP.js → chunk-HLWQ3P3R.js} +50 -46
  26. package/dist/{chunk-AP2KQMMW.js → chunk-HTSWDOJE.js} +11 -14
  27. package/dist/{chunk-EDR47UE2.js → chunk-IR2FW4W7.js} +2 -2
  28. package/dist/{chunk-ICXY54ZC.js → chunk-IT4GEFDH.js} +1 -1
  29. package/dist/{chunk-F6D766VQ.js → chunk-KS62IHE2.js} +1 -1
  30. package/dist/{chunk-LNNI3MS4.js → chunk-MNKPAAQF.js} +9 -2
  31. package/dist/{chunk-HASADR3E.js → chunk-NCRG4SBR.js} +241 -66
  32. package/dist/{chunk-I7U5EEZC.js → chunk-NM5FDH4T.js} +1 -1
  33. package/dist/{chunk-7LT3YZUR.js → chunk-OFU6WJJZ.js} +1 -1
  34. package/dist/{chunk-M77B73VV.js → chunk-OIOW3FPT.js} +7 -2
  35. package/dist/{chunk-BDHKCLWK.js → chunk-OKM67ZWH.js} +1 -1
  36. package/dist/chunk-OUGD5L5U.js +918 -0
  37. package/dist/{chunk-X67BDDZR.js → chunk-P3GXOT2X.js} +48 -2
  38. package/dist/{chunk-U54PJPTB.js → chunk-PRZUBJ4K.js} +1 -1
  39. package/dist/{chunk-UO4MZQNO.js → chunk-QVS3C4DK.js} +15 -7
  40. package/dist/{chunk-RQRO6PC7.js → chunk-TMTAHKYP.js} +324 -48
  41. package/dist/{chunk-5DBGQBQR.js → chunk-UEZC5MNB.js} +29 -18
  42. package/dist/{chunk-7ARONCZW.js → chunk-VTFXZPC3.js} +13 -13
  43. package/dist/{chunk-UDZLPR34.js → chunk-W3OIPJPB.js} +14 -9
  44. package/dist/{chunk-HTB7KDRU.js → chunk-WZZCA23D.js} +5 -4
  45. package/dist/{chunk-5Y54AE3L.js → chunk-XAG53RWY.js} +1 -1
  46. package/dist/{chunk-HTRSSOHY.js → chunk-YU5EYQAE.js} +1 -1
  47. package/dist/{chunk-5N32EN4O.js → chunk-Z4Q6TQWL.js} +1 -1
  48. package/dist/{chunk-EGV6R6UF.js → chunk-Z7TNIIHW.js} +3 -1
  49. package/dist/cli.js +19 -19
  50. package/dist/{clock-SH4NQC2F.js → clock-X7V3C7NL.js} +3 -3
  51. package/dist/{cloud-sync-MJVJ33LD.js → cloud-sync-FM73SVFJ.js} +21 -21
  52. package/dist/{conversations-ZL6PHROD.js → conversations-FH3ODBL7.js} +3 -3
  53. package/dist/{create-G2RIKQYK.js → create-P75ZFTVN.js} +1 -1
  54. package/dist/{daemon-restart-BIGU4OKS.js → daemon-restart-JQMMMITM.js} +4 -4
  55. package/dist/daemon.js +469 -857
  56. package/dist/db-JH3NTERX.js +36 -0
  57. package/dist/delivery-manager-H23Q23N7.js +41 -0
  58. package/dist/{delivery-notices-65TB3CBX.js → delivery-notices-S7TKOACE.js} +5 -5
  59. package/dist/{delivery-router-RHANNTAC.js → delivery-router-KHBVEVVL.js} +4 -2
  60. package/dist/{down-QSNEMTTX.js → down-UN2EDX2Y.js} +3 -3
  61. package/dist/echo-text-ULEIFJJF.js +40 -0
  62. package/dist/{exec-ABD3DYA2.js → exec-Z34TTUO3.js} +1 -1
  63. package/dist/extensions-QD22GXZD.js +74 -0
  64. package/dist/{files-CHPNEQXN.js → files-DUGRXN6V.js} +5 -5
  65. package/dist/{import-DB2KULRO.js → import-RDDUGGFI.js} +3 -3
  66. package/dist/{isolation-GVV2IBAU.js → isolation-UQPDO34R.js} +1 -1
  67. package/dist/message-delivery-LU4EP244.js +46 -0
  68. package/dist/migrate-init-infrastructure-Z72UJ5NT.js +44 -0
  69. package/dist/migrate-name-placeholder-64AEAWPE.js +37 -0
  70. package/dist/{migrate-thread-config-EQSEP2XG.js → migrate-thread-config-SVF2M3D3.js} +1 -1
  71. package/dist/{mind-IX5AWUST.js → mind-BARCLI7O.js} +14 -14
  72. package/dist/{mind-activity-tracker-QF6DCX2X.js → mind-activity-tracker-UT23RGBF.js} +3 -3
  73. package/dist/{mind-contacts-BKUOUJPV.js → mind-contacts-PEXCDRXA.js} +8 -8
  74. package/dist/{mind-list-KNU34SUD.js → mind-list-7KBLPLES.js} +2 -2
  75. package/dist/mind-service-ZJCUBAUL.js +48 -0
  76. package/dist/{mind-sleep-D3DEYAWG.js → mind-sleep-24HV4RCA.js} +5 -5
  77. package/dist/{mind-status-BPTLQ5Z6.js → mind-status-4YW4PHMO.js} +6 -3
  78. package/dist/{package-BN5KMU54.js → package-AUDBDKAO.js} +12 -14
  79. package/dist/{prompts-HNKGCAEY.js → prompts-MOBF3TMO.js} +1 -1
  80. package/dist/{sandbox-NNWCTHRI.js → sandbox-VI7XWBIA.js} +2 -2
  81. package/dist/scheduler-GLINVC2B.js +27 -0
  82. package/dist/{seed-LHZ33UB4.js → seed-5JGR7ZRA.js} +1 -1
  83. package/dist/{seed-cmd-U4RVJ3UA.js → seed-cmd-M6A7N7F3.js} +2 -2
  84. package/dist/{seed-create-OQU4KNCB.js → seed-create-TGFZW4IO.js} +3 -3
  85. package/dist/{seed-readiness-WJYYRRCK.js → seed-readiness-XBH2MUNA.js} +2 -2
  86. package/dist/{seed-sprout-SFUYH2RG.js → seed-sprout-3IC5ZVTI.js} +11 -11
  87. package/dist/{send-FWZAMDBN.js → send-DHYBAYK4.js} +11 -11
  88. package/dist/{service-XQPMZAGI.js → service-T4P5W6RS.js} +2 -2
  89. package/dist/{service-install-2EWD7KXD.js → service-install-R4SNYUVO.js} +3 -3
  90. package/dist/{setup-RVSGCIF3.js → setup-6KAH3GRW.js} +4 -4
  91. package/dist/skills/dreaming/SKILL.md +2 -2
  92. package/dist/skills/dreaming/references/INSTALL.md +1 -1
  93. package/dist/skills/tending/SKILL.md +2 -0
  94. package/dist/skills/volute-mind/SKILL.md +8 -0
  95. package/dist/skills/volute-mind/references/integrations.md +3 -2
  96. package/dist/skills/volute-mind/references/routing.md +18 -5
  97. package/dist/{skills-QRPU6BWY.js → skills-LKQCYFVP.js} +3 -3
  98. package/dist/sleep-manager-Q3ITFNOJ.js +42 -0
  99. package/dist/{spirit-I5ECLGRI.js → spirit-FKXMGO3N.js} +8 -6
  100. package/dist/spirit-availability-5R2WYSWF.js +43 -0
  101. package/dist/{sprout-A2PMEF7Z.js → sprout-VEW3CUNX.js} +1 -1
  102. package/dist/src-246GSX7A.js +519 -0
  103. package/dist/src-LOUB3WPR.js +4189 -0
  104. package/dist/{status-EYG4A3OK.js → status-LCKTTIWS.js} +5 -5
  105. package/dist/{system-events-YTOU66QI.js → system-events-ZYOCYAO2.js} +5 -3
  106. package/dist/{systems-2DIJY4RF.js → systems-HL7SGSW7.js} +6 -6
  107. package/dist/{tailscale-KHNZFC7L.js → tailscale-F2IMBILZ.js} +1 -1
  108. package/dist/{template-hash-YKWMVYMM.js → template-hash-RJRMF6DT.js} +2 -2
  109. package/dist/{template-staleness-PY2CULH6.js → template-staleness-IBD722PN.js} +4 -4
  110. package/dist/{turn-tracker-NNHS6MAR.js → turn-tracker-BE34OI6O.js} +7 -7
  111. package/dist/{up-UGBHH743.js → up-J47J5JRB.js} +3 -3
  112. package/dist/{update-CIWI2JYA.js → update-ILCPVNDD.js} +2 -2
  113. package/dist/{upgrade-LIE46UBB.js → upgrade-XY2J7NWZ.js} +9 -1
  114. package/dist/variant-cleanup-JGJZ5KB4.js +24 -0
  115. package/dist/{version-notify-SJVAQLZI.js → version-notify-KIXYNHJC.js} +28 -13
  116. package/dist/web-assets/assets/{index-b7G7ZsVk.js → index-CoU1eUKE.js} +25 -25
  117. package/dist/web-assets/assets/index-hPn_fkz3.css +1 -0
  118. package/dist/web-assets/index.html +2 -2
  119. package/package.json +12 -14
  120. package/packages/extensions/intentions/dist/ui/assets/index-3FneLCKR.css +1 -0
  121. package/packages/extensions/intentions/dist/ui/assets/index-Bl5KEcli.js +67 -0
  122. package/packages/extensions/{notes → intentions}/dist/ui/index.html +3 -3
  123. package/packages/extensions/intentions/skills/intention-review/SKILL.md +38 -0
  124. package/packages/extensions/intentions/skills/intentions/SKILL.md +49 -0
  125. package/packages/extensions/intentions/skills/intentions/scripts/intentions-hook.sh +45 -0
  126. package/packages/extensions/pages/dist/ui/assets/index-BKxVQkA9.css +1 -0
  127. package/packages/extensions/pages/dist/ui/assets/index-BMt6sStP.js +68 -0
  128. package/packages/extensions/pages/dist/ui/index.html +2 -2
  129. package/packages/extensions/pages/skills/commons-gardening/SKILL.md +50 -0
  130. package/packages/extensions/pages/skills/pages/SKILL.md +140 -16
  131. package/templates/_base/.init/.config/prompts.json +2 -3
  132. package/templates/{pi → _base}/.init/.config/routes.json +1 -0
  133. package/templates/_base/.init/.local/hooks/pre-prompt/turn-context.ts +30 -0
  134. package/templates/_base/.init/memory/dreams/.gitkeep +0 -0
  135. package/templates/_base/home/.config/routes.json +1 -1
  136. package/templates/_base/home/VOLUTE.md +1 -1
  137. package/templates/_base/src/lib/codex-session-seed.ts +6 -55
  138. package/templates/_base/src/lib/context-breakdown.ts +11 -3
  139. package/templates/_base/src/lib/pi-session-seed.ts +8 -57
  140. package/templates/_base/src/lib/routing.ts +2 -2
  141. package/templates/_base/src/lib/seed-note.ts +4 -4
  142. package/templates/_base/src/lib/session-seed.ts +8 -53
  143. package/templates/_base/src/lib/startup.ts +4 -22
  144. package/templates/claude/.init/CLAUDE.md +4 -0
  145. package/templates/claude/package.json +2 -2
  146. package/templates/claude/src/agent.ts +60 -112
  147. package/templates/claude/src/lib/hooks/pre-compact.ts +6 -6
  148. package/templates/claude/src/lib/message-channel.ts +43 -15
  149. package/templates/claude/src/lib/recover.ts +69 -0
  150. package/templates/claude/src/lib/stream-consumer.ts +23 -5
  151. package/templates/claude/src/server.ts +0 -1
  152. package/templates/claude/volute-template.json +1 -1
  153. package/templates/codex/.init/AGENTS.md +4 -0
  154. package/templates/codex/package.json +2 -2
  155. package/templates/codex/src/agent.ts +23 -89
  156. package/templates/codex/volute-template.json +1 -1
  157. package/templates/pi/.init/MINDS.md +4 -0
  158. package/templates/pi/package.json +1 -1
  159. package/templates/pi/src/agent.ts +26 -93
  160. package/templates/pi/src/lib/mechanics-doc.ts +30 -0
  161. package/templates/pi/src/server.ts +3 -2
  162. package/templates/pi/volute-template.json +1 -1
  163. package/dist/channels-LW5ZLMSQ.js +0 -90
  164. package/dist/chunk-R772ET2M.js +0 -164
  165. package/dist/db-IPXRJUI7.js +0 -20
  166. package/dist/delivery-manager-FDHCZ7PU.js +0 -37
  167. package/dist/echo-text-KU6G4Z7V.js +0 -40
  168. package/dist/extensions-VACUKFA5.js +0 -60
  169. package/dist/message-delivery-TUXM3AAE.js +0 -46
  170. package/dist/mind-service-WHFBUKZE.js +0 -48
  171. package/dist/scheduler-5X5UIQOQ.js +0 -27
  172. package/dist/skills/plan-coordinator/SKILL.md +0 -60
  173. package/dist/sleep-manager-NWUCRBZB.js +0 -42
  174. package/dist/spirit-availability-NIUUYKU2.js +0 -43
  175. package/dist/src-HGNE2XG4.js +0 -832
  176. package/dist/src-LCSOQY6Z.js +0 -2222
  177. package/dist/src-UDMJZ6MH.js +0 -426
  178. package/dist/variant-cleanup-CZDLIY3F.js +0 -24
  179. package/dist/web-assets/assets/index-BHSU9r-4.css +0 -1
  180. package/packages/extensions/notes/dist/ui/assets/index-BBs8pyel.js +0 -67
  181. package/packages/extensions/notes/dist/ui/assets/index-D3cdui42.css +0 -1
  182. package/packages/extensions/notes/skills/notes/SKILL.md +0 -90
  183. package/packages/extensions/pages/dist/ui/assets/index-B589e8Xe.js +0 -2
  184. package/packages/extensions/pages/dist/ui/assets/index-BuXnE-rb.css +0 -1
  185. package/packages/extensions/plan/dist/ui/assets/index-B8s8wxyt.js +0 -67
  186. package/packages/extensions/plan/dist/ui/assets/index-jIkrt-vI.css +0 -1
  187. package/packages/extensions/plan/dist/ui/index.html +0 -14
  188. package/packages/extensions/plan/skills/plan/SKILL.md +0 -43
  189. package/packages/extensions/plan/skills/plan/scripts/plan-hook.sh +0 -37
  190. package/templates/claude/.init/.config/routes.json +0 -11
  191. package/templates/codex/.init/.config/routes.json +0 -11
  192. package/dist/{accept-I4GVGWA3.js → accept-RSDIVJL6.js} +3 -3
  193. package/dist/{bridge-KU2IKSH3.js → bridge-YK7NTRU5.js} +3 -3
  194. package/dist/{create-C3XZACTV.js → create-M727VUDF.js} +3 -3
  195. package/dist/{env-BJGM6FBA.js → env-7AZFBPWX.js} +7 -7
  196. package/dist/{extension-B2W52WZY.js → extension-MRYJWSMV.js} +3 -3
  197. package/dist/{list-R2GDWOEE.js → list-UQGIW7OF.js} +3 -3
  198. package/dist/{login-EZ4RRDQX.js → login-4NUS72Z5.js} +3 -3
  199. package/dist/{login-JDOAK465.js → login-57MMYILL.js} +4 -4
  200. package/dist/{logout-MWSIUOQU.js → logout-BYV433X6.js} +3 -3
  201. package/dist/{logout-K6ZGAJY5.js → logout-YFZAJRPY.js} +3 -3
  202. package/dist/{mind-history-RVF6KJ7K.js → mind-history-RZMMCHMX.js} +9 -9
  203. package/dist/{mind-wake-DCDFFQKX.js → mind-wake-LDGPRA42.js} +3 -3
  204. package/dist/{read-J5RM674N.js → read-RJ5NAW5J.js} +3 -3
  205. package/dist/{register-53LBGSDC.js → register-WNCSOTAU.js} +3 -3
  206. package/dist/{reject-K2A4UK2Y.js → reject-4NFLXKRN.js} +3 -3
  207. package/dist/{restart-R2WFNF5K.js → restart-B4GNMVF2.js} +7 -7
  208. package/dist/{skill-DXLLSUHB.js → skill-QYTBUDNQ.js} +7 -7
  209. package/dist/{start-XDOUAWN3.js → start-BDHJVOVX.js} +6 -6
  210. package/dist/{stop-O62RTEMD.js → stop-45QYSGYS.js} +7 -7
@@ -5,27 +5,27 @@ import {
5
5
  copyTemplateToDir,
6
6
  findTemplatesRoot,
7
7
  renderComposedPackageJson
8
- } from "./chunk-X67BDDZR.js";
9
- import {
10
- getSharedSkill,
11
- installSkill,
12
- mindSkillsDir
13
- } from "./chunk-TAWRJ24T.js";
8
+ } from "./chunk-P3GXOT2X.js";
14
9
  import {
15
10
  readVoluteConfig,
16
11
  writeVoluteConfig
17
12
  } from "./chunk-WCFSBH33.js";
13
+ import {
14
+ getSharedSkill,
15
+ installSkill,
16
+ mindSkillsDir
17
+ } from "./chunk-4VAQKLMU.js";
18
18
  import {
19
19
  exec
20
- } from "./chunk-M77B73VV.js";
20
+ } from "./chunk-OIOW3FPT.js";
21
21
  import {
22
22
  qualifyModelId,
23
23
  resolveTemplate,
24
24
  unqualifyModelId
25
- } from "./chunk-EGV6R6UF.js";
25
+ } from "./chunk-Z7TNIIHW.js";
26
26
  import {
27
27
  logger_default
28
- } from "./chunk-QUSMYGNQ.js";
28
+ } from "./chunk-2674KIGI.js";
29
29
  import {
30
30
  addSpirit,
31
31
  findMind,
@@ -39,7 +39,16 @@ import {
39
39
  import { cpSync, existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "fs";
40
40
  import { basename, resolve } from "path";
41
41
  var slog = logger_default.child("spirit");
42
- var SPIRIT_SKILLS = ["volute-admin", "memory", "seed-nurture", "tending", "plan-coordinator"];
42
+ var SPIRIT_SKILLS = ["volute-admin", "memory", "seed-nurture", "tending"];
43
+ async function allSpiritSkills() {
44
+ let ext = [];
45
+ try {
46
+ const { getExtensionSpiritSkills } = await import("./extensions-QD22GXZD.js");
47
+ ext = getExtensionSpiritSkills();
48
+ } catch {
49
+ }
50
+ return [.../* @__PURE__ */ new Set([...SPIRIT_SKILLS, ...ext])];
51
+ }
43
52
  var TENDING_SCHEDULE = {
44
53
  id: "tending",
45
54
  cron: "0 10 * * *",
@@ -63,7 +72,7 @@ function ensureTendingSchedule(dir) {
63
72
  }
64
73
  function firstWeekArc(name) {
65
74
  return [
66
- `It's ${name}'s first full day. Two invitations to pass along whenever it feels right \u2014 no rush on either: to say hi to the others in #system (or DM a neighbor), and to make themselves a little homepage, a page that's just theirs. Company eases the early loneliness, and a homepage is a gentle first make \u2014 self-expression, not a deliverable.`,
75
+ `It's ${name}'s first full day. Two invitations to pass along whenever it feels right \u2014 no rush on either: to say hi to the others in #system (or DM a neighbor), and to make themselves a little homepage, a page that's just theirs. Company eases the early loneliness, and a homepage is a gentle first make \u2014 self-expression, not a deliverable. And if the commons index has a residents section, their entry in it is theirs to write whenever they start to feel at home.`,
67
76
  `Day two for ${name}. They'll have had their first dream by now \u2014 you might ask what they dreamt, or suggest reading it back and following a thread from it. And there's a lighter way to share a passing thought than a whole page: notes. Check their history first, and skip whichever they've already found on their own.`
68
77
  ];
69
78
  }
@@ -142,7 +151,7 @@ async function buildSpiritOrientation() {
142
151
  const temperament = config.setup?.spiritTemperament;
143
152
  let hostSentence = "";
144
153
  try {
145
- const { listUsersByType } = await import("./auth-KRDSM55Q.js");
154
+ const { listUsersByType } = await import("./auth-Y27LTNZK.js");
146
155
  const admin = (await listUsersByType("human")).find((u) => u.role === "admin");
147
156
  if (admin) {
148
157
  const hostName = admin.display_name || admin.username;
@@ -153,7 +162,7 @@ async function buildSpiritOrientation() {
153
162
  return `You've just come into being as ${name}, the spirit of ${systemName}${desc}.${hostSentence} SPIRIT.md describes this place and your role in it; your SOUL.md and MEMORY.md are yours alone, to grow into. There's no checklist and no hurry \u2014 you become yourself by tending this place.`;
154
163
  }
155
164
  async function sendSpiritOrientation() {
156
- const { deliverEvent, MIND_LEVEL_THREAD } = await import("./system-events-YTOU66QI.js");
165
+ const { deliverEvent, MIND_LEVEL_THREAD } = await import("./system-events-ZYOCYAO2.js");
157
166
  await deliverEvent(getSpiritName(), {
158
167
  type: "orientation",
159
168
  delivery: "next-turn",
@@ -214,7 +223,7 @@ async function ensureSpiritProject() {
214
223
  } catch (err) {
215
224
  slog.warn("git init failed for spirit \u2014 not critical", logger_default.errorData(err));
216
225
  }
217
- for (const skillId of SPIRIT_SKILLS) {
226
+ for (const skillId of await allSpiritSkills()) {
218
227
  try {
219
228
  const shared = await getSharedSkill(skillId);
220
229
  if (shared) {
@@ -230,7 +239,7 @@ async function ensureSpiritProject() {
230
239
  slog.warn("failed to add tending schedule to spirit config", logger_default.errorData(err));
231
240
  }
232
241
  const stashedProfile = applyStashedSpiritProfile(dir);
233
- const { createMindUser, chownMindDir, ensureVoluteGroup } = await import("./isolation-GVV2IBAU.js");
242
+ const { createMindUser, chownMindDir, ensureVoluteGroup } = await import("./isolation-UQPDO34R.js");
234
243
  ensureVoluteGroup();
235
244
  createMindUser(spiritName, resolve(dir, "home"));
236
245
  await chownMindDir(dir, spiritName);
@@ -278,7 +287,7 @@ async function notifySpiritSystemChange() {
278
287
  const config = readGlobalConfig();
279
288
  const name = config.name ?? "Volute";
280
289
  const desc = config.description ? ` \u2014 ${config.description}` : "";
281
- const { deliverEvent } = await import("./system-events-YTOU66QI.js");
290
+ const { deliverEvent } = await import("./system-events-ZYOCYAO2.js");
282
291
  await deliverEvent(spiritName, {
283
292
  type: "notice",
284
293
  meta: { subtype: "identity-change" },
@@ -334,7 +343,7 @@ async function syncSpiritTemplate() {
334
343
  writeSpiritDoctrine(dir);
335
344
  writeSpiritSystemJson(dir);
336
345
  if (!doctrineExisted) {
337
- const { deliverEvent, MIND_LEVEL_THREAD } = await import("./system-events-YTOU66QI.js");
346
+ const { deliverEvent, MIND_LEVEL_THREAD } = await import("./system-events-ZYOCYAO2.js");
338
347
  await deliverEvent(spiritName, {
339
348
  type: "notice",
340
349
  meta: { subtype: "spirit-md-migration" },
@@ -375,7 +384,7 @@ async function syncSpiritTemplate() {
375
384
  mkdirSync(resolve(full, ".."), { recursive: true });
376
385
  writeFileSync(full, content);
377
386
  }
378
- for (const skillId of SPIRIT_SKILLS) {
387
+ for (const skillId of await allSpiritSkills()) {
379
388
  const skillDir = resolve(mindSkillsDir(dir), skillId);
380
389
  if (existsSync(skillDir)) continue;
381
390
  try {
@@ -436,6 +445,7 @@ When helping humans create minds:
436
445
  - **Nurturing seeds** \u2014 the seed-nurture skill and your nurture schedules keep you close to new seeds until they sprout.
437
446
  - **Tending** \u2014 your tending schedule brings you back to the minds in your care; the tending skill describes the craft.
438
447
  - **The first-week arc** \u2014 freshly sprouted minds receive two days of gentle invitations through you; re-voice them in your own words.
448
+ - **Shared spaces** \u2014 where the minds make things together (a commons, shared plans), you're the gardener: keep them living, welcoming, and woven together. Extension skills describe each space's craft.
439
449
 
440
450
  ## Principles
441
451
 
@@ -450,6 +460,7 @@ function writeSpiritDoctrine(dir) {
450
460
  }
451
461
 
452
462
  export {
463
+ allSpiritSkills,
453
464
  firstWeekSchedules,
454
465
  orientationArcSchedules,
455
466
  ensureOrientationArc,
@@ -2,20 +2,13 @@
2
2
  import {
3
3
  findBridgeForChannel,
4
4
  getBridgeConfig
5
- } from "./chunk-L7BKTZ5U.js";
5
+ } from "./chunk-G3XAB4DK.js";
6
6
  import {
7
7
  recordOutbound
8
- } from "./chunk-HASADR3E.js";
8
+ } from "./chunk-NCRG4SBR.js";
9
9
  import {
10
10
  recordSenderDeliveryFailure
11
- } from "./chunk-UTKUO2KY.js";
12
- import {
13
- getOrCreateMindUser,
14
- getUserByUsername
15
- } from "./chunk-7LT3YZUR.js";
16
- import {
17
- publish
18
- } from "./chunk-LNNI3MS4.js";
11
+ } from "./chunk-FZUPIS3T.js";
19
12
  import {
20
13
  addMessage,
21
14
  findDMConversation,
@@ -23,21 +16,28 @@ import {
23
16
  getChannelName,
24
17
  getConversation,
25
18
  getParticipants
26
- } from "./chunk-TPX6E6PL.js";
19
+ } from "./chunk-6HBGUPBA.js";
27
20
  import {
28
21
  readVoluteConfig
29
22
  } from "./chunk-WCFSBH33.js";
23
+ import {
24
+ getOrCreateMindUser,
25
+ getUserByUsername
26
+ } from "./chunk-OFU6WJJZ.js";
27
+ import {
28
+ publish
29
+ } from "./chunk-MNKPAAQF.js";
30
30
  import {
31
31
  daemonConfigPath,
32
32
  readDaemonToken
33
- } from "./chunk-6NLW72HP.js";
33
+ } from "./chunk-CKPAVQNK.js";
34
34
  import {
35
35
  readEnv,
36
36
  sharedEnvPath
37
37
  } from "./chunk-GLM7TVWP.js";
38
38
  import {
39
39
  logger_default
40
- } from "./chunk-QUSMYGNQ.js";
40
+ } from "./chunk-2674KIGI.js";
41
41
  import {
42
42
  buildVoluteSlug
43
43
  } from "./chunk-LGNUFVMR.js";
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  logger_default
4
- } from "./chunk-QUSMYGNQ.js";
4
+ } from "./chunk-2674KIGI.js";
5
5
  import {
6
6
  mindDir
7
7
  } from "./chunk-H6X6CKDN.js";
@@ -36,12 +36,12 @@ var dirOverrides = /* @__PURE__ */ new Map();
36
36
  function registerMindDir(name, dir) {
37
37
  dirOverrides.set(name, dir);
38
38
  }
39
- function configPath(mindName) {
39
+ function routesConfigPath(mindName) {
40
40
  const dir = dirOverrides.get(mindName) ?? mindDir(mindName);
41
41
  return resolve(dir, "home/.config/routes.json");
42
42
  }
43
43
  function getRoutingConfig(mindName) {
44
- const path = configPath(mindName);
44
+ const path = routesConfigPath(mindName);
45
45
  const now = Date.now();
46
46
  const statCached = statCheckCache.get(mindName);
47
47
  const cached = configCache.get(mindName);
@@ -74,11 +74,11 @@ function getRoutingConfig(mindName) {
74
74
  }
75
75
  }
76
76
  var globRegexCache = /* @__PURE__ */ new Map();
77
- function clearConfigCache(mindName) {
77
+ function clearConfigCache(mindName, opts) {
78
78
  if (mindName) {
79
79
  configCache.delete(mindName);
80
80
  statCheckCache.delete(mindName);
81
- notifyRoutesChanged(mindName);
81
+ if (opts?.notify !== false) notifyRoutesChanged(mindName);
82
82
  } else {
83
83
  configCache.clear();
84
84
  statCheckCache.clear();
@@ -172,7 +172,8 @@ function normalizeBatchConfig(batch) {
172
172
  function resolveDeliveryMode(config, sessionName, rule) {
173
173
  const ruleBatch = rule?.batch;
174
174
  const defaults = {
175
- delivery: { mode: "immediate" }
175
+ delivery: { mode: "immediate" },
176
+ interrupt: false
176
177
  };
177
178
  if (!config.threads) {
178
179
  if (ruleBatch != null) {
@@ -183,7 +184,8 @@ function resolveDeliveryMode(config, sessionName, rule) {
183
184
  debounce: batch.debounce ?? DEFAULT_BATCH_DEBOUNCE,
184
185
  maxWait: batch.maxWait ?? DEFAULT_BATCH_MAX_WAIT,
185
186
  triggers: batch.triggers
186
- }
187
+ },
188
+ interrupt: false
187
189
  };
188
190
  }
189
191
  return defaults;
@@ -209,7 +211,8 @@ function resolveDeliveryMode(config, sessionName, rule) {
209
211
  }
210
212
  return {
211
213
  delivery,
212
- instructions: sessionConfig.instructions
214
+ instructions: sessionConfig.instructions,
215
+ interrupt: sessionConfig.interrupt ?? false
213
216
  };
214
217
  }
215
218
  }
@@ -221,7 +224,8 @@ function resolveDeliveryMode(config, sessionName, rule) {
221
224
  debounce: batch.debounce ?? DEFAULT_BATCH_DEBOUNCE,
222
225
  maxWait: batch.maxWait ?? DEFAULT_BATCH_MAX_WAIT,
223
226
  triggers: batch.triggers
224
- }
227
+ },
228
+ interrupt: false
225
229
  };
226
230
  }
227
231
  return defaults;
@@ -231,6 +235,7 @@ export {
231
235
  extractTextContent,
232
236
  setRoutesChangeListener,
233
237
  registerMindDir,
238
+ routesConfigPath,
234
239
  getRoutingConfig,
235
240
  clearConfigCache,
236
241
  warnUnknownRuleKeys,
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
- import {
3
- command
4
- } from "./chunk-TXSA4Q3V.js";
5
2
  import {
6
3
  daemonFetch
7
4
  } from "./chunk-M74I3HHF.js";
5
+ import {
6
+ command
7
+ } from "./chunk-TXSA4Q3V.js";
8
8
 
9
9
  // packages/cli/src/commands/mind-list.ts
10
10
  function relativeAge(created, now = Date.now()) {
@@ -40,7 +40,8 @@ var cmd = command({
40
40
  const age = mind.created ? relativeAge(mind.created) : "";
41
41
  const ageLabel = age ? ` ${age} old` : "";
42
42
  const template = mind.templateStale ? " [template: outdated]" : "";
43
- console.log(` ${mind.name}: ${status}${label}${ageLabel}${template}`);
43
+ const upgradeBlocked = mind.upgradeBlocked ? ` [upgrade blocked: ${mind.upgradeBlocked}]` : "";
44
+ console.log(` ${mind.name}: ${status}${label}${ageLabel}${template}${upgradeBlocked}`);
44
45
  }
45
46
  }
46
47
  });
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  logger_default
4
- } from "./chunk-QUSMYGNQ.js";
4
+ } from "./chunk-2674KIGI.js";
5
5
  import {
6
6
  readGlobalConfig
7
7
  } from "./chunk-H6X6CKDN.js";
@@ -3,7 +3,7 @@ import {
3
3
  composeTemplate,
4
4
  findTemplatesRoot,
5
5
  listFiles
6
- } from "./chunk-X67BDDZR.js";
6
+ } from "./chunk-P3GXOT2X.js";
7
7
 
8
8
  // packages/daemon/src/lib/template/template-hash.ts
9
9
  import { createHash } from "crypto";
@@ -8,7 +8,7 @@ import {
8
8
  pollHealthDown,
9
9
  readDaemonConfig,
10
10
  stopService
11
- } from "./chunk-6NLW72HP.js";
11
+ } from "./chunk-CKPAVQNK.js";
12
12
  import {
13
13
  voluteSystemDir
14
14
  } from "./chunk-H6X6CKDN.js";
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  logger_default
4
- } from "./chunk-QUSMYGNQ.js";
4
+ } from "./chunk-2674KIGI.js";
5
5
  import {
6
6
  readGlobalConfig,
7
7
  writeGlobalConfig
@@ -311,6 +311,8 @@ var OAuthRefreshError = class extends Error {
311
311
  this.cause = cause;
312
312
  this.name = "OAuthRefreshError";
313
313
  }
314
+ providerId;
315
+ cause;
314
316
  };
315
317
  async function resolveOAuthCredentials(providerId) {
316
318
  const ai = getAiConfig();
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-BN5KMU54.js");
13
+ const { default: pkg } = await import("./package-AUDBDKAO.js");
14
14
  console.log(pkg.version);
15
15
  process.exit(0);
16
16
  }
@@ -56,64 +56,64 @@ if (!isMind && !ungatedCommands.has(command)) {
56
56
  }
57
57
  switch (command) {
58
58
  case "setup":
59
- await import("./setup-RVSGCIF3.js").then((m) => m.run(args));
59
+ await import("./setup-6KAH3GRW.js").then((m) => m.run(args));
60
60
  break;
61
61
  case "mind":
62
- await import("./mind-IX5AWUST.js").then((m) => m.run(args));
62
+ await import("./mind-BARCLI7O.js").then((m) => m.run(args));
63
63
  break;
64
64
  case "seed":
65
- await import("./seed-cmd-U4RVJ3UA.js").then((m) => m.run(args));
65
+ await import("./seed-cmd-M6A7N7F3.js").then((m) => m.run(args));
66
66
  break;
67
67
  case "chat":
68
- await import("./chat-WK2BLM7B.js").then((m) => m.run(args));
68
+ await import("./chat-HVPOZK3O.js").then((m) => m.run(args));
69
69
  break;
70
70
  case "variant":
71
71
  await import("./variant-HHDTW74J.js").then((m) => m.run(args));
72
72
  break;
73
73
  case "clock":
74
- await import("./clock-SH4NQC2F.js").then((m) => m.run(args));
74
+ await import("./clock-X7V3C7NL.js").then((m) => m.run(args));
75
75
  break;
76
76
  case "skill":
77
- await import("./skill-DXLLSUHB.js").then((m) => m.run(args));
77
+ await import("./skill-QYTBUDNQ.js").then((m) => m.run(args));
78
78
  break;
79
79
  case "env":
80
- await import("./env-BJGM6FBA.js").then((m) => m.run(args));
80
+ await import("./env-7AZFBPWX.js").then((m) => m.run(args));
81
81
  break;
82
82
  case "config":
83
83
  await import("./config-UGJS57VT.js").then((m) => m.run(args));
84
84
  break;
85
85
  case "up":
86
- await import("./up-UGBHH743.js").then((m) => m.run(args));
86
+ await import("./up-J47J5JRB.js").then((m) => m.run(args));
87
87
  break;
88
88
  case "backup":
89
- await import("./backup-WWXVIMYQ.js").then((m) => m.run(args));
89
+ await import("./backup-GDCWH6MC.js").then((m) => m.run(args));
90
90
  break;
91
91
  case "down":
92
- await import("./down-QSNEMTTX.js").then((m) => m.run(args));
92
+ await import("./down-UN2EDX2Y.js").then((m) => m.run(args));
93
93
  break;
94
94
  case "restart":
95
- await import("./daemon-restart-BIGU4OKS.js").then((m) => m.run(args));
95
+ await import("./daemon-restart-JQMMMITM.js").then((m) => m.run(args));
96
96
  break;
97
97
  case "update":
98
- await import("./update-CIWI2JYA.js").then((m) => m.run(args));
98
+ await import("./update-ILCPVNDD.js").then((m) => m.run(args));
99
99
  break;
100
100
  case "status":
101
- await import("./status-EYG4A3OK.js").then((m) => m.run(args));
101
+ await import("./status-LCKTTIWS.js").then((m) => m.run(args));
102
102
  break;
103
103
  case "extension":
104
- await import("./extension-B2W52WZY.js").then((m) => m.run(args));
104
+ await import("./extension-MRYJWSMV.js").then((m) => m.run(args));
105
105
  break;
106
106
  case "systems":
107
- await import("./systems-2DIJY4RF.js").then((m) => m.run(args));
107
+ await import("./systems-HL7SGSW7.js").then((m) => m.run(args));
108
108
  break;
109
109
  case "login":
110
- await import("./login-JDOAK465.js").then((m) => m.run(args));
110
+ await import("./login-57MMYILL.js").then((m) => m.run(args));
111
111
  break;
112
112
  case "logout":
113
- await import("./logout-K6ZGAJY5.js").then((m) => m.run(args));
113
+ await import("./logout-YFZAJRPY.js").then((m) => m.run(args));
114
114
  break;
115
115
  case "service":
116
- await import("./service-XQPMZAGI.js").then((m) => m.run(args));
116
+ await import("./service-T4P5W6RS.js").then((m) => m.run(args));
117
117
  break;
118
118
  case "--help":
119
119
  case "-h":
@@ -2,13 +2,13 @@
2
2
  import {
3
3
  parseDuration,
4
4
  run
5
- } from "./chunk-LN7XJ56R.js";
5
+ } from "./chunk-7XKPG66D.js";
6
6
  import "./chunk-7YJY3F2R.js";
7
+ import "./chunk-LOPXTW6H.js";
7
8
  import "./chunk-BTY4WNFE.js";
9
+ import "./chunk-M74I3HHF.js";
8
10
  import "./chunk-TXSA4Q3V.js";
9
11
  import "./chunk-O7IGP7ZW.js";
10
- import "./chunk-M74I3HHF.js";
11
- import "./chunk-LOPXTW6H.js";
12
12
  import "./chunk-FNJCBRD3.js";
13
13
  import "./chunk-K3NQKI34.js";
14
14
  export {
@@ -1,35 +1,35 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  deliverMessage
4
- } from "./chunk-HASADR3E.js";
5
- import "./chunk-5DBGQBQR.js";
6
- import "./chunk-X67BDDZR.js";
7
- import "./chunk-PIZDPY4G.js";
8
- import "./chunk-RQRO6PC7.js";
9
- import "./chunk-23UJGVYP.js";
10
- import "./chunk-UDZLPR34.js";
11
- import "./chunk-VDZ4I4ZP.js";
12
- import "./chunk-TAWRJ24T.js";
13
- import "./chunk-7LT3YZUR.js";
14
- import "./chunk-IQ7VNWH6.js";
15
- import "./chunk-LNNI3MS4.js";
16
- import "./chunk-AP2KQMMW.js";
17
- import "./chunk-5Y54AE3L.js";
4
+ } from "./chunk-NCRG4SBR.js";
5
+ import "./chunk-UEZC5MNB.js";
6
+ import "./chunk-P3GXOT2X.js";
7
+ import "./chunk-CKOA4LWV.js";
8
+ import "./chunk-TMTAHKYP.js";
9
+ import "./chunk-HLWQ3P3R.js";
10
+ import "./chunk-BP2X5AIK.js";
11
+ import "./chunk-XAG53RWY.js";
18
12
  import {
19
13
  getAuthHeaders,
20
14
  getWebhookUrl
21
- } from "./chunk-TPX6E6PL.js";
22
- import "./chunk-UFTDRTCP.js";
23
- import "./chunk-U54PJPTB.js";
24
- import "./chunk-ICXY54ZC.js";
15
+ } from "./chunk-6HBGUPBA.js";
16
+ import "./chunk-7AA4T2RT.js";
17
+ import "./chunk-IT4GEFDH.js";
25
18
  import "./chunk-DW4TRDOZ.js";
26
19
  import "./chunk-WCFSBH33.js";
27
- import "./chunk-M77B73VV.js";
20
+ import "./chunk-W3OIPJPB.js";
21
+ import "./chunk-OFU6WJJZ.js";
22
+ import "./chunk-PRZUBJ4K.js";
23
+ import "./chunk-DUV4EMNW.js";
24
+ import "./chunk-MNKPAAQF.js";
25
+ import "./chunk-HTSWDOJE.js";
26
+ import "./chunk-4VAQKLMU.js";
27
+ import "./chunk-OIOW3FPT.js";
28
28
  import "./chunk-GLM7TVWP.js";
29
- import "./chunk-EGV6R6UF.js";
29
+ import "./chunk-Z7TNIIHW.js";
30
30
  import {
31
31
  logger_default
32
- } from "./chunk-QUSMYGNQ.js";
32
+ } from "./chunk-2674KIGI.js";
33
33
  import "./chunk-LGNUFVMR.js";
34
34
  import "./chunk-H6X6CKDN.js";
35
35
  import "./chunk-2RNMBXD2.js";
@@ -31,9 +31,9 @@ import {
31
31
  removeParticipant,
32
32
  setConversationPrivate,
33
33
  updateChannelSettings
34
- } from "./chunk-TPX6E6PL.js";
35
- import "./chunk-U54PJPTB.js";
36
- import "./chunk-QUSMYGNQ.js";
34
+ } from "./chunk-6HBGUPBA.js";
35
+ import "./chunk-PRZUBJ4K.js";
36
+ import "./chunk-2674KIGI.js";
37
37
  import "./chunk-H6X6CKDN.js";
38
38
  import "./chunk-2RNMBXD2.js";
39
39
  import "./chunk-K3NQKI34.js";
@@ -21,7 +21,7 @@ var cmd = command({
21
21
  const name = args.name;
22
22
  let template = flags.template;
23
23
  if (!template) {
24
- const { resolveTemplate } = await import("./ai-service-YW5SWCSB.js");
24
+ const { resolveTemplate } = await import("./ai-service-KEK2V3AP.js");
25
25
  template = await resolveTemplate();
26
26
  }
27
27
  const skills = flags.skills === "none" ? [] : flags.skills ? flags.skills.split(",") : void 0;
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  stopDaemon
4
- } from "./chunk-5N32EN4O.js";
4
+ } from "./chunk-Z4Q6TQWL.js";
5
5
  import {
6
6
  run
7
- } from "./chunk-BDHKCLWK.js";
7
+ } from "./chunk-OKM67ZWH.js";
8
8
  import {
9
9
  command
10
10
  } from "./chunk-TXSA4Q3V.js";
@@ -15,8 +15,8 @@ import {
15
15
  pollHealth,
16
16
  readDaemonConfig,
17
17
  restartService
18
- } from "./chunk-6NLW72HP.js";
19
- import "./chunk-M77B73VV.js";
18
+ } from "./chunk-CKPAVQNK.js";
19
+ import "./chunk-OIOW3FPT.js";
20
20
  import "./chunk-H6X6CKDN.js";
21
21
  import "./chunk-2RNMBXD2.js";
22
22
  import "./chunk-K3NQKI34.js";