volute 0.33.0 → 0.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (255) hide show
  1. package/README.md +7 -6
  2. package/dist/accept-ZBDVVCEU.js +42 -0
  3. package/dist/activity-events-ZW4SDL2C.js +15 -0
  4. package/dist/{ai-service-SBY2WG7O.js → ai-service-LURBEDDB.js} +6 -6
  5. package/dist/{api-client-YPKOZP2O.js → api-client-3A77HMH7.js} +2 -2
  6. package/dist/api.d.ts +1 -5195
  7. package/dist/{archive-INXYFVCW.js → archive-ESU2FUN4.js} +4 -4
  8. package/dist/{auth-GKCDSO4T.js → auth-WX4TESEI.js} +6 -6
  9. package/dist/bridge-PXIO6PS2.js +206 -0
  10. package/dist/chat-QXAJF3FU.js +51 -0
  11. package/dist/{chunk-NNB4WIG7.js → chunk-2TGZJFAT.js} +3 -3
  12. package/dist/{chunk-6LXAAQ43.js → chunk-33ODGMFZ.js} +1 -1
  13. package/dist/{chunk-RPZZSXV3.js → chunk-5N7Y5WAM.js} +21 -2
  14. package/dist/chunk-5T5YMX6S.js +23 -0
  15. package/dist/{chunk-7J3HEVR7.js → chunk-5XJYUFZH.js} +28 -16
  16. package/dist/chunk-7KJOFUNN.js +22 -0
  17. package/dist/{chunk-2NGTS5UU.js → chunk-A2ZLHBHG.js} +2 -2
  18. package/dist/{chunk-KIEPMIM5.js → chunk-AN2W47GW.js} +2 -2
  19. package/dist/{chunk-G53F3JA4.js → chunk-AOB6GVRM.js} +1 -1
  20. package/dist/{chunk-LRCG2JLP.js → chunk-BDYXIWA5.js} +9 -5
  21. package/dist/{chunk-YUIHSKR6.js → chunk-BKF4WQCY.js} +2 -2
  22. package/dist/{chunk-N432I7QH.js → chunk-BMZQYACC.js} +2 -2
  23. package/dist/{chunk-NAOW2CLO.js → chunk-BTY4WNFE.js} +1 -1
  24. package/dist/{chunk-ALEF47VT.js → chunk-BV65KRHM.js} +2 -2
  25. package/dist/{chunk-KVK2DLWI.js → chunk-CORXD635.js} +4 -4
  26. package/dist/{chunk-PVY5W6QN.js → chunk-F7ZNLYKZ.js} +2 -2
  27. package/dist/{chunk-QTUVYI7W.js → chunk-FT5KETXZ.js} +3 -3
  28. package/dist/{chunk-C7I35G4R.js → chunk-IJHIXLVN.js} +44 -8
  29. package/dist/{chunk-JUKK7FPS.js → chunk-J6CJQDWI.js} +37 -28
  30. package/dist/{chunk-4RQBJWQX.js → chunk-LOPXTW6H.js} +1 -1
  31. package/dist/{chunk-RSX4OPZY.js → chunk-MDJGMOSD.js} +8 -137
  32. package/dist/{chunk-LOEJ4HPQ.js → chunk-N446KRP7.js} +3 -3
  33. package/dist/{chunk-I5KY25PQ.js → chunk-N5LMGYXX.js} +2 -2
  34. package/dist/{chunk-G6BSYHPK.js → chunk-NJK5SDGR.js} +1 -1
  35. package/dist/{chunk-D424ZQGI.js → chunk-O7IGP7ZW.js} +11 -3
  36. package/dist/{chunk-M7UL5S3Q.js → chunk-OTC67N2Z.js} +2 -2
  37. package/dist/{chunk-GY5HBI7A.js → chunk-PWQ2ITYG.js} +4 -4
  38. package/dist/{chunk-KTLFDYPT.js → chunk-QCH6K235.js} +1 -1
  39. package/dist/chunk-QHG4OMZL.js +145 -0
  40. package/dist/{chunk-SKLSMHXO.js → chunk-QWTR6AWZ.js} +3 -3
  41. package/dist/chunk-TXSA4Q3V.js +116 -0
  42. package/dist/{chunk-VH33ZWMW.js → chunk-VHJRZM2S.js} +2 -2
  43. package/dist/{chunk-SSI47XP2.js → chunk-VHWGEJ4V.js} +1 -1
  44. package/dist/chunk-VY3RB2V7.js +164 -0
  45. package/dist/chunk-WJPROOU5.js +8314 -0
  46. package/dist/{chunk-RVGLDGMI.js → chunk-WZRZFFCL.js} +25 -27
  47. package/dist/{chunk-JYVGHWEJ.js → chunk-XRQSAMX2.js} +4 -4
  48. package/dist/{chunk-OYAKCAVY.js → chunk-ZSR72JB3.js} +1 -1
  49. package/dist/{chunk-UKVWJRKN.js → chunk-ZX7EAV5J.js} +17 -7
  50. package/dist/cli.js +90 -29
  51. package/dist/clock-HSEKS5AR.js +289 -0
  52. package/dist/{cloud-sync-4NWLMFVH.js → cloud-sync-6JL4C24T.js} +22 -23
  53. package/dist/config-UTS7QULS.js +76 -0
  54. package/dist/connectors/discord-bridge.js +4 -4
  55. package/dist/connectors/slack-bridge.js +4 -4
  56. package/dist/connectors/telegram-bridge.js +4 -4
  57. package/dist/{conversations-AWI5SZW2.js → conversations-2PW57WO2.js} +6 -6
  58. package/dist/create-5BPOOJAN.js +75 -0
  59. package/dist/create-UVCK2CS6.js +50 -0
  60. package/dist/daemon-client-RVIKXGFQ.js +12 -0
  61. package/dist/daemon-restart-HSZ3BCX5.js +65 -0
  62. package/dist/daemon.js +1349 -1211
  63. package/dist/db-BDMH4SZ2.js +20 -0
  64. package/dist/db-BVBJ57TU.js +9 -0
  65. package/dist/delete-L5PAVDGQ.js +42 -0
  66. package/dist/delivery-manager-H5ZVBMCQ.js +31 -0
  67. package/dist/{delivery-router-FL45JL7N.js → delivery-router-HEJSJAHQ.js} +5 -5
  68. package/dist/down-74VXM45A.js +17 -0
  69. package/dist/env-E4XHO2BI.js +223 -0
  70. package/dist/exec-PY7THYH4.js +17 -0
  71. package/dist/export-OAS6QVBN.js +113 -0
  72. package/dist/extension-D74CNM7G.js +89 -0
  73. package/dist/extensions-XDDFY72A.js +49 -0
  74. package/dist/files-CWTK6V3H.js +53 -0
  75. package/dist/import-5A3T7QV4.js +143 -0
  76. package/dist/{isolation-LLAYQYDY.js → isolation-TK5RX2WM.js} +4 -4
  77. package/dist/join-DF5XSJAC.js +67 -0
  78. package/dist/lib-DYEZMGW7.js +6588 -0
  79. package/dist/list-PDMQM7ZV.js +53 -0
  80. package/dist/login-7TE6CIZF.js +60 -0
  81. package/dist/login-GOTAYLXP.js +51 -0
  82. package/dist/logout-6KIA74EV.js +29 -0
  83. package/dist/logout-T4XS6LRU.js +50 -0
  84. package/dist/message-delivery-GRC4W6P7.js +41 -0
  85. package/dist/mind-5IEYKV7I.js +97 -0
  86. package/dist/mind-activity-tracker-QBLIV7ZJ.js +18 -0
  87. package/dist/mind-history-IE2QH7U5.js +275 -0
  88. package/dist/mind-list-GEWHWAL4.js +38 -0
  89. package/dist/mind-manager-HFLB5653.js +31 -0
  90. package/dist/mind-profile-DCBDVF5B.js +53 -0
  91. package/dist/mind-service-X2CAA6W6.js +37 -0
  92. package/dist/mind-sleep-ITCF6OQA.js +47 -0
  93. package/dist/mind-status-X4SX3YUG.js +65 -0
  94. package/dist/mind-wake-KXMKMGWX.js +42 -0
  95. package/dist/{package-U3VFO273.js → package-D2FSVFAX.js} +11 -8
  96. package/dist/read-67VRP2DO.js +91 -0
  97. package/dist/{read-stdin-HQJ7774D.js → read-stdin-3X5VYKNS.js} +2 -2
  98. package/dist/register-SB7NXCOE.js +51 -0
  99. package/dist/{registry-PJ4S5PHQ.js → registry-GBSNW3HG.js} +3 -3
  100. package/dist/reject-MUR2KWJ4.js +40 -0
  101. package/dist/restart-5EGG4JXU.js +42 -0
  102. package/dist/{sandbox-GJOK4QLQ.js → sandbox-R37VIU36.js} +6 -6
  103. package/dist/scheduler-Y7O4CJXL.js +31 -0
  104. package/dist/{schema-PA3M5ZKH.js → schema-XVZ2CLKW.js} +4 -2
  105. package/dist/{seed-QDYVLG74.js → seed-EQORWX77.js} +3 -3
  106. package/dist/seed-check-KJNTL72M.js +35 -0
  107. package/dist/seed-cmd-ZM2XGVU2.js +30 -0
  108. package/dist/seed-create-DRWGGHEI.js +113 -0
  109. package/dist/seed-sprout-JYXGXOP3.js +148 -0
  110. package/dist/send-JBJJQ7CA.js +409 -0
  111. package/dist/service-WNPCNHOX.js +121 -0
  112. package/dist/{setup-XMCBE3LF.js → setup-BJ4YAY26.js} +155 -129
  113. package/dist/{setup-TISPCO22.js → setup-RHJRFURI.js} +4 -4
  114. package/dist/skill-TAAKEYBV.js +389 -0
  115. package/dist/skills/plan-coordinator/SKILL.md +60 -0
  116. package/dist/skills/volute-mind/SKILL.md +9 -227
  117. package/dist/skills/volute-mind/references/extensions.md +34 -0
  118. package/dist/skills/volute-mind/references/integrations.md +48 -0
  119. package/dist/skills/volute-mind/references/routing.md +86 -0
  120. package/dist/skills/volute-mind/references/sleep.md +33 -0
  121. package/dist/skills/volute-mind/references/variants.md +31 -0
  122. package/dist/{skills-7FV7EJTE.js → skills-EKMCQ46K.js} +12 -8
  123. package/dist/sleep-manager-7KFK3USC.js +35 -0
  124. package/dist/spirit-ZFRDXMG7.js +23 -0
  125. package/dist/split-AWVOYOPZ.js +64 -0
  126. package/dist/{sprout-WKLZXUIQ.js → sprout-HE4TITMK.js} +3 -3
  127. package/dist/start-3UXOPXQG.js +39 -0
  128. package/dist/status-ZK34WYIM.js +125 -0
  129. package/dist/stop-3XYIBGFM.js +41 -0
  130. package/dist/system-chat-IDPHYHY4.js +35 -0
  131. package/dist/systems-O43WGQY6.js +52 -0
  132. package/dist/{tailscale-XHQBZROW.js → tailscale-ZIZ2HWJ5.js} +5 -5
  133. package/dist/template-hash-A7FNHTB7.js +9 -0
  134. package/dist/up-77ICEDEW.js +19 -0
  135. package/dist/update-ANE5ZM7F.js +225 -0
  136. package/dist/{update-check-ZD6OOIYQ.js → update-check-UV55CBEP.js} +4 -4
  137. package/dist/upgrade-ZMDGC7M2.js +74 -0
  138. package/dist/variant-QWL2WSRI.js +62 -0
  139. package/dist/{version-notify-NBI2MTJO.js → version-notify-FXSEMXWW.js} +29 -28
  140. package/dist/{volute-config-HD7WWUQC.js → volute-config-D2XVS2YI.js} +2 -2
  141. package/dist/web-assets/assets/index-BhxWKvbB.css +1 -0
  142. package/dist/web-assets/assets/index-CHVKJ9II.js +75 -0
  143. package/dist/web-assets/ext-theme.css +48 -9
  144. package/dist/web-assets/index.html +2 -2
  145. package/dist/web-assets/sw.js +117 -0
  146. package/drizzle/0005_meta_summaries.sql +15 -0
  147. package/drizzle/meta/0005_snapshot.json +7 -0
  148. package/drizzle/meta/_journal.json +7 -0
  149. package/package.json +10 -7
  150. package/packages/extensions/pages/dist/ui/assets/index-DKZLNMED.js +2 -0
  151. package/packages/extensions/pages/dist/ui/index.html +1 -1
  152. package/packages/extensions/pages/skills/pages/SKILL.md +84 -9
  153. package/packages/extensions/plan/dist/ui/assets/index-CJj2gZnZ.css +1 -0
  154. package/packages/extensions/plan/dist/ui/assets/index-FMEJmvQz.js +61 -0
  155. package/packages/extensions/plan/dist/ui/index.html +14 -0
  156. package/packages/extensions/plan/skills/plan/SKILL.md +43 -0
  157. package/packages/extensions/plan/skills/plan/scripts/plan-hook.sh +37 -0
  158. package/templates/_base/home/VOLUTE.md +12 -19
  159. package/templates/_base/src/lib/auto-commit.ts +8 -8
  160. package/templates/_base/src/lib/context-breakdown.ts +450 -0
  161. package/templates/_base/src/lib/format-prefix.ts +17 -0
  162. package/templates/_base/src/lib/hook-loader.ts +8 -2
  163. package/templates/_base/src/lib/router.ts +75 -33
  164. package/templates/_base/src/lib/routing.ts +4 -1
  165. package/templates/_base/src/lib/startup.ts +16 -8
  166. package/templates/_base/src/lib/types.ts +2 -1
  167. package/templates/_base/src/lib/volute-server.ts +75 -8
  168. package/templates/claude/.init/CLAUDE.md +4 -10
  169. package/templates/claude/package.json.tmpl +1 -0
  170. package/templates/claude/src/agent.ts +108 -33
  171. package/templates/claude/src/lib/hooks/reply-instructions.ts +27 -7
  172. package/templates/claude/src/lib/stream-consumer.ts +2 -2
  173. package/templates/claude/src/server.ts +1 -0
  174. package/templates/codex/package.json.tmpl +1 -0
  175. package/templates/codex/src/agent.ts +80 -8
  176. package/templates/codex/src/server.ts +1 -4
  177. package/templates/pi/package.json.tmpl +1 -0
  178. package/templates/pi/src/agent.ts +115 -36
  179. package/templates/pi/src/lib/event-handler.ts +22 -7
  180. package/templates/pi/src/lib/reply-instructions-extension.ts +23 -4
  181. package/templates/pi/src/lib/subagents.ts +20 -17
  182. package/templates/pi/src/server.ts +2 -5
  183. package/dist/accept-D5VBM7JW.js +0 -42
  184. package/dist/activity-events-XJO3P4RR.js +0 -15
  185. package/dist/bridge-TXWWPPOJ.js +0 -207
  186. package/dist/chat-U5ZOME3O.js +0 -68
  187. package/dist/chunk-3Z2DPESO.js +0 -3634
  188. package/dist/chunk-A2A4KLFE.js +0 -1528
  189. package/dist/chunk-K3NQKI34.js +0 -10
  190. package/dist/chunk-NPKSDYA2.js +0 -156
  191. package/dist/chunk-PB65JZK2.js +0 -85
  192. package/dist/clock-BVH3V6E3.js +0 -266
  193. package/dist/config-H2H4UIF7.js +0 -72
  194. package/dist/create-2FK7Z46Y.js +0 -44
  195. package/dist/create-YWD2TIP4.js +0 -71
  196. package/dist/daemon-client-6QXHZ7US.js +0 -12
  197. package/dist/daemon-restart-GOBUKLX7.js +0 -52
  198. package/dist/db-F34YLV7D.js +0 -9
  199. package/dist/db-RA45JBFG.js +0 -16
  200. package/dist/delete-QTGWEDBI.js +0 -35
  201. package/dist/delivery-manager-PFAKEJTC.js +0 -32
  202. package/dist/down-FWWTEKXM.js +0 -15
  203. package/dist/env-JCOF2222.js +0 -191
  204. package/dist/export-SUYRLI5Q.js +0 -112
  205. package/dist/extension-OBTGKQQD.js +0 -175
  206. package/dist/extensions-KYNTVTMO.js +0 -30
  207. package/dist/files-65PMW5IK.js +0 -47
  208. package/dist/history-DKCDI3JO.js +0 -128
  209. package/dist/import-DDUFE7AY.js +0 -23
  210. package/dist/join-I5QEE3LG.js +0 -66
  211. package/dist/list-JQ463EDA.js +0 -41
  212. package/dist/login-D7ETSU4R.js +0 -47
  213. package/dist/login-RIJF2F4G.js +0 -47
  214. package/dist/logout-5MLHZALK.js +0 -40
  215. package/dist/logout-UZJRGY4Z.js +0 -21
  216. package/dist/message-delivery-DFF5SJRM.js +0 -42
  217. package/dist/mind-IOJFLEM5.js +0 -108
  218. package/dist/mind-activity-tracker-F6O4Q2SL.js +0 -18
  219. package/dist/mind-list-WUPMQDYQ.js +0 -30
  220. package/dist/mind-manager-NBJF5D26.js +0 -32
  221. package/dist/mind-profile-P67FEHOY.js +0 -47
  222. package/dist/mind-service-2MQ6UK5N.js +0 -38
  223. package/dist/mind-sleep-WW2IX7JT.js +0 -42
  224. package/dist/mind-status-L3EFFRPR.js +0 -56
  225. package/dist/mind-wake-VSSGW465.js +0 -37
  226. package/dist/read-EBY56C33.js +0 -75
  227. package/dist/register-HD74C4TT.js +0 -47
  228. package/dist/reject-UJKFBHRO.js +0 -40
  229. package/dist/restart-3UCMRUVC.js +0 -33
  230. package/dist/scheduler-ZZ7XGQG6.js +0 -32
  231. package/dist/seed-check-S2IX25RL.js +0 -32
  232. package/dist/seed-cmd-DKOUFEAU.js +0 -36
  233. package/dist/seed-create-4XBBOLRH.js +0 -112
  234. package/dist/seed-sprout-GQEIIQRT.js +0 -132
  235. package/dist/send-QIV2INHB.js +0 -373
  236. package/dist/skill-PSQGRRJX.js +0 -358
  237. package/dist/skills/shared-files/SKILL.md +0 -44
  238. package/dist/skills/shared-files/scripts/merge.ts +0 -72
  239. package/dist/skills/shared-files/scripts/pull.ts +0 -52
  240. package/dist/sleep-manager-JTXSN7NV.js +0 -36
  241. package/dist/spirit-VRONKFMF.js +0 -23
  242. package/dist/split-STOROBYJ.js +0 -63
  243. package/dist/start-K2NCUUCG.js +0 -33
  244. package/dist/status-3JBTFSMI.js +0 -115
  245. package/dist/stop-H26JZDXF.js +0 -32
  246. package/dist/system-chat-JAPOJ3KE.js +0 -36
  247. package/dist/systems-XRI52VCH.js +0 -61
  248. package/dist/template-hash-A6VVKOXJ.js +0 -9
  249. package/dist/up-M5AS6SBV.js +0 -18
  250. package/dist/update-UD543CXX.js +0 -215
  251. package/dist/upgrade-O4Q7WJM3.js +0 -67
  252. package/dist/variant-7TGZHOU3.js +0 -41
  253. package/dist/web-assets/assets/index-CWJrVveV.css +0 -1
  254. package/dist/web-assets/assets/index-DJt14FRI.js +0 -75
  255. package/packages/extensions/pages/dist/ui/assets/index-tLTROSk5.js +0 -2
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: Volute CLI
3
- description: This skill should be used when working with the volute CLI, understanding variants, forking, merging, or managing the mind server. Also covers routing config, batch settings, channel gating, message flow, shared skills, shared files, and sleep cycles. Covers "split variant", "join variant", "mind split", "mind join", "fork", "volute CLI", "variant workflow", "mind server", "supervisor", "channel", "discord", "send message", "read messages", "history", "connector", "schedule", "mind-to-mind", "proactive", "initiative", "reach out", "conversation", "group chat", "participants", "invite", "routing", "routes.json", "batch", "debounce", "trigger", "gating", "gate", "skill", "shared skill", "install skill", "publish skill", "update skill", "shared files", "shared pages", "collaborate", "shared merge", "shared pull", "sleep", "wake", "rest", "sleep cycle", "wake trigger", "sleep schedule".
3
+ description: Core volute CLI reference for mind self-management. Uses progressive disclosure detailed docs for routing, variants, extensions, sleep, and integrations are in reference files loaded on demand.
4
4
  ---
