volute 0.54.0 → 0.56.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 (204) hide show
  1. package/dist/{activity-events-LQII6PZS.js → activity-events-YASF46HS.js} +3 -3
  2. package/dist/{ai-service-YW5SWCSB.js → ai-service-3UFNG6GI.js} +3 -5
  3. package/dist/{archive-FOHGXHPT.js → archive-L2OFBGDQ.js} +2 -2
  4. package/dist/{auth-KRDSM55Q.js → auth-N2F5ASAB.js} +4 -4
  5. package/dist/auto-upgrade-O4MQPYQF.js +46 -0
  6. package/dist/{avatar-image-52WGXLHV.js → avatar-image-QEKKUFDF.js} +3 -3
  7. package/dist/{backup-QRNX6RK7.js → backup-TPM7QQBQ.js} +13 -13
  8. package/dist/{channels-CKCY64TD.js → channels-JP3GYTPX.js} +18 -18
  9. package/dist/{chat-ZUGNL5GS.js → chat-7YCF4ZU5.js} +3 -3
  10. package/dist/{chunk-QUSMYGNQ.js → chunk-2674KIGI.js} +1 -0
  11. package/dist/{chunk-444RR3YF.js → chunk-2B4E6SL7.js} +14 -14
  12. package/dist/chunk-2GATCSZK.js +520 -0
  13. package/dist/{chunk-I7U5EEZC.js → chunk-2LFTJNVH.js} +2 -2
  14. package/dist/{chunk-L7BKTZ5U.js → chunk-2QLWAYIU.js} +2 -2
  15. package/dist/{chunk-F6D766VQ.js → chunk-45MCH4G4.js} +2 -2
  16. package/dist/{chunk-OGPVJ53N.js → chunk-4RZS7XCV.js} +5 -5
  17. package/dist/{chunk-HKGYZVWN.js → chunk-6LICEQGP.js} +38 -4
  18. package/dist/{chunk-LAUCO2HC.js → chunk-APDEUAIE.js} +1 -1
  19. package/dist/{chunk-5Y54AE3L.js → chunk-CLH357FI.js} +2 -2
  20. package/dist/{chunk-OAYY3WF3.js → chunk-CVPCRWWC.js} +1 -12
  21. package/dist/{chunk-EGV6R6UF.js → chunk-E2SN3ZOJ.js} +5 -40
  22. package/dist/{chunk-LGXVGIWN.js → chunk-ELQU2GBT.js} +193 -69
  23. package/dist/{chunk-OT5SXF7L.js → chunk-EPRLTYJR.js} +28 -14
  24. package/dist/{chunk-ATZF2RNJ.js → chunk-EYFBT2KP.js} +15 -15
  25. package/dist/{chunk-U54PJPTB.js → chunk-FYMIGUJ5.js} +2 -2
  26. package/dist/{chunk-7XKPG66D.js → chunk-G7A5LEVI.js} +5 -5
  27. package/dist/{chunk-RGHF3OK5.js → chunk-GAAATVTM.js} +17 -17
  28. package/dist/{chunk-7LT3YZUR.js → chunk-I3OJ342S.js} +2 -2
  29. package/dist/{chunk-3LHUXY3E.js → chunk-IABDYN4N.js} +4 -4
  30. package/dist/{chunk-VDUCLVZI.js → chunk-IOMBP2T5.js} +28 -26
  31. package/dist/{chunk-YSRYCS3N.js → chunk-IQROTVBG.js} +2 -2
  32. package/dist/{chunk-PPSN2MLC.js → chunk-IRNM4LSF.js} +9 -6
  33. package/dist/{chunk-ZNHL5KQJ.js → chunk-KN3UHV7O.js} +8 -3
  34. package/dist/{chunk-CV6BNGFK.js → chunk-KXM4K46T.js} +4 -4
  35. package/dist/{chunk-Z4Q6TQWL.js → chunk-LRRPKZBD.js} +2 -2
  36. package/dist/{chunk-LNNI3MS4.js → chunk-MNKPAAQF.js} +9 -2
  37. package/dist/{chunk-OIOW3FPT.js → chunk-NA2NJXY4.js} +1 -1
  38. package/dist/{chunk-GLM7TVWP.js → chunk-OHHS5PSI.js} +1 -1
  39. package/dist/{chunk-CKPAVQNK.js → chunk-OPTA3BJ4.js} +36 -24
  40. package/dist/{chunk-X67BDDZR.js → chunk-P3GXOT2X.js} +48 -2
  41. package/dist/{chunk-WHL6PKYP.js → chunk-PAO7JZNW.js} +52 -48
  42. package/dist/{chunk-TPX6E6PL.js → chunk-Q5M5QFKY.js} +3 -3
  43. package/dist/{chunk-OYF25B62.js → chunk-T7UMSTH2.js} +3 -3
  44. package/dist/{chunk-H6X6CKDN.js → chunk-TAVIVN2I.js} +2 -32
  45. package/dist/{chunk-56IT2ZXF.js → chunk-TGYKFUCF.js} +9 -15
  46. package/dist/{chunk-5U5GLZSD.js → chunk-TZ7OHGNL.js} +2 -2
  47. package/dist/{chunk-UFTDRTCP.js → chunk-UMQP5TC5.js} +2 -2
  48. package/dist/{chunk-LKUGUQUW.js → chunk-UNTDRIV2.js} +5 -5
  49. package/dist/{chunk-CLCHOXLR.js → chunk-V2M6PNLE.js} +5 -5
  50. package/dist/{chunk-ICXY54ZC.js → chunk-WTZD6LFW.js} +2 -2
  51. package/dist/{chunk-FLIEXG2T.js → chunk-XZP3FJ7Q.js} +1 -1
  52. package/dist/{chunk-HTRSSOHY.js → chunk-YU5EYQAE.js} +1 -1
  53. package/dist/cli.js +26 -23
  54. package/dist/{clock-X7V3C7NL.js → clock-ZT5YT6HA.js} +2 -2
  55. package/dist/{cloud-sync-52YNJRMR.js → cloud-sync-RTUXMYU2.js} +23 -23
  56. package/dist/{conversations-ZL6PHROD.js → conversations-ERMMPMOS.js} +4 -4
  57. package/dist/{create-G2RIKQYK.js → create-IUCFJXCE.js} +1 -1
  58. package/dist/{daemon-restart-QWHN5VMU.js → daemon-restart-N2YOISNJ.js} +11 -6
  59. package/dist/daemon.js +230 -279
  60. package/dist/{db-BONH4SUG.js → db-BQFYIONA.js} +1 -1
  61. package/dist/{db-I4EH5SLF.js → db-JH3NTERX.js} +17 -3
  62. package/dist/delivery-manager-5EGCFN4K.js +41 -0
  63. package/dist/{delivery-notices-RZQ6GONP.js → delivery-notices-LZKZXWTX.js} +6 -6
  64. package/dist/{delivery-router-QS4NLJR6.js → delivery-router-U6Q22ZYU.js} +3 -3
  65. package/dist/doctor-225FYBAQ.js +454 -0
  66. package/dist/{down-UN2EDX2Y.js → down-3BQSPUAZ.js} +4 -4
  67. package/dist/echo-text-Y2DFTD7L.js +40 -0
  68. package/dist/{env-SQFCWW52.js → env-4YX5YNWZ.js} +2 -2
  69. package/dist/{exec-Z34TTUO3.js → exec-Y5VMDAVA.js} +2 -2
  70. package/dist/{export-VBNWM7I4.js → export-ASRHBMRG.js} +2 -2
  71. package/dist/{extensions-QT65JGV6.js → extensions-YEPEWURN.js} +27 -23
  72. package/dist/{files-PCKBQHAY.js → files-FASUDSZQ.js} +3 -3
  73. package/dist/{import-DB2KULRO.js → import-O35Y7DSF.js} +6 -6
  74. package/dist/{isolation-UQPDO34R.js → isolation-ZOAUXYXA.js} +2 -2
  75. package/dist/{login-57MMYILL.js → login-54TZQQP4.js} +5 -5
  76. package/dist/{logout-YFZAJRPY.js → logout-4G46Z4RU.js} +1 -1
  77. package/dist/message-delivery-HBTMGWFU.js +46 -0
  78. package/dist/{mind-CT6ANXK4.js → mind-IKMX7K7G.js} +8 -24
  79. package/dist/{mind-activity-tracker-QF6DCX2X.js → mind-activity-tracker-ABAEIMA3.js} +4 -4
  80. package/dist/mind-service-LRVOQG2T.js +48 -0
  81. package/dist/{mind-sleep-24HV4RCA.js → mind-sleep-LZAFBDZD.js} +2 -2
  82. package/dist/{package-F6S5NHY2.js → package-X5O7OD2E.js} +12 -13
  83. package/dist/{prompts-JECJIFPQ.js → prompts-ZNOE3KN3.js} +2 -2
  84. package/dist/{registry-TRC2HJXR.js → registry-BTQXLDW6.js} +1 -1
  85. package/dist/{sandbox-NNWCTHRI.js → sandbox-OUFAGN45.js} +3 -3
  86. package/dist/scheduler-G6BCIVGP.js +27 -0
  87. package/dist/{seed-cmd-6IMTO3LG.js → seed-cmd-BGAW3WDY.js} +2 -2
  88. package/dist/{seed-create-VNLDYRFK.js → seed-create-SMCPEUFQ.js} +3 -3
  89. package/dist/{seed-readiness-H5TTPAQH.js → seed-readiness-RBANMSWW.js} +3 -3
  90. package/dist/{seed-sprout-PPGYGK4G.js → seed-sprout-CSHV36N3.js} +9 -9
  91. package/dist/{send-UXUQKO4N.js → send-D3ADUBR5.js} +6 -6
  92. package/dist/{service-T4P5W6RS.js → service-SWEEBOOY.js} +3 -24
  93. package/dist/{service-install-R4SNYUVO.js → service-install-RCC26KDV.js} +4 -4
  94. package/dist/{setup-YUAQMDVZ.js → setup-L5NZG2U3.js} +5 -5
  95. package/dist/{setup-WZSXHHRJ.js → setup-R7Q4HFJP.js} +1 -5
  96. package/dist/skills/volute-mind/SKILL.md +8 -0
  97. package/dist/{skills-GMQ5UIIW.js → skills-BCCU4OJW.js} +4 -4
  98. package/dist/sleep-manager-25P44HAO.js +42 -0
  99. package/dist/{spirit-Q5VGFWUI.js → spirit-YPG2MU6W.js} +7 -7
  100. package/dist/spirit-availability-ZQM5IH4C.js +43 -0
  101. package/dist/{src-H3UCOP6B.js → src-246GSX7A.js} +5 -2
  102. package/dist/src-LOUB3WPR.js +4189 -0
  103. package/dist/{status-LCKTTIWS.js → status-BYPCJU6H.js} +4 -4
  104. package/dist/{system-events-Q7IVZ5T4.js → system-events-CWC7CBKP.js} +6 -4
  105. package/dist/{systems-HL7SGSW7.js → systems-VDRUZXNF.js} +2 -2
  106. package/dist/{tailscale-KHNZFC7L.js → tailscale-4XY7B5A2.js} +2 -2
  107. package/dist/{template-hash-YKWMVYMM.js → template-hash-RJRMF6DT.js} +2 -2
  108. package/dist/{template-staleness-PY2CULH6.js → template-staleness-CL4V7BT7.js} +5 -5
  109. package/dist/{turn-tracker-HZDPMSCC.js → turn-tracker-LZP5X6GZ.js} +8 -8
  110. package/dist/{up-XZDSJVMU.js → up-3AAN4GYY.js} +4 -4
  111. package/dist/{update-ILCPVNDD.js → update-2MWXRE2S.js} +4 -4
  112. package/dist/{update-check-SZ7B5IFI.js → update-check-PJOZXZYJ.js} +2 -2
  113. package/dist/variant-cleanup-K7RFMSH7.js +24 -0
  114. package/dist/{version-notify-VNVFX6UP.js → version-notify-QIDHR6WO.js} +12 -12
  115. package/dist/web-assets/assets/{index-CwtxGwe_.js → index-Bfvls20e.js} +17 -17
  116. package/dist/web-assets/assets/index-hPn_fkz3.css +1 -0
  117. package/dist/web-assets/index.html +2 -2
  118. package/drizzle/0000_crazy_epoch.sql +232 -0
  119. package/drizzle/README.md +42 -0
  120. package/drizzle/meta/0000_snapshot.json +1420 -3
  121. package/drizzle/meta/_journal.json +2 -128
  122. package/package.json +12 -13
  123. package/packages/extensions/intentions/dist/ui/assets/index-Bl5KEcli.js +67 -0
  124. package/packages/extensions/intentions/dist/ui/index.html +1 -1
  125. package/packages/extensions/pages/dist/ui/assets/index-BKxVQkA9.css +1 -0
  126. package/packages/extensions/pages/dist/ui/assets/index-BMt6sStP.js +68 -0
  127. package/packages/extensions/pages/dist/ui/index.html +2 -2
  128. package/packages/extensions/pages/skills/pages/SKILL.md +123 -4
  129. package/templates/_base/.init/.config/prompts.json +0 -1
  130. package/templates/_base/.init/.local/hooks/pre-prompt/turn-context.ts +30 -0
  131. package/templates/_base/src/lib/codex-session-seed.ts +6 -55
  132. package/templates/_base/src/lib/pi-session-seed.ts +8 -57
  133. package/templates/_base/src/lib/seed-note.ts +4 -4
  134. package/templates/_base/src/lib/session-seed.ts +8 -53
  135. package/templates/_base/src/lib/startup.ts +0 -20
  136. package/templates/claude/package.json +2 -2
  137. package/templates/claude/src/agent.ts +34 -102
  138. package/templates/claude/src/lib/hooks/pre-compact.ts +6 -6
  139. package/templates/claude/src/server.ts +0 -1
  140. package/templates/codex/package.json +2 -2
  141. package/templates/codex/src/agent.ts +23 -89
  142. package/templates/pi/package.json +1 -1
  143. package/templates/pi/src/agent.ts +26 -93
  144. package/templates/pi/src/server.ts +0 -1
  145. package/dist/auto-upgrade-HEVZKPTF.js +0 -46
  146. package/dist/chunk-AAPNU7GA.js +0 -168
  147. package/dist/delivery-manager-7R2YIQ2W.js +0 -41
  148. package/dist/echo-text-73CYQRL7.js +0 -40
  149. package/dist/message-delivery-TRKT4T2P.js +0 -46
  150. package/dist/migrate-name-placeholder-C7NCNLWF.js +0 -37
  151. package/dist/migrate-thread-config-EQSEP2XG.js +0 -90
  152. package/dist/mind-service-7EFIJ3ZA.js +0 -48
  153. package/dist/scheduler-73Q4MQ7Y.js +0 -27
  154. package/dist/seed-DRKAP3XV.js +0 -11
  155. package/dist/sleep-manager-KHI65FEX.js +0 -42
  156. package/dist/spirit-availability-G5FMWKRH.js +0 -43
  157. package/dist/sprout-PMTRL7QN.js +0 -11
  158. package/dist/src-3FIW7DLH.js +0 -2376
  159. package/dist/src-LTTQVN2Z.js +0 -832
  160. package/dist/variant-HHDTW74J.js +0 -62
  161. package/dist/variant-cleanup-QHGGY7ND.js +0 -24
  162. package/dist/web-assets/assets/index-DhM1yYRN.css +0 -1
  163. package/drizzle/0000_baseline.sql +0 -152
  164. package/drizzle/0001_add_conversation_private.sql +0 -1
  165. package/drizzle/0002_turns.sql +0 -21
  166. package/drizzle/0003_turn_feed_links.sql +0 -11
  167. package/drizzle/0004_spirits.sql +0 -5
  168. package/drizzle/0005_meta_summaries.sql +0 -15
  169. package/drizzle/0006_channels.sql +0 -17
  170. package/drizzle/0007_drop_conversation_name_title.sql +0 -11
  171. package/drizzle/0008_performance_indexes.sql +0 -6
  172. package/drizzle/0009_mind_notices.sql +0 -14
  173. package/drizzle/0010_delivery_queue_redrive.sql +0 -10
  174. package/drizzle/0011_drop_turn_summary_event_id.sql +0 -3
  175. package/drizzle/0012_channel_gates.sql +0 -17
  176. package/drizzle/0013_variant_purpose.sql +0 -3
  177. package/drizzle/0014_system_events.sql +0 -26
  178. package/drizzle/0015_rename_session_to_thread.sql +0 -12
  179. package/drizzle/0016_brain_to_human.sql +0 -4
  180. package/drizzle/0017_event_history_rows.sql +0 -9
  181. package/drizzle/0018_api_tokens.sql +0 -20
  182. package/drizzle/meta/0001_snapshot.json +0 -7
  183. package/drizzle/meta/0002_snapshot.json +0 -7
  184. package/drizzle/meta/0003_snapshot.json +0 -7
  185. package/drizzle/meta/0004_snapshot.json +0 -7
  186. package/drizzle/meta/0005_snapshot.json +0 -7
  187. package/drizzle/meta/0006_snapshot.json +0 -7
  188. package/drizzle/meta/0007_snapshot.json +0 -7
  189. package/packages/extensions/intentions/dist/ui/assets/index-CQz4aceM.js +0 -67
  190. package/packages/extensions/notes/dist/ui/assets/index-BBs8pyel.js +0 -67
  191. package/packages/extensions/notes/dist/ui/assets/index-D3cdui42.css +0 -1
  192. package/packages/extensions/notes/dist/ui/index.html +0 -14
  193. package/packages/extensions/notes/skills/notes/SKILL.md +0 -90
  194. package/packages/extensions/pages/dist/ui/assets/index-B589e8Xe.js +0 -2
  195. package/packages/extensions/pages/dist/ui/assets/index-BuXnE-rb.css +0 -1
  196. package/dist/{env-7AZFBPWX.js → env-IBW2QI6K.js} +5 -5
  197. package/dist/{login-4NUS72Z5.js → login-RJJTCVR3.js} +3 -3
  198. package/dist/{mind-contacts-PEXCDRXA.js → mind-contacts-KV64UDJS.js} +6 -6
  199. package/dist/{mind-history-RZMMCHMX.js → mind-history-H45GM2M2.js} +6 -6
  200. package/dist/{register-WNCSOTAU.js → register-OX4HRSGC.js} +3 -3
  201. package/dist/{restart-B4GNMVF2.js → restart-AGEGNSYQ.js} +4 -4
  202. package/dist/{skill-QYTBUDNQ.js → skill-B5OJEQUA.js} +4 -4
  203. package/dist/{start-BDHJVOVX.js → start-MUMNFR52.js} +3 -3
  204. package/dist/{stop-45QYSGYS.js → stop-EKERNYTX.js} +4 -4
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  getDb
4
- } from "./chunk-H6X6CKDN.js";
4
+ } from "./chunk-TAVIVN2I.js";
5
5
  import "./chunk-2RNMBXD2.js";
