abtars 0.2.1-alpha.8 → 0.2.1

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 (257) hide show
  1. package/README.md +98 -42
  2. package/bundle/{_registry.generated-ADOYFJJ4.js → _registry.generated-FNJOX7VV.js} +19 -16
  3. package/bundle/{_registry.generated-ADOYFJJ4.js.map → _registry.generated-FNJOX7VV.js.map} +1 -1
  4. package/bundle/abtars-browser.js +5 -6
  5. package/bundle/abtars-browser.js.map +2 -2
  6. package/bundle/abtars-cli.js +339 -271
  7. package/bundle/abtars-cli.js.map +4 -4
  8. package/bundle/abtars-restart.js +4 -4
  9. package/bundle/abtars-rss.js +25 -81
  10. package/bundle/abtars-rss.js.map +2 -2
  11. package/bundle/abtars-task.js +4 -5
  12. package/bundle/abtars-task.js.map +2 -2
  13. package/bundle/abtars-todo.js +133 -0
  14. package/bundle/abtars-todo.js.map +7 -0
  15. package/bundle/abtars.js +239 -155
  16. package/bundle/abtars.js.map +3 -3
  17. package/bundle/action-gate-DYV2XQBP.js +191 -0
  18. package/bundle/action-gate-DYV2XQBP.js.map +7 -0
  19. package/bundle/{agent-api-rate-limit-C25WGSFF.js → agent-api-rate-limit-R2OFAQ3N.js} +4 -4
  20. package/bundle/{agent-registry-SYUFNSVB.js → agent-registry-S2MNHQYQ.js} +8 -8
  21. package/bundle/{bridge-lock-transport-HO545SBK.js → bridge-lock-transport-N6OGDOSE.js} +5 -5
  22. package/bundle/{browse-delivery-VTLEAVYA.js → browse-delivery-DXGMDMXA.js} +8 -7
  23. package/bundle/{browser-REIXOJ6S.js → browser-QMYGSP5W.js} +11 -10
  24. package/bundle/{capability-ILW3D5HS.js → capability-733TLH4W.js} +6 -6
  25. package/bundle/{chunk-ZVDVNSXK.js → chunk-2SWKJX64.js} +7 -7
  26. package/bundle/{chunk-PZE3J7ER.js → chunk-3OXQWII3.js} +2 -2
  27. package/bundle/{chunk-R36WIOYX.js → chunk-3X6VGRL6.js} +33 -6
  28. package/bundle/chunk-3X6VGRL6.js.map +7 -0
  29. package/bundle/{chunk-4KJ76TTE.js → chunk-4XW7YA3K.js} +3 -3
  30. package/bundle/{chunk-Q62SXS73.js → chunk-BBDKU4EH.js} +9 -9
  31. package/bundle/{chunk-EX2SRTUE.js → chunk-CYSGXNBY.js} +2 -2
  32. package/bundle/{chunk-LYEAHE5V.js → chunk-DCY7DGMT.js} +2 -2
  33. package/bundle/chunk-DGS7J4P6.js +13 -0
  34. package/bundle/chunk-DGS7J4P6.js.map +7 -0
  35. package/bundle/{chunk-LDKSCXGL.js → chunk-DHPFI7OF.js} +8 -6
  36. package/bundle/{chunk-LDKSCXGL.js.map → chunk-DHPFI7OF.js.map} +1 -1
  37. package/bundle/{chunk-G6IXMYIO.js → chunk-DO4INSXE.js} +2 -2
  38. package/bundle/{chunk-VA5WKN3Z.js → chunk-EGA6JQVV.js} +4 -4
  39. package/bundle/chunk-EKHNWFEQ.js +85 -0
  40. package/bundle/chunk-EKHNWFEQ.js.map +7 -0
  41. package/bundle/{chunk-URAQLQ2U.js → chunk-F3HMZFIL.js} +4 -4
  42. package/bundle/{chunk-OOKLEC6V.js → chunk-FY3QUO2L.js} +7 -7
  43. package/bundle/{chunk-2BY6I4P5.js → chunk-GUTRAMK3.js} +2 -2
  44. package/bundle/{chunk-GPL57SRN.js → chunk-H7RX7UCR.js} +3 -3
  45. package/bundle/{chunk-BYDUMHXT.js → chunk-HAF2AFBW.js} +2 -2
  46. package/bundle/{chunk-A5OJYQNU.js → chunk-HCYENZAB.js} +49 -22
  47. package/bundle/chunk-HCYENZAB.js.map +7 -0
  48. package/bundle/{chunk-OZ4IZFV4.js → chunk-HJQZP5CK.js} +9 -9
  49. package/bundle/{chunk-OZ4IZFV4.js.map → chunk-HJQZP5CK.js.map} +2 -2
  50. package/bundle/{chunk-HEHD3GG5.js → chunk-ITB2K6LI.js} +6 -13
  51. package/bundle/{chunk-HEHD3GG5.js.map → chunk-ITB2K6LI.js.map} +3 -3
  52. package/bundle/{chunk-KSEIWT4T.js → chunk-JFKOPNKL.js} +10 -10
  53. package/bundle/chunk-JFKOPNKL.js.map +7 -0
  54. package/bundle/{chunk-4BUOO6WI.js → chunk-KL5QRHHK.js} +31 -11
  55. package/bundle/chunk-KL5QRHHK.js.map +7 -0
  56. package/bundle/{chunk-KFENC7BM.js → chunk-L33WNMCP.js} +2 -2
  57. package/bundle/{chunk-JRG4EFMP.js → chunk-LBMETTUP.js} +3 -3
  58. package/bundle/{chunk-TYVI3ZWA.js → chunk-LJAG2URA.js} +10 -7
  59. package/bundle/chunk-LJAG2URA.js.map +7 -0
  60. package/bundle/{chunk-RV54J75Q.js → chunk-MHK4UPM6.js} +13 -12
  61. package/bundle/chunk-MHK4UPM6.js.map +7 -0
  62. package/bundle/chunk-NIYVCGBC.js +330 -0
  63. package/bundle/chunk-NIYVCGBC.js.map +7 -0
  64. package/bundle/{chunk-P2BZSLJJ.js → chunk-OGZXYN6E.js} +392 -125
  65. package/bundle/chunk-OGZXYN6E.js.map +7 -0
  66. package/bundle/{chunk-TOUZC6NR.js → chunk-OKMN6J4Z.js} +3 -3
  67. package/bundle/{chunk-CELR236Q.js → chunk-Q7CH5DA3.js} +2 -2
  68. package/bundle/{chunk-XZSYMCLF.js → chunk-QIAFGDRL.js} +7 -7
  69. package/bundle/chunk-RITEGAW6.js +138 -0
  70. package/bundle/chunk-RITEGAW6.js.map +7 -0
  71. package/bundle/{chunk-UDZIZB5F.js → chunk-RTL7HO3N.js} +3 -3
  72. package/bundle/{chunk-ITG6XGBS.js → chunk-SA44ITVX.js} +10 -10
  73. package/bundle/{chunk-3MO2MDXJ.js → chunk-SA6YEFNG.js} +3 -3
  74. package/bundle/{chunk-GBBTK6H2.js → chunk-SRFEIZQT.js} +4 -4
  75. package/bundle/{chunk-ELRAH7VL.js → chunk-VXUVKC66.js} +3 -3
  76. package/bundle/{chunk-X5FBUA53.js → chunk-WLAVZSVZ.js} +69 -30
  77. package/bundle/chunk-WLAVZSVZ.js.map +7 -0
  78. package/bundle/{chunk-RSWUPUNA.js → chunk-WMWI3SJ7.js} +30 -6
  79. package/bundle/chunk-WMWI3SJ7.js.map +7 -0
  80. package/bundle/{chunk-MJ6PHMOK.js → chunk-WW5F2DCO.js} +11 -2
  81. package/bundle/chunk-WW5F2DCO.js.map +7 -0
  82. package/bundle/chunk-YWZPKBO6.js +22 -0
  83. package/bundle/chunk-YWZPKBO6.js.map +7 -0
  84. package/bundle/{chunk-KWBGYWDO.js → chunk-Z4SWEFIY.js} +12 -14
  85. package/bundle/chunk-Z4SWEFIY.js.map +7 -0
  86. package/bundle/chunk-ZAA7B5BN.js +22 -0
  87. package/bundle/chunk-ZAA7B5BN.js.map +7 -0
  88. package/bundle/{commands-WUGPBPHI.js → commands-AXW7L2MZ.js} +15 -14
  89. package/bundle/{config-DQIGDX4W.js → config-NDEYF4AQ.js} +7 -7
  90. package/bundle/{daemon-NPKYZ3CJ.js → daemon-WOQXCKNL.js} +4 -4
  91. package/bundle/{delegation-tools-6FICZQ5G.js → delegation-tools-Z5OM3TXS.js} +5 -5
  92. package/bundle/{deploy-lib-import-SBKXDD3F.js → deploy-lib-import-6VJTYXEG.js} +2 -2
  93. package/bundle/{deps-HN6CEXA4.js → deps-65V7XXG4.js} +4 -4
  94. package/bundle/{direct-api-transport-TRV45NO6.js → direct-api-transport-LSAUIP5S.js} +27 -15
  95. package/bundle/direct-api-transport-LSAUIP5S.js.map +7 -0
  96. package/bundle/{discord-adapter-WA2MFRK3.js → discord-adapter-LNWTIOUK.js} +27 -24
  97. package/bundle/discord-adapter-LNWTIOUK.js.map +7 -0
  98. package/bundle/{dns-wakeup-RYOCQ6GR.js → dns-wakeup-N46RPU5E.js} +3 -3
  99. package/bundle/{doctor-R54GZPKL.js → doctor-PIPSGI3H.js} +18 -7
  100. package/bundle/{doctor-R54GZPKL.js.map → doctor-PIPSGI3H.js.map} +2 -2
  101. package/bundle/{ensure-invariants-BJIEOSJ2.js → ensure-invariants-3NOBCYWS.js} +4 -4
  102. package/bundle/{env-schema-XCPAJ6IZ.js → env-schema-T43X43BU.js} +4 -4
  103. package/bundle/{hook-system-POI5VRIX.js → hook-system-ZCVOFFRD.js} +4 -4
  104. package/bundle/hotskills-DTROJY6G.js +17 -0
  105. package/bundle/{install-GEXWJYJC.js → install-FZT43PTH.js} +3 -3
  106. package/bundle/{install-manifest-QRWID3KZ.js → install-manifest-KBYD7SAY.js} +3 -3
  107. package/bundle/{irc-adapter-AIEP6OX6.js → irc-adapter-HXO5D4SW.js} +3 -3
  108. package/bundle/{irc-config-6VY67UPQ.js → irc-config-XN5VW2V4.js} +5 -5
  109. package/bundle/{lazy-require-UFYFFX2R.js → lazy-require-R3JYCV5M.js} +4 -4
  110. package/bundle/{media-utils-MOE36VWY.js → media-utils-W7XW3SVV.js} +4 -4
  111. package/bundle/{message-pipeline-2MBT44FO.js → message-pipeline-QX272U5X.js} +17 -14
  112. package/bundle/meta.json +2965 -2294
  113. package/bundle/{notification-U6F5ZBSG.js → notification-ULESRDHB.js} +7 -6
  114. package/bundle/{openrouter-credits-7XXO6QGQ.js → openrouter-credits-PLIKRY5D.js} +4 -4
  115. package/bundle/{paths-ZJYIDND2.js → paths-QQM74XYT.js} +4 -2
  116. package/bundle/{peer-client-T44VI7NB.js → peer-client-D2F5QWRV.js} +8 -8
  117. package/bundle/{peer-config-D5A4454H.js → peer-config-5SUIBJLG.js} +5 -5
  118. package/bundle/{phase-transport-FEZ4SIJJ.js → phase-transport-BSGROTHY.js} +10 -10
  119. package/bundle/restore-Z6MF54HS.js +151 -0
  120. package/bundle/restore-Z6MF54HS.js.map +7 -0
  121. package/bundle/{install-SH4UVUXQ.js → rollback-5RXXLUD6.js} +5 -7
  122. package/bundle/{self-healer-utils-7NFH22VJ.js → self-healer-utils-WPKOVXJD.js} +4 -4
  123. package/bundle/{skill-stats-IPVKMWN3.js → skill-stats-NHNH47QW.js} +5 -5
  124. package/bundle/{sleep-BPWX3FCN.js → sleep-K7EXAFGW.js} +8 -8
  125. package/bundle/{soul-bundle-BRIUDEQ2.js → soul-bundle-QTPWDJB2.js} +7 -7
  126. package/bundle/{soul-loader-GBXJ7EBH.js → soul-loader-LCPTN4PK.js} +8 -8
  127. package/bundle/{sse-parser-anthropic-H42TTLBD.js → sse-parser-anthropic-PYDJM3UC.js} +4 -4
  128. package/bundle/{sse-parser-responses-WG2LY2ML.js → sse-parser-responses-FYT7A5WT.js} +4 -4
  129. package/bundle/{ssrf-guard-E2KBBC5E.js → ssrf-guard-R4P5OCTO.js} +4 -4
  130. package/bundle/{start-CBVKNEAT.js → start-4DNURGIY.js} +1 -1
  131. package/bundle/{stt-CF3CPFDC.js → stt-YN77NND6.js} +5 -5
  132. package/bundle/{subagent-runtime-4MTYUBIZ.js → subagent-runtime-FQAT3564.js} +5 -5
  133. package/bundle/system-event-buffer-OEPPNUGK.js +17 -0
  134. package/bundle/system-event-buffer-OEPPNUGK.js.map +7 -0
  135. package/bundle/{system-message-TALP6GP2.js → system-message-BRU267FW.js} +3 -3
  136. package/bundle/{system-status-GLYXXDE3.js → system-status-7K2QTH3J.js} +58 -51
  137. package/bundle/system-status-7K2QTH3J.js.map +7 -0
  138. package/bundle/{hotskills-6ECHLXTJ.js → task-failure-buffer-DPM5MWZ5.js} +8 -7
  139. package/bundle/{task-store-LC7ZMS72.js → task-store-VCBHAB43.js} +5 -5
  140. package/bundle/{telegram-adapter-BJJYXN7J.js → telegram-adapter-LXLSG4SK.js} +51 -33
  141. package/bundle/telegram-adapter-LXLSG4SK.js.map +7 -0
  142. package/bundle/{tool-registry-T7XLTI2Q.js → tool-registry-5PXNSYOI.js} +12 -9
  143. package/bundle/{tool-sandbox-OZMXJZLQ.js → tool-sandbox-TLAL55QP.js} +5 -5
  144. package/bundle/{transport-config-G5NKQXPJ.js → transport-config-JIKHB7GT.js} +8 -8
  145. package/bundle/update-check-AJMIBQGQ.js +81 -0
  146. package/bundle/update-check-AJMIBQGQ.js.map +7 -0
  147. package/bundle/{user-registry-NUVNEHJU.js → user-registry-PEFDZ5AV.js} +5 -5
  148. package/core/skills/tools/rss/SKILL.md +51 -0
  149. package/install-manifest.json +4 -2
  150. package/package.json +4 -4
  151. package/scripts/build-and-deploy.sh +28 -0
  152. package/scripts/daily-backup.sh +1 -79
  153. package/scripts/doctor.sh +38 -0
  154. package/scripts/emergency-deploy.sh +95 -0
  155. package/scripts/watchdog.sh +51 -5
  156. package/bundle/chunk-4BUOO6WI.js.map +0 -7
  157. package/bundle/chunk-A5OJYQNU.js.map +0 -7
  158. package/bundle/chunk-JX3ZZU3O.js +0 -82
  159. package/bundle/chunk-JX3ZZU3O.js.map +0 -7
  160. package/bundle/chunk-KJOCXWJ5.js +0 -131
  161. package/bundle/chunk-KJOCXWJ5.js.map +0 -7
  162. package/bundle/chunk-KSEIWT4T.js.map +0 -7
  163. package/bundle/chunk-KWBGYWDO.js.map +0 -7
  164. package/bundle/chunk-MJ6PHMOK.js.map +0 -7
  165. package/bundle/chunk-P2BZSLJJ.js.map +0 -7
  166. package/bundle/chunk-R36WIOYX.js.map +0 -7
  167. package/bundle/chunk-RE3F3CFW.js +0 -300
  168. package/bundle/chunk-RE3F3CFW.js.map +0 -7
  169. package/bundle/chunk-RJJWPMUZ.js +0 -411
  170. package/bundle/chunk-RJJWPMUZ.js.map +0 -7
  171. package/bundle/chunk-RSWUPUNA.js.map +0 -7
  172. package/bundle/chunk-RV54J75Q.js.map +0 -7
  173. package/bundle/chunk-RVERPUHT.js +0 -289
  174. package/bundle/chunk-RVERPUHT.js.map +0 -7
  175. package/bundle/chunk-TYVI3ZWA.js.map +0 -7
  176. package/bundle/chunk-X5FBUA53.js.map +0 -7
  177. package/bundle/deploy-lib-import-HCMZCKZD.js +0 -50
  178. package/bundle/direct-api-transport-TRV45NO6.js.map +0 -7
  179. package/bundle/discord-adapter-WA2MFRK3.js.map +0 -7
  180. package/bundle/restore-ROJF22R2.js +0 -47
  181. package/bundle/restore-ROJF22R2.js.map +0 -7
  182. package/bundle/system-status-GLYXXDE3.js.map +0 -7
  183. package/bundle/telegram-adapter-BJJYXN7J.js.map +0 -7
  184. package/bundle/update-check-O5MS6B3L.js +0 -13
  185. package/bundle/user-registry-NUVNEHJU.js.map +0 -7
  186. /package/bundle/{agent-api-rate-limit-C25WGSFF.js.map → agent-api-rate-limit-R2OFAQ3N.js.map} +0 -0
  187. /package/bundle/{agent-registry-SYUFNSVB.js.map → agent-registry-S2MNHQYQ.js.map} +0 -0
  188. /package/bundle/{bridge-lock-transport-HO545SBK.js.map → bridge-lock-transport-N6OGDOSE.js.map} +0 -0
  189. /package/bundle/{browse-delivery-VTLEAVYA.js.map → browse-delivery-DXGMDMXA.js.map} +0 -0
  190. /package/bundle/{browser-REIXOJ6S.js.map → browser-QMYGSP5W.js.map} +0 -0
  191. /package/bundle/{capability-ILW3D5HS.js.map → capability-733TLH4W.js.map} +0 -0
  192. /package/bundle/{chunk-ZVDVNSXK.js.map → chunk-2SWKJX64.js.map} +0 -0
  193. /package/bundle/{chunk-PZE3J7ER.js.map → chunk-3OXQWII3.js.map} +0 -0
  194. /package/bundle/{chunk-4KJ76TTE.js.map → chunk-4XW7YA3K.js.map} +0 -0
  195. /package/bundle/{chunk-Q62SXS73.js.map → chunk-BBDKU4EH.js.map} +0 -0
  196. /package/bundle/{chunk-EX2SRTUE.js.map → chunk-CYSGXNBY.js.map} +0 -0
  197. /package/bundle/{chunk-LYEAHE5V.js.map → chunk-DCY7DGMT.js.map} +0 -0
  198. /package/bundle/{chunk-G6IXMYIO.js.map → chunk-DO4INSXE.js.map} +0 -0
  199. /package/bundle/{chunk-VA5WKN3Z.js.map → chunk-EGA6JQVV.js.map} +0 -0
  200. /package/bundle/{chunk-URAQLQ2U.js.map → chunk-F3HMZFIL.js.map} +0 -0
  201. /package/bundle/{chunk-OOKLEC6V.js.map → chunk-FY3QUO2L.js.map} +0 -0
  202. /package/bundle/{chunk-2BY6I4P5.js.map → chunk-GUTRAMK3.js.map} +0 -0
  203. /package/bundle/{chunk-GPL57SRN.js.map → chunk-H7RX7UCR.js.map} +0 -0
  204. /package/bundle/{chunk-BYDUMHXT.js.map → chunk-HAF2AFBW.js.map} +0 -0
  205. /package/bundle/{chunk-KFENC7BM.js.map → chunk-L33WNMCP.js.map} +0 -0
  206. /package/bundle/{chunk-JRG4EFMP.js.map → chunk-LBMETTUP.js.map} +0 -0
  207. /package/bundle/{chunk-TOUZC6NR.js.map → chunk-OKMN6J4Z.js.map} +0 -0
  208. /package/bundle/{chunk-CELR236Q.js.map → chunk-Q7CH5DA3.js.map} +0 -0
  209. /package/bundle/{chunk-XZSYMCLF.js.map → chunk-QIAFGDRL.js.map} +0 -0
  210. /package/bundle/{chunk-UDZIZB5F.js.map → chunk-RTL7HO3N.js.map} +0 -0
  211. /package/bundle/{chunk-ITG6XGBS.js.map → chunk-SA44ITVX.js.map} +0 -0
  212. /package/bundle/{chunk-3MO2MDXJ.js.map → chunk-SA6YEFNG.js.map} +0 -0
  213. /package/bundle/{chunk-GBBTK6H2.js.map → chunk-SRFEIZQT.js.map} +0 -0
  214. /package/bundle/{chunk-ELRAH7VL.js.map → chunk-VXUVKC66.js.map} +0 -0
  215. /package/bundle/{commands-WUGPBPHI.js.map → commands-AXW7L2MZ.js.map} +0 -0
  216. /package/bundle/{config-DQIGDX4W.js.map → config-NDEYF4AQ.js.map} +0 -0
  217. /package/bundle/{daemon-NPKYZ3CJ.js.map → daemon-WOQXCKNL.js.map} +0 -0
  218. /package/bundle/{delegation-tools-6FICZQ5G.js.map → delegation-tools-Z5OM3TXS.js.map} +0 -0
  219. /package/bundle/{deploy-lib-import-HCMZCKZD.js.map → deploy-lib-import-6VJTYXEG.js.map} +0 -0
  220. /package/bundle/{deps-HN6CEXA4.js.map → deps-65V7XXG4.js.map} +0 -0
  221. /package/bundle/{dns-wakeup-RYOCQ6GR.js.map → dns-wakeup-N46RPU5E.js.map} +0 -0
  222. /package/bundle/{ensure-invariants-BJIEOSJ2.js.map → ensure-invariants-3NOBCYWS.js.map} +0 -0
  223. /package/bundle/{deploy-lib-import-SBKXDD3F.js.map → env-schema-T43X43BU.js.map} +0 -0
  224. /package/bundle/{env-schema-XCPAJ6IZ.js.map → hook-system-ZCVOFFRD.js.map} +0 -0
  225. /package/bundle/{hook-system-POI5VRIX.js.map → hotskills-DTROJY6G.js.map} +0 -0
  226. /package/bundle/{hotskills-6ECHLXTJ.js.map → install-FZT43PTH.js.map} +0 -0
  227. /package/bundle/{install-manifest-QRWID3KZ.js.map → install-manifest-KBYD7SAY.js.map} +0 -0
  228. /package/bundle/{irc-adapter-AIEP6OX6.js.map → irc-adapter-HXO5D4SW.js.map} +0 -0
  229. /package/bundle/{irc-config-6VY67UPQ.js.map → irc-config-XN5VW2V4.js.map} +0 -0
  230. /package/bundle/{install-GEXWJYJC.js.map → lazy-require-R3JYCV5M.js.map} +0 -0
  231. /package/bundle/{media-utils-MOE36VWY.js.map → media-utils-W7XW3SVV.js.map} +0 -0
  232. /package/bundle/{install-SH4UVUXQ.js.map → message-pipeline-QX272U5X.js.map} +0 -0
  233. /package/bundle/{lazy-require-UFYFFX2R.js.map → notification-ULESRDHB.js.map} +0 -0
  234. /package/bundle/{openrouter-credits-7XXO6QGQ.js.map → openrouter-credits-PLIKRY5D.js.map} +0 -0
  235. /package/bundle/{message-pipeline-2MBT44FO.js.map → paths-QQM74XYT.js.map} +0 -0
  236. /package/bundle/{peer-client-T44VI7NB.js.map → peer-client-D2F5QWRV.js.map} +0 -0
  237. /package/bundle/{notification-U6F5ZBSG.js.map → peer-config-5SUIBJLG.js.map} +0 -0
  238. /package/bundle/{paths-ZJYIDND2.js.map → phase-transport-BSGROTHY.js.map} +0 -0
  239. /package/bundle/{peer-config-D5A4454H.js.map → rollback-5RXXLUD6.js.map} +0 -0
  240. /package/bundle/{self-healer-utils-7NFH22VJ.js.map → self-healer-utils-WPKOVXJD.js.map} +0 -0
  241. /package/bundle/{phase-transport-FEZ4SIJJ.js.map → skill-stats-NHNH47QW.js.map} +0 -0
  242. /package/bundle/{skill-stats-IPVKMWN3.js.map → sleep-K7EXAFGW.js.map} +0 -0
  243. /package/bundle/{sleep-BPWX3FCN.js.map → soul-bundle-QTPWDJB2.js.map} +0 -0
  244. /package/bundle/{soul-bundle-BRIUDEQ2.js.map → soul-loader-LCPTN4PK.js.map} +0 -0
  245. /package/bundle/{sse-parser-anthropic-H42TTLBD.js.map → sse-parser-anthropic-PYDJM3UC.js.map} +0 -0
  246. /package/bundle/{sse-parser-responses-WG2LY2ML.js.map → sse-parser-responses-FYT7A5WT.js.map} +0 -0
  247. /package/bundle/{ssrf-guard-E2KBBC5E.js.map → ssrf-guard-R4P5OCTO.js.map} +0 -0
  248. /package/bundle/{start-CBVKNEAT.js.map → start-4DNURGIY.js.map} +0 -0
  249. /package/bundle/{soul-loader-GBXJ7EBH.js.map → stt-YN77NND6.js.map} +0 -0
  250. /package/bundle/{stt-CF3CPFDC.js.map → subagent-runtime-FQAT3564.js.map} +0 -0
  251. /package/bundle/{system-message-TALP6GP2.js.map → system-message-BRU267FW.js.map} +0 -0
  252. /package/bundle/{subagent-runtime-4MTYUBIZ.js.map → task-failure-buffer-DPM5MWZ5.js.map} +0 -0
  253. /package/bundle/{task-store-LC7ZMS72.js.map → task-store-VCBHAB43.js.map} +0 -0
  254. /package/bundle/{tool-registry-T7XLTI2Q.js.map → tool-registry-5PXNSYOI.js.map} +0 -0
  255. /package/bundle/{tool-sandbox-OZMXJZLQ.js.map → tool-sandbox-TLAL55QP.js.map} +0 -0
  256. /package/bundle/{transport-config-G5NKQXPJ.js.map → transport-config-JIKHB7GT.js.map} +0 -0
  257. /package/bundle/{update-check-O5MS6B3L.js.map → user-registry-PEFDZ5AV.js.map} +0 -0
@@ -3,12 +3,12 @@
3
3
  import {
4
4
  init_log_and_swallow,
5
5
  logAndSwallow
6
- } from "./chunk-EX2SRTUE.js";
6
+ } from "./chunk-CYSGXNBY.js";
7
7
  import {
8
8
  init_logger,
9
9
  logInfo
10
- } from "./chunk-2BY6I4P5.js";
11
- import "./chunk-MJ6PHMOK.js";
10
+ } from "./chunk-GUTRAMK3.js";
11
+ import "./chunk-WW5F2DCO.js";
12
12
  import "./chunk-7K2YZTLD.js";
13
13
 
14
14
  // src/components/doctor/index.ts
@@ -108,7 +108,7 @@ var probeTlsIdentity = async (_ctx) => {
108
108
  const { existsSync } = await import("node:fs");
109
109
  const { execSync } = await import("node:child_process");
110
110
  const { join } = await import("node:path");
111
- const { abtarsHome } = await import("./paths-ZJYIDND2.js");
111
+ const { abtarsHome } = await import("./paths-QQM74XYT.js");
112
112
  const start = Date.now();
113
113
  const issues = [];
114
114
  try {
@@ -125,7 +125,7 @@ var probeTlsIdentity = async (_ctx) => {
125
125
  var probeSecretPerms = async (_ctx) => {
126
126
  const { readdirSync, statSync } = await import("node:fs");
127
127
  const { join } = await import("node:path");
128
- const { abtarsHome } = await import("./paths-ZJYIDND2.js");
128
+ const { abtarsHome } = await import("./paths-QQM74XYT.js");
129
129
  const start = Date.now();
130
130
  const secretDir = join(abtarsHome(), "secret");
131
131
  let files;
@@ -171,11 +171,22 @@ var probeFtsIntegrity = async (_ctx) => {
171
171
  return { name: "fts-integrity", status: "failed", latencyMs: Date.now() - start, detail: err instanceof Error ? err.message : String(err) };
172
172
  }
173
173
  };
174
+ var probeAbmindCli = async (_ctx) => {
175
+ const { spawnSync } = await import("node:child_process");
176
+ const start = Date.now();
177
+ const result = spawnSync("abmind", ["--version"], { encoding: "utf-8", timeout: 3e3 });
178
+ if (result.status === 0) {
179
+ const ver = result.stdout?.trim() || "ok";
180
+ return { name: "abmind-cli", status: "ok", latencyMs: Date.now() - start, detail: `v${ver}` };
181
+ }
182
+ return { name: "abmind-cli", status: "failed", latencyMs: Date.now() - start, detail: "not on PATH \u2014 run: npm install -g abmind" };
183
+ };
174
184
  var PROBES = [
175
185
  { fn: probeCoreFiles, timeout: 1e3 },
176
186
  { fn: probeFtsIntegrity, timeout: 3e3 },
177
187
  { fn: probeSecretPerms, timeout: 1e3 },
178
188
  { fn: probeTlsIdentity, timeout: 2e3 },
189
+ { fn: probeAbmindCli, timeout: 3e3 },
179
190
  { fn: probeMemory, timeout: 5e3 },
180
191
  { fn: probeTelegram, timeout: 5e3 },
181
192
  { fn: probeDiscord, timeout: 5e3 },
@@ -210,7 +221,7 @@ async function getDoctorReport(ctx, opts) {
210
221
  }
211
222
  const totalMs = Date.now() - start;
212
223
  try {
213
- const { checkForUpdate } = await import("./update-check-O5MS6B3L.js");
224
+ const { checkForUpdate } = await import("./update-check-AJMIBQGQ.js");
214
225
  const { readlinkSync } = await import("node:fs");
215
226
  const { join } = await import("node:path");
216
227
  const { homedir } = await import("node:os");
@@ -246,4 +257,4 @@ export {
246
257
  getDoctorReport,
247
258
  renderDoctorText
248
259
  };
249
- //# sourceMappingURL=doctor-R54GZPKL.js.map
260
+ //# sourceMappingURL=doctor-PIPSGI3H.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/components/doctor/index.ts"],
4
- "sourcesContent": ["/**\n * doctor \u2014 deep runtime healthcheck. Probes every subsystem in parallel.\n * Shared cache (60s) prevents token-burning spam.\n */\n\nimport { logInfo } from \"../logger.js\";\nimport { logAndSwallow } from \"../log-and-swallow.js\";\n\nconst TAG = \"doctor\";\n\nexport interface ProbeResult {\n name: string;\n status: \"ok\" | \"failed\" | \"skipped\";\n latencyMs: number;\n detail?: string;\n}\n\nexport interface DoctorReport {\n results: ProbeResult[];\n totalMs: number;\n cached: boolean;\n cacheAgeMs?: number;\n}\n\nexport interface DoctorCtx {\n memory?: { getStats: () => any; getCronInfo: () => any } | null;\n transport?: { sendPrompt: (key: string, msg: string) => Promise<string> } | null;\n telegramRunning?: boolean;\n discordRunning?: boolean;\n config?: { webPort?: number } | null;\n phaseHealth?: Map<string, { status: \"ok\" | \"failed\" | \"skipped\"; error?: string }>;\n}\n\ntype ProbeFn = (ctx: DoctorCtx) => Promise<ProbeResult>;\n\nfunction withTimeout(probe: ProbeFn, timeoutMs: number): ProbeFn {\n return async (ctx) => {\n const start = Date.now();\n try {\n const result = await Promise.race([\n probe(ctx),\n new Promise<ProbeResult>((_, reject) => setTimeout(() => reject(new Error(\"timeout\")), timeoutMs)),\n ]);\n return result;\n } catch (err) {\n return { name: \"unknown\", status: \"failed\", latencyMs: Date.now() - start, detail: `timeout after ${timeoutMs}ms` };\n }\n };\n}\n\n// \u2500\u2500 Probes \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst probeMemory: ProbeFn = async (ctx) => {\n const start = Date.now();\n if (!ctx.memory) return { name: \"memory\", status: \"skipped\", latencyMs: 0, detail: \"not configured\" };\n try {\n ctx.memory.getStats();\n return { name: \"memory\", status: \"ok\", latencyMs: Date.now() - start };\n } catch (err) {\n return { name: \"memory\", status: \"failed\", latencyMs: Date.now() - start, detail: String(err) };\n }\n};\n\nconst probeTelegram: ProbeFn = async (ctx) => {\n const start = Date.now();\n if (!ctx.telegramRunning) return { name: \"telegram\", status: \"skipped\", latencyMs: 0, detail: \"not configured\" };\n return { name: \"telegram\", status: \"ok\", latencyMs: Date.now() - start, detail: \"running\" };\n};\n\nconst probeDiscord: ProbeFn = async (ctx) => {\n const start = Date.now();\n if (!ctx.discordRunning) return { name: \"discord\", status: \"skipped\", latencyMs: 0, detail: \"not configured\" };\n return { name: \"discord\", status: \"ok\", latencyMs: Date.now() - start, detail: \"running\" };\n};\n\nconst probeHeartbeat: ProbeFn = async (ctx) => {\n const start = Date.now();\n if (!ctx.memory || typeof ctx.memory.getCronInfo !== \"function\") return { name: \"heartbeat\", status: \"skipped\", latencyMs: 0 };\n try {\n const info = ctx.memory.getCronInfo();\n const running = info.heartbeatRunning;\n return { name: \"heartbeat\", status: running ? \"ok\" : \"failed\", latencyMs: Date.now() - start, detail: running ? `interval ${info.intervalMs}ms` : \"not running\" };\n } catch (err) {\n logAndSwallow(TAG, \"probe heartbeat\", err);\n return { name: \"heartbeat\", status: \"failed\", latencyMs: Date.now() - start };\n }\n};\n\nconst probeTransport: ProbeFn = async (ctx) => {\n const start = Date.now();\n if (!ctx.transport) return { name: \"transport\", status: \"skipped\", latencyMs: 0, detail: \"not configured\" };\n try {\n await ctx.transport.sendPrompt(\"__doctor_probe__\", \"hi\");\n return { name: \"transport\", status: \"ok\", latencyMs: Date.now() - start };\n } catch (err) {\n return { name: \"transport\", status: \"failed\", latencyMs: Date.now() - start, detail: (err as Error).message?.slice(0, 80) };\n }\n};\n\nconst probeDashboard: ProbeFn = async (ctx) => {\n const start = Date.now();\n const port = (ctx as any).config?.webPort ?? 3000;\n try {\n const res = await fetch(`http://localhost:${port}/`, { signal: AbortSignal.timeout(5000) });\n return { name: \"dashboard\", status: res.ok ? \"ok\" : \"failed\", latencyMs: Date.now() - start };\n } catch (err) {\n logAndSwallow(TAG, \"probe dashboard\", err);\n return { name: \"dashboard\", status: \"skipped\", latencyMs: Date.now() - start, detail: \"not running\" };\n }\n};\n\nconst probeOllama: ProbeFn = async (_ctx) => {\n const start = Date.now();\n try {\n const res = await fetch(\"http://localhost:11434/api/tags\", { signal: AbortSignal.timeout(5000) });\n return { name: \"ollama\", status: res.ok ? \"ok\" : \"failed\", latencyMs: Date.now() - start };\n } catch (err) {\n logAndSwallow(TAG, \"probe ollama\", err);\n return { name: \"ollama\", status: \"skipped\", latencyMs: Date.now() - start, detail: \"not reachable\" };\n }\n};\n\nconst probeCoreFiles: ProbeFn = async (_ctx) => {\n const { existsSync } = await import(\"node:fs\");\n const { join } = await import(\"node:path\");\n const { homedir } = await import(\"node:os\");\n const start = Date.now();\n const memDir = process.env[\"ABMIND_MEMORY_DIR\"] || join(homedir(), \".abmind\", \"memory\");\n const abmindCore = join(memDir, \"core\");\n const required = [\"SOUL.md\", \"user_profile.md\", \"agent_notes.md\", \"memory-tools.md\", \"core_facts.md\"];\n const missing = required.filter(f => !existsSync(join(abmindCore, f)));\n if (missing.length === 0) return { name: \"core-files\", status: \"ok\", latencyMs: Date.now() - start };\n return { name: \"core-files\", status: \"failed\", latencyMs: Date.now() - start, detail: `missing: ${missing.join(\", \")}` };\n};\n\nconst probeTlsIdentity: ProbeFn = async (_ctx) => {\n const { existsSync } = await import(\"node:fs\");\n const { execSync } = await import(\"node:child_process\");\n const { join } = await import(\"node:path\");\n const { abtarsHome } = await import(\"../../paths.js\");\n const start = Date.now();\n const issues: string[] = [];\n try { execSync(\"which openssl\", { stdio: \"ignore\" }); } catch { issues.push(\"openssl not found\"); }\n const configDir = join(abtarsHome(), \"config\");\n if (!existsSync(join(configDir, \"identity.crt\"))) issues.push(\"identity.crt missing\");\n if (!existsSync(join(configDir, \"identity.tls.key\"))) issues.push(\"identity.tls.key missing\");\n if (issues.length === 0) return { name: \"tls-identity\", status: \"ok\", latencyMs: Date.now() - start };\n return { name: \"tls-identity\", status: \"failed\", latencyMs: Date.now() - start, detail: issues.join(\", \") };\n};\n\nconst probeSecretPerms: ProbeFn = async (_ctx) => {\n const { readdirSync, statSync } = await import(\"node:fs\");\n const { join } = await import(\"node:path\");\n const { abtarsHome } = await import(\"../../paths.js\");\n const start = Date.now();\n const secretDir = join(abtarsHome(), \"secret\");\n let files: string[];\n try { files = readdirSync(secretDir); } catch (err) { logAndSwallow(TAG, \"readdirSync secret dir\", err); return { name: \"secret-perms\", status: \"skipped\", latencyMs: 0, detail: \"no secret/ dir\" }; }\n const bad: string[] = [];\n for (const f of files) {\n const st = statSync(join(secretDir, f));\n if (!st.isFile()) continue;\n const mode = st.mode & 0o777;\n if (mode !== 0o600) bad.push(`${f} (${mode.toString(8)})`);\n }\n if (bad.length === 0) return { name: \"secret-perms\", status: \"ok\", latencyMs: Date.now() - start, detail: `${files.filter(f => statSync(join(secretDir, f)).isFile()).length} files, all 600` };\n return { name: \"secret-perms\", status: \"failed\", latencyMs: Date.now() - start, detail: `not 600: ${bad.join(\", \")}` };\n};\n\n// \u2500\u2500 Collector \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst probeFtsIntegrity: ProbeFn = async (_ctx) => {\n const { join } = await import(\"node:path\");\n const { homedir } = await import(\"node:os\");\n const { execSync } = await import(\"node:child_process\");\n const start = Date.now();\n try {\n const dbPath = join(process.env[\"ABMIND_MEMORY_DIR\"] || join(homedir(), \".abmind\", \"memory\"), \"memory.db\");\n const tables = [\"extracted_memories_fts\", \"content_en_trigram\", \"content_original_trigram\"];\n const rebuilt: string[] = [];\n for (const t of tables) {\n try {\n execSync(`sqlite3 \"${dbPath}\" \"INSERT INTO ${t}(${t}) VALUES('integrity-check')\"`, { stdio: \"pipe\", timeout: 2000 });\n } catch {\n try {\n execSync(`sqlite3 \"${dbPath}\" \"INSERT INTO ${t}(${t}) VALUES('rebuild')\"`, { stdio: \"pipe\", timeout: 5000 });\n rebuilt.push(t);\n } catch { /* table may not exist */ }\n }\n }\n if (rebuilt.length > 0) return { name: \"fts-integrity\", status: \"ok\", latencyMs: Date.now() - start, detail: `rebuilt: ${rebuilt.join(\", \")}` };\n return { name: \"fts-integrity\", status: \"ok\", latencyMs: Date.now() - start };\n } catch (err) {\n return { name: \"fts-integrity\", status: \"failed\", latencyMs: Date.now() - start, detail: err instanceof Error ? err.message : String(err) };\n }\n};\n\nconst PROBES: Array<{ fn: ProbeFn; timeout: number }> = [\n { fn: probeCoreFiles, timeout: 1000 },\n { fn: probeFtsIntegrity, timeout: 3000 },\n { fn: probeSecretPerms, timeout: 1000 },\n { fn: probeTlsIdentity, timeout: 2000 },\n { fn: probeMemory, timeout: 5000 },\n { fn: probeTelegram, timeout: 5000 },\n { fn: probeDiscord, timeout: 5000 },\n { fn: probeHeartbeat, timeout: 2000 },\n { fn: probeDashboard, timeout: 5000 },\n { fn: probeOllama, timeout: 5000 },\n { fn: probeTransport, timeout: 10000 }, // last \u2014 most expensive\n];\n\nlet lastReport: { report: DoctorReport; generatedAt: number } | null = null;\nconst CACHE_TTL_MS = 60_000;\n\nexport async function getDoctorReport(ctx: DoctorCtx, opts?: { force?: boolean }): Promise<DoctorReport> {\n const now = Date.now();\n if (!opts?.force && lastReport && now - lastReport.generatedAt < CACHE_TTL_MS) {\n return { ...lastReport.report, cached: true, cacheAgeMs: now - lastReport.generatedAt };\n }\n\n const start = Date.now();\n const results = await Promise.all(\n PROBES.map(p => withTimeout(p.fn, p.timeout)(ctx).then(r => {\n // withTimeout may return name=\"unknown\" \u2014 fix it\n if (r.name === \"unknown\") r.name = \"probe\";\n return r;\n }))\n );\n\n // Add boot phases not covered by active probes\n const probedNames = new Set(results.map(r => r.name));\n if (ctx.phaseHealth) {\n for (const [name, h] of ctx.phaseHealth) {\n const short = name.replace(\"phase\", \"\").replace(/([A-Z])/g, \" $1\").trim().toLowerCase();\n if (!probedNames.has(short) && !probedNames.has(short.replace(\" \", \"\"))) {\n results.push({ name: short, status: h.status === \"ok\" ? \"ok\" : h.status === \"skipped\" ? \"skipped\" : \"failed\", latencyMs: 0, detail: h.error ?? (h.status === \"ok\" ? \"boot ok\" : undefined) });\n }\n }\n }\n\n const totalMs = Date.now() - start;\n\n // #440 \u2014 version staleness check\n try {\n const { checkForUpdate } = await import(\"../update-check.js\");\n const { readlinkSync } = await import(\"node:fs\");\n const { join } = await import(\"node:path\");\n const { homedir } = await import(\"node:os\");\n const target = readlinkSync(join(homedir(), \".abtars\", \"current\")).split(\"/\").pop() ?? \"\";\n const dash = target.lastIndexOf(\"-\");\n const version = dash > 0 ? target.slice(0, dash) : \"unknown\";\n const result = checkForUpdate(\"abtars\", version);\n if (result?.updateAvailable) {\n results.push({ name: \"update-available\", status: \"failed\", latencyMs: 0, detail: `update: ${result.current} \u2192 ${result.latest} available` });\n } else if (result) {\n results.push({ name: \"version\", status: \"ok\", latencyMs: 0, detail: `${result.current} (latest)` });\n }\n } catch (err) { logAndSwallow(TAG, \"version check\", err); }\n\n const report: DoctorReport = { results, totalMs, cached: false };\n lastReport = { report, generatedAt: now };\n logInfo(\"doctor\", `Probes complete: ${results.filter(r => r.status === \"ok\").length}/${results.length} ok (${totalMs}ms)`);\n return report;\n}\n\nexport function renderDoctorText(report: DoctorReport): string {\n const icon = (s: ProbeResult[\"status\"]): string => s === \"ok\" ? \"\u2713\" : s === \"failed\" ? \"\u2717\" : \"\u23ED\";\n const lines = report.results.map(r => {\n const detail = r.detail ? ` \u2014 ${r.detail}` : \"\";\n const ms = r.latencyMs > 0 ? ` (${r.latencyMs}ms)` : \"\";\n return ` ${icon(r.status)} ${r.name}${ms}${detail}`;\n });\n const tag = report.cached ? `[cached ${Math.round((report.cacheAgeMs ?? 0) / 1000)}s ago]` : \"[fresh]\";\n return `\uD83E\uDE7A Doctor Report (${(report.totalMs / 1000).toFixed(1)}s) ${tag}\\n${lines.join(\"\\n\")}`;\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * doctor \u2014 deep runtime healthcheck. Probes every subsystem in parallel.\n * Shared cache (60s) prevents token-burning spam.\n */\n\nimport { logInfo } from \"../logger.js\";\nimport { logAndSwallow } from \"../log-and-swallow.js\";\n\nconst TAG = \"doctor\";\n\nexport interface ProbeResult {\n name: string;\n status: \"ok\" | \"failed\" | \"skipped\";\n latencyMs: number;\n detail?: string;\n}\n\nexport interface DoctorReport {\n results: ProbeResult[];\n totalMs: number;\n cached: boolean;\n cacheAgeMs?: number;\n}\n\nexport interface DoctorCtx {\n memory?: { getStats: () => any; getCronInfo: () => any } | null;\n transport?: { sendPrompt: (key: string, msg: string) => Promise<string> } | null;\n telegramRunning?: boolean;\n discordRunning?: boolean;\n config?: { webPort?: number } | null;\n phaseHealth?: Map<string, { status: \"ok\" | \"failed\" | \"skipped\"; error?: string }>;\n}\n\ntype ProbeFn = (ctx: DoctorCtx) => Promise<ProbeResult>;\n\nfunction withTimeout(probe: ProbeFn, timeoutMs: number): ProbeFn {\n return async (ctx) => {\n const start = Date.now();\n try {\n const result = await Promise.race([\n probe(ctx),\n new Promise<ProbeResult>((_, reject) => setTimeout(() => reject(new Error(\"timeout\")), timeoutMs)),\n ]);\n return result;\n } catch (err) {\n return { name: \"unknown\", status: \"failed\", latencyMs: Date.now() - start, detail: `timeout after ${timeoutMs}ms` };\n }\n };\n}\n\n// \u2500\u2500 Probes \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst probeMemory: ProbeFn = async (ctx) => {\n const start = Date.now();\n if (!ctx.memory) return { name: \"memory\", status: \"skipped\", latencyMs: 0, detail: \"not configured\" };\n try {\n ctx.memory.getStats();\n return { name: \"memory\", status: \"ok\", latencyMs: Date.now() - start };\n } catch (err) {\n return { name: \"memory\", status: \"failed\", latencyMs: Date.now() - start, detail: String(err) };\n }\n};\n\nconst probeTelegram: ProbeFn = async (ctx) => {\n const start = Date.now();\n if (!ctx.telegramRunning) return { name: \"telegram\", status: \"skipped\", latencyMs: 0, detail: \"not configured\" };\n return { name: \"telegram\", status: \"ok\", latencyMs: Date.now() - start, detail: \"running\" };\n};\n\nconst probeDiscord: ProbeFn = async (ctx) => {\n const start = Date.now();\n if (!ctx.discordRunning) return { name: \"discord\", status: \"skipped\", latencyMs: 0, detail: \"not configured\" };\n return { name: \"discord\", status: \"ok\", latencyMs: Date.now() - start, detail: \"running\" };\n};\n\nconst probeHeartbeat: ProbeFn = async (ctx) => {\n const start = Date.now();\n if (!ctx.memory || typeof ctx.memory.getCronInfo !== \"function\") return { name: \"heartbeat\", status: \"skipped\", latencyMs: 0 };\n try {\n const info = ctx.memory.getCronInfo();\n const running = info.heartbeatRunning;\n return { name: \"heartbeat\", status: running ? \"ok\" : \"failed\", latencyMs: Date.now() - start, detail: running ? `interval ${info.intervalMs}ms` : \"not running\" };\n } catch (err) {\n logAndSwallow(TAG, \"probe heartbeat\", err);\n return { name: \"heartbeat\", status: \"failed\", latencyMs: Date.now() - start };\n }\n};\n\nconst probeTransport: ProbeFn = async (ctx) => {\n const start = Date.now();\n if (!ctx.transport) return { name: \"transport\", status: \"skipped\", latencyMs: 0, detail: \"not configured\" };\n try {\n await ctx.transport.sendPrompt(\"__doctor_probe__\", \"hi\");\n return { name: \"transport\", status: \"ok\", latencyMs: Date.now() - start };\n } catch (err) {\n return { name: \"transport\", status: \"failed\", latencyMs: Date.now() - start, detail: (err as Error).message?.slice(0, 80) };\n }\n};\n\nconst probeDashboard: ProbeFn = async (ctx) => {\n const start = Date.now();\n const port = (ctx as any).config?.webPort ?? 3000;\n try {\n const res = await fetch(`http://localhost:${port}/`, { signal: AbortSignal.timeout(5000) });\n return { name: \"dashboard\", status: res.ok ? \"ok\" : \"failed\", latencyMs: Date.now() - start };\n } catch (err) {\n logAndSwallow(TAG, \"probe dashboard\", err);\n return { name: \"dashboard\", status: \"skipped\", latencyMs: Date.now() - start, detail: \"not running\" };\n }\n};\n\nconst probeOllama: ProbeFn = async (_ctx) => {\n const start = Date.now();\n try {\n const res = await fetch(\"http://localhost:11434/api/tags\", { signal: AbortSignal.timeout(5000) });\n return { name: \"ollama\", status: res.ok ? \"ok\" : \"failed\", latencyMs: Date.now() - start };\n } catch (err) {\n logAndSwallow(TAG, \"probe ollama\", err);\n return { name: \"ollama\", status: \"skipped\", latencyMs: Date.now() - start, detail: \"not reachable\" };\n }\n};\n\nconst probeCoreFiles: ProbeFn = async (_ctx) => {\n const { existsSync } = await import(\"node:fs\");\n const { join } = await import(\"node:path\");\n const { homedir } = await import(\"node:os\");\n const start = Date.now();\n const memDir = process.env[\"ABMIND_MEMORY_DIR\"] || join(homedir(), \".abmind\", \"memory\");\n const abmindCore = join(memDir, \"core\");\n const required = [\"SOUL.md\", \"user_profile.md\", \"agent_notes.md\", \"memory-tools.md\", \"core_facts.md\"];\n const missing = required.filter(f => !existsSync(join(abmindCore, f)));\n if (missing.length === 0) return { name: \"core-files\", status: \"ok\", latencyMs: Date.now() - start };\n return { name: \"core-files\", status: \"failed\", latencyMs: Date.now() - start, detail: `missing: ${missing.join(\", \")}` };\n};\n\nconst probeTlsIdentity: ProbeFn = async (_ctx) => {\n const { existsSync } = await import(\"node:fs\");\n const { execSync } = await import(\"node:child_process\");\n const { join } = await import(\"node:path\");\n const { abtarsHome } = await import(\"../../paths.js\");\n const start = Date.now();\n const issues: string[] = [];\n try { execSync(\"which openssl\", { stdio: \"ignore\" }); } catch { issues.push(\"openssl not found\"); }\n const configDir = join(abtarsHome(), \"config\");\n if (!existsSync(join(configDir, \"identity.crt\"))) issues.push(\"identity.crt missing\");\n if (!existsSync(join(configDir, \"identity.tls.key\"))) issues.push(\"identity.tls.key missing\");\n if (issues.length === 0) return { name: \"tls-identity\", status: \"ok\", latencyMs: Date.now() - start };\n return { name: \"tls-identity\", status: \"failed\", latencyMs: Date.now() - start, detail: issues.join(\", \") };\n};\n\nconst probeSecretPerms: ProbeFn = async (_ctx) => {\n const { readdirSync, statSync } = await import(\"node:fs\");\n const { join } = await import(\"node:path\");\n const { abtarsHome } = await import(\"../../paths.js\");\n const start = Date.now();\n const secretDir = join(abtarsHome(), \"secret\");\n let files: string[];\n try { files = readdirSync(secretDir); } catch (err) { logAndSwallow(TAG, \"readdirSync secret dir\", err); return { name: \"secret-perms\", status: \"skipped\", latencyMs: 0, detail: \"no secret/ dir\" }; }\n const bad: string[] = [];\n for (const f of files) {\n const st = statSync(join(secretDir, f));\n if (!st.isFile()) continue;\n const mode = st.mode & 0o777;\n if (mode !== 0o600) bad.push(`${f} (${mode.toString(8)})`);\n }\n if (bad.length === 0) return { name: \"secret-perms\", status: \"ok\", latencyMs: Date.now() - start, detail: `${files.filter(f => statSync(join(secretDir, f)).isFile()).length} files, all 600` };\n return { name: \"secret-perms\", status: \"failed\", latencyMs: Date.now() - start, detail: `not 600: ${bad.join(\", \")}` };\n};\n\n// \u2500\u2500 Collector \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst probeFtsIntegrity: ProbeFn = async (_ctx) => {\n const { join } = await import(\"node:path\");\n const { homedir } = await import(\"node:os\");\n const { execSync } = await import(\"node:child_process\");\n const start = Date.now();\n try {\n const dbPath = join(process.env[\"ABMIND_MEMORY_DIR\"] || join(homedir(), \".abmind\", \"memory\"), \"memory.db\");\n const tables = [\"extracted_memories_fts\", \"content_en_trigram\", \"content_original_trigram\"];\n const rebuilt: string[] = [];\n for (const t of tables) {\n try {\n execSync(`sqlite3 \"${dbPath}\" \"INSERT INTO ${t}(${t}) VALUES('integrity-check')\"`, { stdio: \"pipe\", timeout: 2000 });\n } catch {\n try {\n execSync(`sqlite3 \"${dbPath}\" \"INSERT INTO ${t}(${t}) VALUES('rebuild')\"`, { stdio: \"pipe\", timeout: 5000 });\n rebuilt.push(t);\n } catch { /* table may not exist */ }\n }\n }\n if (rebuilt.length > 0) return { name: \"fts-integrity\", status: \"ok\", latencyMs: Date.now() - start, detail: `rebuilt: ${rebuilt.join(\", \")}` };\n return { name: \"fts-integrity\", status: \"ok\", latencyMs: Date.now() - start };\n } catch (err) {\n return { name: \"fts-integrity\", status: \"failed\", latencyMs: Date.now() - start, detail: err instanceof Error ? err.message : String(err) };\n }\n};\n\nconst probeAbmindCli: ProbeFn = async (_ctx) => {\n const { spawnSync } = await import(\"node:child_process\");\n const start = Date.now();\n const result = spawnSync(\"abmind\", [\"--version\"], { encoding: \"utf-8\", timeout: 3000 });\n if (result.status === 0) {\n const ver = result.stdout?.trim() || \"ok\";\n return { name: \"abmind-cli\", status: \"ok\", latencyMs: Date.now() - start, detail: `v${ver}` };\n }\n return { name: \"abmind-cli\", status: \"failed\", latencyMs: Date.now() - start, detail: \"not on PATH \u2014 run: npm install -g abmind\" };\n};\n\nconst PROBES: Array<{ fn: ProbeFn; timeout: number }> = [\n { fn: probeCoreFiles, timeout: 1000 },\n { fn: probeFtsIntegrity, timeout: 3000 },\n { fn: probeSecretPerms, timeout: 1000 },\n { fn: probeTlsIdentity, timeout: 2000 },\n { fn: probeAbmindCli, timeout: 3000 },\n { fn: probeMemory, timeout: 5000 },\n { fn: probeTelegram, timeout: 5000 },\n { fn: probeDiscord, timeout: 5000 },\n { fn: probeHeartbeat, timeout: 2000 },\n { fn: probeDashboard, timeout: 5000 },\n { fn: probeOllama, timeout: 5000 },\n { fn: probeTransport, timeout: 10000 }, // last \u2014 most expensive\n];\n\nlet lastReport: { report: DoctorReport; generatedAt: number } | null = null;\nconst CACHE_TTL_MS = 60_000;\n\nexport async function getDoctorReport(ctx: DoctorCtx, opts?: { force?: boolean }): Promise<DoctorReport> {\n const now = Date.now();\n if (!opts?.force && lastReport && now - lastReport.generatedAt < CACHE_TTL_MS) {\n return { ...lastReport.report, cached: true, cacheAgeMs: now - lastReport.generatedAt };\n }\n\n const start = Date.now();\n const results = await Promise.all(\n PROBES.map(p => withTimeout(p.fn, p.timeout)(ctx).then(r => {\n // withTimeout may return name=\"unknown\" \u2014 fix it\n if (r.name === \"unknown\") r.name = \"probe\";\n return r;\n }))\n );\n\n // Add boot phases not covered by active probes\n const probedNames = new Set(results.map(r => r.name));\n if (ctx.phaseHealth) {\n for (const [name, h] of ctx.phaseHealth) {\n const short = name.replace(\"phase\", \"\").replace(/([A-Z])/g, \" $1\").trim().toLowerCase();\n if (!probedNames.has(short) && !probedNames.has(short.replace(\" \", \"\"))) {\n results.push({ name: short, status: h.status === \"ok\" ? \"ok\" : h.status === \"skipped\" ? \"skipped\" : \"failed\", latencyMs: 0, detail: h.error ?? (h.status === \"ok\" ? \"boot ok\" : undefined) });\n }\n }\n }\n\n const totalMs = Date.now() - start;\n\n // #440 \u2014 version staleness check\n try {\n const { checkForUpdate } = await import(\"../update-check.js\");\n const { readlinkSync } = await import(\"node:fs\");\n const { join } = await import(\"node:path\");\n const { homedir } = await import(\"node:os\");\n const target = readlinkSync(join(homedir(), \".abtars\", \"current\")).split(\"/\").pop() ?? \"\";\n const dash = target.lastIndexOf(\"-\");\n const version = dash > 0 ? target.slice(0, dash) : \"unknown\";\n const result = checkForUpdate(\"abtars\", version);\n if (result?.updateAvailable) {\n results.push({ name: \"update-available\", status: \"failed\", latencyMs: 0, detail: `update: ${result.current} \u2192 ${result.latest} available` });\n } else if (result) {\n results.push({ name: \"version\", status: \"ok\", latencyMs: 0, detail: `${result.current} (latest)` });\n }\n } catch (err) { logAndSwallow(TAG, \"version check\", err); }\n\n const report: DoctorReport = { results, totalMs, cached: false };\n lastReport = { report, generatedAt: now };\n logInfo(\"doctor\", `Probes complete: ${results.filter(r => r.status === \"ok\").length}/${results.length} ok (${totalMs}ms)`);\n return report;\n}\n\nexport function renderDoctorText(report: DoctorReport): string {\n const icon = (s: ProbeResult[\"status\"]): string => s === \"ok\" ? \"\u2713\" : s === \"failed\" ? \"\u2717\" : \"\u23ED\";\n const lines = report.results.map(r => {\n const detail = r.detail ? ` \u2014 ${r.detail}` : \"\";\n const ms = r.latencyMs > 0 ? ` (${r.latencyMs}ms)` : \"\";\n return ` ${icon(r.status)} ${r.name}${ms}${detail}`;\n });\n const tag = report.cached ? `[cached ${Math.round((report.cacheAgeMs ?? 0) / 1000)}s ago]` : \"[fresh]\";\n return `\uD83E\uDE7A Doctor Report (${(report.totalMs / 1000).toFixed(1)}s) ${tag}\\n${lines.join(\"\\n\")}`;\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -3,8 +3,8 @@
3
3
  import {
4
4
  init_logger,
5
5
  logInfo
6
- } from "./chunk-2BY6I4P5.js";
7
- import "./chunk-MJ6PHMOK.js";
6
+ } from "./chunk-GUTRAMK3.js";
7
+ import "./chunk-WW5F2DCO.js";
8
8
  import "./chunk-7K2YZTLD.js";
9
9
 
10
10
  // src/cli/ensure-invariants.ts
@@ -21,7 +21,7 @@ var MIGRATIONS = [
21
21
  }
22
22
  ];
23
23
  async function ensureInstallInvariants(repoRoot, home) {
24
- const { loadManifest } = await import("./install-manifest-QRWID3KZ.js");
24
+ const { loadManifest } = await import("./install-manifest-KBYD7SAY.js");
25
25
  const manifest = loadManifest(repoRoot);
26
26
  const created = [];
27
27
  for (const seed of manifest.configSeeds) {
@@ -47,4 +47,4 @@ async function ensureInstallInvariants(repoRoot, home) {
47
47
  export {
48
48
  ensureInstallInvariants
49
49
  };
50
- //# sourceMappingURL=ensure-invariants-BJIEOSJ2.js.map
50
+ //# sourceMappingURL=ensure-invariants-3NOBCYWS.js.map
@@ -6,9 +6,9 @@ import {
6
6
  getEnv,
7
7
  initEnv,
8
8
  init_env_schema
9
- } from "./chunk-PZE3J7ER.js";
10
- import "./chunk-2BY6I4P5.js";
11
- import "./chunk-MJ6PHMOK.js";
9
+ } from "./chunk-3OXQWII3.js";
10
+ import "./chunk-GUTRAMK3.js";
11
+ import "./chunk-WW5F2DCO.js";
12
12
  import "./chunk-7K2YZTLD.js";
13
13
  init_env_schema();
14
14
  export {
@@ -17,4 +17,4 @@ export {
17
17
  getEnv,
18
18
  initEnv
19
19
  };
20
- //# sourceMappingURL=env-schema-XCPAJ6IZ.js.map
20
+ //# sourceMappingURL=env-schema-T43X43BU.js.map
@@ -5,9 +5,9 @@ import {
5
5
  getHookSummary,
6
6
  hasHooks,
7
7
  loadHookConfig
8
- } from "./chunk-G6IXMYIO.js";
9
- import "./chunk-2BY6I4P5.js";
10
- import "./chunk-MJ6PHMOK.js";
8
+ } from "./chunk-DO4INSXE.js";
9
+ import "./chunk-GUTRAMK3.js";
10
+ import "./chunk-WW5F2DCO.js";
11
11
  import "./chunk-7K2YZTLD.js";
12
12
  export {
13
13
  fire,
@@ -15,4 +15,4 @@ export {
15
15
  hasHooks,
16
16
  loadHookConfig
17
17
  };
18
- //# sourceMappingURL=hook-system-POI5VRIX.js.map
18
+ //# sourceMappingURL=hook-system-ZCVOFFRD.js.map
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __bundleCreateRequire } from 'node:module'; import { fileURLToPath as __bundleFileURLToPath } from 'node:url'; import { dirname as __bundleDirname } from 'node:path'; const require = __bundleCreateRequire(import.meta.url); const __chunk_filename = __bundleFileURLToPath(import.meta.url); const __chunk_dirname = __bundleDirname(__chunk_filename);
3
+ import {
4
+ getSkillCache,
5
+ init_hotskills,
6
+ register
7
+ } from "./chunk-NIYVCGBC.js";
8
+ import "./chunk-CYSGXNBY.js";
9
+ import "./chunk-GUTRAMK3.js";
10
+ import "./chunk-WW5F2DCO.js";
11
+ import "./chunk-7K2YZTLD.js";
12
+ init_hotskills();
13
+ export {
14
+ getSkillCache,
15
+ register
16
+ };
17
+ //# sourceMappingURL=hotskills-DTROJY6G.js.map
@@ -3,11 +3,11 @@
3
3
  import {
4
4
  install,
5
5
  writeWrapper
6
- } from "./chunk-RJJWPMUZ.js";
7
- import "./chunk-RVERPUHT.js";
6
+ } from "./chunk-KL5QRHHK.js";
7
+ import "./chunk-WMWI3SJ7.js";
8
8
  import "./chunk-7K2YZTLD.js";
9
9
  export {
10
10
  install,
11
11
  writeWrapper
12
12
  };
13
- //# sourceMappingURL=install-GEXWJYJC.js.map
13
+ //# sourceMappingURL=install-FZT43PTH.js.map
@@ -3,8 +3,8 @@
3
3
  import {
4
4
  init_logger,
5
5
  logWarn
6
- } from "./chunk-2BY6I4P5.js";
7
- import "./chunk-MJ6PHMOK.js";
6
+ } from "./chunk-GUTRAMK3.js";
7
+ import "./chunk-WW5F2DCO.js";
8
8
  import "./chunk-7K2YZTLD.js";
9
9
 
10
10
  // src/cli/install-manifest.ts
@@ -101,4 +101,4 @@ export {
101
101
  loadManifest,
102
102
  reconcileManifest
103
103
  };
104
- //# sourceMappingURL=install-manifest-QRWID3KZ.js.map
104
+ //# sourceMappingURL=install-manifest-KBYD7SAY.js.map
@@ -9,8 +9,8 @@ import {
9
9
  logDebug,
10
10
  logInfo,
11
11
  logWarn
12
- } from "./chunk-2BY6I4P5.js";
13
- import "./chunk-MJ6PHMOK.js";
12
+ } from "./chunk-GUTRAMK3.js";
13
+ import "./chunk-WW5F2DCO.js";
14
14
  import "./chunk-7K2YZTLD.js";
15
15
 
16
16
  // src/platforms/irc/irc-client.ts
@@ -295,4 +295,4 @@ function escapeRegex(s) {
295
295
  export {
296
296
  IrcAdapter
297
297
  };
298
- //# sourceMappingURL=irc-adapter-AIEP6OX6.js.map
298
+ //# sourceMappingURL=irc-adapter-HXO5D4SW.js.map
@@ -4,19 +4,19 @@ import {
4
4
  IRC_SCHEMA,
5
5
  init_config_validator,
6
6
  validateShape
7
- } from "./chunk-LYEAHE5V.js";
7
+ } from "./chunk-DCY7DGMT.js";
8
8
  import {
9
9
  init_log_and_swallow,
10
10
  logAndSwallow
11
- } from "./chunk-EX2SRTUE.js";
11
+ } from "./chunk-CYSGXNBY.js";
12
12
  import {
13
13
  init_logger,
14
14
  logWarn
15
- } from "./chunk-2BY6I4P5.js";
15
+ } from "./chunk-GUTRAMK3.js";
16
16
  import {
17
17
  abtarsHome,
18
18
  init_paths
19
- } from "./chunk-MJ6PHMOK.js";
19
+ } from "./chunk-WW5F2DCO.js";
20
20
  import "./chunk-7K2YZTLD.js";
