abtars 0.3.4-alpha.7 → 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 (348) hide show
  1. package/bundle/{_registry.generated-WGR4WOPT.js → _registry.generated-AVR7DK2A.js} +17 -14
  2. package/bundle/{_registry.generated-WGR4WOPT.js.map → _registry.generated-AVR7DK2A.js.map} +1 -1
  3. package/bundle/{abmind-lazy-7Z44NODV.js → abmind-lazy-E3YCFKQ5.js} +15 -5
  4. package/bundle/abtars-browser.js +4 -4
  5. package/bundle/abtars-cli.js +23 -13
  6. package/bundle/abtars-cli.js.map +2 -2
  7. package/bundle/abtars-restart.js +3 -3
  8. package/bundle/abtars-task.js +3 -3
  9. package/bundle/abtars-task.js.map +2 -2
  10. package/bundle/abtars.js +610 -455
  11. package/bundle/abtars.js.map +4 -4
  12. package/bundle/{acp-raw-client-E6FM45NC.js → acp-raw-client-UCNK3OTU.js} +2 -2
  13. package/bundle/{action-gate-G2V47NHW.js → action-gate-V4FCBHFB.js} +2 -2
  14. package/bundle/{agent-api-adapter-YAHKQMMZ.js → agent-api-adapter-7HEPYSIN.js} +3 -3
  15. package/bundle/{agent-api-rate-limit-WCFXJMGY.js → agent-api-rate-limit-RZSAM3SW.js} +4 -4
  16. package/bundle/{agent-registry-GI6CLT3Z.js → agent-registry-46A2R5KP.js} +7 -7
  17. package/bundle/{bootstrap-X2QYIZIJ.js → bootstrap-MIHJJSWU.js} +2 -2
  18. package/bundle/{bridge-lock-transport-4ZH7QTJP.js → bridge-lock-transport-7RSN7OLJ.js} +4 -4
  19. package/bundle/{browser-DMARZJIN.js → browser-F6BCWJWW.js} +6 -6
  20. package/bundle/{budget-45QOBDWA.js → budget-WUM3SPKW.js} +3 -3
  21. package/bundle/{capability-JFWX3IQF.js → capability-QVRKGRFC.js} +5 -5
  22. package/bundle/{chunk-YSKCQH6E.js → chunk-2IYJ4I66.js} +2 -2
  23. package/bundle/{chunk-KTYGKPYM.js → chunk-2NLUT5S2.js} +6 -6
  24. package/bundle/chunk-3BG3AIDP.js +191 -0
  25. package/bundle/chunk-3BG3AIDP.js.map +7 -0
  26. package/bundle/{chunk-OKAQICWY.js → chunk-3GQX34S2.js} +3 -3
  27. package/bundle/{chunk-QROWBWLL.js → chunk-3XZ773BS.js} +2 -2
  28. package/bundle/{chunk-DYBW4XXL.js → chunk-467SRLLR.js} +2 -2
  29. package/bundle/{chunk-LGP6TYFI.js → chunk-4AILRHUI.js} +97 -8
  30. package/bundle/chunk-4AILRHUI.js.map +7 -0
  31. package/bundle/{chunk-GPZNXY2U.js → chunk-4S3H4OK7.js} +4 -4
  32. package/bundle/{chunk-NDCRWEEJ.js → chunk-4Y5MJQRE.js} +6 -6
  33. package/bundle/{chunk-FRKW6LWB.js → chunk-55UWKI5C.js} +3 -3
  34. package/bundle/{chunk-4UL3KINB.js → chunk-5PNJFDSW.js} +8 -8
  35. package/bundle/{chunk-LUNA6PM5.js → chunk-5RVOEFGT.js} +4 -2
  36. package/bundle/{chunk-LUNA6PM5.js.map → chunk-5RVOEFGT.js.map} +2 -2
  37. package/bundle/{chunk-OXTSWQCX.js → chunk-5Y3FJ2Y7.js} +2 -2
  38. package/bundle/{chunk-TMUYFERL.js → chunk-6B5ZFUPD.js} +2 -2
  39. package/bundle/{chunk-65VCEC32.js → chunk-6PA5JBUU.js} +2 -2
  40. package/bundle/chunk-BNXV7SZI.js +195 -0
  41. package/bundle/chunk-BNXV7SZI.js.map +7 -0
  42. package/bundle/{chunk-AFREM7FX.js → chunk-CK7YTA2F.js} +2 -2
  43. package/bundle/{chunk-NRUSRJXR.js → chunk-DZJ5QZFD.js} +2 -2
  44. package/bundle/{chunk-YRSMGJFP.js → chunk-E67KESEG.js} +2 -2
  45. package/bundle/{chunk-ZV4IWKDJ.js → chunk-E7XD5UGB.js} +3 -3
  46. package/bundle/{chunk-GXL7HJPT.js → chunk-EAX5ZZUL.js} +63 -39
  47. package/bundle/chunk-EAX5ZZUL.js.map +7 -0
  48. package/bundle/{chunk-PEDX56EL.js → chunk-EFGBM555.js} +2 -2
  49. package/bundle/{chunk-EQSG2CRM.js → chunk-FGYDIX54.js} +22 -15
  50. package/bundle/chunk-FGYDIX54.js.map +7 -0
  51. package/bundle/{chunk-XWRADSXO.js → chunk-GF6NVNA7.js} +15 -5
  52. package/bundle/chunk-GF6NVNA7.js.map +7 -0
  53. package/bundle/{chunk-SIFPBTI4.js → chunk-HGSHCQ5F.js} +113 -73
  54. package/bundle/chunk-HGSHCQ5F.js.map +7 -0
  55. package/bundle/{chunk-YRU2K3O6.js → chunk-IMIGG5EO.js} +39 -39
  56. package/bundle/chunk-IMIGG5EO.js.map +7 -0
  57. package/bundle/{chunk-W4EA4GCA.js → chunk-ITOFPJAV.js} +43 -31
  58. package/bundle/chunk-ITOFPJAV.js.map +7 -0
  59. package/bundle/{chunk-UPRZDU6T.js → chunk-IY6UKLPS.js} +3 -3
  60. package/bundle/{chunk-EUZDKV3C.js → chunk-J4RUFAPK.js} +3 -3
  61. package/bundle/{chunk-HZDLFLRP.js → chunk-J7DRPVMU.js} +35 -5
  62. package/bundle/chunk-J7DRPVMU.js.map +7 -0
  63. package/bundle/{chunk-EGL6UMAO.js → chunk-JG4BKXBN.js} +7 -1
  64. package/bundle/chunk-JG4BKXBN.js.map +7 -0
  65. package/bundle/{chunk-5B5B6EHL.js → chunk-JLWYPGWI.js} +5 -5
  66. package/bundle/{chunk-5QUTMUIK.js → chunk-JXYWDAHD.js} +12 -12
  67. package/bundle/{chunk-GRVWZO4C.js → chunk-KOSFXW2S.js} +24 -3
  68. package/bundle/{chunk-GRVWZO4C.js.map → chunk-KOSFXW2S.js.map} +1 -1
  69. package/bundle/{chunk-ONBF5DDU.js → chunk-L72RIPEC.js} +248 -182
  70. package/bundle/chunk-L72RIPEC.js.map +7 -0
  71. package/bundle/{chunk-TEFZ4JA4.js → chunk-NHPLD3C7.js} +2 -2
  72. package/bundle/{chunk-2KC5G3EA.js → chunk-OWUO5RS3.js} +5 -5
  73. package/bundle/{chunk-4MULJ5SS.js → chunk-OY4Q6AMY.js} +71 -49
  74. package/bundle/chunk-OY4Q6AMY.js.map +7 -0
  75. package/bundle/{chunk-WBTJ2E62.js → chunk-P3NODAHF.js} +2 -5
  76. package/bundle/{chunk-WBTJ2E62.js.map → chunk-P3NODAHF.js.map} +2 -2
  77. package/bundle/{chunk-BROFMHC2.js → chunk-PB5GF4FG.js} +334 -237
  78. package/bundle/chunk-PB5GF4FG.js.map +7 -0
  79. package/bundle/{chunk-WYHGNI56.js → chunk-PMD5BLFS.js} +6 -6
  80. package/bundle/{chunk-URQPDCK5.js → chunk-Q66LQMMZ.js} +3 -3
  81. package/bundle/{chunk-HKRSMUXJ.js → chunk-SC2Y5NR2.js} +71 -132
  82. package/bundle/chunk-SC2Y5NR2.js.map +7 -0
  83. package/bundle/chunk-SFL4EPCZ.js +555 -0
  84. package/bundle/chunk-SFL4EPCZ.js.map +7 -0
  85. package/bundle/{chunk-LDUOOKQY.js → chunk-SJPUNDZ3.js} +5 -5
  86. package/bundle/{chunk-LDUOOKQY.js.map → chunk-SJPUNDZ3.js.map} +1 -1
  87. package/bundle/{chunk-JQDJPUHM.js → chunk-TWB2ZGVH.js} +2 -2
  88. package/bundle/{chunk-IJT4KWXT.js → chunk-U4U47YE7.js} +2 -2
  89. package/bundle/{chunk-2FAZIA37.js → chunk-W546CU3A.js} +3 -3
  90. package/bundle/chunk-WC5O5KOE.js +211 -0
  91. package/bundle/chunk-WC5O5KOE.js.map +7 -0
  92. package/bundle/{chunk-JNIHEDKF.js → chunk-XPWYDNWL.js} +2 -2
  93. package/bundle/{chunk-GWILHZPT.js → chunk-XRTXYN66.js} +10 -7
  94. package/bundle/{chunk-GWILHZPT.js.map → chunk-XRTXYN66.js.map} +2 -2
  95. package/bundle/{chunk-EFJVUJBE.js → chunk-Y5FEFKGM.js} +6 -6
  96. package/bundle/chunk-YJZE4OK3.js +169 -0
  97. package/bundle/chunk-YJZE4OK3.js.map +7 -0
  98. package/bundle/{chunk-GVM5YU5I.js → chunk-Z4FZPB42.js} +2 -2
  99. package/bundle/{chunk-7BSQ5UQO.js → chunk-ZSIDQ66D.js} +3 -3
  100. package/bundle/{chunk-XX6BGTPO.js → chunk-ZZZCJJEO.js} +4 -4
  101. package/bundle/{commands-XYEGVUZF.js → commands-2ZW6CMLC.js} +17 -16
  102. package/bundle/{config-M3P5IOAI.js → config-YMY5YHKN.js} +6 -6
  103. package/bundle/{context-2RJHC2LE.js → context-CL2RSLII.js} +7 -5
  104. package/bundle/context-CL2RSLII.js.map +7 -0
  105. package/bundle/{daemon-TB23FFWY.js → daemon-D7SU63OY.js} +3 -3
  106. package/bundle/{delegation-tools-QKNYQGTQ.js → delegation-tools-WS7Z56KZ.js} +12 -12
  107. package/bundle/{deploy-EPDWNHJU.js → deploy-AMTVKIMU.js} +2 -2
  108. package/bundle/{deps-WVK553KF.js → deps-T63AVJKJ.js} +3 -3
  109. package/bundle/{direct-api-transport-E3LNDBJT.js → direct-api-transport-QNNY2WWP.js} +56 -33
  110. package/bundle/direct-api-transport-QNNY2WWP.js.map +7 -0
  111. package/bundle/{discord-adapter-IT3KP3VB.js → discord-adapter-ABAD56Y2.js} +21 -20
  112. package/bundle/{discord-adapter-IT3KP3VB.js.map → discord-adapter-ABAD56Y2.js.map} +1 -1
  113. package/bundle/{dns-wakeup-IDOJIXBX.js → dns-wakeup-V3LEFXPE.js} +9 -33
  114. package/bundle/dns-wakeup-V3LEFXPE.js.map +7 -0
  115. package/bundle/{doctor-probes-B54JFIW3.js → doctor-probes-O6YI6XSZ.js} +6 -2
  116. package/bundle/{env-schema-4JXQUOH4.js → env-schema-B5RB32DC.js} +3 -3
  117. package/bundle/{gossip-3C3BSNPN.js → gossip-SKRCPOBS.js} +9 -5
  118. package/bundle/{guardrails-DL7ZSWVN.js → guardrails-64GQ5Y5K.js} +4 -4
  119. package/bundle/{heartbeat-system-MVTRS4GP.js → heartbeat-system-X4MUTKJD.js} +6 -6
  120. package/bundle/{heartbeat-tier3-ABWL3P7M.js → heartbeat-tier3-2PTPWEQQ.js} +53 -76
  121. package/bundle/heartbeat-tier3-2PTPWEQQ.js.map +7 -0
  122. package/bundle/{hook-system-M3POLUIB.js → hook-system-YB635OC4.js} +3 -3
  123. package/bundle/{hotskills-FWX4QI7V.js → hotskills-Q75D2DK3.js} +5 -5
  124. package/bundle/{install-OS3CU7NF.js → install-RFKKFSGS.js} +17 -30
  125. package/bundle/install-RFKKFSGS.js.map +7 -0
  126. package/bundle/{install-manifest-5PPWMD2W.js → install-manifest-J7ICPCJN.js} +2 -2
  127. package/bundle/{irc-adapter-PTTZD32W.js → irc-adapter-TVEV4R6H.js} +3 -3
  128. package/bundle/{irc-config-CP7ZMUOX.js → irc-config-M676FOFI.js} +4 -4
  129. package/bundle/{kanban-board-M326B2XJ.js → kanban-board-DLEJUCNN.js} +9 -7
  130. package/bundle/{kanban-channel-IJ52OMNA.js → kanban-channel-XOLUHJZJ.js} +6 -6
  131. package/bundle/kanban-delivery-C4QPBNPX.js +45 -0
  132. package/bundle/kanban-delivery-C4QPBNPX.js.map +7 -0
  133. package/bundle/{lazy-require-KCRVT4SI.js → lazy-require-JKQSALXN.js} +3 -3
  134. package/bundle/{logger-OWCSNYCA.js → logger-3EGHBD4R.js} +2 -2
  135. package/bundle/{main-chat-ZNUZCTNS.js → main-chat-3H63REKK.js} +4 -4
  136. package/bundle/{master-user-HSKM4ZFN.js → master-user-MUBUP3KD.js} +5 -5
  137. package/bundle/{media-utils-3ZYOD7SK.js → media-utils-HUUIALAJ.js} +3 -3
  138. package/bundle/{message-pipeline-P5GAQU4Z.js → message-pipeline-GRDRWONR.js} +17 -16
  139. package/bundle/meta.json +3699 -3138
  140. package/bundle/{metrics-collector-L3VPEHII.js → metrics-collector-YMUGY3PI.js} +31 -2
  141. package/bundle/metrics-collector-YMUGY3PI.js.map +7 -0
  142. package/bundle/{model-health-registry-MLEIZSTV.js → model-health-registry-QADMFQFQ.js} +2 -2
  143. package/bundle/{nerve-IGSXBKZZ.js → nerve-QPAEBRKX.js} +3 -3
  144. package/bundle/{notification-BFSIEECG.js → notification-3JICGXWU.js} +6 -6
  145. package/bundle/{openrouter-credits-NTVZDRYM.js → openrouter-credits-7NEIPYJN.js} +3 -3
  146. package/bundle/{orc-tools-4CHEFWSN.js → orc-tools-UZVPONKY.js} +5 -3
  147. package/bundle/{peer-auth-QC4EF2PM.js → peer-auth-RI43DKJE.js} +24 -15
  148. package/bundle/{peer-client-RGEU5HOK.js → peer-client-UITTMWJ2.js} +34 -29
  149. package/bundle/peer-client-UITTMWJ2.js.map +7 -0
  150. package/bundle/{peer-config-TN55LFDC.js → peer-config-URM7DCW6.js} +9 -4
  151. package/bundle/{peer-transport-I6JPLFZ2.js → peer-transport-SI7I72DB.js} +12 -10
  152. package/bundle/{phase-transport-PGKU2KD4.js → phase-transport-ESWWACZI.js} +17 -17
  153. package/bundle/{reconcile-CTFCLQRN.js → reconcile-GFDQYNBD.js} +3 -3
  154. package/bundle/{reconciler-EBKH3JNU.js → reconciler-IEUJXJN2.js} +12 -12
  155. package/bundle/{restore-IFHPI7I7.js → restore-FARTGLQQ.js} +3 -3
  156. package/bundle/{rollback-ANRI3T5Z.js → rollback-GEWPZABG.js} +2 -2
  157. package/bundle/{sandbox-runtime-QROWHDCS.js → sandbox-runtime-DV6E25J6.js} +2 -2
  158. package/bundle/{self-healer-utils-IFAYOQO2.js → self-healer-utils-P4SKNNEM.js} +3 -3
  159. package/bundle/{sha-tracker-ZWBP6CIJ.js → sha-tracker-77SHLYNY.js} +3 -3
  160. package/bundle/{skill-session-BMSRQSHV.js → skill-session-5HSMXY54.js} +3 -3
  161. package/bundle/{skill-stats-JORH5DGM.js → skill-stats-MI3RSWWL.js} +4 -4
  162. package/bundle/{skill-watcher-E4MGLKLS.js → skill-watcher-5L7JE6TN.js} +4 -4
  163. package/bundle/{sleep-36XS6MHJ.js → sleep-I4JFASCY.js} +11 -8
  164. package/bundle/{soul-bundle-VWAVHCZ6.js → soul-bundle-522C3IRH.js} +9 -8
  165. package/bundle/{spin-TI3TSVVT.js → spin-VHNGNWTD.js} +11 -11
  166. package/bundle/{spin-notifications-SE2HVZI7.js → spin-notifications-7NC5XZEM.js} +5 -5
  167. package/bundle/{spin-types-BLPYAETA.js → spin-types-C5KOQOPD.js} +7 -3
  168. package/bundle/{sse-parser-anthropic-A6R4Z2TB.js → sse-parser-anthropic-MMTVWHLI.js} +3 -3
  169. package/bundle/{sse-parser-responses-HSZY3QGJ.js → sse-parser-responses-3AOFN64C.js} +3 -3
  170. package/bundle/{ssrf-guard-O6SHIK6Q.js → ssrf-guard-U2JA72TC.js} +3 -3
  171. package/bundle/{start-7QZIWO3S.js → start-H5IUFAWF.js} +4 -2
  172. package/bundle/{start-7QZIWO3S.js.map → start-H5IUFAWF.js.map} +2 -2
  173. package/bundle/{stt-LGVPXMVR.js → stt-PSOPPBV4.js} +4 -4
  174. package/bundle/{system-status-JZU5FO7B.js → system-status-4LYGOFNO.js} +38 -24
  175. package/bundle/system-status-4LYGOFNO.js.map +7 -0
  176. package/bundle/{task-store-W5BFIAIH.js → task-store-MNCW42BW.js} +4 -4
  177. package/bundle/{telegram-adapter-H6PMFPMB.js → telegram-adapter-O6KIZDY6.js} +69 -46
  178. package/bundle/telegram-adapter-O6KIZDY6.js.map +7 -0
  179. package/bundle/{tool-registry-IZX2IOBM.js → tool-registry-JJMWCQKZ.js} +26 -24
  180. package/bundle/{tool-sandbox-4UC6GAKA.js → tool-sandbox-CNL6V6IH.js} +4 -4
  181. package/bundle/{transport-config-KBF5W2DP.js → transport-config-6MB2K2XC.js} +7 -7
  182. package/bundle/tribe-GDTFYJTK.js +111 -0
  183. package/bundle/tribe-GDTFYJTK.js.map +7 -0
  184. package/bundle/{update-MESYO4LO.js → update-HGQAOC5L.js} +3 -3
  185. package/bundle/{usage-tracker-NXD364VX.js → usage-tracker-SR4BI6ZT.js} +2 -2
  186. package/bundle/{user-registry-35BW4XKM.js → user-registry-4PACZJIJ.js} +4 -4
  187. package/bundle/wire-platform-KKPWNNNQ.js +88 -0
  188. package/bundle/wire-platform-KKPWNNNQ.js.map +7 -0
  189. package/bundle/ws-peer-client-U3NNPOK7.js +370 -0
  190. package/bundle/ws-peer-client-U3NNPOK7.js.map +7 -0
  191. package/package.json +1 -1
  192. package/scripts/abtars-watchdog.service +2 -1
  193. package/scripts/abtars-watchdog.sh +1 -5
  194. package/scripts/emergency-deploy.sh +2 -2
  195. package/scripts/emergency-update.sh +88 -41
  196. package/bundle/chunk-3AAENI2K.js +0 -210
  197. package/bundle/chunk-3AAENI2K.js.map +0 -7
  198. package/bundle/chunk-4MULJ5SS.js.map +0 -7
  199. package/bundle/chunk-4S554KLW.js +0 -105
  200. package/bundle/chunk-4S554KLW.js.map +0 -7
  201. package/bundle/chunk-5GCLBUBS.js +0 -257
  202. package/bundle/chunk-5GCLBUBS.js.map +0 -7
  203. package/bundle/chunk-BROFMHC2.js.map +0 -7
  204. package/bundle/chunk-EGL6UMAO.js.map +0 -7
  205. package/bundle/chunk-EQSG2CRM.js.map +0 -7
  206. package/bundle/chunk-GXL7HJPT.js.map +0 -7
  207. package/bundle/chunk-HKRSMUXJ.js.map +0 -7
  208. package/bundle/chunk-HT2BPTZY.js +0 -241
  209. package/bundle/chunk-HT2BPTZY.js.map +0 -7
  210. package/bundle/chunk-HZDLFLRP.js.map +0 -7
  211. package/bundle/chunk-IKUZPMVA.js +0 -82
  212. package/bundle/chunk-IKUZPMVA.js.map +0 -7
  213. package/bundle/chunk-LGP6TYFI.js.map +0 -7
  214. package/bundle/chunk-ONBF5DDU.js.map +0 -7
  215. package/bundle/chunk-RWRRGE4U.js +0 -72
  216. package/bundle/chunk-RWRRGE4U.js.map +0 -7
  217. package/bundle/chunk-SIFPBTI4.js.map +0 -7
  218. package/bundle/chunk-VUIX5AGB.js +0 -65
  219. package/bundle/chunk-VUIX5AGB.js.map +0 -7
  220. package/bundle/chunk-W4EA4GCA.js.map +0 -7
  221. package/bundle/chunk-XWRADSXO.js.map +0 -7
  222. package/bundle/chunk-Y76VUJSF.js +0 -75
  223. package/bundle/chunk-Y76VUJSF.js.map +0 -7
  224. package/bundle/chunk-YRU2K3O6.js.map +0 -7
  225. package/bundle/context-2RJHC2LE.js.map +0 -7
  226. package/bundle/direct-api-transport-E3LNDBJT.js.map +0 -7
  227. package/bundle/dns-wakeup-IDOJIXBX.js.map +0 -7
  228. package/bundle/heartbeat-tier3-ABWL3P7M.js.map +0 -7
  229. package/bundle/install-OS3CU7NF.js.map +0 -7
  230. package/bundle/metrics-collector-L3VPEHII.js.map +0 -7
  231. package/bundle/peer-client-RGEU5HOK.js.map +0 -7
  232. package/bundle/peer-jwt-NCCPXJRX.js +0 -18
  233. package/bundle/public/css/dashboard.css +0 -542
  234. package/bundle/public/index.html +0 -180
  235. package/bundle/public/js/app.js +0 -437
  236. package/bundle/public/memory-universe.js +0 -384
  237. package/bundle/stream-single-RFJNUTL6.js +0 -34
  238. package/bundle/stream-single-RFJNUTL6.js.map +0 -7
  239. package/bundle/subagent-runtime-5QUVES3W.js +0 -14
  240. package/bundle/system-status-JZU5FO7B.js.map +0 -7
  241. package/bundle/telegram-adapter-H6PMFPMB.js.map +0 -7
  242. package/bundle/usage-tracker-NXD364VX.js.map +0 -7
  243. package/bundle/user-registry-35BW4XKM.js.map +0 -7
  244. package/bundle/ws-peer-client-AIXCXF7V.js +0 -173
  245. package/bundle/ws-peer-client-AIXCXF7V.js.map +0 -7
  246. /package/bundle/{abmind-lazy-7Z44NODV.js.map → abmind-lazy-E3YCFKQ5.js.map} +0 -0
  247. /package/bundle/{acp-raw-client-E6FM45NC.js.map → acp-raw-client-UCNK3OTU.js.map} +0 -0
  248. /package/bundle/{action-gate-G2V47NHW.js.map → action-gate-V4FCBHFB.js.map} +0 -0
  249. /package/bundle/{agent-api-adapter-YAHKQMMZ.js.map → agent-api-adapter-7HEPYSIN.js.map} +0 -0
  250. /package/bundle/{agent-api-rate-limit-WCFXJMGY.js.map → agent-api-rate-limit-RZSAM3SW.js.map} +0 -0
  251. /package/bundle/{agent-registry-GI6CLT3Z.js.map → agent-registry-46A2R5KP.js.map} +0 -0
  252. /package/bundle/{bootstrap-X2QYIZIJ.js.map → bootstrap-MIHJJSWU.js.map} +0 -0
  253. /package/bundle/{bridge-lock-transport-4ZH7QTJP.js.map → bridge-lock-transport-7RSN7OLJ.js.map} +0 -0
  254. /package/bundle/{browser-DMARZJIN.js.map → browser-F6BCWJWW.js.map} +0 -0
  255. /package/bundle/{budget-45QOBDWA.js.map → budget-WUM3SPKW.js.map} +0 -0
  256. /package/bundle/{capability-JFWX3IQF.js.map → capability-QVRKGRFC.js.map} +0 -0
  257. /package/bundle/{chunk-YSKCQH6E.js.map → chunk-2IYJ4I66.js.map} +0 -0
  258. /package/bundle/{chunk-KTYGKPYM.js.map → chunk-2NLUT5S2.js.map} +0 -0
  259. /package/bundle/{chunk-OKAQICWY.js.map → chunk-3GQX34S2.js.map} +0 -0
  260. /package/bundle/{chunk-QROWBWLL.js.map → chunk-3XZ773BS.js.map} +0 -0
  261. /package/bundle/{chunk-DYBW4XXL.js.map → chunk-467SRLLR.js.map} +0 -0
  262. /package/bundle/{chunk-GPZNXY2U.js.map → chunk-4S3H4OK7.js.map} +0 -0
  263. /package/bundle/{chunk-NDCRWEEJ.js.map → chunk-4Y5MJQRE.js.map} +0 -0
  264. /package/bundle/{chunk-FRKW6LWB.js.map → chunk-55UWKI5C.js.map} +0 -0
  265. /package/bundle/{chunk-4UL3KINB.js.map → chunk-5PNJFDSW.js.map} +0 -0
  266. /package/bundle/{chunk-OXTSWQCX.js.map → chunk-5Y3FJ2Y7.js.map} +0 -0
  267. /package/bundle/{chunk-TMUYFERL.js.map → chunk-6B5ZFUPD.js.map} +0 -0
  268. /package/bundle/{chunk-65VCEC32.js.map → chunk-6PA5JBUU.js.map} +0 -0
  269. /package/bundle/{chunk-AFREM7FX.js.map → chunk-CK7YTA2F.js.map} +0 -0
  270. /package/bundle/{chunk-NRUSRJXR.js.map → chunk-DZJ5QZFD.js.map} +0 -0
  271. /package/bundle/{chunk-YRSMGJFP.js.map → chunk-E67KESEG.js.map} +0 -0
  272. /package/bundle/{chunk-ZV4IWKDJ.js.map → chunk-E7XD5UGB.js.map} +0 -0
  273. /package/bundle/{chunk-PEDX56EL.js.map → chunk-EFGBM555.js.map} +0 -0
  274. /package/bundle/{chunk-UPRZDU6T.js.map → chunk-IY6UKLPS.js.map} +0 -0
  275. /package/bundle/{chunk-EUZDKV3C.js.map → chunk-J4RUFAPK.js.map} +0 -0
  276. /package/bundle/{chunk-5B5B6EHL.js.map → chunk-JLWYPGWI.js.map} +0 -0
  277. /package/bundle/{chunk-5QUTMUIK.js.map → chunk-JXYWDAHD.js.map} +0 -0
  278. /package/bundle/{chunk-TEFZ4JA4.js.map → chunk-NHPLD3C7.js.map} +0 -0
  279. /package/bundle/{chunk-2KC5G3EA.js.map → chunk-OWUO5RS3.js.map} +0 -0
  280. /package/bundle/{chunk-WYHGNI56.js.map → chunk-PMD5BLFS.js.map} +0 -0
  281. /package/bundle/{chunk-URQPDCK5.js.map → chunk-Q66LQMMZ.js.map} +0 -0
  282. /package/bundle/{chunk-JQDJPUHM.js.map → chunk-TWB2ZGVH.js.map} +0 -0
  283. /package/bundle/{chunk-IJT4KWXT.js.map → chunk-U4U47YE7.js.map} +0 -0
  284. /package/bundle/{chunk-2FAZIA37.js.map → chunk-W546CU3A.js.map} +0 -0
  285. /package/bundle/{chunk-JNIHEDKF.js.map → chunk-XPWYDNWL.js.map} +0 -0
  286. /package/bundle/{chunk-EFJVUJBE.js.map → chunk-Y5FEFKGM.js.map} +0 -0
  287. /package/bundle/{chunk-GVM5YU5I.js.map → chunk-Z4FZPB42.js.map} +0 -0
  288. /package/bundle/{chunk-7BSQ5UQO.js.map → chunk-ZSIDQ66D.js.map} +0 -0
  289. /package/bundle/{chunk-XX6BGTPO.js.map → chunk-ZZZCJJEO.js.map} +0 -0
  290. /package/bundle/{commands-XYEGVUZF.js.map → commands-2ZW6CMLC.js.map} +0 -0
  291. /package/bundle/{config-M3P5IOAI.js.map → config-YMY5YHKN.js.map} +0 -0
  292. /package/bundle/{daemon-TB23FFWY.js.map → daemon-D7SU63OY.js.map} +0 -0
  293. /package/bundle/{delegation-tools-QKNYQGTQ.js.map → delegation-tools-WS7Z56KZ.js.map} +0 -0
  294. /package/bundle/{deploy-EPDWNHJU.js.map → deploy-AMTVKIMU.js.map} +0 -0
  295. /package/bundle/{deps-WVK553KF.js.map → deps-T63AVJKJ.js.map} +0 -0
  296. /package/bundle/{doctor-probes-B54JFIW3.js.map → doctor-probes-O6YI6XSZ.js.map} +0 -0
  297. /package/bundle/{env-schema-4JXQUOH4.js.map → env-schema-B5RB32DC.js.map} +0 -0
  298. /package/bundle/{gossip-3C3BSNPN.js.map → gossip-SKRCPOBS.js.map} +0 -0
  299. /package/bundle/{guardrails-DL7ZSWVN.js.map → guardrails-64GQ5Y5K.js.map} +0 -0
  300. /package/bundle/{heartbeat-system-MVTRS4GP.js.map → heartbeat-system-X4MUTKJD.js.map} +0 -0
  301. /package/bundle/{hook-system-M3POLUIB.js.map → hook-system-YB635OC4.js.map} +0 -0
  302. /package/bundle/{hotskills-FWX4QI7V.js.map → hotskills-Q75D2DK3.js.map} +0 -0
  303. /package/bundle/{install-manifest-5PPWMD2W.js.map → install-manifest-J7ICPCJN.js.map} +0 -0
  304. /package/bundle/{irc-adapter-PTTZD32W.js.map → irc-adapter-TVEV4R6H.js.map} +0 -0
  305. /package/bundle/{irc-config-CP7ZMUOX.js.map → irc-config-M676FOFI.js.map} +0 -0
  306. /package/bundle/{kanban-board-M326B2XJ.js.map → kanban-board-DLEJUCNN.js.map} +0 -0
  307. /package/bundle/{kanban-channel-IJ52OMNA.js.map → kanban-channel-XOLUHJZJ.js.map} +0 -0
  308. /package/bundle/{lazy-require-KCRVT4SI.js.map → lazy-require-JKQSALXN.js.map} +0 -0
  309. /package/bundle/{logger-OWCSNYCA.js.map → logger-3EGHBD4R.js.map} +0 -0
  310. /package/bundle/{main-chat-ZNUZCTNS.js.map → main-chat-3H63REKK.js.map} +0 -0
  311. /package/bundle/{master-user-HSKM4ZFN.js.map → master-user-MUBUP3KD.js.map} +0 -0
  312. /package/bundle/{media-utils-3ZYOD7SK.js.map → media-utils-HUUIALAJ.js.map} +0 -0
  313. /package/bundle/{message-pipeline-P5GAQU4Z.js.map → message-pipeline-GRDRWONR.js.map} +0 -0
  314. /package/bundle/{model-health-registry-MLEIZSTV.js.map → model-health-registry-QADMFQFQ.js.map} +0 -0
  315. /package/bundle/{nerve-IGSXBKZZ.js.map → nerve-QPAEBRKX.js.map} +0 -0
  316. /package/bundle/{notification-BFSIEECG.js.map → notification-3JICGXWU.js.map} +0 -0
  317. /package/bundle/{openrouter-credits-NTVZDRYM.js.map → openrouter-credits-7NEIPYJN.js.map} +0 -0
  318. /package/bundle/{orc-tools-4CHEFWSN.js.map → orc-tools-UZVPONKY.js.map} +0 -0
  319. /package/bundle/{peer-auth-QC4EF2PM.js.map → peer-auth-RI43DKJE.js.map} +0 -0
  320. /package/bundle/{peer-config-TN55LFDC.js.map → peer-config-URM7DCW6.js.map} +0 -0
  321. /package/bundle/{peer-jwt-NCCPXJRX.js.map → peer-transport-SI7I72DB.js.map} +0 -0
  322. /package/bundle/{peer-transport-I6JPLFZ2.js.map → phase-transport-ESWWACZI.js.map} +0 -0
  323. /package/bundle/{phase-transport-PGKU2KD4.js.map → reconcile-GFDQYNBD.js.map} +0 -0
  324. /package/bundle/{reconciler-EBKH3JNU.js.map → reconciler-IEUJXJN2.js.map} +0 -0
  325. /package/bundle/{restore-IFHPI7I7.js.map → restore-FARTGLQQ.js.map} +0 -0
  326. /package/bundle/{reconcile-CTFCLQRN.js.map → rollback-GEWPZABG.js.map} +0 -0
  327. /package/bundle/{sandbox-runtime-QROWHDCS.js.map → sandbox-runtime-DV6E25J6.js.map} +0 -0
  328. /package/bundle/{self-healer-utils-IFAYOQO2.js.map → self-healer-utils-P4SKNNEM.js.map} +0 -0
  329. /package/bundle/{rollback-ANRI3T5Z.js.map → sha-tracker-77SHLYNY.js.map} +0 -0
  330. /package/bundle/{skill-session-BMSRQSHV.js.map → skill-session-5HSMXY54.js.map} +0 -0
  331. /package/bundle/{sha-tracker-ZWBP6CIJ.js.map → skill-stats-MI3RSWWL.js.map} +0 -0
  332. /package/bundle/{skill-stats-JORH5DGM.js.map → skill-watcher-5L7JE6TN.js.map} +0 -0
  333. /package/bundle/{skill-watcher-E4MGLKLS.js.map → sleep-I4JFASCY.js.map} +0 -0
  334. /package/bundle/{sleep-36XS6MHJ.js.map → soul-bundle-522C3IRH.js.map} +0 -0
  335. /package/bundle/{soul-bundle-VWAVHCZ6.js.map → spin-VHNGNWTD.js.map} +0 -0
  336. /package/bundle/{spin-notifications-SE2HVZI7.js.map → spin-notifications-7NC5XZEM.js.map} +0 -0
  337. /package/bundle/{spin-TI3TSVVT.js.map → spin-types-C5KOQOPD.js.map} +0 -0
  338. /package/bundle/{sse-parser-anthropic-A6R4Z2TB.js.map → sse-parser-anthropic-MMTVWHLI.js.map} +0 -0
  339. /package/bundle/{sse-parser-responses-HSZY3QGJ.js.map → sse-parser-responses-3AOFN64C.js.map} +0 -0
  340. /package/bundle/{ssrf-guard-O6SHIK6Q.js.map → ssrf-guard-U2JA72TC.js.map} +0 -0
  341. /package/bundle/{spin-types-BLPYAETA.js.map → stt-PSOPPBV4.js.map} +0 -0
  342. /package/bundle/{stt-LGVPXMVR.js.map → task-store-MNCW42BW.js.map} +0 -0
  343. /package/bundle/{subagent-runtime-5QUVES3W.js.map → tool-registry-JJMWCQKZ.js.map} +0 -0
  344. /package/bundle/{task-store-W5BFIAIH.js.map → tool-sandbox-CNL6V6IH.js.map} +0 -0
  345. /package/bundle/{tool-registry-IZX2IOBM.js.map → transport-config-6MB2K2XC.js.map} +0 -0
  346. /package/bundle/{tool-sandbox-4UC6GAKA.js.map → update-HGQAOC5L.js.map} +0 -0
  347. /package/bundle/{transport-config-KBF5W2DP.js.map → usage-tracker-SR4BI6ZT.js.map} +0 -0
  348. /package/bundle/{update-MESYO4LO.js.map → user-registry-4PACZJIJ.js.map} +0 -0
