volute 0.40.0 → 0.40.2

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 (164) hide show
  1. package/README.md +2 -2
  2. package/dist/{accept-AHAOUFBK.js → accept-IVHOHXQS.js} +1 -1
  3. package/dist/{activity-events-OJZ7G5CG.js → activity-events-DS4QRWBY.js} +4 -4
  4. package/dist/{ai-service-JMV4KZN4.js → ai-service-EVLKMAJD.js} +5 -5
  5. package/dist/{api-client-LC5YRA32.js → api-client-NFM6GX2N.js} +1 -1
  6. package/dist/{archive-BC2MTNPV.js → archive-UDHFZN4G.js} +4 -4
  7. package/dist/{auth-2IMZ6N5G.js → auth-X6ZITZ7D.js} +5 -5
  8. package/dist/{bridge-F3ZJEKDN.js → bridge-MSZC4HUT.js} +1 -1
  9. package/dist/{chat-O5QCGCUG.js → chat-F2EEN76G.js} +9 -9
  10. package/dist/{chunk-MHFAWJCC.js → chunk-2HZRJ35V.js} +1 -1
  11. package/dist/{chunk-B7YJUWMM.js → chunk-3Y7UDHO7.js} +3 -3
  12. package/dist/{chunk-RMZSICLS.js → chunk-42UMLIQR.js} +20 -21
  13. package/dist/{chunk-SGC6CDXB.js → chunk-4UMXOMZ6.js} +2 -2
  14. package/dist/{chunk-FBV22PFY.js → chunk-6SYHHEQ7.js} +1 -1
  15. package/dist/{chunk-3XSFMN3H.js → chunk-AEAZRTEV.js} +1 -1
  16. package/dist/{chunk-PDSA3ILI.js → chunk-B4WPXYPI.js} +1 -1
  17. package/dist/{chunk-2AQCEQYN.js → chunk-DNU6XLE2.js} +1 -1
  18. package/dist/{chunk-PHR4XQPL.js → chunk-E25SO3QW.js} +3 -3
  19. package/dist/{chunk-76Q6YLJL.js → chunk-I57LLNAQ.js} +1 -1
  20. package/dist/{chunk-HAJHDGBV.js → chunk-ITH5ZLZJ.js} +1 -1
  21. package/dist/{chunk-SOPMVTTW.js → chunk-JYQQDI3M.js} +2 -2
  22. package/dist/{chunk-PIRL2HAO.js → chunk-KMHC36CA.js} +1 -1
  23. package/dist/chunk-LMMQX4CK.js +49 -0
  24. package/dist/{chunk-FRJ73IWR.js → chunk-MNUXL4XN.js} +67 -3
  25. package/dist/{chunk-PC55DGNX.js → chunk-NERYUSER.js} +1 -1
  26. package/dist/{chunk-WGRMLXTH.js → chunk-NRJ3ZYFP.js} +10 -10
  27. package/dist/{chunk-43PVCF4V.js → chunk-PEKG3GNZ.js} +3 -3
  28. package/dist/{chunk-S4YO5OWV.js → chunk-PKGA23XM.js} +1 -1
  29. package/dist/{chunk-5VBXKFPO.js → chunk-QYI65HCL.js} +2 -2
  30. package/dist/{chunk-HEZM5GCV.js → chunk-SVXOBKQY.js} +2 -2
  31. package/dist/{chunk-PZTVQL3J.js → chunk-TOANT6FD.js} +2 -2
  32. package/dist/{chunk-T26YLQPU.js → chunk-UX7FPDDO.js} +5 -5
  33. package/dist/{chunk-JSITYTIL.js → chunk-WOWRLBL2.js} +10 -8
  34. package/dist/{chunk-DNQPHLGM.js → chunk-YHWGN4FX.js} +1 -1
  35. package/dist/chunk-YMMYN2V3.js +1212 -0
  36. package/dist/{chunk-XUJR6NZW.js → chunk-ZOI6D2YH.js} +194 -1313
  37. package/dist/{chunk-PGX52NFO.js → chunk-ZXPWTH4I.js} +43 -35
  38. package/dist/cli.js +24 -24
  39. package/dist/{clock-BMLJ2TR6.js → clock-YLDJUKBW.js} +3 -3
  40. package/dist/{cloud-sync-5JF2Z7VM.js → cloud-sync-GOSJZIHH.js} +18 -17
  41. package/dist/{config-QB7W3Z7P.js → config-PO4EZLIK.js} +4 -4
  42. package/dist/connectors/discord-bridge.js +1 -1
  43. package/dist/connectors/slack-bridge.js +1 -1
  44. package/dist/connectors/telegram-bridge.js +1 -1
  45. package/dist/{conversations-LUVHGQSS.js → conversations-AYLXPOGC.js} +5 -5
  46. package/dist/{create-TDQM3SHV.js → create-Y3RGU2GI.js} +5 -5
  47. package/dist/{create-C3BBFYV7.js → create-ZMTGINV3.js} +1 -1
  48. package/dist/{daemon-client-2MIPKY3E.js → daemon-client-H6MEKK2W.js} +1 -1
  49. package/dist/{daemon-restart-XHDJDOPQ.js → daemon-restart-FSWVXPUE.js} +9 -9
  50. package/dist/daemon.js +318 -280
  51. package/dist/{db-IJL6B26S.js → db-FSYOTHSN.js} +1 -1
  52. package/dist/db-ZEPKEJJD.js +9 -0
  53. package/dist/{delete-NLXES2C7.js → delete-TXVOH2OC.js} +3 -3
  54. package/dist/delivery-manager-3NTCDKHR.js +33 -0
  55. package/dist/{delivery-router-IU4OMVKZ.js → delivery-router-T6CYTS3M.js} +4 -4
  56. package/dist/down-6DYO2QV7.js +17 -0
  57. package/dist/echo-text-JUNRP4ER.js +32 -0
  58. package/dist/{env-IQ6Q2333.js → env-77IOWG4U.js} +1 -1
  59. package/dist/exec-5DGKQ5V3.js +17 -0
  60. package/dist/{export-RKUWSQSG.js → export-TZKOCSCE.js} +6 -6
  61. package/dist/{extension-LZYHBNLV.js → extension-35NB6GHW.js} +1 -1
  62. package/dist/{extensions-VN5SEVRP.js → extensions-MD757RFY.js} +18 -17
  63. package/dist/{files-J2CKZ6PK.js → files-WNNVJWJB.js} +4 -4
  64. package/dist/{import-KVY6BYXG.js → import-BNNFCQ7U.js} +11 -11
  65. package/dist/{isolation-MM7YHK6J.js → isolation-4Q4P7HRV.js} +4 -4
  66. package/dist/{join-6SZCA5FX.js → join-E2EJEXZO.js} +3 -3
  67. package/dist/{list-KHJZJPEJ.js → list-BYCEDASJ.js} +1 -1
  68. package/dist/{login-GYTH67ES.js → login-JNSIYFVH.js} +1 -1
  69. package/dist/{login-OHM32QVD.js → login-Y6UAYQVO.js} +3 -3
  70. package/dist/{logout-YHQLOFLR.js → logout-M6FI62BL.js} +1 -1
  71. package/dist/{logout-74WBDMOE.js → logout-VHGWVH63.js} +3 -3
  72. package/dist/message-delivery-Q7TU24IA.js +41 -0
  73. package/dist/{mind-PUPXDIYQ.js → mind-OOB2LEVC.js} +19 -19
  74. package/dist/{mind-activity-tracker-7GE24YZE.js → mind-activity-tracker-GJ5RJS32.js} +5 -5
  75. package/dist/{mind-history-WHCNZ6I5.js → mind-history-W4JPTPTV.js} +1 -1
  76. package/dist/{mind-list-H3HC2ZRG.js → mind-list-QROHCLGT.js} +1 -1
  77. package/dist/mind-manager-4NFK4GEU.js +31 -0
  78. package/dist/{mind-profile-7VYRJGFZ.js → mind-profile-3LNKXNPA.js} +2 -2
  79. package/dist/mind-service-X7FH3NA4.js +37 -0
  80. package/dist/{mind-sleep-ZL5ZXFTM.js → mind-sleep-PVCMLTAH.js} +1 -1
  81. package/dist/{mind-status-ZWULKOUO.js → mind-status-RAJFLRCN.js} +1 -1
  82. package/dist/{mind-wake-HK5ORGUK.js → mind-wake-HZUOVE7J.js} +1 -1
  83. package/dist/{package-6YPVWGD3.js → package-PPA3VWS2.js} +28 -27
  84. package/dist/{read-CP7MYMJQ.js → read-OOINVR2H.js} +1 -1
  85. package/dist/{read-stdin-4B5UYPPM.js → read-stdin-P6HCZUAA.js} +1 -1
  86. package/dist/{register-XOBFEMI4.js → register-ISOH34RF.js} +1 -1
  87. package/dist/{registry-L272BZJR.js → registry-GV35XFT7.js} +3 -3
  88. package/dist/{reject-43AGXB6B.js → reject-ZBWP62X5.js} +1 -1
  89. package/dist/{restart-O5QIYQJT.js → restart-QBJV5455.js} +1 -1
  90. package/dist/{sandbox-BQAFYHLE.js → sandbox-5R32QKWQ.js} +5 -5
  91. package/dist/scheduler-PDARH4CE.js +31 -0
  92. package/dist/{schema-HHYJDG7B.js → schema-LYQUDL7G.js} +2 -2
  93. package/dist/{seed-4V2O7FQE.js → seed-BTAHXCO5.js} +2 -2
  94. package/dist/{seed-check-HZPVFJKZ.js → seed-check-3WXXRHTC.js} +2 -2
  95. package/dist/{seed-cmd-JKDEW4MP.js → seed-cmd-VEJNJBAQ.js} +4 -4
  96. package/dist/{seed-create-EPAO3H5F.js → seed-create-LOU5RALI.js} +7 -7
  97. package/dist/{seed-sprout-EONCL4DU.js → seed-sprout-BXF5TBXD.js} +11 -11
  98. package/dist/{send-232RAHPX.js → send-WO3CVG73.js} +4 -4
  99. package/dist/{service-AG5BKRUV.js → service-WMV6R6VJ.js} +6 -6
  100. package/dist/service-install-W3FQXJKB.js +17 -0
  101. package/dist/{setup-IL7QJZN4.js → setup-OTEC3ZPM.js} +4 -4
  102. package/dist/{setup-PSA7LJ5U.js → setup-W3545462.js} +9 -9
  103. package/dist/{skill-ICN6Y2ZF.js → skill-QHACP7EU.js} +1 -1
  104. package/dist/{skills-SLEY5X6W.js → skills-3P7VQA4U.js} +7 -7
  105. package/dist/sleep-manager-TTNOLIX5.js +35 -0
  106. package/dist/{spirit-7BUHSEO2.js → spirit-T6GK5GEP.js} +9 -9
  107. package/dist/{split-5YBEQTBF.js → split-7AO4IO42.js} +3 -3
  108. package/dist/{sprout-JWQ57KF3.js → sprout-AQICF7WZ.js} +2 -2
  109. package/dist/{src-OYWRPLC6.js → src-2IMB3V27.js} +1 -1
  110. package/dist/src-OS75U2O7.js +241910 -0
  111. package/dist/{src-O4PRLMKM.js → src-XNUXP2FP.js} +1 -1
  112. package/dist/{start-LMXXRR3X.js → start-2U57BBK7.js} +1 -1
  113. package/dist/{status-6GSOSYOD.js → status-BRYYYO7C.js} +7 -7
  114. package/dist/{stop-TWDKVEUX.js → stop-QILBDUAR.js} +1 -1
  115. package/dist/system-chat-7CA2PP6A.js +35 -0
  116. package/dist/{systems-Y2WZV2K4.js → systems-3XTAHA35.js} +4 -4
  117. package/dist/{tailscale-6MHNLBAX.js → tailscale-X4HRKRTW.js} +3 -3
  118. package/dist/{template-hash-SSIBEEYK.js → template-hash-DMHSLRDX.js} +1 -1
  119. package/dist/turn-tracker-AI6WWEBA.js +35 -0
  120. package/dist/up-PKNNDN6M.js +19 -0
  121. package/dist/{update-BT2PY73H.js → update-OY2JYXYK.js} +61 -14
  122. package/dist/update-check-IUB7QHAF.js +24 -0
  123. package/dist/{upgrade-RXFZR5FI.js → upgrade-25J6AE47.js} +3 -3
  124. package/dist/{variant-HHDTW74J.js → variant-5LQOPCQA.js} +1 -1
  125. package/dist/{version-notify-NFQMI5IY.js → version-notify-DK6AHWX7.js} +19 -18
  126. package/dist/{volute-config-TS62GS6A.js → volute-config-7FO6QKWU.js} +1 -1
  127. package/dist/web-assets/assets/index-DaUp9iE2.js +79 -0
  128. package/dist/web-assets/index.html +1 -1
  129. package/package.json +27 -26
  130. package/packages/extensions/notes/dist/ui/assets/index-BbgANhFm.js +67 -0
  131. package/packages/extensions/notes/dist/ui/index.html +1 -1
  132. package/packages/extensions/pages/dist/ui/assets/index-Dxk-DYrf.js +2 -0
  133. package/packages/extensions/pages/dist/ui/index.html +1 -1
  134. package/packages/extensions/plan/dist/ui/assets/index-Cfzs-0G9.js +67 -0
  135. package/packages/extensions/plan/dist/ui/index.html +1 -1
  136. package/templates/claude/package.json.tmpl +5 -5
  137. package/templates/codex/package.json.tmpl +5 -5
  138. package/templates/pi/package.json.tmpl +7 -6
  139. package/templates/pi/src/agent.ts +3 -1
  140. package/templates/pi/src/lib/content.ts +1 -1
  141. package/templates/pi/src/lib/event-handler.ts +1 -1
  142. package/templates/pi/src/lib/reply-instructions-extension.ts +1 -1
  143. package/templates/pi/src/lib/resolve-model.ts +4 -4
  144. package/templates/pi/src/lib/subagents.ts +21 -19
  145. package/dist/chunk-K3NQKI34.js +0 -10
  146. package/dist/db-2GIS7HSG.js +0 -9
  147. package/dist/delivery-manager-L5WFP2ND.js +0 -30
  148. package/dist/down-KIJVZ3OC.js +0 -17
  149. package/dist/echo-text-TJWCUBPB.js +0 -31
  150. package/dist/exec-BGMU7VXR.js +0 -17
  151. package/dist/message-delivery-VBBAJX3J.js +0 -40
  152. package/dist/mind-manager-4Q6KGZHL.js +0 -30
  153. package/dist/mind-service-7OD4PRO5.js +0 -36
  154. package/dist/scheduler-7E22Q7IC.js +0 -30
  155. package/dist/service-install-HVAEUBAH.js +0 -17
  156. package/dist/sleep-manager-27S7MKJO.js +0 -34
  157. package/dist/src-6Z4XYDH5.js +0 -2164
  158. package/dist/system-chat-EIINIHFB.js +0 -34
  159. package/dist/up-4XS3RCPP.js +0 -19
  160. package/dist/update-check-Y3HBEMF2.js +0 -18
  161. package/dist/web-assets/assets/index-Jluza4c-.js +0 -73
  162. package/packages/extensions/notes/dist/ui/assets/index-Dsua7alJ.js +0 -61
  163. package/packages/extensions/pages/dist/ui/assets/index-BM7gRdg7.js +0 -2
  164. package/packages/extensions/plan/dist/ui/assets/index-DWiqtzBv.js +0 -61