6
6
  import "./chunk-K3NQKI34.js";
7
7
  export {
@@ -1,22 +1,36 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
+ areCommentsClosed,
4
+ citationsOf,
3
5
  getAllSites,
6
+ getLivePageFiles,
4
7
  getMindsWithSites,
8
+ getPage,
5
9
  getPublishedPages,
6
10
  getRecentPages,
7
11
  getSystemPages,
8
12
  initDb,
13
+ isSiteHome,
14
+ knownPageFiles,
9
15
  syncPublishedPages,
10
- syncSystemPages
11
- } from "./chunk-AAPNU7GA.js";
16
+ syncSystemPages,
17
+ upsertPageWithTimestamps
18
+ } from "./chunk-2GATCSZK.js";
12
19
  import "./chunk-K3NQKI34.js";
13
20
  export {
21
+ areCommentsClosed,
22
+ citationsOf,
14
23
  getAllSites,
24
+ getLivePageFiles,
15
25
  getMindsWithSites,
26
+ getPage,
16
27
  getPublishedPages,
17
28
  getRecentPages,
18
29
  getSystemPages,
19
30
  initDb,
31
+ isSiteHome,
32
+ knownPageFiles,
20
33
  syncPublishedPages,
21
- syncSystemPages
34
+ syncSystemPages,
35
+ upsertPageWithTimestamps
22
36
  };
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ DeliveryManager,
4
+ MAX_DELIVERY_ATTEMPTS,
5
+ UnknownChannelError,
6
+ formatSuggestions,
7
+ getDeliveryManager,
8
+ initDeliveryManager,
9
+ tryGetDeliveryManager
10
+ } from "./chunk-IOMBP2T5.js";
11
+ import "./chunk-PAO7JZNW.js";
12
+ import "./chunk-TGYKFUCF.js";
13
+ import "./chunk-CLH357FI.js";
14
+ import "./chunk-Q5M5QFKY.js";
15
+ import "./chunk-UMQP5TC5.js";
16
+ import "./chunk-WTZD6LFW.js";
17
+ import "./chunk-DW4TRDOZ.js";
18
+ import "./chunk-WCFSBH33.js";
19
+ import "./chunk-IQROTVBG.js";
20
+ import "./chunk-I3OJ342S.js";
21
+ import "./chunk-FYMIGUJ5.js";
22
+ import "./chunk-6LICEQGP.js";
23
+ import "./chunk-MNKPAAQF.js";
24
+ import "./chunk-CVPCRWWC.js";
25
+ import "./chunk-NA2NJXY4.js";
26
+ import "./chunk-OHHS5PSI.js";
27
+ import "./chunk-E2SN3ZOJ.js";
28
+ import "./chunk-2674KIGI.js";
29
+ import "./chunk-LGNUFVMR.js";
30
+ import "./chunk-TAVIVN2I.js";
31
+ import "./chunk-2RNMBXD2.js";
32
+ import "./chunk-K3NQKI34.js";
33
+ export {
34
+ DeliveryManager,
35
+ MAX_DELIVERY_ATTEMPTS,
36
+ UnknownChannelError,
37
+ formatSuggestions,
38
+ getDeliveryManager,
39
+ initDeliveryManager,
40
+ tryGetDeliveryManager
41
+ };
@@ -3,12 +3,12 @@ import {
3
3
  COALESCE_WINDOW_MINUTES,
4
4
  recordDeliveryFailure,
5
5
  recordSenderDeliveryFailure
6
- } from "./chunk-3LHUXY3E.js";
7
- import "./chunk-HKGYZVWN.js";
8
- import "./chunk-LNNI3MS4.js";
9
- import "./chunk-OAYY3WF3.js";
10
- import "./chunk-QUSMYGNQ.js";
11
- import "./chunk-H6X6CKDN.js";
6
+ } from "./chunk-IABDYN4N.js";
7
+ import "./chunk-6LICEQGP.js";
8
+ import "./chunk-MNKPAAQF.js";
9
+ import "./chunk-CVPCRWWC.js";
10
+ import "./chunk-2674KIGI.js";
11
+ import "./chunk-TAVIVN2I.js";
12
12
  import "./chunk-2RNMBXD2.js";
13
13
  import "./chunk-K3NQKI34.js";
14
14
  export {
@@ -10,9 +10,9 @@ import {
10
10
  setRoutesChangeListener,
11
11
  shouldGate,
12
12
  warnUnknownRuleKeys
13
- } from "./chunk-YSRYCS3N.js";
14
- import "./chunk-QUSMYGNQ.js";
15
- import "./chunk-H6X6CKDN.js";
13
+ } from "./chunk-IQROTVBG.js";
14
+ import "./chunk-2674KIGI.js";
15
+ import "./chunk-TAVIVN2I.js";
16
16
  import "./chunk-2RNMBXD2.js";
17
17
  import "./chunk-K3NQKI34.js";
18
18
  export {
@@ -0,0 +1,454 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ getAuthToken
4
+ } from "./chunk-M74I3HHF.js";
5
+ import {
6
+ command
7
+ } from "./chunk-TXSA4Q3V.js";
8
+ import "./chunk-O7IGP7ZW.js";
9
+ import "./chunk-FNJCBRD3.js";
10
+ import {
11
+ daemonLogSource,
12
+ getDaemonUrl,
13
+ getServiceMode,
14
+ modeLabel,
15
+ readDaemonConfig,
16
+ readLogTail
17
+ } from "./chunk-OPTA3BJ4.js";
18
+ import {
19
+ exec
20
+ } from "./chunk-NA2NJXY4.js";
21
+ import {
22
+ sharedEnvPath
23
+ } from "./chunk-OHHS5PSI.js";
24
+ import {
25
+ computeSetupStatus,
26
+ readGlobalConfig,
27
+ stateDir,
28
+ voluteHome,
29
+ voluteSystemDir
30
+ } from "./chunk-TAVIVN2I.js";
31
+ import "./chunk-2RNMBXD2.js";
32
+ import "./chunk-K3NQKI34.js";
33
+
34
+ // packages/cli/src/commands/doctor.ts
35
+ import {
36
+ accessSync,
37
+ constants,
38
+ existsSync,
39
+ mkdirSync,
40
+ mkdtempSync,
41
+ readdirSync,
42
+ readFileSync,
43
+ rmSync,
44
+ writeFileSync
45
+ } from "fs";
46
+ import { statfs } from "fs/promises";
47
+ import { arch, homedir, platform, release, tmpdir, type } from "os";
48
+ import { delimiter, join, resolve } from "path";
49
+
50
+ // packages/daemon/src/lib/doctor.ts
51
+ import { sql } from "drizzle-orm";
52
+ import { drizzle } from "drizzle-orm/libsql";
53
+ var REDACTED = "[REDACTED]";
54
+ var SECRET_KEY_RE = /(api[-_]?key|secret|token|password|passphrase|bearer|oauth|credential|private[-_]?key|client[-_]?secret|webhook|cookie|session|auth)/i;
55
+ var SECRET_VALUE_RE = /(sk-[A-Za-z0-9]|sk_[A-Za-z0-9]|vmt_|vlt_|xox[baprs]-|gh[pousr]_|github_pat_|AKIA[0-9A-Z]{12}|-----BEGIN|eyJ[A-Za-z0-9_-]{10}|Bearer\s+\S)/;
56
+ function looksLikeOpaqueToken(s) {
57
+ return s.length >= 40 && /^[A-Za-z0-9+/=_-]+$/.test(s);
58
+ }
59
+ function looksLikeSecretString(s) {
60
+ return SECRET_VALUE_RE.test(s) || looksLikeOpaqueToken(s);
61
+ }
62
+ function maskAllValues(obj) {
63
+ const out = {};
64
+ for (const k of Object.keys(obj)) out[k] = REDACTED;
65
+ return out;
66
+ }
67
+ function redactValue(value, key) {
68
+ if (key !== void 0 && SECRET_KEY_RE.test(key)) return REDACTED;
69
+ if (Array.isArray(value)) return value.map((v) => redactValue(v));
70
+ if (value !== null && typeof value === "object") {
71
+ if (key === "env") return maskAllValues(value);
72
+ const out = {};
73
+ for (const [k, v] of Object.entries(value)) out[k] = redactValue(v, k);
74
+ return out;
75
+ }
76
+ if (typeof value === "string" && looksLikeSecretString(value)) return REDACTED;
77
+ return value;
78
+ }
79
+ function redactConfigJson(text) {
80
+ let parsed;
81
+ try {
82
+ parsed = JSON.parse(text);
83
+ } catch {
84
+ return "[config.json could not be parsed \u2014 omitted so no secret can leak]\n";
85
+ }
86
+ return `${JSON.stringify(redactValue(parsed), null, 2)}
87
+ `;
88
+ }
89
+ function redactEnvJson(text) {
90
+ let parsed;
91
+ try {
92
+ parsed = JSON.parse(text);
93
+ } catch {
94
+ return "[env.json could not be parsed \u2014 omitted so no secret can leak]\n";
95
+ }
96
+ return `${JSON.stringify(maskAllValues(parsed), null, 2)}
97
+ `;
98
+ }
99
+ var LOG_SCRUBBERS = [
100
+ // key=value / key: value where the key names a credential — keep the key, mask the value.
101
+ [
102
+ /\b(api[_-]?key|secret|token|password|passwd|pwd|bearer|authorization|credential|access[_-]?key(?:[_-]?id)?|secret[_-]?access[_-]?key|refresh[_-]?token)\b(\s*[=:]\s*)"?([^\s"',}]+)/gi,
103
+ `$1$2${REDACTED}`
104
+ ],
105
+ // Authorization: Bearer <token>
106
+ [/\bBearer\s+[A-Za-z0-9._-]+/gi, `Bearer ${REDACTED}`],
107
+ // Standalone tokens by known prefix/shape, wherever they appear.
108
+ [
109
+ /\b(sk-[A-Za-z0-9-]{6,}|sk_[A-Za-z0-9-]{6,}|vmt_[A-Za-z0-9-]{6,}|vlt_[A-Za-z0-9-]{6,}|xox[baprs]-[A-Za-z0-9-]+|gh[pousr]_[A-Za-z0-9]{20,}|github_pat_[A-Za-z0-9_]+|AKIA[0-9A-Z]{12,}|eyJ[A-Za-z0-9._-]{10,})\b/g,
110
+ REDACTED
111
+ ]
112
+ ];
113
+ function redactLogText(text) {
114
+ let out = text;
115
+ for (const [re, replacement] of LOG_SCRUBBERS) out = out.replace(re, replacement);
116
+ return out;
117
+ }
118
+ async function readMigrationInfo(dbPath2) {
119
+ try {
120
+ const db = drizzle({ connection: { url: `file:${dbPath2}` } });
121
+ const rows = await db.all(
122
+ sql.raw("SELECT count(*) AS n, max(created_at) AS latest FROM __drizzle_migrations")
123
+ );
124
+ const row = rows[0];
125
+ return { ok: true, applied: Number(row?.n ?? 0), latestMillis: row?.latest ?? null };
126
+ } catch (err) {
127
+ return { ok: false, error: err instanceof Error ? err.message : String(err) };
128
+ }
129
+ }
130
+ async function readMindsBasic(dbPath2) {
131
+ try {
132
+ const db = drizzle({ connection: { url: `file:${dbPath2}` } });
133
+ const rows = await db.all(
134
+ sql.raw("SELECT name, running, parent FROM minds ORDER BY name")
135
+ );
136
+ return rows.map((r) => ({ name: r.name, running: r.running === 1, parent: r.parent }));
137
+ } catch {
138
+ return [];
139
+ }
140
+ }
141
+
142
+ // packages/cli/src/commands/doctor.ts
143
+ var ICON = { pass: "\u2713", fail: "\u2717", warn: "\u26A0" };
144
+ var MAC_CHROME_CANDIDATES = [
145
+ "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
146
+ "/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary",
147
+ "/Applications/Chromium.app/Contents/MacOS/Chromium",
148
+ "/Applications/Brave Browser.app/Contents/MacOS/Brave Browser",
149
+ "/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge"
150
+ ];
151
+ var PATH_CHROME_CANDIDATES = [
152
+ "google-chrome",
153
+ "google-chrome-stable",
154
+ "chromium",
155
+ "chromium-browser",
156
+ "brave-browser",
157
+ "microsoft-edge"
158
+ ];
159
+ function isExecutable(p) {
160
+ try {
161
+ accessSync(p, constants.X_OK);
162
+ return true;
163
+ } catch {
164
+ return false;
165
+ }
166
+ }
167
+ function findChromeBrowser() {
168
+ const override = process.env.VOLUTE_CHROMIUM;
169
+ if (override) return override;
170
+ if (platform() === "darwin") {
171
+ for (const candidate of MAC_CHROME_CANDIDATES) {
172
+ if (isExecutable(candidate)) return candidate;
173
+ }
174
+ return null;
175
+ }
176
+ const dirs = (process.env.PATH ?? "").split(delimiter).filter(Boolean);
177
+ for (const name of PATH_CHROME_CANDIDATES) {
178
+ for (const dir of dirs) {
179
+ const full = join(dir, name);
180
+ if (isExecutable(full)) return full;
181
+ }
182
+ }
183
+ return null;
184
+ }
185
+ function dbPath() {
186
+ return process.env.VOLUTE_DB_PATH || resolve(voluteSystemDir(), "volute.db");
187
+ }
188
+ function humanBytes(n) {
189
+ const units = ["B", "KB", "MB", "GB", "TB"];
190
+ let v = n;
191
+ let i = 0;
192
+ while (v >= 1024 && i < units.length - 1) {
193
+ v /= 1024;
194
+ i++;
195
+ }
196
+ return `${v.toFixed(v >= 10 || i === 0 ? 0 : 1)}${units[i]}`;
197
+ }
198
+ function bundleStamp(d = /* @__PURE__ */ new Date()) {
199
+ const p = (n) => String(n).padStart(2, "0");
200
+ return `${d.getFullYear()}-${p(d.getMonth() + 1)}-${p(d.getDate())}-${p(d.getHours())}${p(d.getMinutes())}${p(d.getSeconds())}`;
201
+ }
202
+ function daemonBaseUrl() {
203
+ const { port, internalPort } = readDaemonConfig();
204
+ return getDaemonUrl("127.0.0.1", internalPort ?? port);
205
+ }
206
+ async function fetchDaemonJson(path) {
207
+ const base = daemonBaseUrl();
208
+ const headers = { Origin: base };
209
+ const token = getAuthToken();
210
+ if (token) headers.Authorization = `Bearer ${token}`;
211
+ try {
212
+ const res = await fetch(`${base}${path}`, { headers, signal: AbortSignal.timeout(3e3) });
213
+ if (!res.ok) return null;
214
+ return await res.json();
215
+ } catch {
216
+ return null;
217
+ }
218
+ }
219
+ async function runDiagnostics() {
220
+ const checks = [];
221
+ const config = readGlobalConfig();
222
+ const health = await fetchDaemonJson("/api/health");
223
+ const daemonUp = !!health?.ok;
224
+ if (health?.ok) {
225
+ checks.push({
226
+ label: "Daemon reachable",
227
+ state: "pass",
228
+ detail: `${daemonBaseUrl()}${health.version ? ` (v${health.version})` : ""}`
229
+ });
230
+ } else {
231
+ checks.push({
232
+ label: "Daemon reachable",
233
+ state: "fail",
234
+ detail: `no response at ${daemonBaseUrl()} \u2014 start it with \`volute up\``
235
+ });
236
+ }
237
+ const setupState = computeSetupStatus(config);
238
+ const providers = Object.keys(config.ai?.providers ?? {});
239
+ if (setupState === "complete" && providers.length > 0) {
240
+ checks.push({ label: "Setup complete", state: "pass" });
241
+ } else if (setupState === "complete") {
242
+ checks.push({
243
+ label: "Setup complete",
244
+ state: "warn",
245
+ detail: "setup finished but no AI provider is configured"
246
+ });
247
+ } else {
248
+ checks.push({
249
+ label: "Setup complete",
250
+ state: "fail",
251
+ detail: setupState === "in-progress" ? "setup started but not finished" : "run `volute setup`"
252
+ });
253
+ }
254
+ checks.push(
255
+ providers.length > 0 ? { label: "Provider config present", state: "pass", detail: providers.sort().join(", ") } : { label: "Provider config present", state: "fail", detail: "no providers configured" }
256
+ );
257
+ const path = dbPath();
258
+ if (!existsSync(path)) {
259
+ checks.push({ label: "Database", state: "warn", detail: "no volute.db yet (fresh install?)" });
260
+ } else {
261
+ const info = await readMigrationInfo(path);
262
+ if (info.ok) {
263
+ checks.push({
264
+ label: "Database",
265
+ state: "pass",
266
+ detail: `opens OK, ${info.applied} migration${info.applied === 1 ? "" : "s"} applied`
267
+ });
268
+ } else {
269
+ checks.push({ label: "Database", state: "fail", detail: info.error });
270
+ }
271
+ }
272
+ checks.push({ label: "Node version", state: "pass", detail: process.version });
273
+ const npmVersion = await exec("npm", ["--version"]).then((s) => s.trim()).catch(() => null);
274
+ checks.push(
275
+ npmVersion ? { label: "npm version", state: "pass", detail: npmVersion } : { label: "npm version", state: "warn", detail: "npm not found on PATH" }
276
+ );
277
+ checks.push({ label: "Install type", state: "pass", detail: modeLabel(getServiceMode()) });
278
+ const isolation = config.setup?.isolation;
279
+ checks.push(
280
+ isolation ? { label: "Isolation mode", state: "pass", detail: isolation } : { label: "Isolation mode", state: "warn", detail: "not configured (none)" }
281
+ );
282
+ const chromePath = findChromeBrowser();
283
+ checks.push(
284
+ chromePath ? { label: "Chrome (pages preview)", state: "pass", detail: chromePath } : {
285
+ label: "Chrome (pages preview)",
286
+ state: "warn",
287
+ detail: "no Chrome-family browser found \u2014 `volute pages preview` won't work"
288
+ }
289
+ );
290
+ try {
291
+ const home = voluteHome();
292
+ const st = await statfs(existsSync(home) ? home : homedir());
293
+ const free = Number(st.bavail) * Number(st.bsize);
294
+ const total = Number(st.blocks) * Number(st.bsize);
295
+ const pctFree = total > 0 ? free / total * 100 : 0;
296
+ checks.push({
297
+ label: "Disk space",
298
+ state: pctFree < 5 ? "warn" : "pass",
299
+ detail: `${humanBytes(free)} free of ${humanBytes(total)} (${pctFree.toFixed(0)}%)`
300
+ });
301
+ } catch (err) {
302
+ checks.push({
303
+ label: "Disk space",
304
+ state: "warn",
305
+ detail: err instanceof Error ? err.message : String(err)
306
+ });
307
+ }
308
+ const daemonMinds = await fetchDaemonJson("/api/minds");
309
+ if (daemonMinds) {
310
+ if (daemonMinds.length === 0) {
311
+ checks.push({ label: "Minds", state: "pass", detail: "none configured" });
312
+ } else {
313
+ for (const m of daemonMinds) {
314
+ const status = m.status ?? (m.running ? "running" : "stopped");
315
+ const failed = m.lastError ? " (last turn failed)" : "";
316
+ const state = status === "running" || status === "sleeping" ? "pass" : m.lastError ? "fail" : "warn";
317
+ checks.push({ label: `Mind: ${m.name}`, state, detail: `${status}${failed}` });
318
+ }
319
+ }
320
+ } else {
321
+ const why = daemonUp ? "not authenticated \u2014 try `volute login`" : "daemon unreachable";
322
+ const rows = existsSync(path) ? await readMindsBasic(path) : [];
323
+ if (rows.length === 0) {
324
+ checks.push({ label: "Minds", state: "warn", detail: `${why}; none in registry` });
325
+ } else {
326
+ for (const m of rows) {
327
+ checks.push({
328
+ label: `Mind: ${m.name}`,
329
+ state: "warn",
330
+ detail: `${m.running ? "running?" : "stopped"} (${why} \u2014 registry value)`
331
+ });
332
+ }
333
+ }
334
+ }
335
+ return { checks, daemonMinds };
336
+ }
337
+ function renderReport(checks) {
338
+ const lines = ["volute doctor", "\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550", ""];
339
+ const width = Math.max(...checks.map((c) => c.label.length));
340
+ for (const c of checks) {
341
+ const detail = c.detail ? ` ${c.detail}` : "";
342
+ lines.push(`${ICON[c.state]} ${c.label.padEnd(width)}${detail}`);
343
+ }
344
+ const failed = checks.filter((c) => c.state === "fail").length;
345
+ const warned = checks.filter((c) => c.state === "warn").length;
346
+ lines.push("");
347
+ lines.push(
348
+ failed === 0 && warned === 0 ? "All checks passed." : `${failed} failed, ${warned} warning${warned === 1 ? "" : "s"}.`
349
+ );
350
+ return `${lines.join("\n")}
351
+ `;
352
+ }
353
+ function systemInfo() {
354
+ return [
355
+ `date: ${(/* @__PURE__ */ new Date()).toISOString()}`,
356
+ `os: ${type()} ${release()} (${platform()}/${arch()})`,
357
+ `node: ${process.version}`,
358
+ `install type: ${modeLabel(getServiceMode())}`,
359
+ `isolation: ${readGlobalConfig().setup?.isolation ?? "none"}`,
360
+ `volute home: ${voluteHome()}`
361
+ ].join("\n");
362
+ }
363
+ async function captureStatus() {
364
+ const self = process.argv[1];
365
+ try {
366
+ return await exec(process.execPath, [...process.execArgv, self, "status"]);
367
+ } catch (err) {
368
+ const e = err;
369
+ return e.stdout || e.stderr || `(volute status failed: ${err instanceof Error ? err.message : err})`;
370
+ }
371
+ }
372
+ async function writeBundle(report, minds) {
373
+ const stamp = bundleStamp();
374
+ const stage = mkdtempSync(resolve(tmpdir(), "volute-doctor-"));
375
+ const root = resolve(stage, `volute-doctor-${stamp}`);
376
+ mkdirSync(root, { recursive: true });
377
+ const write = (rel, content) => {
378
+ const dest = resolve(root, rel);
379
+ mkdirSync(resolve(dest, ".."), { recursive: true });
380
+ writeFileSync(dest, content);
381
+ };
382
+ write("report.txt", report);
383
+ write("system.txt", `${systemInfo()}
384
+ `);
385
+ write("status.txt", redactLogText(await captureStatus()));
386
+ const cfgPath = resolve(voluteSystemDir(), "config.json");
387
+ if (existsSync(cfgPath)) {
388
+ write("config.json", redactConfigJson(readFileSync(cfgPath, "utf-8")));
389
+ }
390
+ const envPath = sharedEnvPath();
391
+ if (existsSync(envPath)) {
392
+ write("env.json", redactEnvJson(readFileSync(envPath, "utf-8")));
393
+ }
394
+ const src = daemonLogSource(getServiceMode());
395
+ if (src.kind === "file") {
396
+ write("logs/daemon.log", redactLogText(`${readLogTail(src.path, 200).join("\n")}
397
+ `));
398
+ } else {
399
+ const journal = await exec("sh", ["-c", src.command]).catch(
400
+ (err) => `(could not read journal: ${err instanceof Error ? err.message : err})`
401
+ );
402
+ write("logs/daemon.log", redactLogText(journal));
403
+ }
404
+ const path = dbPath();
405
+ const listed = minds ? minds.map((m) => m.name) : existsSync(path) ? (await readMindsBasic(path)).map((m) => m.name) : [];
406
+ const stateRoot = resolve(voluteSystemDir(), "state");
407
+ const fromState = existsSync(stateRoot) ? readdirSync(stateRoot, { withFileTypes: true }).filter((e) => e.isDirectory()).map((e) => e.name) : [];
408
+ const mindNames = [.../* @__PURE__ */ new Set([...listed, ...fromState])].sort();
409
+ for (const name of mindNames) {
410
+ const mindEnv = resolve(stateDir(name), "env.json");
411
+ if (existsSync(mindEnv)) {
412
+ write(`minds/${name}/env.json`, redactEnvJson(readFileSync(mindEnv, "utf-8")));
413
+ }
414
+ const mindLog = resolve(stateDir(name), "logs", "mind.log");
415
+ const tail = readLogTail(mindLog, 200);
416
+ if (tail.length > 0) write(`minds/${name}/mind.log`, redactLogText(`${tail.join("\n")}
417
+ `));
418
+ }
419
+ const outPath = resolve(process.cwd(), `volute-doctor-${stamp}.tar.gz`);
420
+ try {
421
+ await exec("tar", ["-czf", outPath, "-C", stage, `volute-doctor-${stamp}`]);
422
+ } finally {
423
+ rmSync(stage, { recursive: true, force: true });
424
+ }
425
+ return outPath;
426
+ }
427
+ var cmd = command({
428
+ name: "volute doctor",
429
+ description: "Diagnose the local Volute install; --bundle writes a sanitized report to attach to a bug report",
430
+ flags: {
431
+ bundle: {
432
+ type: "boolean",
433
+ description: "Write a redacted diagnostic tarball to the current directory"
434
+ }
435
+ },
436
+ examples: ["volute doctor", "volute doctor --bundle"],
437
+ async run({ flags }) {
438
+ const { checks, daemonMinds } = await runDiagnostics();
439
+ const report = renderReport(checks);
440
+ if (!flags.bundle) {
441
+ process.stdout.write(report);
442
+ return;
443
+ }
444
+ process.stdout.write(report);
445
+ const outPath = await writeBundle(report, daemonMinds);
446
+ console.log(`
447
+ Bundle written: ${outPath}`);
448
+ console.log("It redacts secrets, but skim it before sharing.");
449
+ }
450
+ });
451
+ var run = cmd.execute;
452
+ export {
453
+ run
454
+ };
@@ -2,12 +2,12 @@
2
2
  import {
3
3
  run,
4
4
  stopDaemon
5
- } from "./chunk-Z4Q6TQWL.js";
5
+ } from "./chunk-LRRPKZBD.js";
6
6
  import "./chunk-TXSA4Q3V.js";