@@ -3,12 +3,12 @@
3
3
  import {
4
4
  init_log_and_swallow,
5
5
  logAndSwallow
6
- } from "./chunk-YSKCQH6E.js";
6
+ } from "./chunk-2IYJ4I66.js";
7
7
  import {
8
8
  init_logger,
9
9
  logInfo,
10
10
  logWarn
11
- } from "./chunk-GWILHZPT.js";
11
+ } from "./chunk-XRTXYN66.js";
12
12
  import {
13
13
  __esm,
14
14
  __require
@@ -287,4 +287,4 @@ export {
287
287
  SkillWatcher,
288
288
  init_skill_watcher
289
289
  };
290
- //# sourceMappingURL=chunk-EUZDKV3C.js.map
290
+ //# sourceMappingURL=chunk-J4RUFAPK.js.map
@@ -4,7 +4,10 @@ import {
4
4
  printBanner
5
5
  } from "./chunk-YDY6QVWJ.js";
6
6
  import {
7
- acquireLock
7
+ acquireLock,
8
+ emptyManifest,
9
+ readManifest,
10
+ writeManifest
8
11
  } from "./chunk-5NY2YULC.js";
9
12
  import {
10
13
  packagePaths
@@ -13,6 +16,17 @@ import {
13
16
  // src/cli/commands/rollback.ts
14
17
  import { existsSync, readFileSync, writeFileSync, unlinkSync, symlinkSync } from "node:fs";
15
18
  import { join } from "node:path";
19
+ import { hostname } from "node:os";
20
+ function resolveReleaseIdentity(releaseDir, target) {
21
+ let version = target;
22
+ try {
23
+ const pkg = JSON.parse(readFileSync(join(releaseDir, "package.json"), "utf-8"));
24
+ if (typeof pkg.version === "string" && pkg.version) version = pkg.version;
25
+ } catch {
26
+ }
27
+ const commit = /^[0-9a-f]{7,40}$/.test(target) ? target : null;
28
+ return { version, commit };
29
+ }
16
30
  async function rollback(opts) {
17
31
  await printBanner("rollback");
18
32
  const paths = packagePaths("abtars");
@@ -57,12 +71,28 @@ async function rollback(opts) {
57
71
  symlinkSync(targetDir, paths.app);
58
72
  } catch {
59
73
  }
60
- process.stdout.write(`\u2713 rolled back to ${target} (slot ${slot})
74
+ const priorManifest = await readManifest(paths.manifest);
75
+ const { version: targetVersion, commit: targetCommit } = resolveReleaseIdentity(targetDir, target);
76
+ await writeManifest(paths.manifest, {
77
+ ...priorManifest ?? emptyManifest("abtars", hostname()),
78
+ version: targetVersion,
79
+ commit: targetCommit,
80
+ activatedAt: (/* @__PURE__ */ new Date()).toISOString(),
81
+ previousVersion: priorManifest?.version ?? null,
82
+ previousCommit: priorManifest?.commit ?? null
83
+ // source intentionally preserved from prior manifest — rollback does not
84
+ // change release provenance, and Manifest.source has no 'rollback' variant.
85
+ });
86
+ process.stdout.write(`\u2713 rolled back to ${target} (slot ${slot}) \u2014 manifest updated to ${targetVersion}
61
87
  `);
62
88
  try {
63
- const state = JSON.parse(readFileSync(join(paths.home, "deploy.state"), "utf-8"));
89
+ const statePath = join(paths.home, "deploy.state");
90
+ const state = JSON.parse(readFileSync(statePath, "utf-8") || "{}");
91
+ state.status = "rollback";
92
+ state.version = targetVersion;
93
+ state.completedAt = (/* @__PURE__ */ new Date()).toISOString();
64
94
  state.restartCount = 0;
65
- writeFileSync(join(paths.home, "deploy.state"), JSON.stringify(state) + "\n");
95
+ writeFileSync(statePath, JSON.stringify(state) + "\n");
66
96
  } catch {
67
97
  }
68
98
  writeFileSync(join(paths.home, ".start-reason"), `rollback:${target}`);
@@ -82,4 +112,4 @@ async function rollback(opts) {
82
112
  export {
83
113
  rollback
84
114
  };
85
- //# sourceMappingURL=chunk-HZDLFLRP.js.map
115
+ //# sourceMappingURL=chunk-J7DRPVMU.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/cli/commands/rollback.ts"],
4
+ "sourcesContent": ["import { printBanner } from './banner.js';\n/**\n * `abtars rollback` \u2014 repoint current symlink to a previous release from history.json.\n * --to N (1-3, default 1) selects which prior to restore.\n */\n\nimport { existsSync, readFileSync, writeFileSync, unlinkSync, symlinkSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { hostname } from 'node:os';\nimport { acquireLock, packagePaths, readManifest, writeManifest, emptyManifest } from '../deploy-lib-import.js';\n\n/**\n * Derive {version, commit} for a history entry. History entries are either a\n * git short SHA (dev builds, e.g. \"3aebb9d\") or a version string (npm builds,\n * e.g. \"0.3.4-alpha.8\"). The release dir's package.json holds the full version.\n */\nfunction resolveReleaseIdentity(releaseDir: string, target: string): { version: string; commit: string | null } {\n let version = target;\n try {\n const pkg = JSON.parse(readFileSync(join(releaseDir, 'package.json'), 'utf-8')) as { version?: string };\n if (typeof pkg.version === 'string' && pkg.version) version = pkg.version;\n } catch { /* fall back to target as version */ }\n // Git short SHA: 7-40 hex chars. npm versions contain dots/dashes.\n const commit = /^[0-9a-f]{7,40}$/.test(target) ? target : null;\n return { version, commit };\n}\n\nexport async function rollback(opts?: { to?: number }): Promise<number> {\n await printBanner(\"rollback\");\n const paths = packagePaths('abtars');\n const releasesDir = paths.releasesDir;\n const historyFile = join(releasesDir, 'history.json');\n const currentLink = join(releasesDir, 'current');\n const slot = opts?.to ?? 1;\n\n if (slot < 1 || slot > 3) {\n process.stderr.write(`Invalid --to value: ${slot}. Must be 1-3.\\n`);\n return 2;\n }\n\n let history: string[] = [];\n try { history = JSON.parse(readFileSync(historyFile, \"utf-8\")); } catch {}\n\n if (history.length <= slot) {\n process.stderr.write(`Nothing at slot ${slot} (history has ${history.length} entries).\\n`);\n return 2;\n }\n\n const target = history[slot]!;\n const targetDir = join(releasesDir, target);\n if (!existsSync(targetDir)) {\n process.stderr.write(`Release dir ${target} not found on disk.\\n`);\n return 2;\n }\n\n const release = await acquireLock(paths.lock, 'rollback');\n try {\n // Repoint current symlink\n try { unlinkSync(currentLink); } catch {}\n symlinkSync(targetDir, currentLink);\n\n // Also repoint legacy app/ symlink\n try { unlinkSync(paths.app); } catch {}\n try { symlinkSync(targetDir, paths.app); } catch {}\n\n // #1291: update manifest.json + deploy.state so the respawned bridge (which\n // reads its version from manifest via getDeployedVersion()) reports the\n // rolled-back release, not the stale pre-rollback one. Without this,\n // /software and bridge.lock keep showing the old version even though the\n // symlink + code were swapped correctly.\n const priorManifest = await readManifest(paths.manifest);\n const { version: targetVersion, commit: targetCommit } = resolveReleaseIdentity(targetDir, target);\n await writeManifest(paths.manifest, {\n ...(priorManifest ?? emptyManifest('abtars', hostname())),\n version: targetVersion,\n commit: targetCommit,\n activatedAt: new Date().toISOString(),\n previousVersion: priorManifest?.version ?? null,\n previousCommit: priorManifest?.commit ?? null,\n // source intentionally preserved from prior manifest \u2014 rollback does not\n // change release provenance, and Manifest.source has no 'rollback' variant.\n });\n\n process.stdout.write(`\u2713 rolled back to ${target} (slot ${slot}) \u2014 manifest updated to ${targetVersion}\\n`);\n\n // Reset circuit breaker counter + mark deploy.state so /software deploy-state line is accurate\n try {\n const statePath = join(paths.home, 'deploy.state');\n const state: Record<string, unknown> = JSON.parse(readFileSync(statePath, 'utf-8') || '{}');\n state.status = 'rollback';\n state.version = targetVersion;\n state.completedAt = new Date().toISOString();\n state.restartCount = 0;\n writeFileSync(statePath, JSON.stringify(state) + '\\n');\n } catch {}\n\n // Write start reason + restart\n writeFileSync(join(paths.home, '.start-reason'), `rollback:${target}`);\n\n // Kill bridge so WD respawns from rolled-back code\n try {\n const bridgePid = JSON.parse(readFileSync(join(paths.home, 'bridge.lock'), 'utf-8')).pid;\n if (bridgePid > 0) process.kill(bridgePid, 'SIGTERM');\n } catch {}\n\n process.stdout.write(`\u267B\uFE0F Bridge killed \u2014 WD will respawn from ${target}\\n`);\n return 0;\n } finally {\n await release();\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -40,6 +40,7 @@ var ModelHealthRegistry = class {
40
40
  }
41
41
  drain(b, now) {
42
42
  if (this.authSticky && b.authFailed) return;
43
+ if (b.creditsFailed) return;
43
44
  const elapsed = now - b.lastUpdate;
44
45
  b.level = Math.max(0, b.level - elapsed * this.leakPerMs);
45
46
  b.lastUpdate = now;
@@ -87,6 +88,10 @@ var ModelHealthRegistry = class {
87
88
  b.level = Math.min(1, b.level + this.rateLimitFill);
88
89
  if (retryAfterMs && retryAfterMs > 0) b.cooldownUntil = now + retryAfterMs;
89
90
  break;
91
+ case "credits":
92
+ b.level = 1;
93
+ b.creditsFailed = true;
94
+ break;
90
95
  case "weak":
91
96
  b.level = Math.min(1, b.level + this.weakFill);
92
97
  break;
@@ -108,6 +113,7 @@ var ModelHealthRegistry = class {
108
113
  this.drain(b, now);
109
114
  let status = "healthy";
110
115
  if (b.authFailed) status = "auth_failed";
116
+ else if (b.creditsFailed) status = "exhausted";
111
117
  else if (b.level > this.skipThreshold) status = "exhausted";
112
118
  else if (b.level > 0.3) status = "degraded";
113
119
  result.set(key, { level: Math.round(b.level * 100), consecutiveErrors: b.consecutiveErrors, cooldownUntil: b.cooldownUntil, status });
@@ -137,4 +143,4 @@ export {
137
143
  ModelHealthRegistry,
138
144
  classifyError
139
145
  };
140
- //# sourceMappingURL=chunk-EGL6UMAO.js.map
146
+ //# sourceMappingURL=chunk-JG4BKXBN.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/components/transport/model-health-registry.ts"],
4
+ "sourcesContent": ["/**\n * ModelHealthRegistry \u2014 shared per-model error tracking.\n * Leaky-bucket algorithm: fills on errors, drains over time. Full = skip.\n * One instance per bridge process, shared across all FallbackPolicy instances.\n *\n * All tuning constants configurable via transport.json `healthPolicy` key.\n * Missing fields fall back to hardcoded defaults.\n */\n\nexport type ErrorKind = \"rate_limit\" | \"credits\" | \"auth\" | \"transient\" | \"weak\" | \"empty\" | \"truncated\";\nexport type ModelStatus = \"healthy\" | \"degraded\" | \"exhausted\" | \"auth_failed\";\n\nexport interface HealthPolicyConfig {\n /** Bucket level (0-1) above which model is skipped. Default: 0.7 */\n skipThreshold?: number;\n /** Drain rate per minute (0-1). Default: 0.03 */\n leakPerMinute?: number;\n /** Auth error: fill amount (0-1). Default: 1.0 (instant full) */\n authFill?: number;\n /** Auth errors are sticky (never auto-drain). Default: true */\n authSticky?: boolean;\n /** Rate-limit fill per hit. Default: 0.5 */\n rateLimitFill?: number;\n /** Weak-model fill per hit. Default: 0.05 */\n weakFill?: number;\n /** Empty response (0 tokens) fill per hit. Default: 0.25 */\n emptyFill?: number;\n /** Truncated response (finish_reason=length) fill per hit. Default: 0 (disabled) */\n truncatedFill?: number;\n /** Transient progressive fill array. Default: [0.1, 0.2, 0.4, 0.8] */\n transientProgressive?: number[];\n /** Consecutive errors before cooldown kicks in. Default: 3 */\n transientCooldownAfter?: number;\n /** Max cooldown seconds for transient errors. Default: 300 */\n transientMaxCooldownSec?: number;\n}\n\ninterface Bucket {\n level: number;\n lastUpdate: number;\n consecutiveErrors: number;\n cooldownUntil?: number;\n authFailed?: boolean;\n /** #1296: credits (402) errors are sticky \u2014 bucket stays full until resetAll(). */\n creditsFailed?: boolean;\n demoted?: boolean;\n}\n\n// Defaults (unchanged from pre-config behavior)\nconst D_SKIP_THRESHOLD = 0.7;\nconst D_LEAK_PER_MIN = 0.03;\nconst D_AUTH_STICKY = true;\nconst D_RATE_LIMIT_FILL = 0.5;\nconst D_WEAK_FILL = 0.35;\nconst D_EMPTY_FILL = 0.25;\nconst D_TRUNCATED_FILL = 0;\nconst D_TRANSIENT_PROGRESSIVE = [0.1, 0.2, 0.4, 0.8];\nconst D_TRANSIENT_COOLDOWN_AFTER = 3;\nconst D_TRANSIENT_MAX_COOLDOWN_SEC = 300;\n\nexport class ModelHealthRegistry {\n private readonly buckets = new Map<string, Bucket>();\n private readonly skipThreshold: number;\n private readonly leakPerMs: number;\n private readonly authSticky: boolean;\n private readonly rateLimitFill: number;\n private readonly weakFill: number;\n private readonly emptyFill: number;\n private readonly truncatedFill: number;\n private readonly transientProgressive: number[];\n private readonly transientCooldownAfter: number;\n private readonly transientMaxCooldownMs: number;\n\n /** Fired when a model crosses the demotion threshold. Wired at boot. */\n onDemote?: (model: string, endpoint: string, reason: \"auth\" | \"timeout\") => void;\n\n constructor(config?: HealthPolicyConfig) {\n this.skipThreshold = config?.skipThreshold ?? D_SKIP_THRESHOLD;\n this.leakPerMs = (config?.leakPerMinute ?? D_LEAK_PER_MIN) / 60000;\n this.authSticky = config?.authSticky ?? D_AUTH_STICKY;\n this.rateLimitFill = config?.rateLimitFill ?? D_RATE_LIMIT_FILL;\n this.weakFill = config?.weakFill ?? D_WEAK_FILL;\n this.emptyFill = config?.emptyFill ?? D_EMPTY_FILL;\n this.truncatedFill = config?.truncatedFill ?? D_TRUNCATED_FILL;\n this.transientProgressive = config?.transientProgressive ?? D_TRANSIENT_PROGRESSIVE;\n this.transientCooldownAfter = config?.transientCooldownAfter ?? D_TRANSIENT_COOLDOWN_AFTER;\n this.transientMaxCooldownMs = (config?.transientMaxCooldownSec ?? D_TRANSIENT_MAX_COOLDOWN_SEC) * 1000;\n }\n\n private drain(b: Bucket, now: number): void {\n if (this.authSticky && b.authFailed) return;\n // #1296: credits exhaustion is sticky \u2014 no drain until resetAll()\n if (b.creditsFailed) return;\n const elapsed = now - b.lastUpdate;\n b.level = Math.max(0, b.level - elapsed * this.leakPerMs);\n b.lastUpdate = now;\n }\n\n shouldSkip(model: string, endpoint: string): boolean {\n const b = this.buckets.get(`${endpoint}|${model}`);\n if (!b) return false;\n const now = Date.now();\n if (b.cooldownUntil && now < b.cooldownUntil) return true;\n if (b.cooldownUntil && now >= b.cooldownUntil) b.cooldownUntil = undefined;\n this.drain(b, now);\n return b.level > this.skipThreshold;\n }\n\n recordSuccess(model: string, endpoint: string): void {\n const b = this.buckets.get(`${endpoint}|${model}`);\n if (!b) return;\n b.consecutiveErrors = 0;\n b.cooldownUntil = undefined;\n b.authFailed = false;\n }\n\n recordError(model: string, endpoint: string, kind: ErrorKind, retryAfterMs?: number): void {\n const key = `${endpoint}|${model}`;\n const now = Date.now();\n const b = this.buckets.get(key) ?? { level: 0, lastUpdate: now, consecutiveErrors: 0 };\n this.drain(b, now);\n\n switch (kind) {\n case \"auth\":\n b.level = 1.0;\n b.authFailed = true;\n if (this.onDemote && !b.demoted) {\n b.demoted = true;\n this.onDemote(model, endpoint, \"auth\");\n }\n break;\n case \"transient\": {\n const idx = Math.min(b.consecutiveErrors, this.transientProgressive.length - 1);\n b.level = Math.min(1.0, b.level + this.transientProgressive[idx]!);\n if (b.consecutiveErrors >= this.transientCooldownAfter) {\n b.cooldownUntil = now + Math.min((b.consecutiveErrors + 1) * 60_000, this.transientMaxCooldownMs);\n }\n break;\n }\n case \"rate_limit\":\n case \"credits\":\n b.level = Math.min(1.0, b.level + this.rateLimitFill);\n if (retryAfterMs && retryAfterMs > 0) b.cooldownUntil = now + retryAfterMs;\n break;\n case \"credits\":\n // #1296: credits exhaustion is sticky \u2014 stays full until resetAll() (manual /model reset)\n b.level = 1.0;\n b.creditsFailed = true;\n break;\n case \"weak\":\n b.level = Math.min(1.0, b.level + this.weakFill);\n break;\n case \"empty\":\n b.level = Math.min(1.0, b.level + this.emptyFill);\n break;\n case \"truncated\":\n if (this.truncatedFill > 0) b.level = Math.min(1.0, b.level + this.truncatedFill);\n break;\n }\n\n b.consecutiveErrors++;\n b.lastUpdate = now;\n this.buckets.set(key, b);\n }\n\n getHealth(): Map<string, { level: number; consecutiveErrors: number; cooldownUntil?: number; status: ModelStatus }> {\n const now = Date.now();\n const result = new Map<string, { level: number; consecutiveErrors: number; cooldownUntil?: number; status: ModelStatus }>();\n for (const [key, b] of this.buckets) {\n this.drain(b, now);\n let status: ModelStatus = \"healthy\";\n if (b.authFailed) status = \"auth_failed\";\n else if (b.creditsFailed) status = \"exhausted\";\n else if (b.level > this.skipThreshold) status = \"exhausted\";\n else if (b.level > 0.3) status = \"degraded\";\n result.set(key, { level: Math.round(b.level * 100), consecutiveErrors: b.consecutiveErrors, cooldownUntil: b.cooldownUntil, status });\n }\n return result;\n }\n\n /** Get bucket level for a specific model (0-100%). */\n getBucketLevel(model: string, endpoint: string): number {\n const b = this.buckets.get(`${endpoint}|${model}`);\n if (!b) return 0;\n this.drain(b, Date.now());\n return Math.round(b.level * 100);\n }\n\n resetAll(): void {\n this.buckets.clear();\n }\n}\n\n/** Classify HTTP status to error kind. */\nexport function classifyError(status: number, message?: string): ErrorKind {\n if (status === 402 && message?.includes(\"credits\")) return \"credits\";\n if (status === 429 || status === 402) return \"rate_limit\";\n if (status === 404 && message && /image input|No endpoints found/i.test(message)) return \"transient\";\n if (status === 401 || status === 403 || status === 404) return \"auth\";\n return \"transient\";\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -5,16 +5,16 @@ import {
5
5
  BrowserManager,
6
6
  BrowserTool,
7
7
  DomainAllowlist
8
- } from "./chunk-2KC5G3EA.js";
8
+ } from "./chunk-OWUO5RS3.js";
9
9
  import {
10
10
  getEnv,
11
11
  init_env_schema
12
- } from "./chunk-65VCEC32.js";
12
+ } from "./chunk-6PA5JBUU.js";
13
13
  import {
14
14
  init_logger,
15
15
  logError,
16
16
  logInfo
17
- } from "./chunk-GWILHZPT.js";
17
+ } from "./chunk-XRTXYN66.js";
18
18
  import {
19
19
  abtarsHome,
20
20
  init_paths
@@ -66,7 +66,7 @@ function register(api) {
66
66
  buf = buf.slice(nl + 1);
67
67
  try {
68
68
  const { taskId, prompt, timeoutMs } = JSON.parse(line);
69
- import("./spin-TI3TSVVT.js").then(({ spin: s }) => {
69
+ import("./spin-VHNGNWTD.js").then(({ spin: s }) => {
70
70
  const { cardId } = s.dispatch({ type: "B", goal: prompt, source: "agent", timeoutMs });
71
71
  conn.write(JSON.stringify({ ok: true, taskId, cardId, status: "spawned" }) + "\n");
72
72
  }).catch((err) => {
@@ -98,4 +98,4 @@ export {
98
98
  register,
99
99
  browser_exports
100
100
  };
101
- //# sourceMappingURL=chunk-5B5B6EHL.js.map
101
+ //# sourceMappingURL=chunk-JLWYPGWI.js.map
@@ -3,15 +3,15 @@
3
3
  import {
4
4
  init_bridge_lock_transport,
5
5
  writeRestartReason
6
- } from "./chunk-GRVWZO4C.js";
6
+ } from "./chunk-KOSFXW2S.js";
7
7
  import {
8
8
  getEnv,
9
9
  init_env_schema
10
- } from "./chunk-65VCEC32.js";
10
+ } from "./chunk-6PA5JBUU.js";
11
11
  import {
12
12
  init_log_and_swallow,
13
13
  logAndSwallow
14
- } from "./chunk-YSKCQH6E.js";
14
+ } from "./chunk-2IYJ4I66.js";
15
15
  import {
16
16
  init_logger,
17
17
  logDebug,
@@ -19,7 +19,7 @@ import {
19
19
  logInfo,
20
20
  logTrace,
21
21
  logWarn
22
- } from "./chunk-GWILHZPT.js";
22
+ } from "./chunk-XRTXYN66.js";
23
23
  import {
24
24
  __export
25
25
  } from "./chunk-7K2YZTLD.js";
@@ -17218,7 +17218,7 @@ var AcpTransport = class _AcpTransport {
17218
17218
  this._rawClient = null;
17219
17219
  }
17220
17220
  if (_AcpTransport._rawMode) {
17221
- const { AcpRawClient } = await import("./acp-raw-client-E6FM45NC.js");
17221
+ const { AcpRawClient } = await import("./acp-raw-client-UCNK3OTU.js");
17222
17222
  let args2;
17223
17223
  if (this.extraCliArgs) {
17224
17224
  args2 = [...this.extraCliArgs];
@@ -17274,7 +17274,7 @@ var AcpTransport = class _AcpTransport {
17274
17274
  env: cleanEnv
17275
17275
  });
17276
17276
  if (this.agent.pid) {
17277
- import("./bridge-lock-transport-4ZH7QTJP.js").then(({ trackAcpPid }) => trackAcpPid(this.agent.pid)).catch(() => {
17277
+ import("./bridge-lock-transport-7RSN7OLJ.js").then(({ trackAcpPid }) => trackAcpPid(this.agent.pid)).catch(() => {
17278
17278
  });
17279
17279
  }
17280
17280
  if (!this.agent.stdin || !this.agent.stdout) {
@@ -17334,7 +17334,7 @@ var AcpTransport = class _AcpTransport {
17334
17334
  const inTok = typeof params["inputTokens"] === "number" ? params["inputTokens"] : 0;
17335
17335
  const outTok = typeof params["outputTokens"] === "number" ? params["outputTokens"] : 0;
17336
17336
  if (inTok || outTok) {
17337
- import("./budget-45QOBDWA.js").then(({ incrementBudgetCounter }) => incrementBudgetCounter(this.agentName, inTok + outTok)).catch(() => {
17337
+ import("./budget-WUM3SPKW.js").then(({ incrementBudgetCounter }) => incrementBudgetCounter(this.agentName, inTok + outTok)).catch(() => {
17338
17338
  });
17339
17339
  }
17340
17340
  }
@@ -17410,12 +17410,12 @@ var AcpTransport = class _AcpTransport {
17410
17410
  return chunks.join("") || "(no response)";
17411
17411
  } finally {
17412
17412
  const durationMs = Date.now() - this.promptStartedAt;
17413
- import("./metrics-collector-L3VPEHII.js").then(({ recordLatency, recordCall }) => {
17413
+ import("./metrics-collector-YMUGY3PI.js").then(({ recordLatency, recordCall }) => {
17414
17414
  recordLatency(`llm:${this.modelId ?? "unknown"}`, durationMs);
17415
17415
  recordCall(`llm:${this.modelId ?? "unknown"}`, true);
17416
17416
  }).catch(() => {
17417
17417
  });
17418
- import("./hook-system-M3POLUIB.js").then(({ hasHooks, fire }) => {
17418
+ import("./hook-system-YB635OC4.js").then(({ hasHooks, fire }) => {
17419
17419
  if (!hasHooks("AfterPrompt")) return;
17420
17420
  fire("AfterPrompt", {
17421
17421
  event: "AfterPrompt",
@@ -17430,7 +17430,7 @@ var AcpTransport = class _AcpTransport {
17430
17430
  }).catch((err) => logAndSwallow(TAG, "fire AfterPrompt", err));
17431
17431
  }).catch((err) => logAndSwallow(TAG, "import hook-system", err));
17432
17432
  this.sm.promptCompleted();
17433
- import("./budget-45QOBDWA.js").then(({ incrementBudgetCounter }) => incrementBudgetCounter(this.agentName, 0)).catch(() => {
17433
+ import("./budget-WUM3SPKW.js").then(({ incrementBudgetCounter }) => incrementBudgetCounter(this.agentName, 0)).catch(() => {
17434
17434
  });
17435
17435
  this.drainPending();
17436
17436
  }
@@ -17541,7 +17541,7 @@ var AcpTransport = class _AcpTransport {
17541
17541
  }
17542
17542
  async resetSession(_sessionKey) {
17543
17543
  try {
17544
- const { clearTransportCache, loadTransport, resolveAgent } = await import("./transport-config-KBF5W2DP.js");
17544
+ const { clearTransportCache, loadTransport, resolveAgent } = await import("./transport-config-6MB2K2XC.js");
17545
17545
  clearTransportCache();
17546
17546
  const tc = loadTransport();
17547
17547
  if (tc) {
@@ -17783,4 +17783,4 @@ export {
17783
17783
  ModelNotFoundError,
17784
17784
  AcpTransport
17785
17785
  };
17786
- //# sourceMappingURL=chunk-5QUTMUIK.js.map
17786
+ //# sourceMappingURL=chunk-JXYWDAHD.js.map
@@ -7,13 +7,14 @@ import {
7
7
  import {
8
8
  init_log_and_swallow,
9
9
  logAndSwallow
10
- } from "./chunk-YSKCQH6E.js";
10
+ } from "./chunk-2IYJ4I66.js";
11
11
  import {
12
12
  abtarsHome,
13
13
  init_paths
14
14
  } from "./chunk-GALQBVKO.js";
15
15
  import {
16
- __esm
16
+ __esm,
17
+ __export
17
18
  } from "./chunk-7K2YZTLD.js";
18
19
 
19
20
  // src/components/atomic-write.ts
@@ -33,6 +34,25 @@ var init_atomic_write = __esm({
33
34
  });
34
35
 
35
36
  // src/components/transport/bridge-lock-transport.ts
37
+ var bridge_lock_transport_exports = {};
38
+ __export(bridge_lock_transport_exports, {
39
+ appendRestartTimestamp: () => appendRestartTimestamp,
40
+ initBridgeLock: () => initBridgeLock,
41
+ readAndClearAcpPids: () => readAndClearAcpPids,
42
+ readAndClearForceSleep: () => readAndClearForceSleep,
43
+ readAndClearRestartReason: () => readAndClearRestartReason,
44
+ readAndClearRestartRequested: () => readAndClearRestartRequested,
45
+ readBridgeLockField: () => readBridgeLockField,
46
+ readLastPromptAt: () => readLastPromptAt,
47
+ readRestartTimestamps: () => readRestartTimestamps,
48
+ trackAcpPid: () => trackAcpPid,
49
+ updateBridgeLockField: () => updateBridgeLockField,
50
+ updateLastHeartbeat: () => updateLastHeartbeat,
51
+ writeForceSleep: () => writeForceSleep,
52
+ writeRestartReason: () => writeRestartReason,
53
+ writeRestartRequested: () => writeRestartRequested,
54
+ writeSleepStatus: () => writeSleepStatus
55
+ });
36
56
  import { readFileSync } from "node:fs";
37
57
  import { join } from "node:path";
38
58
  function trackAcpPid(pid) {
@@ -173,6 +193,7 @@ export {
173
193
  readAndClearForceSleep,
174
194
  initBridgeLock,
175
195
  updateLastHeartbeat,
196
+ bridge_lock_transport_exports,
176
197
  init_bridge_lock_transport
177
198
  };
178
- //# sourceMappingURL=chunk-GRVWZO4C.js.map
199
+ //# sourceMappingURL=chunk-KOSFXW2S.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/components/atomic-write.ts", "../src/components/transport/bridge-lock-transport.ts"],
4
4
  "sourcesContent": ["import { writeFileSync, renameSync, openSync, fsyncSync, closeSync, unlinkSync } from \"node:fs\";\n\n/** Atomic write: .tmp \u2192 fsync \u2192 rename. Crash-safe on POSIX. */\nexport function atomicWriteSync(path: string, data: string): void {\n const tmp = path + \".tmp\";\n writeFileSync(tmp, data, \"utf-8\");\n const fd = openSync(tmp, \"r\");\n fsyncSync(fd);\n closeSync(fd);\n renameSync(tmp, path);\n}\n\n/** Clean orphan .tmp files left by crashes. Call on boot. */\nexport function cleanOrphanTmp(path: string): void {\n try { unlinkSync(path + \".tmp\"); } catch { /* no orphan */ }\n}\n", "/**\n * bridge.lock \u2014 single source of truth for bridge runtime state.\n * Fields: pid, startedAt, lastHeartbeat, lastPromptAt, version,\n * sleepStatus, restartReason, restartRequested, forceSleep.\n */\nimport { logAndSwallow } from \"../log-and-swallow.js\";\nimport { readFileSync } from \"node:fs\";\nimport { atomicWriteSync } from \"../atomic-write.js\";\nimport { join } from \"node:path\";\nimport { abtarsHome } from \"../../paths.js\";\nimport { localISO } from \"../../utils/local-time.js\";\n\nexport type SleepStatus = \"awake\" | \"sleeping\" | \"hw_sleep\";\n\n/** Add an ACP child PID to bridge.lock tracking. */\nexport function trackAcpPid(pid: number): void {\n const pids = readBridgeLockField<number[]>(\"acpPids\") ?? [];\n pids.push(pid);\n updateBridgeLockField(\"acpPids\", pids);\n}\n\n/** Read and clear stale ACP PIDs from bridge.lock. */\nexport function readAndClearAcpPids(): number[] {\n const pids = readBridgeLockField<number[]>(\"acpPids\") ?? [];\n if (pids.length) updateBridgeLockField(\"acpPids\", []);\n return pids;\n}\n\n/** Read lastPromptAt from bridge.lock. Returns 0 if missing/unreadable. */\nexport function readLastPromptAt(): number {\n try {\n const lock = JSON.parse(readFileSync(join(abtarsHome(), \"bridge.lock\"), \"utf-8\"));\n return typeof lock.lastPromptAt === \"number\" ? lock.lastPromptAt : 0;\n } catch (err) { logAndSwallow(\"bridge_lock_transport\", \"readLastPromptAt\", err); return 0; }\n}\n\n/** Update a single field in bridge.lock (read-merge-write). */\nexport function updateBridgeLockField(key: string, value: unknown): void {\n const p = join(abtarsHome(), \"bridge.lock\");\n try {\n const lock = JSON.parse(readFileSync(p, \"utf-8\"));\n lock[key] = value;\n atomicWriteSync(p, JSON.stringify(lock));\n } catch (err) { logAndSwallow(\"bridge_lock_transport\", \"op\", err); }\n}\n\n/** Read a field from bridge.lock. Returns null if missing/unreadable. */\nexport function readBridgeLockField<T = unknown>(key: string): T | null {\n try {\n const lock = JSON.parse(readFileSync(join(abtarsHome(), \"bridge.lock\"), \"utf-8\"));\n return lock[key] ?? null;\n } catch (err) { logAndSwallow(\"bridge_lock_transport\", \"readBridgeLockField\", err); return null; }\n}\n\n/** Write restart reason to bridge.lock. */\nexport function writeRestartReason(reason: string): void {\n updateBridgeLockField(\"restartReason\", `${localISO()} ${reason}`);\n}\n\n/** Read and clear restart reason from bridge.lock. */\nexport function readAndClearRestartReason(): string | null {\n const reason = readBridgeLockField<string>(\"restartReason\");\n if (reason) updateBridgeLockField(\"restartReason\", null);\n return reason;\n}\n\n/** Write restart request to bridge.lock. */\nexport function writeRestartRequested(reason: string): void {\n updateBridgeLockField(\"restartRequested\", `${localISO()} ${reason}`);\n}\n\n/** Read and clear restart request from bridge.lock. */\nexport function readAndClearRestartRequested(): string | null {\n const req = readBridgeLockField<string>(\"restartRequested\");\n if (req) updateBridgeLockField(\"restartRequested\", null);\n return req;\n}\n\n/** Update sleep status in bridge.lock. */\nexport function writeSleepStatus(status: SleepStatus): void {\n updateBridgeLockField(\"sleepStatus\", status);\n}\n\n/** Append a restart timestamp to bridge.lock (capped at 10). Used by in-process watchdog circuit breaker. */\nexport function appendRestartTimestamp(): void {\n const ts = readBridgeLockField<number[]>(\"restartTimestamps\") ?? [];\n ts.push(Date.now());\n if (ts.length > 10) ts.splice(0, ts.length - 10);\n updateBridgeLockField(\"restartTimestamps\", ts);\n}\n\n/** Read recent restart timestamps from bridge.lock. */\nexport function readRestartTimestamps(): number[] {\n return readBridgeLockField<number[]>(\"restartTimestamps\") ?? [];\n}\n\n/** Request a forced sleep cycle on the next heartbeat tick.\n * See src/capabilities/sleep/index.ts spawnSleep() + src/components/daily-cycle.ts isDailyCycleDue().\n * Pattern mirrors writeRestartRequested/readAndClearRestartRequested. */\nexport function writeForceSleep(reason: string): void {\n updateBridgeLockField(\"forceSleep\", `${localISO()} ${reason}`);\n}\n\n/** Read and clear the force-sleep request from bridge.lock.\n * Sole deleter: spawnSleep. isDailyCycleDue peeks via readBridgeLockField. */\nexport function readAndClearForceSleep(): string | null {\n const v = readBridgeLockField<string>(\"forceSleep\");\n if (v) updateBridgeLockField(\"forceSleep\", null);\n return v;\n}\n\n/** Initialize bridge.lock with full boot state. Single writer for initial creation. */\nexport interface PrevBridgeState { pid: number | null; lastHeartbeat: number | null }\n\nexport function initBridgeLock(opts: { pid: number; startedAt: number; version: string; argv: string[]; startReason?: string }): PrevBridgeState {\n const p = join(abtarsHome(), \"bridge.lock\");\n let prev: PrevBridgeState = { pid: null, lastHeartbeat: null };\n try {\n // Read existing state (may have watchdogPid from watchdog, or stale pid from previous bridge)\n let existing: Record<string, unknown> = {};\n try { existing = JSON.parse(readFileSync(p, \"utf-8\")); } catch { /* missing or corrupt \u2014 cold boot */ }\n const prevPid = typeof existing.pid === \"number\" ? existing.pid : null;\n prev = { pid: prevPid, lastHeartbeat: typeof existing.lastHeartbeat === \"number\" ? existing.lastHeartbeat : null };\n // Classify boot type from previous heartbeat gap\n let bootType = \"cold\";\n if (prev.lastHeartbeat) {\n const gapS = (Date.now() - prev.lastHeartbeat) / 1000;\n if (gapS < 300) bootType = \"darkwake\";\n else if (gapS <= 7200) bootType = \"short-outage\";\n else bootType = \"long-outage\";\n }\n // Merge: preserve watchdogPid from watchdog or env var\n const wdPid = Number(process.env.ABTARS_WATCHDOG_PID) || existing.watchdogPid || null;\n atomicWriteSync(p, JSON.stringify({\n pid: opts.pid, watchdogPid: wdPid, startedAt: opts.startedAt, version: opts.version,\n sleepStatus: \"awake\", argv: opts.argv, lastHeartbeat: Date.now(), startReason: opts.startReason ?? \"unknown\", bootType,\n }));\n } catch (err) { logAndSwallow(\"bridge_lock_transport\", \"op\", err); }\n return prev;\n}\n\n/** Update lastHeartbeat timestamp in bridge.lock (called every tick). */\nexport function updateLastHeartbeat(): void {\n updateBridgeLockField(\"lastHeartbeat\", Date.now());\n}\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }