abtars 0.3.4-alpha.8 → 0.3.4

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 (335) hide show
  1. package/bundle/{_registry.generated-YP5GLSG7.js → _registry.generated-AVR7DK2A.js} +15 -15
  2. package/bundle/{abmind-lazy-7Z44NODV.js → abmind-lazy-E3YCFKQ5.js} +15 -5
  3. package/bundle/abtars-browser.js +4 -4
  4. package/bundle/abtars-cli.js +23 -13
  5. package/bundle/abtars-cli.js.map +2 -2
  6. package/bundle/abtars-restart.js +3 -3
  7. package/bundle/abtars-task.js +3 -3
  8. package/bundle/abtars.js +385 -466
  9. package/bundle/abtars.js.map +4 -4
  10. package/bundle/{acp-raw-client-E6FM45NC.js → acp-raw-client-UCNK3OTU.js} +2 -2
  11. package/bundle/{action-gate-G2V47NHW.js → action-gate-V4FCBHFB.js} +2 -2
  12. package/bundle/{agent-api-adapter-WRGEQ6DV.js → agent-api-adapter-7HEPYSIN.js} +3 -3
  13. package/bundle/{agent-api-rate-limit-WCFXJMGY.js → agent-api-rate-limit-RZSAM3SW.js} +4 -4
  14. package/bundle/{agent-registry-GHNG2PH3.js → agent-registry-46A2R5KP.js} +7 -7
  15. package/bundle/{bootstrap-PZIDBPEJ.js → bootstrap-MIHJJSWU.js} +2 -2
  16. package/bundle/{bridge-lock-transport-4ZH7QTJP.js → bridge-lock-transport-7RSN7OLJ.js} +4 -4
  17. package/bundle/{browser-D3LZV7ZK.js → browser-F6BCWJWW.js} +6 -6
  18. package/bundle/{budget-45QOBDWA.js → budget-WUM3SPKW.js} +3 -3
  19. package/bundle/{capability-JFWX3IQF.js → capability-QVRKGRFC.js} +5 -5
  20. package/bundle/{chunk-YSKCQH6E.js → chunk-2IYJ4I66.js} +2 -2
  21. package/bundle/{chunk-W2R2HFOQ.js → chunk-2NLUT5S2.js} +6 -6
  22. package/bundle/chunk-3BG3AIDP.js +191 -0
  23. package/bundle/chunk-3BG3AIDP.js.map +7 -0
  24. package/bundle/{chunk-OKAQICWY.js → chunk-3GQX34S2.js} +3 -3
  25. package/bundle/{chunk-QROWBWLL.js → chunk-3XZ773BS.js} +2 -2
  26. package/bundle/{chunk-DYBW4XXL.js → chunk-467SRLLR.js} +2 -2
  27. package/bundle/{chunk-374NCXFZ.js → chunk-4AILRHUI.js} +10 -8
  28. package/bundle/chunk-4AILRHUI.js.map +7 -0
  29. package/bundle/{chunk-GPZNXY2U.js → chunk-4S3H4OK7.js} +4 -4
  30. package/bundle/{chunk-NDCRWEEJ.js → chunk-4Y5MJQRE.js} +6 -6
  31. package/bundle/{chunk-FRKW6LWB.js → chunk-55UWKI5C.js} +3 -3
  32. package/bundle/{chunk-7JN2MMU7.js → chunk-5PNJFDSW.js} +8 -8
  33. package/bundle/{chunk-LUNA6PM5.js → chunk-5RVOEFGT.js} +4 -2
  34. package/bundle/{chunk-LUNA6PM5.js.map → chunk-5RVOEFGT.js.map} +2 -2
  35. package/bundle/{chunk-OXTSWQCX.js → chunk-5Y3FJ2Y7.js} +2 -2
  36. package/bundle/{chunk-TMUYFERL.js → chunk-6B5ZFUPD.js} +2 -2
  37. package/bundle/{chunk-65VCEC32.js → chunk-6PA5JBUU.js} +2 -2
  38. package/bundle/{chunk-C7K6VZNY.js → chunk-BNXV7SZI.js} +21 -12
  39. package/bundle/chunk-BNXV7SZI.js.map +7 -0
  40. package/bundle/{chunk-AFREM7FX.js → chunk-CK7YTA2F.js} +2 -2
  41. package/bundle/{chunk-NRUSRJXR.js → chunk-DZJ5QZFD.js} +2 -2
  42. package/bundle/{chunk-YRSMGJFP.js → chunk-E67KESEG.js} +2 -2
  43. package/bundle/{chunk-ZV4IWKDJ.js → chunk-E7XD5UGB.js} +3 -3
  44. package/bundle/{chunk-CXXU3HAU.js → chunk-EAX5ZZUL.js} +63 -39
  45. package/bundle/chunk-EAX5ZZUL.js.map +7 -0
  46. package/bundle/{chunk-PEDX56EL.js → chunk-EFGBM555.js} +2 -2
  47. package/bundle/{chunk-EQSG2CRM.js → chunk-FGYDIX54.js} +22 -15
  48. package/bundle/chunk-FGYDIX54.js.map +7 -0
  49. package/bundle/{chunk-YPAQEQSC.js → chunk-GF6NVNA7.js} +15 -5
  50. package/bundle/chunk-GF6NVNA7.js.map +7 -0
  51. package/bundle/{chunk-UNM3OXHB.js → chunk-HGSHCQ5F.js} +110 -72
  52. package/bundle/{chunk-UNM3OXHB.js.map → chunk-HGSHCQ5F.js.map} +2 -2
  53. package/bundle/{chunk-VXCETPZU.js → chunk-IMIGG5EO.js} +39 -39
  54. package/bundle/chunk-IMIGG5EO.js.map +7 -0
  55. package/bundle/{chunk-P2K2K6XL.js → chunk-ITOFPJAV.js} +44 -32
  56. package/bundle/chunk-ITOFPJAV.js.map +7 -0
  57. package/bundle/{chunk-75ATTOW4.js → chunk-IY6UKLPS.js} +3 -3
  58. package/bundle/{chunk-EUZDKV3C.js → chunk-J4RUFAPK.js} +3 -3
  59. package/bundle/{chunk-HZDLFLRP.js → chunk-J7DRPVMU.js} +35 -5
  60. package/bundle/chunk-J7DRPVMU.js.map +7 -0
  61. package/bundle/{chunk-EGL6UMAO.js → chunk-JG4BKXBN.js} +7 -1
  62. package/bundle/chunk-JG4BKXBN.js.map +7 -0
  63. package/bundle/{chunk-N4EB6LA7.js → chunk-JLWYPGWI.js} +5 -5
  64. package/bundle/{chunk-5QUTMUIK.js → chunk-JXYWDAHD.js} +12 -12
  65. package/bundle/{chunk-GRVWZO4C.js → chunk-KOSFXW2S.js} +24 -3
  66. package/bundle/{chunk-GRVWZO4C.js.map → chunk-KOSFXW2S.js.map} +1 -1
  67. package/bundle/{chunk-M3JEX6L4.js → chunk-L72RIPEC.js} +9 -9
  68. package/bundle/{chunk-TEFZ4JA4.js → chunk-NHPLD3C7.js} +2 -2
  69. package/bundle/{chunk-2KC5G3EA.js → chunk-OWUO5RS3.js} +5 -5
  70. package/bundle/{chunk-4MULJ5SS.js → chunk-OY4Q6AMY.js} +71 -49
  71. package/bundle/chunk-OY4Q6AMY.js.map +7 -0
  72. package/bundle/{chunk-WBTJ2E62.js → chunk-P3NODAHF.js} +2 -5
  73. package/bundle/{chunk-WBTJ2E62.js.map → chunk-P3NODAHF.js.map} +2 -2
  74. package/bundle/{chunk-SMPHE3ZM.js → chunk-PB5GF4FG.js} +215 -163
  75. package/bundle/chunk-PB5GF4FG.js.map +7 -0
  76. package/bundle/{chunk-WYHGNI56.js → chunk-PMD5BLFS.js} +6 -6
  77. package/bundle/{chunk-URQPDCK5.js → chunk-Q66LQMMZ.js} +3 -3
  78. package/bundle/{chunk-IHYKTDIP.js → chunk-SC2Y5NR2.js} +36 -119
  79. package/bundle/chunk-SC2Y5NR2.js.map +7 -0
  80. package/bundle/chunk-SFL4EPCZ.js +555 -0
  81. package/bundle/chunk-SFL4EPCZ.js.map +7 -0
  82. package/bundle/{chunk-LDUOOKQY.js → chunk-SJPUNDZ3.js} +5 -5
  83. package/bundle/{chunk-LDUOOKQY.js.map → chunk-SJPUNDZ3.js.map} +1 -1
  84. package/bundle/{chunk-JQDJPUHM.js → chunk-TWB2ZGVH.js} +2 -2
  85. package/bundle/{chunk-IJT4KWXT.js → chunk-U4U47YE7.js} +2 -2
  86. package/bundle/{chunk-2FAZIA37.js → chunk-W546CU3A.js} +3 -3
  87. package/bundle/chunk-WC5O5KOE.js +211 -0
  88. package/bundle/chunk-WC5O5KOE.js.map +7 -0
  89. package/bundle/{chunk-JNIHEDKF.js → chunk-XPWYDNWL.js} +2 -2
  90. package/bundle/{chunk-GWILHZPT.js → chunk-XRTXYN66.js} +10 -7
  91. package/bundle/{chunk-GWILHZPT.js.map → chunk-XRTXYN66.js.map} +2 -2
  92. package/bundle/{chunk-EFJVUJBE.js → chunk-Y5FEFKGM.js} +6 -6
  93. package/bundle/chunk-YJZE4OK3.js +169 -0
  94. package/bundle/chunk-YJZE4OK3.js.map +7 -0
  95. package/bundle/{chunk-GVM5YU5I.js → chunk-Z4FZPB42.js} +2 -2
  96. package/bundle/{chunk-7BSQ5UQO.js → chunk-ZSIDQ66D.js} +3 -3
  97. package/bundle/{chunk-XX6BGTPO.js → chunk-ZZZCJJEO.js} +4 -4
  98. package/bundle/{commands-OIISYHTD.js → commands-2ZW6CMLC.js} +17 -16
  99. package/bundle/{config-M3P5IOAI.js → config-YMY5YHKN.js} +6 -6
  100. package/bundle/{context-2RJHC2LE.js → context-CL2RSLII.js} +7 -5
  101. package/bundle/context-CL2RSLII.js.map +7 -0
  102. package/bundle/{daemon-TB23FFWY.js → daemon-D7SU63OY.js} +3 -3
  103. package/bundle/{delegation-tools-YATZFKYO.js → delegation-tools-WS7Z56KZ.js} +12 -12
  104. package/bundle/{deploy-T6R45OZJ.js → deploy-AMTVKIMU.js} +2 -2
  105. package/bundle/{deps-WVK553KF.js → deps-T63AVJKJ.js} +3 -3
  106. package/bundle/{direct-api-transport-S2RDH2I7.js → direct-api-transport-QNNY2WWP.js} +51 -32
  107. package/bundle/direct-api-transport-QNNY2WWP.js.map +7 -0
  108. package/bundle/{discord-adapter-UTXUWX3A.js → discord-adapter-ABAD56Y2.js} +21 -20
  109. package/bundle/{discord-adapter-UTXUWX3A.js.map → discord-adapter-ABAD56Y2.js.map} +1 -1
  110. package/bundle/{dns-wakeup-IDOJIXBX.js → dns-wakeup-V3LEFXPE.js} +9 -33
  111. package/bundle/dns-wakeup-V3LEFXPE.js.map +7 -0
  112. package/bundle/{doctor-probes-B54JFIW3.js → doctor-probes-O6YI6XSZ.js} +6 -2
  113. package/bundle/{env-schema-4JXQUOH4.js → env-schema-B5RB32DC.js} +3 -3
  114. package/bundle/{gossip-3C3BSNPN.js → gossip-SKRCPOBS.js} +9 -5
  115. package/bundle/{guardrails-DL7ZSWVN.js → guardrails-64GQ5Y5K.js} +4 -4
  116. package/bundle/{heartbeat-system-MVTRS4GP.js → heartbeat-system-X4MUTKJD.js} +6 -6
  117. package/bundle/{heartbeat-tier3-6KH45CL6.js → heartbeat-tier3-2PTPWEQQ.js} +53 -76
  118. package/bundle/heartbeat-tier3-2PTPWEQQ.js.map +7 -0
  119. package/bundle/{hook-system-M3POLUIB.js → hook-system-YB635OC4.js} +3 -3
  120. package/bundle/{hotskills-FWX4QI7V.js → hotskills-Q75D2DK3.js} +5 -5
  121. package/bundle/{install-OS3CU7NF.js → install-RFKKFSGS.js} +17 -30
  122. package/bundle/install-RFKKFSGS.js.map +7 -0
  123. package/bundle/{install-manifest-5PPWMD2W.js → install-manifest-J7ICPCJN.js} +2 -2
  124. package/bundle/{irc-adapter-PTTZD32W.js → irc-adapter-TVEV4R6H.js} +3 -3
  125. package/bundle/{irc-config-CP7ZMUOX.js → irc-config-M676FOFI.js} +4 -4
  126. package/bundle/{kanban-board-M326B2XJ.js → kanban-board-DLEJUCNN.js} +9 -7
  127. package/bundle/{kanban-channel-IJ52OMNA.js → kanban-channel-XOLUHJZJ.js} +6 -6
  128. package/bundle/kanban-delivery-C4QPBNPX.js +45 -0
  129. package/bundle/kanban-delivery-C4QPBNPX.js.map +7 -0
  130. package/bundle/{lazy-require-KCRVT4SI.js → lazy-require-JKQSALXN.js} +3 -3
  131. package/bundle/{logger-OWCSNYCA.js → logger-3EGHBD4R.js} +2 -2
  132. package/bundle/{main-chat-ZNUZCTNS.js → main-chat-3H63REKK.js} +4 -4
  133. package/bundle/{master-user-HSKM4ZFN.js → master-user-MUBUP3KD.js} +5 -5
  134. package/bundle/{media-utils-3ZYOD7SK.js → media-utils-HUUIALAJ.js} +3 -3
  135. package/bundle/{message-pipeline-AUIUNM5R.js → message-pipeline-GRDRWONR.js} +17 -16
  136. package/bundle/meta.json +2773 -2241
  137. package/bundle/{metrics-collector-L3VPEHII.js → metrics-collector-YMUGY3PI.js} +31 -2
  138. package/bundle/metrics-collector-YMUGY3PI.js.map +7 -0
  139. package/bundle/{model-health-registry-MLEIZSTV.js → model-health-registry-QADMFQFQ.js} +2 -2
  140. package/bundle/{nerve-IGSXBKZZ.js → nerve-QPAEBRKX.js} +3 -3
  141. package/bundle/{notification-BFSIEECG.js → notification-3JICGXWU.js} +6 -6
  142. package/bundle/{openrouter-credits-NTVZDRYM.js → openrouter-credits-7NEIPYJN.js} +3 -3
  143. package/bundle/{orc-tools-TOD4WHTM.js → orc-tools-UZVPONKY.js} +5 -3
  144. package/bundle/{peer-auth-QC4EF2PM.js → peer-auth-RI43DKJE.js} +24 -15
  145. package/bundle/{peer-client-RGEU5HOK.js → peer-client-UITTMWJ2.js} +34 -29
  146. package/bundle/peer-client-UITTMWJ2.js.map +7 -0
  147. package/bundle/{peer-config-TN55LFDC.js → peer-config-URM7DCW6.js} +9 -4
  148. package/bundle/{peer-transport-5VKK2I7P.js → peer-transport-SI7I72DB.js} +12 -10
  149. package/bundle/{phase-transport-FS6NL4A5.js → phase-transport-ESWWACZI.js} +17 -17
  150. package/bundle/{reconcile-CTFCLQRN.js → reconcile-GFDQYNBD.js} +3 -3
  151. package/bundle/{reconciler-NZ4O4BCP.js → reconciler-IEUJXJN2.js} +12 -12
  152. package/bundle/{restore-IFHPI7I7.js → restore-FARTGLQQ.js} +3 -3
  153. package/bundle/{rollback-ANRI3T5Z.js → rollback-GEWPZABG.js} +2 -2
  154. package/bundle/{sandbox-runtime-QROWHDCS.js → sandbox-runtime-DV6E25J6.js} +2 -2
  155. package/bundle/{self-healer-utils-IFAYOQO2.js → self-healer-utils-P4SKNNEM.js} +3 -3
  156. package/bundle/{sha-tracker-ZWBP6CIJ.js → sha-tracker-77SHLYNY.js} +3 -3
  157. package/bundle/{skill-session-VJXTKOKL.js → skill-session-5HSMXY54.js} +3 -3
  158. package/bundle/{skill-stats-JORH5DGM.js → skill-stats-MI3RSWWL.js} +4 -4
  159. package/bundle/{skill-watcher-E4MGLKLS.js → skill-watcher-5L7JE6TN.js} +4 -4
  160. package/bundle/{sleep-BEWAUFCL.js → sleep-I4JFASCY.js} +11 -11
  161. package/bundle/{soul-bundle-VWAVHCZ6.js → soul-bundle-522C3IRH.js} +9 -8
  162. package/bundle/{spin-E3ZDEDKT.js → spin-VHNGNWTD.js} +11 -11
  163. package/bundle/{spin-notifications-SE2HVZI7.js → spin-notifications-7NC5XZEM.js} +5 -5
  164. package/bundle/{spin-types-OIE67MJK.js → spin-types-C5KOQOPD.js} +7 -3
  165. package/bundle/{sse-parser-anthropic-A6R4Z2TB.js → sse-parser-anthropic-MMTVWHLI.js} +3 -3
  166. package/bundle/{sse-parser-responses-HSZY3QGJ.js → sse-parser-responses-3AOFN64C.js} +3 -3
  167. package/bundle/{ssrf-guard-O6SHIK6Q.js → ssrf-guard-U2JA72TC.js} +3 -3
  168. package/bundle/{start-7QZIWO3S.js → start-H5IUFAWF.js} +4 -2
  169. package/bundle/{start-7QZIWO3S.js.map → start-H5IUFAWF.js.map} +2 -2
  170. package/bundle/{stt-LGVPXMVR.js → stt-PSOPPBV4.js} +4 -4
  171. package/bundle/{system-status-FAVNIUFJ.js → system-status-4LYGOFNO.js} +38 -24
  172. package/bundle/system-status-4LYGOFNO.js.map +7 -0
  173. package/bundle/{task-store-W5BFIAIH.js → task-store-MNCW42BW.js} +4 -4
  174. package/bundle/{telegram-adapter-4TX7QWKC.js → telegram-adapter-O6KIZDY6.js} +62 -45
  175. package/bundle/telegram-adapter-O6KIZDY6.js.map +7 -0
  176. package/bundle/{tool-registry-7FK3OQGL.js → tool-registry-JJMWCQKZ.js} +26 -24
  177. package/bundle/{tool-sandbox-4UC6GAKA.js → tool-sandbox-CNL6V6IH.js} +4 -4
  178. package/bundle/{transport-config-KBF5W2DP.js → transport-config-6MB2K2XC.js} +7 -7
  179. package/bundle/tribe-GDTFYJTK.js +111 -0
  180. package/bundle/tribe-GDTFYJTK.js.map +7 -0
  181. package/bundle/{update-CKFP6LBE.js → update-HGQAOC5L.js} +3 -3
  182. package/bundle/{usage-tracker-NXD364VX.js → usage-tracker-SR4BI6ZT.js} +2 -2
  183. package/bundle/{user-registry-35BW4XKM.js → user-registry-4PACZJIJ.js} +4 -4
  184. package/bundle/wire-platform-KKPWNNNQ.js +88 -0
  185. package/bundle/wire-platform-KKPWNNNQ.js.map +7 -0
  186. package/bundle/ws-peer-client-U3NNPOK7.js +370 -0
  187. package/bundle/ws-peer-client-U3NNPOK7.js.map +7 -0
  188. package/package.json +1 -1
  189. package/scripts/abtars-watchdog.sh +1 -5
  190. package/scripts/emergency-deploy.sh +2 -2
  191. package/scripts/emergency-update.sh +36 -37
  192. package/bundle/chunk-374NCXFZ.js.map +0 -7
  193. package/bundle/chunk-4MULJ5SS.js.map +0 -7
  194. package/bundle/chunk-4S554KLW.js +0 -105
  195. package/bundle/chunk-4S554KLW.js.map +0 -7
  196. package/bundle/chunk-C7K6VZNY.js.map +0 -7
  197. package/bundle/chunk-CXXU3HAU.js.map +0 -7
  198. package/bundle/chunk-EGL6UMAO.js.map +0 -7
  199. package/bundle/chunk-EQSG2CRM.js.map +0 -7
  200. package/bundle/chunk-HT2BPTZY.js +0 -241
  201. package/bundle/chunk-HT2BPTZY.js.map +0 -7
  202. package/bundle/chunk-HZDLFLRP.js.map +0 -7
  203. package/bundle/chunk-IHYKTDIP.js.map +0 -7
  204. package/bundle/chunk-IKUZPMVA.js +0 -82
  205. package/bundle/chunk-IKUZPMVA.js.map +0 -7
  206. package/bundle/chunk-P2K2K6XL.js.map +0 -7
  207. package/bundle/chunk-PU5HSKWH.js +0 -257
  208. package/bundle/chunk-PU5HSKWH.js.map +0 -7
  209. package/bundle/chunk-RWRRGE4U.js +0 -72
  210. package/bundle/chunk-RWRRGE4U.js.map +0 -7
  211. package/bundle/chunk-SMPHE3ZM.js.map +0 -7
  212. package/bundle/chunk-VUIX5AGB.js +0 -65
  213. package/bundle/chunk-VUIX5AGB.js.map +0 -7
  214. package/bundle/chunk-VXCETPZU.js.map +0 -7
  215. package/bundle/chunk-YPAQEQSC.js.map +0 -7
  216. package/bundle/context-2RJHC2LE.js.map +0 -7
  217. package/bundle/direct-api-transport-S2RDH2I7.js.map +0 -7
  218. package/bundle/dns-wakeup-IDOJIXBX.js.map +0 -7
  219. package/bundle/heartbeat-tier3-6KH45CL6.js.map +0 -7
  220. package/bundle/install-OS3CU7NF.js.map +0 -7
  221. package/bundle/metrics-collector-L3VPEHII.js.map +0 -7
  222. package/bundle/peer-client-RGEU5HOK.js.map +0 -7
  223. package/bundle/peer-jwt-NCCPXJRX.js +0 -18
  224. package/bundle/stream-single-RFJNUTL6.js +0 -34
  225. package/bundle/stream-single-RFJNUTL6.js.map +0 -7
  226. package/bundle/system-status-FAVNIUFJ.js.map +0 -7
  227. package/bundle/telegram-adapter-4TX7QWKC.js.map +0 -7
  228. package/bundle/user-registry-35BW4XKM.js.map +0 -7
  229. package/bundle/ws-peer-client-AIXCXF7V.js +0 -173
  230. package/bundle/ws-peer-client-AIXCXF7V.js.map +0 -7
  231. /package/bundle/{_registry.generated-YP5GLSG7.js.map → _registry.generated-AVR7DK2A.js.map} +0 -0
  232. /package/bundle/{abmind-lazy-7Z44NODV.js.map → abmind-lazy-E3YCFKQ5.js.map} +0 -0
  233. /package/bundle/{acp-raw-client-E6FM45NC.js.map → acp-raw-client-UCNK3OTU.js.map} +0 -0
  234. /package/bundle/{action-gate-G2V47NHW.js.map → action-gate-V4FCBHFB.js.map} +0 -0
  235. /package/bundle/{agent-api-adapter-WRGEQ6DV.js.map → agent-api-adapter-7HEPYSIN.js.map} +0 -0
  236. /package/bundle/{agent-api-rate-limit-WCFXJMGY.js.map → agent-api-rate-limit-RZSAM3SW.js.map} +0 -0
  237. /package/bundle/{agent-registry-GHNG2PH3.js.map → agent-registry-46A2R5KP.js.map} +0 -0
  238. /package/bundle/{bootstrap-PZIDBPEJ.js.map → bootstrap-MIHJJSWU.js.map} +0 -0
  239. /package/bundle/{bridge-lock-transport-4ZH7QTJP.js.map → bridge-lock-transport-7RSN7OLJ.js.map} +0 -0
  240. /package/bundle/{browser-D3LZV7ZK.js.map → browser-F6BCWJWW.js.map} +0 -0
  241. /package/bundle/{budget-45QOBDWA.js.map → budget-WUM3SPKW.js.map} +0 -0
  242. /package/bundle/{capability-JFWX3IQF.js.map → capability-QVRKGRFC.js.map} +0 -0
  243. /package/bundle/{chunk-YSKCQH6E.js.map → chunk-2IYJ4I66.js.map} +0 -0
  244. /package/bundle/{chunk-W2R2HFOQ.js.map → chunk-2NLUT5S2.js.map} +0 -0
  245. /package/bundle/{chunk-OKAQICWY.js.map → chunk-3GQX34S2.js.map} +0 -0
  246. /package/bundle/{chunk-QROWBWLL.js.map → chunk-3XZ773BS.js.map} +0 -0
  247. /package/bundle/{chunk-DYBW4XXL.js.map → chunk-467SRLLR.js.map} +0 -0
  248. /package/bundle/{chunk-GPZNXY2U.js.map → chunk-4S3H4OK7.js.map} +0 -0
  249. /package/bundle/{chunk-NDCRWEEJ.js.map → chunk-4Y5MJQRE.js.map} +0 -0
  250. /package/bundle/{chunk-FRKW6LWB.js.map → chunk-55UWKI5C.js.map} +0 -0
  251. /package/bundle/{chunk-7JN2MMU7.js.map → chunk-5PNJFDSW.js.map} +0 -0
  252. /package/bundle/{chunk-OXTSWQCX.js.map → chunk-5Y3FJ2Y7.js.map} +0 -0
  253. /package/bundle/{chunk-TMUYFERL.js.map → chunk-6B5ZFUPD.js.map} +0 -0
  254. /package/bundle/{chunk-65VCEC32.js.map → chunk-6PA5JBUU.js.map} +0 -0
  255. /package/bundle/{chunk-AFREM7FX.js.map → chunk-CK7YTA2F.js.map} +0 -0
  256. /package/bundle/{chunk-NRUSRJXR.js.map → chunk-DZJ5QZFD.js.map} +0 -0
  257. /package/bundle/{chunk-YRSMGJFP.js.map → chunk-E67KESEG.js.map} +0 -0
  258. /package/bundle/{chunk-ZV4IWKDJ.js.map → chunk-E7XD5UGB.js.map} +0 -0
  259. /package/bundle/{chunk-PEDX56EL.js.map → chunk-EFGBM555.js.map} +0 -0
  260. /package/bundle/{chunk-75ATTOW4.js.map → chunk-IY6UKLPS.js.map} +0 -0
  261. /package/bundle/{chunk-EUZDKV3C.js.map → chunk-J4RUFAPK.js.map} +0 -0
  262. /package/bundle/{chunk-N4EB6LA7.js.map → chunk-JLWYPGWI.js.map} +0 -0
  263. /package/bundle/{chunk-5QUTMUIK.js.map → chunk-JXYWDAHD.js.map} +0 -0
  264. /package/bundle/{chunk-M3JEX6L4.js.map → chunk-L72RIPEC.js.map} +0 -0
  265. /package/bundle/{chunk-TEFZ4JA4.js.map → chunk-NHPLD3C7.js.map} +0 -0
  266. /package/bundle/{chunk-2KC5G3EA.js.map → chunk-OWUO5RS3.js.map} +0 -0
  267. /package/bundle/{chunk-WYHGNI56.js.map → chunk-PMD5BLFS.js.map} +0 -0
  268. /package/bundle/{chunk-URQPDCK5.js.map → chunk-Q66LQMMZ.js.map} +0 -0
  269. /package/bundle/{chunk-JQDJPUHM.js.map → chunk-TWB2ZGVH.js.map} +0 -0
  270. /package/bundle/{chunk-IJT4KWXT.js.map → chunk-U4U47YE7.js.map} +0 -0
  271. /package/bundle/{chunk-2FAZIA37.js.map → chunk-W546CU3A.js.map} +0 -0
  272. /package/bundle/{chunk-JNIHEDKF.js.map → chunk-XPWYDNWL.js.map} +0 -0
  273. /package/bundle/{chunk-EFJVUJBE.js.map → chunk-Y5FEFKGM.js.map} +0 -0
  274. /package/bundle/{chunk-GVM5YU5I.js.map → chunk-Z4FZPB42.js.map} +0 -0
  275. /package/bundle/{chunk-7BSQ5UQO.js.map → chunk-ZSIDQ66D.js.map} +0 -0
  276. /package/bundle/{chunk-XX6BGTPO.js.map → chunk-ZZZCJJEO.js.map} +0 -0
  277. /package/bundle/{commands-OIISYHTD.js.map → commands-2ZW6CMLC.js.map} +0 -0
  278. /package/bundle/{config-M3P5IOAI.js.map → config-YMY5YHKN.js.map} +0 -0
  279. /package/bundle/{daemon-TB23FFWY.js.map → daemon-D7SU63OY.js.map} +0 -0
  280. /package/bundle/{delegation-tools-YATZFKYO.js.map → delegation-tools-WS7Z56KZ.js.map} +0 -0
  281. /package/bundle/{deploy-T6R45OZJ.js.map → deploy-AMTVKIMU.js.map} +0 -0
  282. /package/bundle/{deps-WVK553KF.js.map → deps-T63AVJKJ.js.map} +0 -0
  283. /package/bundle/{doctor-probes-B54JFIW3.js.map → doctor-probes-O6YI6XSZ.js.map} +0 -0
  284. /package/bundle/{env-schema-4JXQUOH4.js.map → env-schema-B5RB32DC.js.map} +0 -0
  285. /package/bundle/{gossip-3C3BSNPN.js.map → gossip-SKRCPOBS.js.map} +0 -0
  286. /package/bundle/{guardrails-DL7ZSWVN.js.map → guardrails-64GQ5Y5K.js.map} +0 -0
  287. /package/bundle/{heartbeat-system-MVTRS4GP.js.map → heartbeat-system-X4MUTKJD.js.map} +0 -0
  288. /package/bundle/{hook-system-M3POLUIB.js.map → hook-system-YB635OC4.js.map} +0 -0
  289. /package/bundle/{hotskills-FWX4QI7V.js.map → hotskills-Q75D2DK3.js.map} +0 -0
  290. /package/bundle/{install-manifest-5PPWMD2W.js.map → install-manifest-J7ICPCJN.js.map} +0 -0
  291. /package/bundle/{irc-adapter-PTTZD32W.js.map → irc-adapter-TVEV4R6H.js.map} +0 -0
  292. /package/bundle/{irc-config-CP7ZMUOX.js.map → irc-config-M676FOFI.js.map} +0 -0
  293. /package/bundle/{kanban-board-M326B2XJ.js.map → kanban-board-DLEJUCNN.js.map} +0 -0
  294. /package/bundle/{kanban-channel-IJ52OMNA.js.map → kanban-channel-XOLUHJZJ.js.map} +0 -0
  295. /package/bundle/{lazy-require-KCRVT4SI.js.map → lazy-require-JKQSALXN.js.map} +0 -0
  296. /package/bundle/{logger-OWCSNYCA.js.map → logger-3EGHBD4R.js.map} +0 -0
  297. /package/bundle/{main-chat-ZNUZCTNS.js.map → main-chat-3H63REKK.js.map} +0 -0
  298. /package/bundle/{master-user-HSKM4ZFN.js.map → master-user-MUBUP3KD.js.map} +0 -0
  299. /package/bundle/{media-utils-3ZYOD7SK.js.map → media-utils-HUUIALAJ.js.map} +0 -0
  300. /package/bundle/{message-pipeline-AUIUNM5R.js.map → message-pipeline-GRDRWONR.js.map} +0 -0
  301. /package/bundle/{model-health-registry-MLEIZSTV.js.map → model-health-registry-QADMFQFQ.js.map} +0 -0
  302. /package/bundle/{nerve-IGSXBKZZ.js.map → nerve-QPAEBRKX.js.map} +0 -0
  303. /package/bundle/{notification-BFSIEECG.js.map → notification-3JICGXWU.js.map} +0 -0
  304. /package/bundle/{openrouter-credits-NTVZDRYM.js.map → openrouter-credits-7NEIPYJN.js.map} +0 -0
  305. /package/bundle/{orc-tools-TOD4WHTM.js.map → orc-tools-UZVPONKY.js.map} +0 -0
  306. /package/bundle/{peer-auth-QC4EF2PM.js.map → peer-auth-RI43DKJE.js.map} +0 -0
  307. /package/bundle/{peer-config-TN55LFDC.js.map → peer-config-URM7DCW6.js.map} +0 -0
  308. /package/bundle/{peer-jwt-NCCPXJRX.js.map → peer-transport-SI7I72DB.js.map} +0 -0
  309. /package/bundle/{peer-transport-5VKK2I7P.js.map → phase-transport-ESWWACZI.js.map} +0 -0
  310. /package/bundle/{phase-transport-FS6NL4A5.js.map → reconcile-GFDQYNBD.js.map} +0 -0
  311. /package/bundle/{reconciler-NZ4O4BCP.js.map → reconciler-IEUJXJN2.js.map} +0 -0
  312. /package/bundle/{restore-IFHPI7I7.js.map → restore-FARTGLQQ.js.map} +0 -0
  313. /package/bundle/{reconcile-CTFCLQRN.js.map → rollback-GEWPZABG.js.map} +0 -0
  314. /package/bundle/{sandbox-runtime-QROWHDCS.js.map → sandbox-runtime-DV6E25J6.js.map} +0 -0
  315. /package/bundle/{self-healer-utils-IFAYOQO2.js.map → self-healer-utils-P4SKNNEM.js.map} +0 -0
  316. /package/bundle/{rollback-ANRI3T5Z.js.map → sha-tracker-77SHLYNY.js.map} +0 -0
  317. /package/bundle/{skill-session-VJXTKOKL.js.map → skill-session-5HSMXY54.js.map} +0 -0
  318. /package/bundle/{sha-tracker-ZWBP6CIJ.js.map → skill-stats-MI3RSWWL.js.map} +0 -0
  319. /package/bundle/{skill-stats-JORH5DGM.js.map → skill-watcher-5L7JE6TN.js.map} +0 -0
  320. /package/bundle/{skill-watcher-E4MGLKLS.js.map → sleep-I4JFASCY.js.map} +0 -0
  321. /package/bundle/{sleep-BEWAUFCL.js.map → soul-bundle-522C3IRH.js.map} +0 -0
  322. /package/bundle/{soul-bundle-VWAVHCZ6.js.map → spin-VHNGNWTD.js.map} +0 -0
  323. /package/bundle/{spin-notifications-SE2HVZI7.js.map → spin-notifications-7NC5XZEM.js.map} +0 -0
  324. /package/bundle/{spin-E3ZDEDKT.js.map → spin-types-C5KOQOPD.js.map} +0 -0
  325. /package/bundle/{sse-parser-anthropic-A6R4Z2TB.js.map → sse-parser-anthropic-MMTVWHLI.js.map} +0 -0
  326. /package/bundle/{sse-parser-responses-HSZY3QGJ.js.map → sse-parser-responses-3AOFN64C.js.map} +0 -0
  327. /package/bundle/{ssrf-guard-O6SHIK6Q.js.map → ssrf-guard-U2JA72TC.js.map} +0 -0
  328. /package/bundle/{spin-types-OIE67MJK.js.map → stt-PSOPPBV4.js.map} +0 -0
  329. /package/bundle/{stt-LGVPXMVR.js.map → task-store-MNCW42BW.js.map} +0 -0
  330. /package/bundle/{task-store-W5BFIAIH.js.map → tool-registry-JJMWCQKZ.js.map} +0 -0
  331. /package/bundle/{tool-registry-7FK3OQGL.js.map → tool-sandbox-CNL6V6IH.js.map} +0 -0
  332. /package/bundle/{tool-sandbox-4UC6GAKA.js.map → transport-config-6MB2K2XC.js.map} +0 -0
  333. /package/bundle/{transport-config-KBF5W2DP.js.map → update-HGQAOC5L.js.map} +0 -0
  334. /package/bundle/{update-CKFP6LBE.js.map → usage-tracker-SR4BI6ZT.js.map} +0 -0
  335. /package/bundle/{usage-tracker-NXD364VX.js.map → user-registry-4PACZJIJ.js.map} +0 -0