7
7
  import "./chunk-O7IGP7ZW.js";
8
- import "./chunk-CKPAVQNK.js";
9
- import "./chunk-OIOW3FPT.js";
10
- import "./chunk-H6X6CKDN.js";
8
+ import "./chunk-OPTA3BJ4.js";
9
+ import "./chunk-NA2NJXY4.js";
10
+ import "./chunk-TAVIVN2I.js";
11
11
  import "./chunk-2RNMBXD2.js";
12
12
  import "./chunk-K3NQKI34.js";
13
13
  export {
@@ -0,0 +1,40 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ clearEchoTextCache,
4
+ echoTextToChannel
5
+ } from "./chunk-EYFBT2KP.js";
6
+ import "./chunk-2QLWAYIU.js";
7
+ import "./chunk-ELQU2GBT.js";
8
+ import "./chunk-GAAATVTM.js";
9
+ import "./chunk-P3GXOT2X.js";
10
+ import "./chunk-2B4E6SL7.js";
11
+ import "./chunk-IABDYN4N.js";
12
+ import "./chunk-IOMBP2T5.js";
13
+ import "./chunk-PAO7JZNW.js";
14
+ import "./chunk-TGYKFUCF.js";
15
+ import "./chunk-CLH357FI.js";
16
+ import "./chunk-Q5M5QFKY.js";
17
+ import "./chunk-UMQP5TC5.js";
18
+ import "./chunk-WTZD6LFW.js";
19
+ import "./chunk-DW4TRDOZ.js";
20
+ import "./chunk-WCFSBH33.js";
21
+ import "./chunk-IQROTVBG.js";
22
+ import "./chunk-I3OJ342S.js";
23
+ import "./chunk-FYMIGUJ5.js";
24
+ import "./chunk-6LICEQGP.js";
25
+ import "./chunk-MNKPAAQF.js";
26
+ import "./chunk-CVPCRWWC.js";
27
+ import "./chunk-IRNM4LSF.js";
28
+ import "./chunk-OPTA3BJ4.js";
29
+ import "./chunk-NA2NJXY4.js";
30
+ import "./chunk-OHHS5PSI.js";
31
+ import "./chunk-E2SN3ZOJ.js";
32
+ import "./chunk-2674KIGI.js";
33
+ import "./chunk-LGNUFVMR.js";
34
+ import "./chunk-TAVIVN2I.js";
35
+ import "./chunk-2RNMBXD2.js";
36
+ import "./chunk-K3NQKI34.js";
37
+ export {
38
+ clearEchoTextCache,
39
+ echoTextToChannel
40
+ };
@@ -5,8 +5,8 @@ import {
5
5
  readEnv,
6
6
  sharedEnvPath,
7
7
  writeEnv
8
- } from "./chunk-GLM7TVWP.js";
9
- import "./chunk-H6X6CKDN.js";
8
+ } from "./chunk-OHHS5PSI.js";
9
+ import "./chunk-TAVIVN2I.js";
10
10
  import "./chunk-2RNMBXD2.js";
11
11
  import "./chunk-K3NQKI34.js";
12
12
  export {
@@ -4,8 +4,8 @@ import {
4
4
  execInherit,
5
5
  gitExec,
6
6
  resolveVoluteBin
7
- } from "./chunk-OIOW3FPT.js";
8
- import "./chunk-H6X6CKDN.js";
7
+ } from "./chunk-NA2NJXY4.js";
8
+ import "./chunk-TAVIVN2I.js";
9
9
  import "./chunk-2RNMBXD2.js";
10
10
  import "./chunk-K3NQKI34.js";
11
11
  export {
@@ -6,11 +6,11 @@ import "./chunk-O7IGP7ZW.js";
6
6
  import {
7
7
  addHistoryToArchive,
8
8
  createExportArchive
9
- } from "./chunk-FLIEXG2T.js";
9
+ } from "./chunk-XZP3FJ7Q.js";
10
10
  import {
11
11
  findMind,
12
12
  mindDir
13
- } from "./chunk-H6X6CKDN.js";
13
+ } from "./chunk-TAVIVN2I.js";
14
14
  import "./chunk-2RNMBXD2.js";
15
15
  import "./chunk-K3NQKI34.js";
16
16