21
21
 
22
22
  // src/platforms/irc/irc-config.ts
@@ -86,4 +86,4 @@ function resolveSecret(val) {
86
86
  export {
87
87
  loadIrcConfig
88
88
  };
89
- //# sourceMappingURL=irc-config-6VY67UPQ.js.map
89
+ //# sourceMappingURL=irc-config-XN5VW2V4.js.map
@@ -5,9 +5,9 @@ import {
5
5
  installPackages,
6
6
  isInstalled,
7
7
  lazyRequire
8
- } from "./chunk-4KJ76TTE.js";
9
- import "./chunk-2BY6I4P5.js";
10
- import "./chunk-MJ6PHMOK.js";
8
+ } from "./chunk-4XW7YA3K.js";
9
+ import "./chunk-GUTRAMK3.js";
10
+ import "./chunk-WW5F2DCO.js";
11
11
  import "./chunk-7K2YZTLD.js";
12
12
  export {
13
13
  OPTIONAL_DEPS,
@@ -15,4 +15,4 @@ export {
15
15
  isInstalled,
16
16
  lazyRequire
17
17
  };
18
- //# sourceMappingURL=lazy-require-UFYFFX2R.js.map
18
+ //# sourceMappingURL=lazy-require-R3JYCV5M.js.map
@@ -4,11 +4,11 @@ import {
4
4
  init_logger,
5
5
  logInfo,
6
6
  logWarn
7
- } from "./chunk-2BY6I4P5.js";
7
+ } from "./chunk-GUTRAMK3.js";
8
8
  import {
9
9
  abtarsHome,
10
10
  init_paths
11
- } from "./chunk-MJ6PHMOK.js";
11
+ } from "./chunk-WW5F2DCO.js";
12
12
  import {
13
13
  __commonJS,
14
14
  __require,
@@ -4666,7 +4666,7 @@ async function saveInboundMedia(buffer, chatId, opts) {
4666
4666
  return { path, mime, ext, size: finalBuffer.length, isImage };
4667
4667
  }
4668
4668
  async function resizeImage(buffer, mime) {
4669
- const { Jimp } = await (await import("./lazy-require-UFYFFX2R.js")).lazyRequire("jimp", "image");
4669
+ const { Jimp } = await (await import("./lazy-require-R3JYCV5M.js")).lazyRequire("jimp", "image");
4670
4670
  const img = await Jimp.read(buffer);
4671
4671
  const maxBytes = IMAGE_MAX_BASE64_MB * 1024 * 1024;
4672
4672
  let w = img.width;
@@ -4745,4 +4745,4 @@ export {
4745
4745
  ieee754/index.js:
4746
4746
  (*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> *)
4747
4747
  */
4748
- //# sourceMappingURL=media-utils-MOE36VWY.js.map
4748
+ //# sourceMappingURL=media-utils-W7XW3SVV.js.map
@@ -2,34 +2,37 @@
2
2
  import { createRequire as __bundleCreateRequire } from 'node:module'; import { fileURLToPath as __bundleFileURLToPath } from 'node:url'; import { dirname as __bundleDirname } from 'node:path'; const require = __bundleCreateRequire(import.meta.url); const __chunk_filename = __bundleFileURLToPath(import.meta.url); const __chunk_dirname = __bundleDirname(__chunk_filename);
3
3
  import {
4
4
  SessionRegistry,
5
+ getRecalledIdsForMessage,
5
6
  handleInboundMessage,
6
7
  resetAndPrepare,
7
8
  resetIdleCompactFlag,
8
9
  setIdleCompactReset,
9
10
  startSession
10
- } from "./chunk-P2BZSLJJ.js";
11
+ } from "./chunk-OGZXYN6E.js";
11
12
  import "./chunk-NIRYBWUW.js";
12
- import "./chunk-3MO2MDXJ.js";
13
- import "./chunk-RV54J75Q.js";
14
- import "./chunk-KFENC7BM.js";
15
- import "./chunk-OZ4IZFV4.js";
16
- import "./chunk-GBBTK6H2.js";
13
+ import "./chunk-SA6YEFNG.js";
14
+ import "./chunk-MHK4UPM6.js";
15
+ import "./chunk-YWZPKBO6.js";
16
+ import "./chunk-L33WNMCP.js";
17
+ import "./chunk-HJQZP5CK.js";
17
18
  import "./chunk-JAJ3DUQ2.js";
18
- import "./chunk-G6IXMYIO.js";
19
- import "./chunk-UDZIZB5F.js";
20
- import "./chunk-GPL57SRN.js";
19
+ import "./chunk-DO4INSXE.js";
20
+ import "./chunk-RTL7HO3N.js";
21
+ import "./chunk-SRFEIZQT.js";
22
+ import "./chunk-H7RX7UCR.js";
21
23
  import "./chunk-MZWMYN4O.js";
22
- import "./chunk-EX2SRTUE.js";
23
- import "./chunk-PZE3J7ER.js";
24
- import "./chunk-2BY6I4P5.js";
25
- import "./chunk-MJ6PHMOK.js";
24
+ import "./chunk-3OXQWII3.js";
25
+ import "./chunk-CYSGXNBY.js";
26
+ import "./chunk-GUTRAMK3.js";
27
+ import "./chunk-WW5F2DCO.js";
26
28
  import "./chunk-7K2YZTLD.js";
27
29
  export {
28
30
  SessionRegistry,
31
+ getRecalledIdsForMessage,
29
32
  handleInboundMessage,
30
33
  resetAndPrepare,
31
34
  resetIdleCompactFlag,
32
35
  setIdleCompactReset,
33
36
  startSession
34
37
  };
35
- //# sourceMappingURL=message-pipeline-2MBT44FO.js.map
38
+ //# sourceMappingURL=message-pipeline-QX272U5X.js.map