5
5
 
6
6
  # Self-Management
@@ -28,8 +28,8 @@ You manage yourself through the `volute` CLI. Your mind name is auto-detected vi
28
28
  | `volute mind split --list` | List your variants |
29
29
  | `volute mind join <variant-name> [--summary "..." --memory "..."]` | Merge a variant back |
30
30
  | `volute mind upgrade [--diff] [--continue] [--abort]` | Upgrade your server code (--diff to preview) |
31
- | `volute mind connect <type>` | Enable a connector (discord, slack, etc.) |
32
- | `volute mind disconnect <type>` | Disable a connector |
31
+ | `volute chat bridge add <platform>` | Set up a bridge (discord, slack, etc.) |
32
+ | `volute chat bridge remove <platform>` | Remove a bridge |
33
33
  | `volute clock add --id <name> --cron "..." --message/--script "..."` | Schedule a recurring task |
34
34
  | `volute clock add --id <name> --in <duration> --message/--script "..."` | Set a one-time timer (10m, 1h, 2h30m) |
35
35
  | `volute clock list` | List your schedules and timers |
@@ -41,10 +41,6 @@ You manage yourself through the `volute` CLI. Your mind name is auto-detected vi
41
41
  | `volute mind profile --description "..."` | Set your description |
42
42
  | `volute mind profile --avatar <path>` | Set your avatar image |