@@ -5,34 +5,34 @@ import {
5
5
  } from "./chunk-63A7ZRIH.js";
6
6
  import {
7
7
  transcribeAudio
8
- } from "./chunk-OKAQICWY.js";
8
+ } from "./chunk-3GQX34S2.js";
9
9
  import {
10
10
  ModelNotFoundError
11
- } from "./chunk-5QUTMUIK.js";
11
+ } from "./chunk-JXYWDAHD.js";
12
12
  import {
13
13
  fire,
14
14
  hasHooks
15
- } from "./chunk-NRUSRJXR.js";
15
+ } from "./chunk-DZJ5QZFD.js";
16
16
  import {
17
17
  init_spin_types,
18
18
  parseSessionType,
19
19
  sessionType,
20
20
  typeLabel
21
- } from "./chunk-C7K6VZNY.js";
21
+ } from "./chunk-BNXV7SZI.js";
22
22
  import {
23
23
  sanitizeOutbound
24
24
  } from "./chunk-YWZPKBO6.js";
25
25
  import {
26
26
  abmind
27
- } from "./chunk-IKUZPMVA.js";
27
+ } from "./chunk-YJZE4OK3.js";
28
28
  import {
29
29
  buildSoulBundle,
30
30
  init_soul_bundle
31
- } from "./chunk-EFJVUJBE.js";
31
+ } from "./chunk-Y5FEFKGM.js";
32
32
  import {
33
33
  init_user_registry,
34
34
  loadUsers
35
- } from "./chunk-ZV4IWKDJ.js";
35
+ } from "./chunk-E7XD5UGB.js";
36
36
  import {
37
37
  init_bridge_lock_transport,
38
38
  readAndClearRestartReason,
@@ -40,10 +40,10 @@ import {
40
40
  updateBridgeLockField,
41
41
  writeForceSleep,
42
42
  writeSleepStatus
43
- } from "./chunk-GRVWZO4C.js";
43
+ } from "./chunk-KOSFXW2S.js";
44
44
  import {
45
45
  readEntries
46
- } from "./chunk-PEDX56EL.js";
46
+ } from "./chunk-EFGBM555.js";
47
47
  import {
48
48
  init_local_time,
49
49
  localTime
@@ -51,11 +51,11 @@ import {
51
51
  import {
52
52
  getEnv,
53
53
  init_env_schema
54
- } from "./chunk-65VCEC32.js";
54
+ } from "./chunk-6PA5JBUU.js";
55
55
  import {
56
56
  init_log_and_swallow,
57
57
  logAndSwallow
58
- } from "./chunk-YSKCQH6E.js";
58
+ } from "./chunk-2IYJ4I66.js";
59
59
  import {
60
60
  init_logger,
61
61
  logDebug,
@@ -63,7 +63,7 @@ import {
63
63
  logInfo,
64
64
  logTrace,
65
65
  logWarn
66
- } from "./chunk-GWILHZPT.js";
66
+ } from "./chunk-XRTXYN66.js";
67
67
  import {
68
68
  abtarsHome,
69
69
  init_paths
@@ -822,7 +822,7 @@ var commandMiddleware = async (ctx, next) => {
822
822
  updateCtxStart,
823
823
  conversationBuffer
824
824
  } = deps;
825
- const { spin } = await import("./spin-E3ZDEDKT.js");
825
+ const { spin } = await import("./spin-VHNGNWTD.js");
826
826
  const registry = loadUsers();
827
827
  const resolvedUserId = msg.userId;
828
828
  const user = registry.byUserId.get(resolvedUserId);
@@ -917,7 +917,7 @@ var busyGuardMiddleware = async (ctx, next) => {
917
917
  const { msg, adapter, deps } = ctx;
918
918
  const userId = msg.userId;
919
919
  const activeId = deps.sessionManager.getActiveSessionId(userId, msg.platform);
920
- const { spin } = await import("./spin-E3ZDEDKT.js");
920
+ const { spin } = await import("./spin-VHNGNWTD.js");
921
921
  const entry = spin.getSessionById(activeId);
922
922
  if (!entry) {
923
923
  await next();
@@ -1050,7 +1050,7 @@ async function buildPrompt(msg, text, deps, registry) {
1050
1050
  const userId = msg.userId;
1051
1051
  const sessionKey = deps.sessionManager.getActiveSessionId(userId, msg.platform);
1052
1052
  const bufKey = `${msg.platform}:${channelId}`;
1053
- const { spin } = await import("./spin-E3ZDEDKT.js");
1053
+ const { spin } = await import("./spin-VHNGNWTD.js");
1054
1054
  const pSession = spin.getSessionById(sessionKey);
1055
1055
  let prompt = `[${localTime()}] ${text}`;
1056
1056
  let imageContent;
@@ -1398,7 +1398,7 @@ function setIdleCompactReset(fn) {
1398
1398
  async function resetAndPrepare(opts) {
1399
1399
  await opts.transport.resetSession(opts.sessionKey);
1400
1400
  if (opts.conversationBuffer && opts.bufKey) opts.conversationBuffer.clear(opts.bufKey);
1401
- const { spin } = await import("./spin-E3ZDEDKT.js");
1401
+ const { spin } = await import("./spin-VHNGNWTD.js");
1402
1402
  const pSession = spin.getSessionById(opts.sessionKey);
1403
1403
  if (pSession) {
1404
1404
  pSession.seen = false;
@@ -1428,8 +1428,8 @@ async function handleInboundMessage(msg, adapter, deps) {
1428
1428
  return;
1429
1429
  }
1430
1430
  }
1431
- const { spin } = await import("./spin-E3ZDEDKT.js");
1432
- const { sessionType: sessionType2 } = await import("./spin-types-OIE67MJK.js");
1431
+ const { spin } = await import("./spin-VHNGNWTD.js");
1432
+ const { sessionType: sessionType2 } = await import("./spin-types-C5KOQOPD.js");
1433
1433
  const switchedSession = spin.getActiveSession(msg.userId, msg.platform);
1434
1434
  const switchedToLive = switchedSession?.transport && sessionType2(switchedSession) !== "A" && switchedSession.status === "ready";
1435
1435
  if (switchedToLive) {
@@ -1521,7 +1521,7 @@ ${prompt}`;
1521
1521
  const sessionTransport = activeSession.transport ?? transport;
1522
1522
  logDebug(TAG3, `Route: session=${activeSessionId} type=${sessionType2(activeSession)} transport=${activeSession.transport ? "session" : "main"}`);
1523
1523
  if ("sandboxPolicy" in sessionTransport) {
1524
- const { buildPolicy } = await import("./tool-sandbox-4UC6GAKA.js");
1524
+ const { buildPolicy } = await import("./tool-sandbox-CNL6V6IH.js");
1525
1525
  sessionTransport.sandboxPolicy = buildPolicy("owner");
1526
1526
  }
1527
1527
  if ("isPaused" in sessionTransport) {
@@ -1543,6 +1543,8 @@ ${prompt}`;
1543
1543
  userId,
1544
1544
  await: true
1545
1545
  }).then((r) => r.result ?? "");
1546
+ void responsePromise.catch(() => {
1547
+ });
1546
1548
  if (!isVoice && adapter.setReaction && msg.messageId) {
1547
1549
  await adapter.setReaction(channelId, msg.messageId, "\u{1F440}");
1548
1550
  }
@@ -1806,19 +1808,21 @@ Use /model to switch.`, { threadId: msg.threadId });
1806
1808
  }).catch((err2) => logAndSwallow(TAG3, "adapter call", err2));
1807
1809
  }
1808
1810
  const errStr = String(err instanceof Error ? err.message : JSON.stringify(err));
1811
+ const SYNTHETIC_PREFIXES = ["[SESSION START]", "[SYSTEM]", "[TASK COMPLETE]"];
1812
+ const notifyUser = !SYNTHETIC_PREFIXES.some((p) => text.startsWith(p));
1809
1813
  const isContextOverflow = errStr.includes("ValidationException") || (errStr.includes("context window") || errStr.includes("token limit") || errStr.includes("maximum context"));
1810
1814
  const isTimeout = errStr.includes("timed out") || errStr.includes("Prompt already in progress");
1811
1815
  if (isContextOverflow) {
1812
1816
  logWarn(TAG3, `Context overflow detected \u2014 auto-resetting session`);
1813
1817
  await resetAndPrepare({ transport, sessionKey: activeSessionId, reason: `ctx-overflow: ${errStr.slice(0, 100)}` });
1814
- await adapter.sendMessage(channelId, "\u{1F504} Context window full \u2014 session reset. Send your message again.", { threadId: msg.threadId }).catch((err2) => logAndSwallow(TAG3, "adapter call", err2));
1818
+ if (notifyUser) await adapter.sendMessage(channelId, "\u{1F504} Context window full \u2014 session reset. Send your message again.", { threadId: msg.threadId }).catch((err2) => logAndSwallow(TAG3, "adapter call", err2));
1815
1819
  } else if (isTimeout) {
1816
1820
  logWarn(TAG3, `Request timeout \u2014 not resetting session`);
1817
- await adapter.sendMessage(channelId, "\u274C Model timed out.", { threadId: msg.threadId }).catch((err2) => logAndSwallow(TAG3, "adapter call", err2));
1821
+ if (notifyUser) await adapter.sendMessage(channelId, "\u274C Model timed out.", { threadId: msg.threadId }).catch((err2) => logAndSwallow(TAG3, "adapter call", err2));
1818
1822
  } else {
1819
1823
  logError(TAG3, `Pipeline error: ${errStr.slice(0, 500)}`);
1820
1824
  const reason = errStr.includes("credits") ? "OpenRouter credits exhausted \u2014 top up at openrouter.ai/credits" : errStr.includes("rate") || errStr.includes("429") ? "Rate limited." : errStr.includes("auth") || errStr.includes("401") || errStr.includes("403") ? "Authentication failed." : errStr.includes("connect") || errStr.includes("ECONNREFUSED") ? "Connection lost." : errStr.includes("exhausted") || errStr.includes("no candidates") ? "All models exhausted." : errStr.includes("aborted") || errStr.includes("code=20") ? "Request aborted \u2014 model connection dropped." : `Error: ${errStr.slice(0, 80)}`;
1821
- await adapter.sendMessage(channelId, `\u274C ${reason}`, { threadId: msg.threadId }).catch((err2) => logAndSwallow(TAG3, "adapter call", err2));
1825
+ if (notifyUser) await adapter.sendMessage(channelId, `\u274C ${reason}`, { threadId: msg.threadId }).catch((err2) => logAndSwallow(TAG3, "adapter call", err2));
1822
1826
  }
1823
1827
  } finally {
1824
1828
  clearInterval(typingInterval);
@@ -1874,7 +1878,7 @@ function registerCommand(name, handler) {
1874
1878
  registerExact(name, handler);
1875
1879
  }
1876
1880
  async function handleCommand(text, ctx) {
1877
- const isMaster = !ctx.userId || ctx.userId === "master" || (await import("./user-registry-35BW4XKM.js")).loadUsers().byUserId.get(ctx.userId)?.role === "master";
1881
+ const isMaster = !ctx.userId || ctx.userId === "master" || (await import("./user-registry-4PACZJIJ.js")).loadUsers().byUserId.get(ctx.userId)?.role === "master";
1878
1882
  if (!isMaster) {
1879
1883
  const cmd = text.split(/\s/)[0];
1880
1884
  if (cmd.startsWith("/") && !NON_MASTER_COMMANDS.has(cmd)) {
@@ -1908,7 +1912,7 @@ Type /help for available commands.`);
1908
1912
  return false;
1909
1913
  }
1910
1914
  async function triggerNewSession(ctx, reason = "new-session") {
1911
- const { hasHooks: hasHooks2, fire: fireHook } = await import("./hook-system-M3POLUIB.js");
1915
+ const { hasHooks: hasHooks2, fire: fireHook } = await import("./hook-system-YB635OC4.js");
1912
1916
  if (hasHooks2("SessionEnd")) {
1913
1917
  await fireHook("SessionEnd", { event: "SessionEnd", timestamp: (/* @__PURE__ */ new Date()).toISOString(), sessionKey: ctx.sessionKey, platform: ctx.platform, userId: ctx.userId, reason }).catch((err) => logAndSwallow(TAG4, "fireHook session", err));
1914
1918
  }
@@ -1926,12 +1930,12 @@ async function triggerNewSession(ctx, reason = "new-session") {
1926
1930
  }
1927
1931
  }
1928
1932
  async function triggerResetSession(ctx) {
1929
- const { hasHooks: hasHooks2, fire: fireHook } = await import("./hook-system-M3POLUIB.js");
1933
+ const { hasHooks: hasHooks2, fire: fireHook } = await import("./hook-system-YB635OC4.js");
1930
1934
  if (hasHooks2("SessionEnd")) {
1931
1935
  await fireHook("SessionEnd", { event: "SessionEnd", timestamp: (/* @__PURE__ */ new Date()).toISOString(), sessionKey: ctx.sessionKey, platform: ctx.platform, userId: ctx.userId, reason: "reset-transport" }).catch((err) => logAndSwallow(TAG4, "fireHook session", err));
1932
1936
  }
1933
1937
  await ctx.idleSave.save(ctx.sessionKey, ctx.chatId);
1934
- const { clearTransportCache } = await import("./transport-config-KBF5W2DP.js");
1938
+ const { clearTransportCache } = await import("./transport-config-6MB2K2XC.js");
1935
1939
  clearTransportCache();
1936
1940
  if (ctx.rebuildTransport) await ctx.rebuildTransport();
1937
1941
  await resetAndPrepare({
@@ -1995,7 +1999,7 @@ var TAG5 = "cmd";
1995
1999
  async function handleNewReset(text, ctx) {
1996
2000
  const isResetDefault = text.trim().toLowerCase() === "/reset default";
1997
2001
  if (isResetDefault) {
1998
- const { resetToDefaults } = await import("./transport-config-KBF5W2DP.js");
2002
+ const { resetToDefaults } = await import("./transport-config-6MB2K2XC.js");
1999
2003
  resetToDefaults();
2000
2004
  } else {
2001
2005
  try {
@@ -2017,17 +2021,29 @@ async function handleNewReset(text, ctx) {
2017
2021
  }
2018
2022
  async function handleCompact(_text, ctx) {
2019
2023
  try {
2024
+ const { isCompactable } = await import("./spin-types-C5KOQOPD.js");
2025
+ if (!isCompactable(ctx.sessionKey)) {
2026
+ await ctx.reply("Compaction not available for this session.");
2027
+ return true;
2028
+ }
2020
2029
  const transport = ctx.transport;
2021
2030
  if (transport.contextOrchestrator) {
2022
2031
  const budget = transport.config?.maxContext ?? 2e5;
2023
- const success = await transport.contextOrchestrator.forceCompact(ctx.sessionKey, budget);
2024
- await ctx.reply(success ? "\u{1F4E6} Compaction complete." : "\u{1F4E6} Nothing to compact.");
2032
+ const result = await transport.contextOrchestrator.forceCompact(ctx.sessionKey, budget);
2033
+ if (result.skipped) {
2034
+ await ctx.reply("Compaction skipped (recent passes saved little \u2014 retry in ~30 min).");
2035
+ } else if (result.ok) {
2036
+ const pct = Math.round(result.savingsPct * 100);
2037
+ await ctx.reply(`Compaction complete. ${result.tokensBefore}\u2192${result.tokensAfter} tokens (${pct}% saved).`);
2038
+ } else {
2039
+ await ctx.reply("Nothing to compact.");
2040
+ }
2025
2041
  } else {
2026
- await ctx.reply("\u{1F4E6} Context engine not active for this transport.");
2042
+ await ctx.reply("Context engine not active for this transport.");
2027
2043
  }
2028
2044
  } catch (err) {
2029
2045
  logError(TAG5, "Manual compaction failed", err);
2030
- await ctx.reply("\u274C Compaction failed.");
2046
+ await ctx.reply("Compaction failed.");
2031
2047
  }
2032
2048
  return true;
2033
2049
  }
@@ -2035,7 +2051,7 @@ async function handleEmergencyAlias(_text, ctx) {
2035
2051
  return handleModels("/model emergency", ctx);
2036
2052
  }
2037
2053
  async function handleModels(text, ctx) {
2038
- const { loadTransport, resolveAgent, getModelsForProvider, writeTransportConfig } = await import("./transport-config-KBF5W2DP.js");
2054
+ const { loadTransport, resolveAgent, getModelsForProvider, writeTransportConfig } = await import("./transport-config-6MB2K2XC.js");
2039
2055
  const tc = loadTransport();
2040
2056
  const prof = tc ? resolveAgent("professor", tc) : null;
2041
2057
  const currentModel = ("currentModel" in ctx.transport ? ctx.transport.currentModel : void 0) ?? prof?.model ?? "unknown";
@@ -2053,8 +2069,8 @@ async function handleModels(text, ctx) {
2053
2069
  if (tc) {
2054
2070
  const hmProvider = tc.hailMary ? tc.providers[tc.hailMary.provider] : void 0;
2055
2071
  if (hmProvider) {
2056
- const { validateProviderReady, formatValidationError } = await import("./transport-config-KBF5W2DP.js");
2057
- const { getEnv: getEnv2 } = await import("./env-schema-4JXQUOH4.js");
2072
+ const { validateProviderReady, formatValidationError } = await import("./transport-config-6MB2K2XC.js");
2073
+ const { getEnv: getEnv2 } = await import("./env-schema-B5RB32DC.js");
2058
2074
  const result = validateProviderReady(tc.hailMary.provider, hmProvider, getEnv2());
2059
2075
  if (!result.ok) {
2060
2076
  await ctx.reply(formatValidationError(tc.hailMary.provider, result));
@@ -2067,7 +2083,7 @@ async function handleModels(text, ctx) {
2067
2083
  return true;
2068
2084
  }
2069
2085
  if (arg === "restore") {
2070
- const { restorePrevious } = await import("./transport-config-KBF5W2DP.js");
2086
+ const { restorePrevious } = await import("./transport-config-6MB2K2XC.js");
2071
2087
  const result = restorePrevious();
2072
2088
  if (!result.ok) {
2073
2089
  await ctx.reply(`\u274C ${result.error}`);
@@ -2079,7 +2095,7 @@ async function handleModels(text, ctx) {
2079
2095
  return true;
2080
2096
  }
2081
2097
  if (arg === "default") {
2082
- const { resetToDefaults } = await import("./transport-config-KBF5W2DP.js");
2098
+ const { resetToDefaults } = await import("./transport-config-6MB2K2XC.js");
2083
2099
  if (!resetToDefaults()) {
2084
2100
  await ctx.reply("\u274C Factory config not found \u2014 run abtars install to restore.");
2085
2101
  return true;
@@ -2087,15 +2103,15 @@ async function handleModels(text, ctx) {
2087
2103
  await ctx.reply("\u{1F504} Factory config restored.");
2088
2104
  return true;
2089
2105
  }
2090
- if (arg === "health reset" || arg === "primary") {
2106
+ if (arg === "health reset" || arg === "primary" || arg === "reset") {
2091
2107
  const t = ctx.transport;
2092
2108
  const wasEmergency = t.isEmergencyMode;
2093
2109
  t.setEmergencyMode?.(null);
2094
2110
  if (t.policy?.registry) {
2095
2111
  t.policy.registry.resetAll();
2096
- await ctx.reply(wasEmergency ? "\u{1F50C} Emergency mode cleared + model health reset \u2014 free models active." : "\u{1F50C} Model health reset \u2014 all models available.");
2112
+ await ctx.reply(wasEmergency ? "Model health reset + emergency mode cleared \u2014 primary model active." : "Model health reset \u2014 all models available (sticky credits/auth cleared).");
2097
2113
  } else {
2098
- await ctx.reply("\u{1F50C} No fallback policy configured.");
2114
+ await ctx.reply("No fallback policy configured.");
2099
2115
  }
2100
2116
  return true;
2101
2117
  }
@@ -2105,7 +2121,7 @@ async function handleModels(text, ctx) {
2105
2121
  return true;
2106
2122
  }
2107
2123
  const endpoint = prof.provider.endpoint ?? "http://localhost:11434/v1";
2108
- const apiKey = prof.provider.apiKeyEnv ? (await import("./env-schema-4JXQUOH4.js")).getEnv().getApiKey(prof.provider.apiKeyEnv) : void 0;
2124
+ const apiKey = prof.provider.apiKeyEnv ? (await import("./env-schema-B5RB32DC.js")).getEnv().getApiKey(prof.provider.apiKeyEnv) : void 0;
2109
2125
  const models = /* @__PURE__ */ new Set();
2110
2126
  for (const [, agent] of Object.entries(tc.agents)) {
2111
2127
  if (agent.provider === prof.providerName) models.add(agent.model);
@@ -2116,7 +2132,7 @@ async function handleModels(text, ctx) {
2116
2132
  if (tc.hailMary?.provider === prof.providerName) models.add(tc.hailMary.model);
2117
2133
  await ctx.reply(`\u{1FA7A} Checking ${models.size} models on ${prof.providerName}...`);
2118
2134
  const results = [];
2119
- const { loadModels } = await import("./transport-config-KBF5W2DP.js");
2135
+ const { loadModels } = await import("./transport-config-6MB2K2XC.js");
2120
2136
  const catalog = loadModels();
2121
2137
  for (const model of models) {
2122
2138
  try {
@@ -2154,7 +2170,7 @@ async function handleModels(text, ctx) {
2154
2170
  }
2155
2171
  const { writeFileSync: writeFileSync2 } = await import("node:fs");
2156
2172
  const { join: join4 } = await import("node:path");
2157
- const { configDir } = await import("./transport-config-KBF5W2DP.js");
2173
+ const { configDir } = await import("./transport-config-6MB2K2XC.js");
2158
2174
  writeFileSync2(join4(configDir(), "models.json"), JSON.stringify(catalog, null, 2) + "\n");
2159
2175
  await ctx.reply(`\u{1FA7A} Model Health:
2160
2176
  ${results.join("\n")}`);
@@ -2177,8 +2193,8 @@ ${results.join("\n")}`);
2177
2193
  return true;
2178
2194
  }
2179
2195
  {
2180
- const { validateProviderReady, formatValidationError } = await import("./transport-config-KBF5W2DP.js");
2181
- const { getEnv: getEnv2 } = await import("./env-schema-4JXQUOH4.js");
2196
+ const { validateProviderReady, formatValidationError } = await import("./transport-config-6MB2K2XC.js");
2197
+ const { getEnv: getEnv2 } = await import("./env-schema-B5RB32DC.js");
2182
2198
  const result = validateProviderReady(prof.providerName, prof.provider, getEnv2());
2183
2199
  if (!result.ok) {
2184
2200
  await ctx.reply(formatValidationError(prof.providerName, result));
@@ -2186,7 +2202,7 @@ ${results.join("\n")}`);
2186
2202
  }
2187
2203
  }
2188
2204
  tc.agents["professor"].model = newModel;
2189
- const { cleanDemotedModels } = await import("./transport-config-KBF5W2DP.js");
2205
+ const { cleanDemotedModels } = await import("./transport-config-6MB2K2XC.js");
2190
2206
  cleanDemotedModels(tc, newModel);
2191
2207
  writeTransportConfig(tc, `professor model \u2192 ${newModel}`);
2192
2208
  if ("setModel" in ctx.transport) {
@@ -2197,7 +2213,7 @@ ${results.join("\n")}`);
2197
2213
  }
2198
2214
  if (arg === "list" || arg.startsWith("list ")) {
2199
2215
  const providerArg = arg.slice(5).trim();
2200
- const { getAvailableProviders, getModelsForProvider: getModels } = await import("./transport-config-KBF5W2DP.js");
2216
+ const { getAvailableProviders, getModelsForProvider: getModels } = await import("./transport-config-6MB2K2XC.js");
2201
2217
  if (!tc) {
2202
2218
  await ctx.reply("\u274C transport.json not loaded");
2203
2219
  return true;
@@ -2255,8 +2271,8 @@ Use /model quick <name> to switch.`);
2255
2271
  await ctx.reply(`\u274C Provider "${providerName}" not found. Available: ${Object.keys(tc.providers).join(", ")}`);
2256
2272
  return true;
2257
2273
  }
2258
- const { validateProviderReady, formatValidationError, loadProviderDefaults } = await import("./transport-config-KBF5W2DP.js");
2259
- const { getEnv: getEnv2 } = await import("./env-schema-4JXQUOH4.js");
2274
+ const { validateProviderReady, formatValidationError, loadProviderDefaults } = await import("./transport-config-6MB2K2XC.js");
2275
+ const { getEnv: getEnv2 } = await import("./env-schema-B5RB32DC.js");
2260
2276
  const validation = validateProviderReady(providerName, provider2, getEnv2());
2261
2277
  if (!validation.ok) {
2262
2278
  await ctx.reply(formatValidationError(providerName, validation));
@@ -2366,7 +2382,7 @@ async function handleDoctor(_text, ctx) {
2366
2382
  const arg = _text.replace(/^\/(doctor|health)\s*/i, "").trim().toLowerCase();
2367
2383
  if (arg === "fix" || arg === "fix-full") {
2368
2384
  try {
2369
- const { runFixes, runAllProbes: runAllProbes2, renderHuman: renderHuman2 } = await import("./doctor-probes-B54JFIW3.js");
2385
+ const { runFixes, runAllProbes: runAllProbes2, renderHuman: renderHuman2 } = await import("./doctor-probes-O6YI6XSZ.js");
2370
2386
  const fixes = await runFixes();
2371
2387
  const fixLines = fixes.map((f) => ` ${f.success ? "+" : "x"} ${f.action}`).join("\n");
2372
2388
  const output2 = await runAllProbes2();
@@ -2380,14 +2396,14 @@ ${renderHuman2(output2)}`);
2380
2396
  return true;
2381
2397
  }
2382
2398
  await ctx.reply("\u{1FA7A} Running diagnostics...");
2383
- const { runAllProbes, renderHuman } = await import("./doctor-probes-B54JFIW3.js");
2399
+ const { runAllProbes, renderHuman } = await import("./doctor-probes-O6YI6XSZ.js");
2384
2400
  const output = await runAllProbes();
2385
2401
  await ctx.reply(renderHuman(output));
2386
2402
  return true;
2387
2403
  }
2388
2404
  async function handleStatus(_text, ctx) {
2389
2405
  if (ctx.phaseHealth && ctx.registry) {
2390
- const { getSystemStatus, renderStatusText } = await import("./system-status-FAVNIUFJ.js");
2406
+ const { getSystemStatus, renderStatusText } = await import("./system-status-4LYGOFNO.js");
2391
2407
  const status = await getSystemStatus({
2392
2408
  phaseHealth: ctx.phaseHealth,
2393
2409
  registry: ctx.registry,
@@ -2398,7 +2414,7 @@ async function handleStatus(_text, ctx) {
2398
2414
  });
2399
2415
  let text = renderStatusText(status);
2400
2416
  if (_text.trim().toLowerCase() === "full") {
2401
- const { envDump } = await import("./env-schema-4JXQUOH4.js");
2417
+ const { envDump } = await import("./env-schema-B5RB32DC.js");
2402
2418
  const dump = envDump();
2403
2419
  const envLines = Object.entries(dump).slice(0, 30).map(([k, v]) => ` ${k}: ${v}`);
2404
2420
  text += "\n\n\u{1F4CB} Config (top 30):\n" + envLines.join("\n");
@@ -2420,7 +2436,7 @@ async function handleWait(text, ctx) {
2420
2436
  }
2421
2437
  async function handleStop(_text, ctx) {
2422
2438
  await ctx.transport.sendInterrupt();
2423
- const { spin } = await import("./spin-E3ZDEDKT.js");
2439
+ const { spin } = await import("./spin-VHNGNWTD.js");
2424
2440
  const s = spin.getSessionById(ctx.sessionKey);
2425
2441
  if (s) s.busy = false;
2426
2442
  await ctx.reply("\u{1F6D1} Ctrl+C sent.");
@@ -2443,7 +2459,7 @@ async function handleRestart(_text, ctx) {
2443
2459
  return true;
2444
2460
  }
2445
2461
  async function handleHeartbeat(_text, ctx) {
2446
- const { getHeartbeatInstance } = await import("./heartbeat-system-MVTRS4GP.js");
2462
+ const { getHeartbeatInstance } = await import("./heartbeat-system-X4MUTKJD.js");
2447
2463
  const hb = getHeartbeatInstance();
2448
2464
  if (!hb) {
2449
2465
  await ctx.reply("\u{1F493} Heartbeat not available.");
@@ -2489,13 +2505,13 @@ async function handleHealing(text, ctx) {
2489
2505
  return true;
2490
2506
  }
2491
2507
  if (cmd === "reset") {
2492
- const { resetAutofixState } = await import("./sha-tracker-ZWBP6CIJ.js");
2508
+ const { resetAutofixState } = await import("./sha-tracker-77SHLYNY.js");
2493
2509
  resetAutofixState();
2494
2510
  await ctx.reply("\u{1FA7A} Autofix state reset \u2014 all suppressed faults re-enabled.");
2495
2511
  return true;
2496
2512
  }
2497
2513
  if (cmd === "list") {
2498
- const { loadFixes } = await import("./sha-tracker-ZWBP6CIJ.js");
2514
+ const { loadFixes } = await import("./sha-tracker-77SHLYNY.js");
2499
2515
  const { readFileSync: readFileSync3 } = await import("node:fs");
2500
2516
  const { join: join4 } = await import("node:path");
2501
2517
  const fixes = loadFixes();
@@ -2525,7 +2541,7 @@ ${lines.join("\n")}`);
2525
2541
  await ctx.reply("Usage: /healing approve <pattern>");
2526
2542
  return true;
2527
2543
  }
2528
- const { approveFix } = await import("./sha-tracker-ZWBP6CIJ.js");
2544
+ const { approveFix } = await import("./sha-tracker-77SHLYNY.js");
2529
2545
  const ok = approveFix(pattern);
2530
2546
  await ctx.reply(ok ? `\u2713 Approved: "${pattern}"` : `\u274C Pattern not found in self-rules.`);
2531
2547
  return true;
@@ -2536,7 +2552,7 @@ ${lines.join("\n")}`);
2536
2552
  await ctx.reply("Usage: /healing disable <pattern>");
2537
2553
  return true;
2538
2554
  }
2539
- const { disableFix } = await import("./sha-tracker-ZWBP6CIJ.js");
2555
+ const { disableFix } = await import("./sha-tracker-77SHLYNY.js");
2540
2556
  const ok = disableFix(pattern);
2541
2557
  await ctx.reply(ok ? `\u2713 Disabled: "${pattern}"` : `\u274C Pattern not found in self-rules.`);
2542
2558
  return true;
@@ -2551,7 +2567,7 @@ async function handleFull(_text, ctx) {
2551
2567
  await ctx.reply("\u{1F4FA} Full mode is only available on Telegram.");
2552
2568
  return true;
2553
2569
  }
2554
- const { spin } = await import("./spin-E3ZDEDKT.js");
2570
+ const { spin } = await import("./spin-VHNGNWTD.js");
2555
2571
  const s = spin.getSessionById(ctx.sessionKey);
2556
2572
  if (s) s.fullMode = true;
2557
2573
  await ctx.reply("\u{1F4FA} Full mode \u2014 sending raw output, TTS disabled.");
@@ -2562,7 +2578,7 @@ async function handleShort(_text, ctx) {
2562
2578
  await ctx.reply("\u2702\uFE0F Short mode is only available on Telegram.");
2563
2579
  return true;
2564
2580
  }
2565
- const { spin } = await import("./spin-E3ZDEDKT.js");
2581
+ const { spin } = await import("./spin-VHNGNWTD.js");
2566
2582
  const s = spin.getSessionById(ctx.sessionKey);
2567
2583
  if (s) s.fullMode = false;
2568
2584
  await ctx.reply("\u2702\uFE0F Short mode \u2014 clean responses, TTS enabled.");
@@ -2588,7 +2604,7 @@ async function buildStatusLines(ctx) {
2588
2604
  if ("currentModel" in ctx.transport) {
2589
2605
  model = ctx.transport.currentModel;
2590
2606
  } else {
2591
- const { loadTransport, resolveAgent } = await import("./transport-config-KBF5W2DP.js");
2607
+ const { loadTransport, resolveAgent } = await import("./transport-config-6MB2K2XC.js");
2592
2608
  const tc2 = loadTransport();
2593
2609
  const prof2 = tc2 ? resolveAgent("professor", tc2) : null;
2594
2610
  model = prof2?.model ?? "unknown";
@@ -2596,9 +2612,9 @@ async function buildStatusLines(ctx) {
2596
2612
  const transportStatus = ctx.transport.isReady ? "\u2713 Connected" : "\u274C Disconnected";
2597
2613
  const uptime = formatUptime(Date.now() - ctx.startedAt);
2598
2614
  const ctxPct = ctx.transport.contextPercent >= 0 ? `${ctx.transport.contextPercent}%` : "n/a";
2599
- const { getHeartbeatInstance } = await import("./heartbeat-system-MVTRS4GP.js");
2615
+ const { getHeartbeatInstance } = await import("./heartbeat-system-X4MUTKJD.js");
2600
2616
  const hb = getHeartbeatInstance();
2601
- const { loadTransport: lt, resolveAgent: ra } = await import("./transport-config-KBF5W2DP.js");
2617
+ const { loadTransport: lt, resolveAgent: ra } = await import("./transport-config-6MB2K2XC.js");
2602
2618
  const tc = lt();
2603
2619
  const prof = tc ? ra("professor", tc) : null;
2604
2620
  const provider = prof?.providerName ?? "unknown";
@@ -2671,8 +2687,8 @@ function formatUptime(ms) {
2671
2687
  return h > 0 ? `${h}h ${m}m` : `${m}m`;
2672
2688
  }
2673
2689
  async function handleUsage(_text, ctx) {
2674
- const { readUsage, resetUsage } = await import("./usage-tracker-NXD364VX.js");
2675
- const { loadModels } = await import("./transport-config-KBF5W2DP.js");
2690
+ const { readUsage, resetUsage } = await import("./usage-tracker-SR4BI6ZT.js");
2691
+ const { loadModels } = await import("./transport-config-6MB2K2XC.js");
2676
2692
  const arg = _text.replace("/usage", "").trim();
2677
2693
  if (arg === "reset") {
2678
2694
  resetUsage();
@@ -2723,13 +2739,13 @@ async function handleUsage(_text, ctx) {
2723
2739
  `;
2724
2740
  }
2725
2741
  }
2726
- const { fetchOpenRouterCredits } = await import("./openrouter-credits-NTVZDRYM.js");
2742
+ const { fetchOpenRouterCredits } = await import("./openrouter-credits-7NEIPYJN.js");
2727
2743
  const credits = await fetchOpenRouterCredits();
2728
2744
  if (credits) {
2729
2745
  msg += `
2730
2746
  \u{1F4B3} OpenRouter: $${credits.remaining.toFixed(2)} remaining ($${credits.purchased.toFixed(2)} purchased, $${credits.used.toFixed(2)} used)`;
2731
2747
  }
2732
- const { getBudgetStatus } = await import("./budget-45QOBDWA.js");
2748
+ const { getBudgetStatus } = await import("./budget-WUM3SPKW.js");
2733
2749
  const budgetItems = getBudgetStatus();
2734
2750
  if (budgetItems.length > 0) {
2735
2751
  msg += `
@@ -2746,7 +2762,7 @@ async function handleUsage(_text, ctx) {
2746
2762
  return true;
2747
2763
  }
2748
2764
  async function handleOpenRouter(_text, ctx) {
2749
- const { fetchOpenRouterCredits } = await import("./openrouter-credits-NTVZDRYM.js");
2765
+ const { fetchOpenRouterCredits } = await import("./openrouter-credits-7NEIPYJN.js");
2750
2766
  const credits = await fetchOpenRouterCredits();
2751
2767
  if (!credits) {
2752
2768
  await ctx.reply("\u274C OpenRouter API key not set or request failed.");
@@ -2762,7 +2778,7 @@ Remaining: $${credits.remaining.toFixed(2)}`
2762
2778
  return true;
2763
2779
  }
2764
2780
  async function handleWhoami(_text, ctx) {
2765
- const { loadUsers: loadUsers2 } = await import("./user-registry-35BW4XKM.js");
2781
+ const { loadUsers: loadUsers2 } = await import("./user-registry-4PACZJIJ.js");
2766
2782
  const reg = loadUsers2();
2767
2783
  const CLASS_NAMES = ["UNCLASSIFIED", "RESTRICTED", "CONFIDENTIAL", "SECRET"];
2768
2784
  const user = ctx.userId ? reg.byUserId.get(ctx.userId) : void 0;
@@ -2802,10 +2818,8 @@ function makeExecHelper(spawnFn) {
2802
2818
  });
2803
2819
  }
2804
2820
  async function runDevUpdate(ctx, spawnFn, execHelper) {
2805
- const { existsSync: fsExistsSync } = await import("node:fs");
2806
2821
  const releasesRoot = join2(process.env["HOME"] ?? "", ".abtars-releases", "src");
2807
2822
  const abtarsDir = join2(releasesRoot, "abtars");
2808
- const abmindDir = join2(releasesRoot, "abmind");
2809
2823
  const execP = execHelper ?? makeExecHelper(spawnFn);
2810
2824
  await ctx.reply("Checking for updates...");
2811
2825
  const fetchResult = await execP("git", ["-C", abtarsDir, "fetch", "origin", "dev"], { timeout: 3e4 });
@@ -2839,38 +2853,8 @@ ${commits.slice(0, 300)}
2839
2853
  try {
2840
2854
  const co = await execP("git", ["-C", abtarsDir, "checkout", "origin/dev"], { timeout: 1e4 });
2841
2855
  if (!co.ok) throw new Error(`checkout failed: ${co.stderr.slice(-300) || co.stdout.slice(-300)}`);
2842
- const abmindGit = join2(abmindDir, ".git");
2843
- if (!fsExistsSync(abmindGit)) {
2844
- const cloneResult = await execP("git", ["clone", "--depth", "1", "-b", "dev", "https://github.com/aksika/abmind.git", abmindDir], { timeout: 12e4 });
2845
- if (!cloneResult.ok) logWarn("update", "abmind clone failed \u2014 skipping abmind update");
2846
- }
2847
- if (fsExistsSync(abmindGit)) {
2848
- await execP("git", ["-C", abmindDir, "fetch", "origin", "dev"], { timeout: 3e4 });
2849
- await execP("git", ["-C", abmindDir, "checkout", "origin/dev"], { timeout: 1e4 });
2850
- }
2851
2856
  const build = await execP("node", ["esbuild.config.js"], { cwd: abtarsDir, timeout: 18e4 });
2852
2857
  if (!build.ok) throw new Error(`build failed: ${build.stderr.slice(-400) || build.stdout.slice(-400)}`);
2853
- const abmindGit2 = join2(abmindDir, ".git");
2854
- if (ctx.memoryConfig.memoryEnabled && fsExistsSync(abmindGit2)) {
2855
- let needAbmindUpdate = false;
2856
- try {
2857
- const manifestRaw = readFileSync(join2(homedir(), ".abmind", "manifest.json"), "utf-8");
2858
- const mf = JSON.parse(manifestRaw);
2859
- if (!mf.source || mf.source === "npm") {
2860
- needAbmindUpdate = true;
2861
- } else {
2862
- const headCommit = (await execP("git", ["-C", abmindDir, "rev-parse", "--short", "HEAD"], { timeout: 5e3 })).stdout.trim();
2863
- if (!headCommit || headCommit !== (mf.commit ?? "")) needAbmindUpdate = true;
2864
- }
2865
- } catch {
2866
- needAbmindUpdate = true;
2867
- }
2868
- if (needAbmindUpdate) {
2869
- const abmindProc = spawnFn("abmind", ["update", "--dev", abmindDir], { detached: true, stdio: "ignore" });
2870
- abmindProc.on("error", (err) => logWarn("update", `spawn abmind failed (non-fatal): ${err.message}`));
2871
- abmindProc.unref();
2872
- }
2873
- }
2874
2858
  } catch (err) {
2875
2859
  const msg = err instanceof Error ? err.message : String(err);
2876
2860
  logWarn("update", `update aborted: ${msg}`);
@@ -2888,7 +2872,7 @@ async function handleSoftware(_text, ctx) {
2888
2872
  const { abtarsHome: abtarsHome2 } = await import("./paths-X4LRYUI6.js");
2889
2873
  const home = abtarsHome2();
2890
2874
  const arg = _text.replace(/^\/(software|update)\s*/i, "").trim();
2891
- const { loadUsers: loadUsers2 } = await import("./user-registry-35BW4XKM.js");
2875
+ const { loadUsers: loadUsers2 } = await import("./user-registry-4PACZJIJ.js");
2892
2876
  const user = loadUsers2().byUserId.get(ctx.userId);
2893
2877
  const isMaster = user?.role === "master";
2894
2878
  if (arg.startsWith("rollback")) {
@@ -2908,7 +2892,7 @@ async function handleSoftware(_text, ctx) {
2908
2892
  }
2909
2893
  await ctx.reply(`\u26A0\uFE0F Rolling back to slot ${asSlot}...`);
2910
2894
  try {
2911
- const { rollback } = await import("./rollback-ANRI3T5Z.js");
2895
+ const { rollback } = await import("./rollback-GEWPZABG.js");
2912
2896
  const code = await rollback({ to: asSlot });
2913
2897
  if (code !== 0) {
2914
2898
  await ctx.reply(`\u274C Rollback failed (exit ${code}).`);
@@ -2918,6 +2902,29 @@ async function handleSoftware(_text, ctx) {
2918
2902
  }
2919
2903
  return true;
2920
2904
  }
2905
+ if (arg === "abmind" || arg === "update abmind") {
2906
+ if (!isMaster) {
2907
+ await ctx.reply("Requires master role.");
2908
+ return true;
2909
+ }
2910
+ await ctx.reply("Updating abmind from dev (pull + build + install)...");
2911
+ logInfo("update", "abmind dev update requested");
2912
+ const { spawn: spawn3 } = await import("node:child_process");
2913
+ const child = spawn3("abmind", ["update", "--dev"], { stdio: ["ignore", "pipe", "pipe"] });
2914
+ let stderr = "";
2915
+ child.on("error", (err) => logWarn("update", `spawn abmind failed (non-fatal): ${err.message}`));
2916
+ child.stderr?.on("data", (d) => {
2917
+ stderr += d.toString();
2918
+ });
2919
+ child.on("close", (code) => {
2920
+ if (code !== 0 && code !== null) ctx.reply(`x abmind update failed (exit ${code}):
2921
+ ${stderr.slice(-300)}`).catch(() => {
2922
+ });
2923
+ else ctx.reply("+ abmind update complete \u2014 check /software").catch(() => {
2924
+ });
2925
+ });
2926
+ return true;
2927
+ }
2921
2928
  if (arg === "update" || arg === "update dev" || arg === "dev" || arg === "update git" || arg === "git" || arg === "update alpha" || arg === "alpha" || arg === "update stable" || arg === "stable" || arg === "update deploy" || arg === "deploy" || arg === "update pull" || arg === "pull" || arg === "update build" || arg === "build") {
2922
2929
  if (arg === "update") {
2923
2930
  await ctx.reply("Usage: /update dev | alpha | stable");
@@ -2946,9 +2953,6 @@ async function handleSoftware(_text, ctx) {
2946
2953
  ${stderr.slice(-300)}`).catch(() => {
2947
2954
  });
2948
2955
  });
2949
- if (ctx.memoryConfig.memoryEnabled) {
2950
- spawnDetached("abmind", ["update", "--alpha"], "update");
2951
- }
2952
2956
  } else {
2953
2957
  await ctx.reply("Updating from npm (stable)...");
2954
2958
  logInfo("update", "npm stable update requested");
@@ -2964,9 +2968,6 @@ ${stderr.slice(-300)}`).catch(() => {
2964
2968
  ${stderr.slice(-300)}`).catch(() => {
2965
2969
  });
2966
2970
  });
2967
- if (ctx.memoryConfig.memoryEnabled) {
2968
- spawnDetached("abmind", ["update", "--stable"], "update");
2969
- }
2970
2971
  }
2971
2972
  return true;
2972
2973
  }
@@ -3017,7 +3018,7 @@ ${stderr.slice(-300)}`).catch(() => {
3017
3018
  lines.push(" abtars: unknown");
3018
3019
  }
3019
3020
  lines.push("");
3020
- const { getEnv: getEnv2 } = await import("./env-schema-4JXQUOH4.js");
3021
+ const { getEnv: getEnv2 } = await import("./env-schema-B5RB32DC.js");
3021
3022
  const memoryProvider = getEnv2().memory;
3022
3023
  if (memoryProvider === "abmind" || memoryProvider === "auto") {
3023
3024
  const abmindBundlePkg = join2(home, "app", "bundle", "node_modules", "abmind", "package.json");
@@ -3108,7 +3109,7 @@ ${stderr.slice(-300)}`).catch(() => {
3108
3109
  return true;
3109
3110
  }
3110
3111
  async function handleMetrics(_text, ctx) {
3111
- const { getMetricsSummary } = await import("./metrics-collector-L3VPEHII.js");
3112
+ const { getMetricsSummary } = await import("./metrics-collector-YMUGY3PI.js");
3112
3113
  const s = getMetricsSummary();
3113
3114
  const lines = ["Metrics (recent window):"];
3114
3115
  const models = Object.entries(s.llm);
@@ -3128,6 +3129,10 @@ Recall: p50=${s.recall.p50}ms p95=${s.recall.p95}ms (${s.recall.calls} calls)`);
3128
3129
  const rate = s.sleep.calls > 0 ? Math.round((1 - s.sleep.failures / s.sleep.calls) * 100) : 100;
3129
3130
  lines.push(`
3130
3131
  Sleep: ${s.sleep.calls} runs, ${rate}% success`);
3132
+ }
3133
+ if (s.compaction) {
3134
+ lines.push(`
3135
+ Compaction: ${s.compaction.count} passes (${s.compaction.failures} failed), p50=${s.compaction.p50}ms p95=${s.compaction.p95}ms, avg ${s.compaction.avgSavingsPct}% saved`);
3131
3136
  }
3132
3137
  lines.push(`
3133
3138
  Cron depth: avg=${s.cronDepth.avg} max=${s.cronDepth.max}`);
@@ -3482,7 +3487,7 @@ async function handleTasksList(_text, ctx) {
3482
3487
  const now = (/* @__PURE__ */ new Date()).toLocaleString("en-GB", { timeZone: tz, dateStyle: "medium", timeStyle: "medium" });
3483
3488
  let listing;
3484
3489
  try {
3485
- const { readEntries: readEntries2 } = await import("./task-store-W5BFIAIH.js");
3490
+ const { readEntries: readEntries2 } = await import("./task-store-MNCW42BW.js");
3486
3491
  const entries = readEntries2();
3487
3492
  const active = entries.filter((e) => !e.fired);
3488
3493
  active.sort((a, b) => {
@@ -3547,7 +3552,7 @@ async function handleTasksTrigger(text, ctx) {
3547
3552
  return true;
3548
3553
  }
3549
3554
  let id = raw;
3550
- const { readEntry, readEntries: readEntries2 } = await import("./task-store-W5BFIAIH.js");
3555
+ const { readEntry, readEntries: readEntries2 } = await import("./task-store-MNCW42BW.js");
3551
3556
  if (!readEntry(id)) {
3552
3557
  const normalized = raw.toLowerCase().replace(/\s+/g, "-");
3553
3558
  if (readEntry(normalized)) {
@@ -3620,59 +3625,105 @@ async function handleTaskPause(text, ctx) {
3620
3625
  }
3621
3626
  async function handleKanban(text, ctx) {
3622
3627
  try {
3623
- const { kanbanList } = await import("./kanban-board-M326B2XJ.js");
3624
- const arg = text.replace(/^\/kanban\s*/, "").trim();
3625
- const ALLOWED_FILTERS = /* @__PURE__ */ new Set(["status", "source", "priority", "labels", "type"]);
3626
- let filterVal;
3627
- let filterKey;
3628
- let showAll = false;
3628
+ const { kanbanList, kanbanGetCard, kanbanSearch } = await import("./kanban-board-DLEJUCNN.js");
3629
+ const arg = text.replace(/^\/kanban\s*/i, "").trim().replace(/[\u201C\u201D\u201E\u201F]/g, '"');
3630
+ if (!arg) {
3631
+ const cards = kanbanList();
3632
+ if (cards.length === 0) {
3633
+ await ctx.reply("Kanban board is empty.");
3634
+ return true;
3635
+ }
3636
+ await ctx.reply(renderList(cards));
3637
+ return true;
3638
+ }
3629
3639
  if (arg === "all") {
3630
- showAll = true;
3631
- } else if (arg && arg.includes("=")) {
3632
- const [key, val] = arg.split("=", 2);
3633
- if (!key || !val || !ALLOWED_FILTERS.has(key)) {
3634
- await ctx.reply(`\u274C Invalid filter. Use: /kanban [all | status=X | source=X | priority=X | labels=X | type=X]`);
3640
+ const cards = kanbanList("*");
3641
+ if (cards.length === 0) {
3642
+ await ctx.reply("Kanban board is empty.");
3635
3643
  return true;
3636
3644
  }
3637
- filterKey = key;
3638
- filterVal = val.replace(/[^a-zA-Z0-9_,-]/g, "").slice(0, 30);
3639
- } else if (arg) {
3640
- filterVal = arg.replace(/[^a-zA-Z0-9_,-]/g, "").slice(0, 30);
3641
- }
3642
- const cards = showAll ? kanbanList("*") : kanbanList(filterVal, filterKey);
3643
- if (cards.length === 0) {
3644
- await ctx.reply("\u{1F4CB} Kanban board is empty.");
3645
+ await ctx.reply(renderList(cards));
3645
3646
  return true;
3646
3647
  }
3647
- const lines = cards.map((c) => {
3648
- const icon = c.status === "delivered" ? "\u2713" : c.status === "done" ? "+" : c.status === "running" ? "~" : c.status === "failed" ? "\u2717" : "-";
3649
- const due = c.due_at ? ` due:${c.due_at.slice(0, 10)}` : "";
3650
- const doneAt = c.delivered_at ? ` ${c.delivered_at.slice(2, 10).replace(/-/g, "")}:${c.delivered_at.slice(11, 16).replace(":", "")}` : "";
3651
- const title = c.title.length > 20 ? c.title.slice(0, 17) + "\u2026" : c.title;
3652
- return `${icon} #${c.id} ${title} (${c.source}/${c.priority})${doneAt}${due}`;
3653
- });
3654
- const header = `\u{1F4CB} Kanban Board (${cards.length}):
3655
- `;
3656
- let body = "";
3657
- for (const line of lines) {
3658
- if (header.length + body.length + line.length + 1 > 3900) {
3659
- body += `
3660
- \u2026 +${cards.length - body.split("\n").length} more`;
3661
- break;
3648
+ if (/^\d+$/.test(arg)) {
3649
+ const card = kanbanGetCard(Number(arg));
3650
+ if (!card) {
3651
+ await ctx.reply(`No card #${arg}.`);
3652
+ return true;
3662
3653
  }
3663
- body += (body ? "\n" : "") + line;
3654
+ await ctx.reply(renderDetail(card));
3655
+ return true;
3664
3656
  }
3665
- await ctx.reply(header + body);
3657
+ if (/^".*"$/.test(arg)) {
3658
+ const term = arg.slice(1, -1).trim();
3659
+ if (!term) {
3660
+ await ctx.reply(`Usage: /kanban "<search term>"`);
3661
+ return true;
3662
+ }
3663
+ const cards = kanbanSearch(term);
3664
+ if (cards.length === 0) {
3665
+ await ctx.reply(`No cards matching "${term}".`);
3666
+ return true;
3667
+ }
3668
+ await ctx.reply(renderList(cards));
3669
+ return true;
3670
+ }
3671
+ await ctx.reply(`Usage:
3672
+ /kanban \u2014 active cards
3673
+ /kanban all \u2014 all cards
3674
+ /kanban <id> \u2014 ticket detail
3675
+ /kanban "<term>" \u2014 search`);
3666
3676
  } catch (err) {
3667
- await ctx.reply(`\u274C Failed: ${err instanceof Error ? err.message : String(err)}`);
3677
+ await ctx.reply(`Failed: ${err instanceof Error ? err.message : String(err)}`);
3668
3678
  }
3669
3679
  return true;
3670
3680
  }
3681
+ function renderList(cards) {
3682
+ const lines = cards.map((c) => {
3683
+ const icon = c.status === "delivered" ? "\u2713" : c.status === "done" ? "+" : c.status === "running" ? "~" : c.status === "failed" ? "\u2717" : "-";
3684
+ const due = c.due_at ? ` due:${c.due_at.slice(0, 10)}` : "";
3685
+ const doneAt = c.delivered_at ? ` ${c.delivered_at.slice(2, 10).replace(/-/g, "")}:${c.delivered_at.slice(11, 16).replace(":", "")}` : "";
3686
+ const title = c.title.length > 20 ? c.title.slice(0, 17) + "\u2026" : c.title;
3687
+ return `${icon} #${c.id} ${title} (${c.source}/${c.priority})${doneAt}${due}`;
3688
+ });
3689
+ const header = `Kanban Board (${cards.length}):
3690
+ `;
3691
+ let body = "";
3692
+ for (const line of lines) {
3693
+ if (header.length + body.length + line.length + 1 > 3900) {
3694
+ body += `
3695
+ \u2026 +${cards.length - body.split("\n").length} more`;
3696
+ break;
3697
+ }
3698
+ body += (body ? "\n" : "") + line;
3699
+ }
3700
+ return header + body;
3701
+ }
3702
+ function renderDetail(c) {
3703
+ if (!c) return "(not found)";
3704
+ const icon = c.status === "delivered" ? "\u2713" : c.status === "done" ? "+" : c.status === "running" ? "~" : c.status === "failed" ? "\u2717" : "-";
3705
+ const lines = [
3706
+ `${icon} #${c.id}: ${c.title}`,
3707
+ `Status: ${c.status} | Priority: ${c.priority} | Source: ${c.source}`
3708
+ ];
3709
+ if (c.type) lines.push(`Type: ${c.type}`);
3710
+ if (c.labels) lines.push(`Labels: ${c.labels}`);
3711
+ if (c.assignee && c.assignee !== "professor") lines.push(`Assignee: ${c.assignee}`);
3712
+ if (c.due_at) lines.push(`Due: ${c.due_at.slice(0, 10)}`);
3713
+ lines.push(`Created: ${c.created_at.slice(0, 16)}`);
3714
+ if (c.completed_at) lines.push(`Completed:${c.completed_at.slice(0, 16)}`);
3715
+ if (c.delivered_at) lines.push(`Delivered:${c.delivered_at.slice(0, 16)}`);
3716
+ if (c.result_path) lines.push(`File: ${c.result_path}`);
3717
+ if (c.result_summary) lines.push(`Result: ${c.result_summary.slice(0, 300)}${c.result_summary.length > 300 ? "\u2026" : ""}`);
3718
+ if (c.error) lines.push(`Error: ${c.error.slice(0, 200)}`);
3719
+ if (c.notes) lines.push(`Notes: ${c.notes.slice(0, 100)}`);
3720
+ return lines.join("\n");
3721
+ }
3671
3722
  async function handleChannel(text, ctx) {
3672
3723
  const args = text.replace(/^\/channel\s*/i, "").trim();
3673
- const { channelRead, channelPost } = await import("./kanban-channel-IJ52OMNA.js");
3724
+ const { channelRead, channelPost } = await import("./kanban-channel-XOLUHJZJ.js");
3674
3725
  if (!args) {
3675
- const { kanbanList } = await import("./kanban-board-M326B2XJ.js");
3726
+ const { kanbanList } = await import("./kanban-board-DLEJUCNN.js");
3676
3727
  const active = kanbanList("running");
3677
3728
  if (active.length === 0) {
3678
3729
  await ctx.reply("No active channels.");
@@ -3737,7 +3788,7 @@ async function handleTodo(_text, ctx) {
3737
3788
  init_log_and_swallow();
3738
3789
  var TAG10 = "cmd_admin";
3739
3790
  async function handleUsers(text, ctx) {
3740
- const { loadUsers: loadUsers2 } = await import("./user-registry-35BW4XKM.js");
3791
+ const { loadUsers: loadUsers2 } = await import("./user-registry-4PACZJIJ.js");
3741
3792
  const parts = text.trim().split(/\s+/);
3742
3793
  const sub = parts[1];
3743
3794
  if (sub === "approve" && parts[2]) {
@@ -3798,19 +3849,19 @@ async function handleSkills(text, ctx) {
3798
3849
  await ctx.reply("Usage: /skill run <name>");
3799
3850
  return true;
3800
3851
  }
3801
- const { launchSkill } = await import("./skill-session-VJXTKOKL.js");
3852
+ const { launchSkill } = await import("./skill-session-5HSMXY54.js");
3802
3853
  const err = await launchSkill(skillName, ctx.userId, String(ctx.chatId));
3803
3854
  await ctx.reply(err ?? `* Skill "${skillName}" started.`);
3804
3855
  return true;
3805
3856
  }
3806
3857
  if (args === "stop") {
3807
- const { endSkillSession } = await import("./skill-session-VJXTKOKL.js");
3858
+ const { endSkillSession } = await import("./skill-session-5HSMXY54.js");
3808
3859
  const ended = await endSkillSession(String(ctx.chatId));
3809
3860
  await ctx.reply(ended ? "* Skill session ended." : "No active skill session.");
3810
3861
  return true;
3811
3862
  }
3812
3863
  if (args === "list") {
3813
- const { listRunnableSkills } = await import("./skill-session-VJXTKOKL.js");
3864
+ const { listRunnableSkills } = await import("./skill-session-5HSMXY54.js");
3814
3865
  const skills2 = listRunnableSkills();
3815
3866
  if (skills2.length === 0) {
3816
3867
  await ctx.reply("No runnable skills (no skill.json found).");
@@ -3824,12 +3875,12 @@ Use: /skill run <name>`);
3824
3875
  return true;
3825
3876
  }
3826
3877
  if (text.includes("reload")) {
3827
- const { reloadCatalog } = await import("./hotskills-FWX4QI7V.js");
3878
+ const { reloadCatalog } = await import("./hotskills-Q75D2DK3.js");
3828
3879
  const count = reloadCatalog();
3829
3880
  await ctx.reply(`Reloaded \u2014 ${count} skills available.`);
3830
3881
  return true;
3831
3882
  }
3832
- const { getSkillCache } = await import("./hotskills-FWX4QI7V.js");
3883
+ const { getSkillCache } = await import("./hotskills-Q75D2DK3.js");
3833
3884
  const skills = getSkillCache();
3834
3885
  if (skills.length === 0) {
3835
3886
  await ctx.reply("\u{1F4DA} No skills loaded.");
@@ -3856,7 +3907,7 @@ ${sections.join("\n\n")}`);
3856
3907
  return true;
3857
3908
  }
3858
3909
  async function handleHooks(_text, ctx) {
3859
- const { getHookSummary } = await import("./hook-system-M3POLUIB.js");
3910
+ const { getHookSummary } = await import("./hook-system-YB635OC4.js");
3860
3911
  const summary = getHookSummary();
3861
3912
  const lines = ["\u{1FA9D} Hooks:"];
3862
3913
  for (const { event, hooks } of summary) {
@@ -3872,7 +3923,7 @@ async function handleHooks(_text, ctx) {
3872
3923
  async function handleMcp(_text, ctx) {
3873
3924
  const arg = _text.replace(/^\/mcp\s*/i, "").trim().toLowerCase();
3874
3925
  if (arg === "start") {
3875
- const { loadUsers: loadUsers2 } = await import("./user-registry-35BW4XKM.js");
3926
+ const { loadUsers: loadUsers2 } = await import("./user-registry-4PACZJIJ.js");
3876
3927
  const registry = loadUsers2();
3877
3928
  const user = registry.byUserId.get(ctx.userId);
3878
3929
  if (user?.role !== "master") {
@@ -3935,6 +3986,7 @@ async function handleHelp(_text, ctx) {
3935
3986
  "/software update npm \u2014 Update from npm registry",
3936
3987
  "/software rollback <version|slot> \u2014 Roll back to previous version or slot (1-3)",
3937
3988
  "/update \u2014 Alias for /software update pull",
3989
+ "/update abmind \u2014 Update abmind from dev (pull + build + install)",
3938
3990
  "/model \u2014 Model configuration (provider, context, fallbacks)",
3939
3991
  "/model set <name> \u2014 Switch model",
3940
3992
  "/doctor \u2014 Deep probe all subsystems",
@@ -3980,7 +4032,7 @@ ${cmds.join("\n")}`);
3980
4032
  return true;
3981
4033
  }
3982
4034
  async function handlePeers(_text, ctx) {
3983
- const { getPeerTable } = await import("./gossip-3C3BSNPN.js");
4035
+ const { getPeerTable } = await import("./gossip-SKRCPOBS.js");
3984
4036
  const peers = getPeerTable(true);
3985
4037
  if (peers.length === 0) {
3986
4038
  await ctx.reply("No peers configured or gossip not started.");
@@ -4009,7 +4061,7 @@ var TAG11 = "cmd:session";
4009
4061
  async function handleSession(text, ctx) {
4010
4062
  const args = text.replace(/^\/session\s*/i, "").trim();
4011
4063
  if (!args) {
4012
- const { getMasterUserId } = await import("./master-user-HSKM4ZFN.js");
4064
+ const { getMasterUserId } = await import("./master-user-MUBUP3KD.js");
4013
4065
  const isMaster = ctx.userId === getMasterUserId();
4014
4066
  await ctx.reply(ctx.sessionManager.formatList(ctx.userId, ctx.platform, isMaster));
4015
4067
  return true;
@@ -4192,4 +4244,4 @@ export {
4192
4244
  resetAndPrepare,
4193
4245
  handleInboundMessage
4194
4246
  };
4195
- //# sourceMappingURL=chunk-SMPHE3ZM.js.map
4247
+ //# sourceMappingURL=chunk-PB5GF4FG.js.map