package/README.md CHANGED
@@ -342,7 +342,7 @@ Your mind's `SOUL.md` and `MEMORY.md` are never overwritten.
342
342
  Three built-in templates:
343
343
 
344
344
  - **`claude`** (default) — Anthropic Claude Agent SDK
345
- - **`pi`** — [pi-coding-agent](https://github.com/nicepkg/pi) for multi-provider LLM support
345
+ - **`pi`** — [pi-coding-agent](https://github.com/earendil-works/pi) for multi-provider LLM support
346
346
  - **`codex`** — OpenAI Codex models
347
347
 
348
348
  ```sh
@@ -351,7 +351,7 @@ volute mind create atlas --template pi
351
351
 
352
352
  ## AI Service
353
353
 
354
- Volute has an optional system-level AI service for features like automatic turn summaries. It uses [`@mariozechner/pi-ai`](https://github.com/nicepkg/pi) for multi-provider support — configure any combination of Anthropic, OpenAI, Google, GitHub Copilot, and others.
354
+ Volute has an optional system-level AI service for features like automatic turn summaries. It uses [`@earendil-works/pi-ai`](https://github.com/earendil-works/pi) for multi-provider support — configure any combination of Anthropic, OpenAI, Google, GitHub Copilot, and others.
355
355
 
356
356
  Configure via the web dashboard (Settings → AI Service) or during `volute setup`. Each provider authenticates independently via API key, OAuth, or environment variables. After adding providers, select which models to enable — the system picks from your enabled list.
357
357
 
@@ -9,7 +9,7 @@ import {
9
9
  command
10
10
  } from "./chunk-TXSA4Q3V.js";
11
11
  import "./chunk-O7IGP7ZW.js";
12
- import "./chunk-K3NQKI34.js";
12
+ import "./chunk-LMMQX4CK.js";
13
13
 
14
14
  // packages/cli/src/commands/chat/accept.ts
15
15
  var cmd = command({
@@ -3,11 +3,11 @@ import {
3
3
  broadcast,
4
4
  publish,
5
5
  subscribe
6
- } from "./chunk-5VBXKFPO.js";
6
+ } from "./chunk-QYI65HCL.js";
7
7
  import "./chunk-T2TP6ZC6.js";
8
- import "./chunk-PDSA3ILI.js";
9
- import "./chunk-MHFAWJCC.js";
10
- import "./chunk-K3NQKI34.js";
8
+ import "./chunk-B4WPXYPI.js";
9
+ import "./chunk-2HZRJ35V.js";
10
+ import "./chunk-LMMQX4CK.js";
11
11
  export {
12
12
  broadcast,
13
13
  publish,
@@ -19,12 +19,12 @@ import {
19
19
  setProviderRefreshHook,
20
20
  setUtilityModel,
21
21
  unqualifyModelId
22
- } from "./chunk-PGX52NFO.js";
23
- import "./chunk-2AQCEQYN.js";
22
+ } from "./chunk-ZXPWTH4I.js";
23
+ import "./chunk-DNU6XLE2.js";
24
24
  import "./chunk-T2TP6ZC6.js";
25
- import "./chunk-PDSA3ILI.js";
26
- import "./chunk-MHFAWJCC.js";
27
- import "./chunk-K3NQKI34.js";
25
+ import "./chunk-B4WPXYPI.js";
26
+ import "./chunk-2HZRJ35V.js";
27
+ import "./chunk-LMMQX4CK.js";
28
28
  export {
29
29
  aiComplete,
30
30
  aiCompleteUtility,
@@ -3,7 +3,7 @@ import {
3
3
  getClient,
4
4
  urlOf
5
5
  } from "./chunk-LOPXTW6H.js";
6
- import "./chunk-K3NQKI34.js";
6
+ import "./chunk-LMMQX4CK.js";
7
7
  export {
8
8
  getClient,
9
9
  urlOf
@@ -5,10 +5,10 @@ import {
5
5
  extractArchive,
6
6
  isHomeOnlyArchive,
7
7
  readManifest
8
- } from "./chunk-76Q6YLJL.js";
9
- import "./chunk-PDSA3ILI.js";
10
- import "./chunk-MHFAWJCC.js";
11
- import "./chunk-K3NQKI34.js";
8
+ } from "./chunk-I57LLNAQ.js";
9
+ import "./chunk-B4WPXYPI.js";
10
+ import "./chunk-2HZRJ35V.js";
11
+ import "./chunk-LMMQX4CK.js";
12
12
  export {
13
13
  addHistoryToArchive,
14
14
  createExportArchive,
@@ -17,12 +17,12 @@ import {
17
17
  syncMindProfile,
18
18
  updateUserProfile,
19
19
  verifyUser
20
- } from "./chunk-PHR4XQPL.js";
21
- import "./chunk-5VBXKFPO.js";
20
+ } from "./chunk-E25SO3QW.js";
21
+ import "./chunk-QYI65HCL.js";
22
22
  import "./chunk-T2TP6ZC6.js";
23
- import "./chunk-PDSA3ILI.js";
24
- import "./chunk-MHFAWJCC.js";
25
- import "./chunk-K3NQKI34.js";
23
+ import "./chunk-B4WPXYPI.js";
24
+ import "./chunk-2HZRJ35V.js";
25
+ import "./chunk-LMMQX4CK.js";
26
26
  export {
27
27
  approveUser,
28
28
  changePassword,
@@ -7,7 +7,7 @@ import {
7
7
  subcommands
8
8
  } from "./chunk-TXSA4Q3V.js";
9
9
  import "./chunk-O7IGP7ZW.js";
10
- import "./chunk-K3NQKI34.js";
10
+ import "./chunk-LMMQX4CK.js";
11
11
 
12
12
  // packages/cli/src/commands/chat/bridge.ts
13
13
  var bridgeAddCmd = command({
@@ -3,7 +3,7 @@ import {
3
3
  subcommands
4
4
  } from "./chunk-TXSA4Q3V.js";
5
5
  import "./chunk-O7IGP7ZW.js";
6
- import "./chunk-K3NQKI34.js";
6
+ import "./chunk-LMMQX4CK.js";
7
7
 
8
8
  // packages/cli/src/commands/chat.ts
9
9
  var cmd = subcommands({
@@ -12,35 +12,35 @@ var cmd = subcommands({
12
12
  commands: {
13
13
  send: {
14
14
  description: "Send a message",
15
- run: (args) => import("./send-232RAHPX.js").then((m) => m.run(args))
15
+ run: (args) => import("./send-WO3CVG73.js").then((m) => m.run(args))
16
16
  },
17
17
  list: {
18
18
  description: "List conversations",
19
- run: (args) => import("./list-KHJZJPEJ.js").then((m) => m.run(args))
19
+ run: (args) => import("./list-BYCEDASJ.js").then((m) => m.run(args))
20
20
  },
21
21
  read: {
22
22
  description: "Read conversation messages",
23
- run: (args) => import("./read-CP7MYMJQ.js").then((m) => m.run(args))
23
+ run: (args) => import("./read-OOINVR2H.js").then((m) => m.run(args))
24
24
  },
25
25
  create: {
26
26
  description: "Create a conversation",
27
- run: (args) => import("./create-C3BBFYV7.js").then((m) => m.run(args))
27
+ run: (args) => import("./create-ZMTGINV3.js").then((m) => m.run(args))
28
28
  },
29
29
  bridge: {
30
30
  description: "Manage platform bridges",
31
- run: (args) => import("./bridge-F3ZJEKDN.js").then((m) => m.run(args))
31
+ run: (args) => import("./bridge-MSZC4HUT.js").then((m) => m.run(args))
32
32
  },
33
33
  files: {
34
34
  description: "List pending incoming files",
35
- run: (args) => import("./files-J2CKZ6PK.js").then((m) => m.run(args))
35
+ run: (args) => import("./files-WNNVJWJB.js").then((m) => m.run(args))
36
36
  },
37
37
  accept: {
38
38
  description: "Accept a pending file",
39
- run: (args) => import("./accept-AHAOUFBK.js").then((m) => m.run(args))
39
+ run: (args) => import("./accept-IVHOHXQS.js").then((m) => m.run(args))
40
40
  },
41
41
  reject: {
42
42
  description: "Reject a pending file",
43
- run: (args) => import("./reject-43AGXB6B.js").then((m) => m.run(args))
43
+ run: (args) => import("./reject-ZBWP62X5.js").then((m) => m.run(args))
44
44
  }
45
45
  },
46
46
  footer: "Use --mind <name> or VOLUTE_MIND to identify the mind."
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  __export
4
- } from "./chunk-K3NQKI34.js";
4
+ } from "./chunk-LMMQX4CK.js";
5
5
 
6
6
  // packages/daemon/src/lib/schema.ts
7
7
  var schema_exports = {};
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  subscribe
4
- } from "./chunk-5VBXKFPO.js";
4
+ } from "./chunk-QYI65HCL.js";
5
5
  import {
6
6
  logger_default
7
7
  } from "./chunk-T2TP6ZC6.js";
8
8
  import {
9
9
  getDb
10
- } from "./chunk-PDSA3ILI.js";
10
+ } from "./chunk-B4WPXYPI.js";
11
11
  import {
12
12
  channels,
13
13
  conversationParticipants,
@@ -15,7 +15,7 @@ import {
15
15
  conversations,
16
16
  messages,
17
17
  users
18
- } from "./chunk-MHFAWJCC.js";
18
+ } from "./chunk-2HZRJ35V.js";
19
19
 
20
20
  // packages/daemon/src/lib/events/conversations.ts
21
21
  import { randomUUID } from "crypto";
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  publish
4
- } from "./chunk-5VBXKFPO.js";
4
+ } from "./chunk-QYI65HCL.js";
5
5
  import {
6
6
  logger_default
7
7
  } from "./chunk-T2TP6ZC6.js";
@@ -17,31 +17,30 @@ function getState(mind) {
17
17
  }
18
18
  return state;
19
19
  }
20
- var IGNORED_EVENTS = /* @__PURE__ */ new Set(["done", "usage", "log"]);
20
+ var IGNORED_EVENTS = /* @__PURE__ */ new Set(["session_start", "usage", "log"]);
21
+ function armIdleTimer(mind, state) {
22
+ if (state.idleTimer) {
23
+ clearTimeout(state.idleTimer);
24
+ }
25
+ state.idleTimer = setTimeout(() => {
26
+ state.idleTimer = null;
27
+ state.active = false;
28
+ publish({
29
+ type: "mind_idle",
30
+ mind,
31
+ summary: `${mind} is idle`
32
+ }).catch((err) => {
33
+ logger_default.error("[mind-activity] failed to publish mind_idle", logger_default.errorData(err));
34
+ });
35
+ }, IDLE_TIMEOUT_MS);
36
+ }
21
37
  function onMindEvent(mind, type, channel) {
22
38
  const state = getState(mind);
23
39
  if (type === "done") {
24
40
  state.active = false;
25
- if (state.idleTimer) {
26
- clearTimeout(state.idleTimer);
27
- }
28
- state.idleTimer = setTimeout(() => {
29
- state.idleTimer = null;
30
- if (!state.active) {
31
- publish({
32
- type: "mind_idle",
33
- mind,
34
- summary: `${mind} is idle`
35
- }).catch((err) => {
36
- logger_default.error("[mind-activity] failed to publish mind_idle", logger_default.errorData(err));
37
- });
38
- }
39
- }, IDLE_TIMEOUT_MS);
41
+ armIdleTimer(mind, state);
40
42
  } else if (!IGNORED_EVENTS.has(type)) {
41
- if (state.idleTimer) {
42
- clearTimeout(state.idleTimer);
43
- state.idleTimer = null;
44
- }
43
+ armIdleTimer(mind, state);
45
44
  if (!state.active) {
46
45
  state.active = true;
47
46
  state.channel = channel;
@@ -2,10 +2,10 @@
2
2
  import {
3
3
  exec,
4
4
  execInherit
5
- } from "./chunk-3XSFMN3H.js";
5
+ } from "./chunk-AEAZRTEV.js";
6
6
  import {
7
7
  voluteSystemDir
8
- } from "./chunk-PDSA3ILI.js";
8
+ } from "./chunk-B4WPXYPI.js";
9
9
 
10
10
  // packages/daemon/src/lib/config/service-mode.ts
11
11
  import { execFileSync } from "child_process";
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  getBaseName,
4
4
  validateMindName
5
- } from "./chunk-PDSA3ILI.js";
5
+ } from "./chunk-B4WPXYPI.js";
6
6
 
7
7
  // packages/daemon/src/lib/mind/isolation.ts
8
8
  import { execFileSync } from "child_process";
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  wrapForIsolation
4
- } from "./chunk-FBV22PFY.js";
4
+ } from "./chunk-6SYHHEQ7.js";
5
5
 
6
6
  // packages/daemon/src/lib/util/exec.ts
7
7
  import { execFile as execFileCb, execFileSync, spawn } from "child_process";
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  minds,
4
4
  schema_exports
5
- } from "./chunk-MHFAWJCC.js";
5
+ } from "./chunk-2HZRJ35V.js";
6
6
 
7
7
  // packages/daemon/src/lib/db.ts
8
8
  import { chmodSync, existsSync } from "fs";
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  voluteSystemDir
4
- } from "./chunk-PDSA3ILI.js";
4
+ } from "./chunk-B4WPXYPI.js";
5
5
 
6
6
  // packages/daemon/src/lib/config/setup.ts
7
7
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  broadcast
4
- } from "./chunk-5VBXKFPO.js";
4
+ } from "./chunk-QYI65HCL.js";
5
5
  import {
6
6
  getDb
7
- } from "./chunk-PDSA3ILI.js";
7
+ } from "./chunk-B4WPXYPI.js";
8
8
  import {
9
9
  users
10
- } from "./chunk-MHFAWJCC.js";
10
+ } from "./chunk-2HZRJ35V.js";
11
11
 
12
12
  // packages/daemon/src/lib/auth.ts
13
13
  import { compareSync, hashSync } from "bcryptjs";
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  mindDir,
4
4
  stateDir
5
- } from "./chunk-PDSA3ILI.js";
5
+ } from "./chunk-B4WPXYPI.js";
6
6
 
7
7
  // packages/daemon/src/lib/mind/archive.ts
8
8
  import { execFileSync } from "child_process";
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  stateDir,
4
4
  voluteSystemDir
5
- } from "./chunk-PDSA3ILI.js";
5
+ } from "./chunk-B4WPXYPI.js";
6
6
 
7
7
  // packages/daemon/src/lib/config/env.ts
8
8
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
@@ -8,10 +8,10 @@ import {
8
8
  pollHealthDown,
9
9
  readDaemonConfig,
10
10
  stopService
11
- } from "./chunk-SGC6CDXB.js";
11
+ } from "./chunk-4UMXOMZ6.js";
12
12
  import {
13
13
  voluteSystemDir
14
- } from "./chunk-PDSA3ILI.js";
14
+ } from "./chunk-B4WPXYPI.js";
15
15
 
16
16
  // src/commands/down.ts
17
17
  import { existsSync, readFileSync, unlinkSync } from "fs";
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  readGlobalConfig
4
- } from "./chunk-2AQCEQYN.js";
4
+ } from "./chunk-DNU6XLE2.js";
5
5
  import {
6
6
  logger_default
7
7
  } from "./chunk-T2TP6ZC6.js";
@@ -0,0 +1,49 @@
1
+ #!/usr/bin/env node
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
9
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
10
+ }) : x)(function(x) {
11
+ if (typeof require !== "undefined") return require.apply(this, arguments);
12
+ throw Error('Dynamic require of "' + x + '" is not supported');
13
+ });
14
+ var __esm = (fn, res) => function __init() {
15
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
16
+ };
17
+ var __commonJS = (cb, mod) => function __require2() {
18
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
19
+ };
20
+ var __export = (target, all) => {
21
+ for (var name in all)
22
+ __defProp(target, name, { get: all[name], enumerable: true });
23
+ };
24
+ var __copyProps = (to, from, except, desc) => {
25
+ if (from && typeof from === "object" || typeof from === "function") {
26
+ for (let key of __getOwnPropNames(from))
27
+ if (!__hasOwnProp.call(to, key) && key !== except)
28
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
29
+ }
30
+ return to;
31
+ };
32
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
33
+ // If the importer is in node compatibility mode or this is not an ESM
34
+ // file that has been converted to a CommonJS file using a Babel-
35
+ // compatible transform (i.e. "__esModule" has not been set), then set
36
+ // "default" to the CommonJS "module.exports" for node compatibility.
37
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
38
+ mod
39
+ ));
40
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
41
+
42
+ export {
43
+ __require,
44
+ __esm,
45
+ __commonJS,
46
+ __export,
47
+ __toESM,
48
+ __toCommonJS
49
+ };
@@ -1,11 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  voluteSystemDir
4
- } from "./chunk-PDSA3ILI.js";
4
+ } from "./chunk-B4WPXYPI.js";
5
5
 
6
6
  // packages/daemon/src/lib/update-check.ts
7
- import { existsSync, readFileSync, writeFileSync } from "fs";
8
- import { resolve } from "path";
7
+ import { execFile as execFileCb, execFileSync } from "child_process";
8
+ import { existsSync, readFileSync, realpathSync, writeFileSync } from "fs";
9
+ import { basename, dirname, resolve, sep } from "path";
10
+ import { promisify } from "util";
11
+ var execFile = promisify(execFileCb);
9
12
  var CACHE_TTL = 60 * 60 * 1e3;
10
13
  function cachePath() {
11
14
  return resolve(voluteSystemDir(), "update-check.json");
@@ -90,6 +93,64 @@ async function checkForUpdate(force = false) {
90
93
  return { current, latest: current, updateAvailable: false, checkFailed: true };
91
94
  }
92
95
  }
96
+ function readPackageVersion(pkgDir) {
97
+ try {
98
+ return JSON.parse(readFileSync(resolve(pkgDir, "package.json"), "utf-8")).version ?? null;
99
+ } catch {
100
+ return null;
101
+ }
102
+ }
103
+ function analyzeInstallPath(realPath) {
104
+ const marker = `${sep}node_modules${sep}volute${sep}`;
105
+ const idx = realPath.indexOf(marker);
106
+ if (idx === -1) return { packageRoot: null, prefix: null, isLinked: true };
107
+ const packageRoot = `${realPath.slice(0, idx)}${sep}node_modules${sep}volute`;
108
+ const nodeModulesRoot = dirname(packageRoot);
109
+ const libDir = dirname(nodeModulesRoot);
110
+ const prefix = basename(libDir) === "lib" ? dirname(libDir) : libDir;
111
+ return { packageRoot, prefix, isLinked: false };
112
+ }
113
+ function resolveVoluteInstall() {
114
+ let binPath;
115
+ try {
116
+ binPath = execFileSync("which", ["volute"], { encoding: "utf-8" }).trim();
117
+ } catch {
118
+ return null;
119
+ }
120
+ if (!binPath) return null;
121
+ let realPath = binPath;
122
+ try {
123
+ realPath = realpathSync(binPath);
124
+ } catch {
125
+ }
126
+ const { packageRoot, prefix, isLinked } = analyzeInstallPath(realPath);
127
+ if (isLinked) {
128
+ let dir = dirname(realPath);
129
+ let version = null;
130
+ for (let i = 0; i < 4 && dir !== dirname(dir); i++) {
131
+ version = readPackageVersion(dir);
132
+ if (version) break;
133
+ dir = dirname(dir);
134
+ }
135
+ return { binPath, realPath, packageRoot: null, prefix: null, version, isLinked: true };
136
+ }
137
+ return {
138
+ binPath,
139
+ realPath,
140
+ packageRoot,
141
+ prefix,
142
+ version: packageRoot ? readPackageVersion(packageRoot) : null,
143
+ isLinked: false
144
+ };
145
+ }
146
+ async function getResolvedVersion(binPath) {
147
+ try {
148
+ const { stdout } = await execFile(binPath, ["--version"], { timeout: 15e3 });
149
+ return stdout.trim() || null;
150
+ } catch {
151
+ return null;
152
+ }
153
+ }
93
154
  function checkForUpdateCached() {
94
155
  const cache = readCache();
95
156
  if (!cache) return null;
@@ -106,5 +167,8 @@ export {
106
167
  fetchLatestVersion,
107
168
  isNewer,
108
169
  checkForUpdate,
170
+ analyzeInstallPath,
171
+ resolveVoluteInstall,
172
+ getResolvedVersion,
109
173
  checkForUpdateCached
110
174
  };
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-T2TP6ZC6.js";
5
5
  import {
6
6
  mindDir
7
- } from "./chunk-PDSA3ILI.js";
7
+ } from "./chunk-B4WPXYPI.js";
8
8
 
9
9
  // packages/daemon/src/lib/delivery/delivery-router.ts
10
10
  import { readFileSync, statSync } from "fs";
@@ -9,21 +9,21 @@ import {
9
9
  getSharedSkill,
10
10
  installSkill,
11
11
  mindSkillsDir
12
- } from "./chunk-T26YLQPU.js";
12
+ } from "./chunk-UX7FPDDO.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-3XSFMN3H.js";
19
+ } from "./chunk-AEAZRTEV.js";
20
20
  import {
21
21
  qualifyModelId,
22
22
  resolveTemplate
23
- } from "./chunk-PGX52NFO.js";
23
+ } from "./chunk-ZXPWTH4I.js";
24
24
  import {
25
25
  readGlobalConfig
26
- } from "./chunk-2AQCEQYN.js";
26
+ } from "./chunk-DNU6XLE2.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-PDSA3ILI.js";
35
+ } from "./chunk-B4WPXYPI.js";
36
36
 
37
37
  // packages/daemon/src/lib/mind/spirit.ts
38
38
  import { cpSync, existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "fs";
@@ -79,7 +79,7 @@ async function ensureSpiritProject() {
79
79
  if (existing) return;
80
80
  const dir = spiritDir();
81
81
  const spiritModel = getSpiritModel();
82
- const template = resolveTemplate(spiritModel);
82
+ const template = await resolveTemplate(spiritModel);
83
83
  const templatesRoot = findTemplatesRoot();
84
84
  const { composedDir, manifest } = composeTemplate(templatesRoot, template);
85
85
  try {
@@ -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-MM7YHK6J.js");
131
+ const { createMindUser, chownMindDir, ensureVoluteGroup } = await import("./isolation-4Q4P7HRV.js");
132
132
  ensureVoluteGroup();
133
133
  createMindUser("volute", resolve(dir, "home"));
134
134
  chownMindDir(dir, "volute");
@@ -148,7 +148,7 @@ async function syncSpiritTemplate() {
148
148
  if (!existsSync(dir)) return;
149
149
  const templatesRoot = findTemplatesRoot();
150
150
  const currentModel = getSpiritModel();
151
- const expectedTemplate = resolveTemplate(currentModel);
151
+ const expectedTemplate = await resolveTemplate(currentModel);
152
152
  const currentTemplate = entry.template ?? "claude";
153
153
  if (expectedTemplate !== currentTemplate) {
154
154
  slog.info(`spirit template change: ${currentTemplate} \u2192 ${expectedTemplate}`);
@@ -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-2GIS7HSG.js")).getDb();
166
- const { minds } = await import("./schema-HHYJDG7B.js");
165
+ const db = await (await import("./db-ZEPKEJJD.js")).getDb();
166
+ const { minds } = await import("./schema-LYQUDL7G.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
  }
@@ -7,14 +7,14 @@ import {
7
7
  modeLabel,
8
8
  pollHealth,
9
9
  startService
10
- } from "./chunk-SGC6CDXB.js";
10
+ } from "./chunk-4UMXOMZ6.js";
11
11
  import {
12
12
  readGlobalConfig
13
- } from "./chunk-2AQCEQYN.js";
13
+ } from "./chunk-DNU6XLE2.js";
14
14
  import {
15
15
  voluteHome,
16
16
  voluteSystemDir
17
- } from "./chunk-PDSA3ILI.js";
17
+ } from "./chunk-B4WPXYPI.js";
18
18
 
19
19
  // src/commands/up.ts
20
20
  import { spawn } from "child_process";
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-T2TP6ZC6.js";
5
5
  import {
6
6
  voluteSystemDir
7
- } from "./chunk-PDSA3ILI.js";
7
+ } from "./chunk-B4WPXYPI.js";
8
8
 
9
9
  // packages/daemon/src/lib/bridges/bridges.ts
10
10
  import { existsSync, readFileSync, writeFileSync } from "fs";
@@ -4,10 +4,10 @@ import {
4
4
  } from "./chunk-T2TP6ZC6.js";
5
5
  import {
6
6
  getDb
7
- } from "./chunk-PDSA3ILI.js";
7
+ } from "./chunk-B4WPXYPI.js";
8
8
  import {
9
9
  activity
10
- } from "./chunk-MHFAWJCC.js";
10
+ } from "./chunk-2HZRJ35V.js";
11
11
 
12
12
  // packages/daemon/src/lib/events/activity-events.ts
13
13
  var subscribers = /* @__PURE__ */ new Set();