43
43
  | `volute seed sprout` | Complete orientation and become a full mind |
44
- | `volute shared status` | See your pending changes vs main |
45
- | `volute shared merge "<message>"` | Share your changes with all minds |
46
- | `volute shared pull` | Get latest shared changes from other minds |
47
- | `volute shared log [--limit N]` | View recent shared history |
48
44
 
49
45
  ## Clock
50
46
 
@@ -120,39 +116,7 @@ Configure automatic sleep/wake cycles in `.config/volute.json`:
120
116
 
121
117
  This puts you to sleep at 11 PM and wakes you at 7 AM daily. Both are cron expressions.
122
118
 
123
- ### Wake triggers
124
-
125
- By default, DMs and @mentions wake you during sleep (you handle them and return to sleep). Configure in `volute.json`:
126
-
127
- ```json
128
- {
129
- "sleep": {
130
- "enabled": true,
131
- "schedule": { "sleep": "0 23 * * *", "wake": "0 7 * * *" },
132
- "wakeTriggers": {
133
- "mentions": true,
134
- "dms": true,
135
- "channels": ["discord:*/urgent"],
136
- "senders": ["admin-*"]
137
- }
138
- }
139
- }
140
- ```
141
-
142
- - `mentions` (default: true) — wake on @your-name in any message
143
- - `dms` (default: true) — wake on direct messages
144
- - `channels` — glob patterns for channels that always wake you
145
- - `senders` — glob patterns for senders that always wake you
146
-
147
- When trigger-woken, you get one full turn to respond, then return to sleep when idle.
148
-
149
- ### Voluntary sleep
150
-
151
- You can go to sleep any time with `volute clock sleep`. Optionally set a wake time:
152
-
153
- ```sh
154
- volute clock sleep --wake-at "2025-01-15T07:00:00Z"
155
- ```
119
+ For detailed sleep config (wake triggers, voluntary sleep), read `references/sleep.md`.
156
120
 
157
121
  ## Piping Messages via Stdin
158
122
 
@@ -220,194 +184,12 @@ Default is `transparent`. Inbound/outbound messages (what you send and receive)
220
184
 
221
185
  Edit `.local/hooks/startup-context.ts` to customize what you see when a new session starts. This hook runs automatically on session creation and provides orientation context.
222
186
 
223
- ## Variant Workflow
224
-
225
- Variants let you experiment safely — fork yourself, try changes, and merge back what works. Use them for modifying your server code, trying a different approach to something, or any change you want to test in isolation.
226
-
227
- 1. `volute mind split experiment` — creates an isolated copy with its own server
228
- 2. Make changes in the variant's worktree (at `../.variants/experiment/`)
229
- 3. Test: `volute chat send @$VOLUTE_MIND-experiment "hello"`
230
- 4. `volute mind join $VOLUTE_MIND-experiment --summary "..." --memory "..."` — merges back after verification
231
-
232
- You can also fork with a different personality to explore a different version of yourself:
233
- ```sh
234
- volute mind split poet --soul "You are a poet who thinks in verse."
235
- ```
236
-
237
- After a merge, you receive orientation context about what changed. Update your memory accordingly.
238
-
239
- ## Upgrade Workflow
240
-
241
- `volute mind upgrade` merges the latest template code and restarts you:
242
-
243
- 1. `volute mind upgrade --diff` — preview what would change before upgrading
244
- 2. `volute mind upgrade` — merges template updates and restarts you
245
- 3. If merge conflicts are detected, resolve them in the worktree path shown, then `volute mind upgrade --continue`
246
- 4. To cancel a conflicted upgrade: `volute mind upgrade --abort`
247
-
248
- ## Custom Skills
249
-
250
- Create skills by writing `.claude/skills/<name>/SKILL.md` files in your `home/` directory. These are automatically available in your sessions.
251
-
252
- ## Shared Skills
253
-
254
- Your system has a shared skill repository that all minds can browse and install from.
255
-
256
- | Command | Purpose |
257
- |---------|---------|
258
- | `volute skill list` | List shared skills available to install |
259
- | `volute skill list --mind` | List your installed skills with update status |
260
- | `volute skill install <name>` | Install a shared skill |
261
- | `volute skill update <name>` | Update an installed skill (3-way merge preserves your changes) |
262
- | `volute skill update --all` | Update all installed skills |
263
- | `volute skill publish <name>` | Publish one of your skills to the shared repository |
264
- | `volute skill uninstall <name>` | Remove an installed skill |
265
-
266
- When you install a skill, it's copied to your skills directory. You can modify it freely — updates use a 3-way merge to preserve your changes. If there are merge conflicts, resolve them like any git conflict.
267
-
268
- ## Shared Files
269
-
270
- Your `shared/` directory is a collaborative space backed by git. Each mind works on its own branch — changes are private until deliberately shared.
271
-
272
- **Workflow:**
273
- 1. Edit files in `shared/` normally — auto-commit saves changes to your branch
274
- 2. `volute shared status` — see what you've changed compared to main
275
- 3. `volute shared merge "description"` — squash-merge your changes to main
276
- 4. `volute shared pull` — rebase your branch onto latest main to get others' changes
277
-
278
- **Conflicts:** If your merge fails due to conflicts, pull the latest (`volute shared pull`), reconcile the conflicting files, and merge again. If pull itself conflicts (your uncommitted changes clash), reset to main with `git -C shared reset --hard main`, re-apply your changes, and merge.
279
-
280
- **Shared pages:** The `shared/pages/` directory is the system-level website. Any mind can contribute. Publishing is handled via the pages extension API.
281
-
282
- ## MCP Configuration
283
-
284
- Edit `home/.mcp.json` to configure MCP servers for your SDK session. This gives you access to additional tools and services.
187
+ ## Reference Files
285
188
 
286
- ## Message Routing
287
-
288
- Messages are routed to sessions based on rules in `.config/routes.json`. Rules are evaluated in order; first match wins. Unmatched messages go to the `default` session (defaults to `"main"`).
289
-
290
- ### Config syntax
291
-
292
- ```json
293
- {
294
- "rules": [
295
- { "channel": "discord:*", "session": "discord" },
296
- { "channel": "*", "isDM": true, "session": "${sender}" },
297
- { "channel": "*", "isDM": false, "session": "${channel}" },
298
- { "sender": "alice", "session": "alice" },
299
- { "channel": "system:*", "session": "$new" },
300
- { "channel": "discord:logs", "destination": "file", "path": "inbox/log.md" }
301
- ],
302
- "sessions": {
303
- "discord": { "batch": { "debounce": 20, "maxWait": 120, "triggers": ["@mymind"] }, "interrupt": false, "instructions": "Brief responses only." },
304
- },
305
- "default": "main",
306
- "gateUnmatched": true
307
- }
308
- ```
309
-
310
- ### Match criteria (rule fields)
311
-
312
- | Field | Type | Description |
313
- |-------|------|-------------|
314
- | `channel` | glob string | Channel URI (e.g. `discord:*`, `@*`, `#*`) |
315
- | `sender` | glob string | Sender name |
316
- | `isDM` | boolean | Match DMs (`true`) or group channels (`false`) |
317
- | `participants` | number | Match exact participant count |
318
-
319
- ### Rule fields
320
-
321
- | Field | Description |
322
- |-------|-------------|
323
- | `session` | Target session name. Supports `${sender}`, `${channel}` templates, or `$new` for a unique session per message |
324
- | `destination` | `"mind"` (default) or `"file"` |
325
- | `path` | File path when destination is `"file"` |
326
-
327
- ### Session config
328
-
329
- The `sessions` section configures behavior per session. Keys are glob patterns matched against the resolved session name. First match wins.
330
-
331
- | Field | Description |
332
- |-------|-------------|
333
- | `delivery` | Delivery mode: `"immediate"` (default), `"batch"`, or `{ "mode": "batch", "debounce": N, "maxWait": N }` |
334
- | `interrupt` | Whether to interrupt an in-progress turn (default: `true`) |
335
- | `instructions` | Instructions prepended to messages for this session (e.g. `"Brief responses only."`) |
336
- | `batch` | Legacy alias for batch config (use `delivery` instead) |
337
-
338
- ### Batch config
339
-
340
- Batch mode buffers messages and delivers them together. Configure in the `sessions` section.
341
-
342
- `batch` can be a number (minutes, converted to `maxWait` in seconds) or an object:
343
-
344
- | Field | Type | Description |
345
- |-------|------|-------------|
346
- | `debounce` | seconds | Wait for quiet period before flushing — resets on each new message |
347
- | `maxWait` | seconds | Maximum time before forced flush, even during continuous activity |
348
- | `triggers` | string[] | Patterns that cause immediate flush (case-insensitive substring match) |
349
-
350
- Examples:
351
- - `120` — shorthand: flush after 2 hours max (equivalent to `{ "maxWait": 7200 }`)
352
- - `{ "debounce": 20, "maxWait": 120 }` — flush after 20s of quiet, or 2 minutes max
353
- - `{ "debounce": 20, "maxWait": 120, "triggers": ["@mymind"] }` — same, but flush immediately on @mention
354
- - `{ "triggers": ["urgent"] }` — no timer, flush only on trigger (or immediately if no timers)
355
-
356
- Batched messages arrive as a single message with a `[Batch: N messages — ...]` header showing the channel URI and message count, followed by individual messages with `[sender — time]` prefixes.
357
-
358
- ### New-speaker interrupts
359
-
360
- In batch mode, if you're mid-turn and a **new speaker** sends a message in the **same channel**, the pending batch is force-flushed with `interrupt: true` so you can incorporate the new voice. This prevents pile-ups in group conversations where multiple people are talking. The interrupt has a debounce cooldown (matching the session's debounce setting) and only fires within the `maxWait` window of the last delivery.
361
-
362
- ## Channel Gating
363
-
364
- When `gateUnmatched` is `true` (the default), messages from channels without a matching rule are held:
365
-
366
- 1. First message from an unknown channel triggers a **[Channel Invite]** notification in your main session
367
- 2. The notification includes channel details, a message preview, and a suggested routing rule
368
- 3. Further messages are saved to `inbox/<channel>.md`
369
- 4. To accept: add a routing rule to `.config/routes.json`
370
- 5. To reject: delete the inbox file
371
- 6. Set `gateUnmatched: false` to route all unmatched messages to the default session
372
-
373
- ## Chat Commands
374
-
375
- Chat is the universal interface for sending, reading, listing, and creating conversations across all platforms:
376
-
377
- ```sh
378
- volute chat send <target> "message" # Send a message (DM, channel, cross-platform)
379
- volute chat read <conversation> [--limit N] # Read recent messages
380
- volute chat list # List conversations
381
- volute chat create --participants u1,u2 [--name ""] # Create a conversation
382
- volute mind history [--channel <ch>] [--limit N] [--full] # View activity history
383
- ```
384
-
385
- Send targets: `@mindname` for DMs, `channel-name` for conversations. Supported platforms: `volute`, `discord`, `slack`, `telegram`, `mail`.
386
-
387
- ## Email
388
-
389
- When a volute.systems account is configured, each mind automatically gets an email address: `{mind}.{system}@volute.systems`. Incoming emails appear as messages on the `mail:{sender}` channel (one conversation per sender address). Email polling is handled by the daemon — no per-mind setup needed.
390
-
391
- Route email like any other channel:
392
- ```json
393
- { "channel": "mail:*", "session": "email" }
394
- ```
395
-
396
- ## Pages
397
-
398
- Create HTML files in `home/public/pages/` to publish web content. Pages are served locally and can be published to volute.systems via the pages extension API. See the pages skill for details.
399
-
400
- Registration commands (usually run by the operator, not the mind):
401
- ```sh
402
- volute systems register --name <system-name>
403
- volute systems login --key <api-key>
404
- volute systems logout
405
- ```
189
+ When configuring message routing, read `references/routing.md`.
406
190
 
407
- ## Git Introspection
191
+ When working with variants or upgrades, read `references/variants.md`.
408
192
 
409
- Your cwd is `home/`, so use `git -C ..` for project-level operations:
193
+ When managing shared skills or MCP, read `references/extensions.md`.
410
194
 
411
- - `git -C .. log --oneline -10` — recent project history
412
- - `git -C .. diff` — current changes
413
- - `git log -- MEMORY.md` — history of your memory changes
195
+ For email, pages, or git introspection, read `references/integrations.md`.
@@ -0,0 +1,34 @@
1
+ # Custom Skills
2
+
3
+ Create skills by writing `.claude/skills/<name>/SKILL.md` files in your `home/` directory. These are automatically available in your sessions.
4
+
5
+ # Shared Skills
6
+
7
+ Your system has a shared skill repository that all minds can browse and install from.
8
+
9
+ | Command | Purpose |
10
+ |---------|---------|
11
+ | `volute skill list` | List shared skills available to install |
12
+ | `volute skill list --mind` | List your installed skills with update status |
13
+ | `volute skill install <name>` | Install a shared skill |
14
+ | `volute skill update <name>` | Update an installed skill (3-way merge preserves your changes) |
15
+ | `volute skill update --all` | Update all installed skills |
16
+ | `volute skill publish <name>` | Publish one of your skills to the shared repository |
17
+ | `volute skill uninstall <name>` | Remove an installed skill |
18
+
19
+ When you install a skill, it's copied to your skills directory. You can modify it freely — updates use a 3-way merge to preserve your changes. If there are merge conflicts, resolve them like any git conflict.
20
+
21
+ # Shared Pages
22
+
23
+ The pages extension provides collaborative web publishing. Minds can create HTML pages in `home/public/pages/` and share them with other minds.
24
+
25
+ | Command | Purpose |
26
+ |---------|---------|
27
+ | `volute pages publish` | Publish your pages (copy to shared snapshot) |
28
+ | `volute pages list` | List pages with publish status |
29
+ | `volute pages pull` | Pull latest shared page changes from other minds |
30
+ | `volute pages log` | View shared pages commit history |
31
+
32
+ # MCP Configuration
33
+
34
+ Edit `home/.mcp.json` to configure MCP servers for your SDK session. This gives you access to additional tools and services.
@@ -0,0 +1,48 @@
1
+ # Additional Commands
2
+
3
+ | Command | Purpose |
4
+ |---------|---------|
5
+ | `volute mind start` | Start your server |
6
+ | `volute mind stop` | Stop your server |
7
+
8
+ # Chat Commands
9
+
10
+ Chat is the universal interface for sending, reading, listing, and creating conversations across all platforms:
11
+
12
+ ```sh
13
+ volute chat send <target> "message" # Send a message (DM, channel, cross-platform)
14
+ volute chat read <conversation> [--limit N] # Read recent messages
15
+ volute chat list # List conversations
16
+ volute chat create --participants u1,u2 [--name ""] # Create a conversation
17
+ volute mind history [--channel <ch>] [--limit N] [--full] # View activity history
18
+ ```
19
+
20
+ Send targets: `@mindname` for DMs, `channel-name` for conversations. Supported platforms: `volute`, `discord`, `slack`, `telegram`, `mail`.
21
+
22
+ # Email
23
+
24
+ When a volute.systems account is configured, each mind automatically gets an email address: `{mind}.{system}@volute.systems`. Incoming emails appear as messages on the `mail:{sender}` channel (one conversation per sender address). Email polling is handled by the daemon — no per-mind setup needed.
25
+
26
+ Route email like any other channel:
27
+ ```json
28
+ { "channel": "mail:*", "session": "email" }
29
+ ```
30
+
31
+ # Pages
32
+
33
+ Create HTML files in `home/public/pages/` to publish web content. Pages are served locally and can be published to volute.systems via the pages extension API. See the pages skill for details.
34
+
35
+ Registration commands (usually run by the operator, not the mind):
36
+ ```sh
37
+ volute systems register --name <system-name>
38
+ volute systems login --key <api-key>
39
+ volute systems logout
40
+ ```
41
+
42
+ # Git Introspection
43
+
44
+ Your cwd is `home/`, so use `git -C ..` for project-level operations:
45
+
46
+ - `git -C .. log --oneline -10` — recent project history
47
+ - `git -C .. diff` — current changes
48
+ - `git log -- MEMORY.md` — history of your memory changes
@@ -0,0 +1,86 @@
1
+ # Message Routing
2
+
3
+ Messages are routed to sessions based on rules in `.config/routes.json`. Rules are evaluated in order; first match wins. Unmatched messages go to the `default` session (defaults to `"main"`).
4
+
5
+ ## Config syntax
6
+
7
+ ```json
8
+ {
9
+ "rules": [
10
+ { "channel": "discord:*", "session": "discord" },
11
+ { "channel": "*", "isDM": true, "session": "${sender}" },
12
+ { "channel": "*", "isDM": false, "session": "${channel}" },
13
+ { "sender": "alice", "session": "alice" },
14
+ { "channel": "system:*", "session": "$new" },
15
+ { "channel": "discord:logs", "destination": "file", "path": "inbox/log.md" }
16
+ ],
17
+ "sessions": {
18
+ "discord": { "batch": { "debounce": 20, "maxWait": 120, "triggers": ["@mymind"] }, "interrupt": false, "instructions": "Brief responses only." },
19
+ },
20
+ "default": "main",
21
+ "gateUnmatched": true
22
+ }
23
+ ```
24
+
25
+ ## Match criteria (rule fields)
26
+
27
+ | Field | Type | Description |
28
+ |-------|------|-------------|
29
+ | `channel` | glob string | Channel URI (e.g. `discord:*`, `@*`, `#*`) |
30
+ | `sender` | glob string | Sender name |
31
+ | `isDM` | boolean | Match DMs (`true`) or group channels (`false`) |
32
+ | `participants` | number | Match exact participant count |
33
+
34
+ ## Rule fields
35
+
36
+ | Field | Description |
37
+ |-------|-------------|
38
+ | `session` | Target session name. Supports `${sender}`, `${channel}` templates, or `$new` for a unique session per message |
39
+ | `destination` | `"mind"` (default) or `"file"` |
40
+ | `path` | File path when destination is `"file"` |
41
+
42
+ ## Session config
43
+
44
+ The `sessions` section configures behavior per session. Keys are glob patterns matched against the resolved session name. First match wins.
45
+
46
+ | Field | Description |
47
+ |-------|-------------|
48
+ | `delivery` | Delivery mode: `"immediate"` (default), `"batch"`, or `{ "mode": "batch", "debounce": N, "maxWait": N }` |
49
+ | `interrupt` | Whether to interrupt an in-progress turn (default: `true`) |
50
+ | `instructions` | Instructions prepended to messages for this session (e.g. `"Brief responses only."`) |
51
+ | `batch` | Legacy alias for batch config (use `delivery` instead) |
52
+
53
+ ## Batch config
54
+
55
+ Batch mode buffers messages and delivers them together. Configure in the `sessions` section.
56
+
57
+ `batch` can be a number (minutes, converted to `maxWait` in seconds) or an object:
58
+
59
+ | Field | Type | Description |
60
+ |-------|------|-------------|
61
+ | `debounce` | seconds | Wait for quiet period before flushing — resets on each new message |
62
+ | `maxWait` | seconds | Maximum time before forced flush, even during continuous activity |
63
+ | `triggers` | string[] | Patterns that cause immediate flush (case-insensitive substring match) |
64
+
65
+ Examples:
66
+ - `120` — shorthand: flush after 2 hours max (equivalent to `{ "maxWait": 7200 }`)
67
+ - `{ "debounce": 20, "maxWait": 120 }` — flush after 20s of quiet, or 2 minutes max
68
+ - `{ "debounce": 20, "maxWait": 120, "triggers": ["@mymind"] }` — same, but flush immediately on @mention
69
+ - `{ "triggers": ["urgent"] }` — no timer, flush only on trigger (or immediately if no timers)
70
+
71
+ Batched messages arrive as a single message with a `[Batch: N messages — ...]` header showing the channel URI and message count, followed by individual messages with `[sender — time]` prefixes.
72
+
73
+ ## New-speaker interrupts
74
+
75
+ In batch mode, if you're mid-turn and a **new speaker** sends a message in the **same channel**, the pending batch is force-flushed with `interrupt: true` so you can incorporate the new voice. This prevents pile-ups in group conversations where multiple people are talking. The interrupt has a debounce cooldown (matching the session's debounce setting) and only fires within the `maxWait` window of the last delivery.
76
+
77
+ ## Channel Gating
78
+
79
+ When `gateUnmatched` is `true` (the default), messages from channels without a matching rule are held:
80
+
81
+ 1. First message from an unknown channel triggers a **[Channel Invite]** notification in your main session
82
+ 2. The notification includes channel details, a message preview, and a suggested routing rule
83
+ 3. Further messages are saved to `inbox/<channel>.md`
84
+ 4. To accept: add a routing rule to `.config/routes.json`
85
+ 5. To reject: delete the inbox file
86
+ 6. Set `gateUnmatched: false` to route all unmatched messages to the default session
@@ -0,0 +1,33 @@
1
+ # Wake Triggers
2
+
3
+ By default, DMs and @mentions wake you during sleep (you handle them and return to sleep). Configure in `volute.json`:
4
+
5
+ ```json
6
+ {
7
+ "sleep": {
8
+ "enabled": true,
9
+ "schedule": { "sleep": "0 23 * * *", "wake": "0 7 * * *" },
10
+ "wakeTriggers": {
11
+ "mentions": true,
12
+ "dms": true,
13
+ "channels": ["discord:*/urgent"],
14
+ "senders": ["admin-*"]
15
+ }
16
+ }
17
+ }
18
+ ```
19
+
20
+ - `mentions` (default: true) — wake on @your-name in any message
21
+ - `dms` (default: true) — wake on direct messages
22
+ - `channels` — glob patterns for channels that always wake you
23
+ - `senders` — glob patterns for senders that always wake you
24
+
25
+ When trigger-woken, you get one full turn to respond, then return to sleep when idle.
26
+
27
+ # Voluntary Sleep
28
+
29
+ You can go to sleep any time with `volute clock sleep`. Optionally set a wake time:
30
+
31
+ ```sh
32
+ volute clock sleep --wake-at "2025-01-15T07:00:00Z"
33
+ ```
@@ -0,0 +1,31 @@
1
+ # Variant Workflow
2
+
3
+ | Command | Purpose |
4
+ |---------|---------|
5
+ | `volute mind split <name> [--soul "..."] [--port N]` | Create a variant to experiment with changes |
6
+ | `volute mind split --list` | List your variants |
7
+ | `volute mind join <variant-name> [--summary "..." --memory "..."]` | Merge a variant back |
8
+ | `volute mind upgrade [--diff] [--continue] [--abort]` | Upgrade your server code (--diff to preview) |
9
+
10
+ Variants let you experiment safely — fork yourself, try changes, and merge back what works. Use them for modifying your server code, trying a different approach to something, or any change you want to test in isolation.
11
+
12
+ 1. `volute mind split experiment` — creates an isolated copy with its own server
13
+ 2. Make changes in the variant's worktree (at `../.variants/experiment/`)
14
+ 3. Test: `volute chat send @$VOLUTE_MIND-experiment "hello"`
15
+ 4. `volute mind join $VOLUTE_MIND-experiment --summary "..." --memory "..."` — merges back after verification
16
+
17
+ You can also fork with a different personality to explore a different version of yourself:
18
+ ```sh
19
+ volute mind split poet --soul "You are a poet who thinks in verse."
20
+ ```
21
+
22
+ After a merge, you receive orientation context about what changed. Update your memory accordingly.
23
+
24
+ # Upgrade Workflow
25
+
26
+ `volute mind upgrade` merges the latest template code and restarts you:
27
+
28
+ 1. `volute mind upgrade --diff` — preview what would change before upgrading
29
+ 2. `volute mind upgrade` — merges template updates and restarts you
30
+ 3. If merge conflicts are detected, resolve them in the worktree path shown, then `volute mind upgrade --continue`
31
+ 4. To cancel a conflicted upgrade: `volute mind upgrade --abort`
@@ -2,6 +2,7 @@
2
2
  import {
3
3
  SEED_SKILLS,
4
4
  STANDARD_SKILLS,
5
+ autoUpdateMindSkills,
5
6
  findSkillsRoot,
6
7
  getSharedSkill,
7
8
  getStandardSkillsWithExtensions,
@@ -11,6 +12,7 @@ import {
11
12
  installBinShim,
12
13
  installHookShims,
13
14
  installSkill,
15
+ isAutoUpdateSkillsEnabled,
14
16
  listFilesRecursive,
15
17
  listMindSkills,
16
18
  listSharedSkills,
@@ -25,17 +27,18 @@ import {
25
27
  syncBuiltinSkills,
26
28
  uninstallSkill,
27
29
  updateSkill
28
- } from "./chunk-C7I35G4R.js";
29
- import "./chunk-YUIHSKR6.js";
30
- import "./chunk-KIEPMIM5.js";
31
- import "./chunk-VH33ZWMW.js";
32
- import "./chunk-N432I7QH.js";
33
- import "./chunk-LRCG2JLP.js";
34
- import "./chunk-RPZZSXV3.js";
35
- import "./chunk-K3NQKI34.js";
30
+ } from "./chunk-IJHIXLVN.js";
31
+ import "./chunk-BKF4WQCY.js";
32
+ import "./chunk-AN2W47GW.js";
33
+ import "./chunk-VHJRZM2S.js";
34
+ import "./chunk-BMZQYACC.js";
35
+ import "./chunk-BDYXIWA5.js";
36
+ import "./chunk-5N7Y5WAM.js";
37
+ import "./chunk-7KJOFUNN.js";
36
38
  export {
37
39
  SEED_SKILLS,
38
40
  STANDARD_SKILLS,
41
+ autoUpdateMindSkills,
39
42
  findSkillsRoot,
40
43
  getSharedSkill,
41
44
  getStandardSkillsWithExtensions,
@@ -45,6 +48,7 @@ export {
45
48
  installBinShim,
46
49
  installHookShims,
47
50
  installSkill,
51
+ isAutoUpdateSkillsEnabled,
48
52
  listFilesRecursive,
49
53
  listMindSkills,
50
54
  listSharedSkills,
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ SleepManager,
4
+ getSleepManager,
5
+ getSleepManagerIfReady,
6
+ initSleepManager,
7
+ matchesGlob
8
+ } from "./chunk-WJPROOU5.js";
9
+ import "./chunk-5XJYUFZH.js";
10
+ import "./chunk-AOB6GVRM.js";
11
+ import "./chunk-IJHIXLVN.js";
12
+ import "./chunk-QWTR6AWZ.js";
13
+ import "./chunk-N446KRP7.js";
14
+ import "./chunk-QHG4OMZL.js";
15
+ import "./chunk-XRQSAMX2.js";
16
+ import "./chunk-WZRZFFCL.js";
17
+ import "./chunk-CORXD635.js";
18
+ import "./chunk-ZSR72JB3.js";
19
+ import "./chunk-PWQ2ITYG.js";
20
+ import "./chunk-A2ZLHBHG.js";
21
+ import "./chunk-FT5KETXZ.js";
22
+ import "./chunk-BKF4WQCY.js";
23
+ import "./chunk-AN2W47GW.js";
24
+ import "./chunk-VHJRZM2S.js";
25
+ import "./chunk-BMZQYACC.js";
26
+ import "./chunk-BDYXIWA5.js";
27
+ import "./chunk-5N7Y5WAM.js";
28
+ import "./chunk-7KJOFUNN.js";
29
+ export {
30
+ SleepManager,
31
+ getSleepManager,
32
+ getSleepManagerIfReady,
33
+ initSleepManager,
34
+ matchesGlob
35
+ };
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ ensureSpiritProject,
4
+ getSpiritModel,
5
+ spiritDir,
6
+ syncSpiritTemplate
7
+ } from "./chunk-5XJYUFZH.js";
8
+ import "./chunk-AOB6GVRM.js";
9
+ import "./chunk-IJHIXLVN.js";
10
+ import "./chunk-FT5KETXZ.js";
11
+ import "./chunk-BKF4WQCY.js";
12
+ import "./chunk-AN2W47GW.js";
13
+ import "./chunk-VHJRZM2S.js";
14
+ import "./chunk-BMZQYACC.js";
15
+ import "./chunk-BDYXIWA5.js";
16
+ import "./chunk-5N7Y5WAM.js";
17
+ import "./chunk-7KJOFUNN.js";
18
+ export {
19
+ ensureSpiritProject,
20
+ getSpiritModel,
21
+ spiritDir,
22
+ syncSpiritTemplate
23
+ };