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
@@ -246,6 +246,14 @@ function readJsonField(file, field) {
246
246
  return void 0;
247
247
  }
248
248
  }
249
+ function inWatchdogServiceCgroup() {
250
+ if (process.platform === "darwin") return false;
251
+ try {
252
+ return readFileSync2("/proc/self/cgroup", "utf-8").includes("abtars-watchdog.service");
253
+ } catch {
254
+ return false;
255
+ }
256
+ }
249
257
  function syncSrcRepos(srcDir, names) {
250
258
  mkdirSync(srcDir, { recursive: true });
251
259
  for (const name of names) {
@@ -352,7 +360,9 @@ async function deployActivation(args) {
352
360
  history = JSON.parse(readFileSync2(paths.releasesHistory, "utf-8"));
353
361
  } catch {
354
362
  }
355
- history.unshift(staged.commit || staged.version);
363
+ const newRef = staged.commit || staged.version;
364
+ history = history.filter((h) => h !== newRef);
365
+ history.unshift(newRef);
356
366
  if (history.length > 4) {
357
367
  const dropped = history.pop();
358
368
  rmSync(join3(paths.releasesDir, dropped), { recursive: true, force: true });
@@ -395,99 +405,129 @@ async function deployActivation(args) {
395
405
  writeFileSync2(join3(paths.home, "deploy.state"), JSON.stringify({ status: "deploying", version: staged.version, startedAt: (/* @__PURE__ */ new Date()).toISOString() }) + "\n");
396
406
  process.stdout.write(`\u2713 manifest updated
397
407
  `);
408
+ const inCgroup = inWatchdogServiceCgroup();
398
409
  if (!isFirstInstall) {
399
- if (process.platform === "darwin") {
400
- const uid = `gui/${process.getuid?.() ?? 501}`;
401
- try {
402
- execSync(`launchctl bootout ${uid}/com.abtars.watchdog 2>/dev/null`, { stdio: "ignore", timeout: 5e3 });
403
- } catch {
404
- }
405
- } else {
410
+ if (inCgroup) {
406
411
  try {
407
- execSync("systemctl --user stop abtars-watchdog", { stdio: "ignore", timeout: 5e3 });
412
+ rmSync(join3(paths.home, ".stopped"));
408
413
  } catch {
409
414
  }
410
- }
411
- writeFileSync2(join3(paths.home, ".start-reason"), `update:${staged.version}`);
412
- const wdPid = readJsonField(join3(paths.home, "bridge.lock"), "watchdogPid");
413
- if (wdPid && wdPid > 0) {
414
- try {
415
- process.kill(wdPid, "SIGTERM");
416
- } catch {
417
- }
418
- }
419
- const bridgePid = readJsonField(join3(paths.home, "bridge.lock"), "pid");
420
- if (bridgePid && bridgePid > 0) {
421
- try {
422
- process.kill(bridgePid, "SIGTERM");
423
- } catch {
424
- }
425
- process.stdout.write(` x Killing bridge (PID ${bridgePid})...
415
+ const bridgePid = readJsonField(join3(paths.home, "bridge.lock"), "pid");
416
+ if (bridgePid && bridgePid > 0) {
417
+ try {
418
+ process.kill(bridgePid, "SIGTERM");
419
+ } catch {
420
+ }
421
+ process.stdout.write(` x Killing bridge (PID ${bridgePid}) \u2014 L3 watchdog will respawn from new release...
426
422
  `);
427
- for (let i = 0; i < 10; i++) {
428
- await new Promise((r) => setTimeout(r, 500));
423
+ for (let i = 0; i < 10; i++) {
424
+ await new Promise((r) => setTimeout(r, 500));
425
+ try {
426
+ process.kill(bridgePid, 0);
427
+ } catch {
428
+ break;
429
+ }
430
+ }
431
+ }
432
+ } else {
433
+ if (process.platform === "darwin") {
434
+ const uid = `gui/${process.getuid?.() ?? 501}`;
435
+ try {
436
+ execSync(`launchctl bootout ${uid}/com.abtars.watchdog 2>/dev/null`, { stdio: "ignore", timeout: 5e3 });
437
+ } catch {
438
+ }
439
+ } else {
429
440
  try {
430
- process.kill(bridgePid, 0);
441
+ execSync("systemctl --user stop abtars-watchdog", { stdio: "ignore", timeout: 5e3 });
431
442
  } catch {
432
- break;
433
443
  }
434
444
  }
435
- }
436
- if (wdPid && wdPid > 0) {
437
- let wdAlive = false;
438
- for (let i = 0; i < 6; i++) {
445
+ writeFileSync2(join3(paths.home, ".start-reason"), `update:${staged.version}`);
446
+ const wdPid = readJsonField(join3(paths.home, "bridge.lock"), "watchdogPid");
447
+ if (wdPid && wdPid > 0) {
439
448
  try {
440
- process.kill(wdPid, 0);
441
- wdAlive = true;
449
+ process.kill(wdPid, "SIGTERM");
442
450
  } catch {
443
- wdAlive = false;
444
- break;
445
451
  }
446
- await new Promise((r) => setTimeout(r, 500));
447
452
  }
448
- if (wdAlive) {
453
+ const bridgePid = readJsonField(join3(paths.home, "bridge.lock"), "pid");
454
+ if (bridgePid && bridgePid > 0) {
449
455
  try {
450
- process.kill(wdPid, "SIGKILL");
456
+ process.kill(bridgePid, "SIGTERM");
451
457
  } catch {
452
458
  }
459
+ process.stdout.write(` x Killing bridge (PID ${bridgePid})...
460
+ `);
461
+ for (let i = 0; i < 10; i++) {
462
+ await new Promise((r) => setTimeout(r, 500));
463
+ try {
464
+ process.kill(bridgePid, 0);
465
+ } catch {
466
+ break;
467
+ }
468
+ }
469
+ }
470
+ if (wdPid && wdPid > 0) {
471
+ let wdAlive = false;
472
+ for (let i = 0; i < 6; i++) {
473
+ try {
474
+ process.kill(wdPid, 0);
475
+ wdAlive = true;
476
+ } catch {
477
+ wdAlive = false;
478
+ break;
479
+ }
480
+ await new Promise((r) => setTimeout(r, 500));
481
+ }
482
+ if (wdAlive) {
483
+ try {
484
+ process.kill(wdPid, "SIGKILL");
485
+ } catch {
486
+ }
487
+ }
488
+ }
489
+ try {
490
+ rmSync(join3(paths.home, ".stopped"));
491
+ } catch {
453
492
  }
454
- }
455
- try {
456
- rmSync(join3(paths.home, ".stopped"));
457
- } catch {
458
493
  }
459
494
  }
460
- writeFileSync2(join3(paths.home, ".start-reason"), "deploy-respawn");
461
495
  const manifest = await readManifest(paths.manifest);
462
496
  const mode = manifest?.installMode ?? "daemon";
463
497
  if (mode === "daemon") {
464
- if (process.platform === "darwin") {
465
- const plistPath = join3(homedir(), "Library/LaunchAgents/com.abtars.watchdog.plist");
466
- const uid = `gui/${process.getuid?.() ?? 501}`;
467
- try {
468
- execSync(`launchctl bootstrap ${uid} "${plistPath}"`, { stdio: "ignore", timeout: 5e3 });
469
- } catch {
470
- }
498
+ if (inCgroup) {
499
+ process.stdout.write(` Bridge killed \u2014 L3 watchdog respawning from new release
500
+ `);
471
501
  } else {
472
- try {
473
- execSync("systemctl --user daemon-reload", { stdio: "ignore", timeout: 5e3 });
474
- } catch {
475
- }
476
- try {
477
- execSync("systemctl --user unmask abtars-watchdog", { stdio: "ignore", timeout: 5e3 });
478
- } catch {
479
- }
480
- try {
481
- execSync("systemctl --user enable abtars-watchdog", { stdio: "ignore", timeout: 5e3 });
482
- } catch {
483
- }
484
- try {
485
- execSync("systemctl --user start abtars-watchdog", { stdio: "ignore", timeout: 5e3 });
486
- } catch {
502
+ writeFileSync2(join3(paths.home, ".start-reason"), "deploy-respawn");
503
+ if (process.platform === "darwin") {
504
+ const plistPath = join3(homedir(), "Library/LaunchAgents/com.abtars.watchdog.plist");
505
+ const uid = `gui/${process.getuid?.() ?? 501}`;
506
+ try {
507
+ execSync(`launchctl bootstrap ${uid} "${plistPath}"`, { stdio: "ignore", timeout: 5e3 });
508
+ } catch {
509
+ }
510
+ } else {
511
+ try {
512
+ execSync("systemctl --user daemon-reload", { stdio: "ignore", timeout: 5e3 });
513
+ } catch {
514
+ }
515
+ try {
516
+ execSync("systemctl --user unmask abtars-watchdog", { stdio: "ignore", timeout: 5e3 });
517
+ } catch {
518
+ }
519
+ try {
520
+ execSync("systemctl --user enable abtars-watchdog", { stdio: "ignore", timeout: 5e3 });
521
+ } catch {
522
+ }
523
+ try {
524
+ execSync("systemctl --user start abtars-watchdog", { stdio: "ignore", timeout: 5e3 });
525
+ } catch {
526
+ }
487
527
  }
488
- }
489
- process.stdout.write(` Daemon started
528
+ process.stdout.write(` Daemon started
490
529
  `);
530
+ }
491
531
  } else {
492
532
  process.stdout.write(` Deployed. Run 'abtars start' to launch the bridge.
493
533
  `);
@@ -508,8 +548,8 @@ async function deployActivation(args) {
508
548
  }
509
549
  async function refresh(paths, repoRoot) {
510
550
  await mkdir3(paths.bin, { recursive: true });
511
- const { writeWrapper } = await import("./install-OS3CU7NF.js");
512
- const { loadManifest } = await import("./install-manifest-5PPWMD2W.js");
551
+ const { writeWrapper } = await import("./install-RFKKFSGS.js");
552
+ const { loadManifest } = await import("./install-manifest-J7ICPCJN.js");
513
553
  const installManifest = loadManifest(paths.app);
514
554
  for (const name of installManifest.cliWrappers) {
515
555
  await writeWrapper(paths.bin, name, paths.app, false);
@@ -580,7 +620,7 @@ exec node "${target}" "$@"
580
620
  }
581
621
  }
582
622
  }
583
- const { reconcile, migrate } = await import("./reconcile-CTFCLQRN.js");
623
+ const { reconcile, migrate } = await import("./reconcile-GFDQYNBD.js");
584
624
  const templatesSrc = join3(paths.app, "templates");
585
625
  reconcile(templatesSrc, paths.home);
586
626
  migrate(paths.home);
@@ -595,4 +635,4 @@ export {
595
635
  deploy,
596
636
  deployActivationCli
597
637
  };
598
- //# sourceMappingURL=chunk-SIFPBTI4.js.map
638
+ //# sourceMappingURL=chunk-HGSHCQ5F.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/cli/deploy-lib/deploy.ts", "../src/cli/update-sources/dev.ts", "../src/cli/update-sources/npm.ts", "../src/cli/update-sources/registry-client.ts"],
4
+ "sourcesContent": ["/**\n * Unified deploy flow. #1085 unified install+update; #1237 split into:\n * - obtain (sync + prepare + abmind) \u2014 fail-safe, may run as old code\n * - deployActivation() \u2014 brick-risk, runs fresh via __deploy\n * deploy() keeps the monolithic path (obtain+activate) for --local and tests.\n */\nimport { hostname, homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { existsSync, readFileSync, writeFileSync, rmSync, cpSync, mkdirSync, copyFileSync } from \"node:fs\";\nimport { mkdir, writeFile } from \"node:fs/promises\";\nimport { execSync } from \"node:child_process\";\nimport { acquireLock, cleanStaleStaging, healthProbe, packagePaths, readManifest, writeManifest, emptyManifest } from \"../deploy-lib/index.js\";\nimport { resolveAbmindHome } from \"./paths.js\";\nimport { makeLocalBuildSource } from \"../update-sources/dev.js\";\nimport { makeNpmSource } from \"../update-sources/npm.js\";\nimport type { SourceName, StagedRelease } from \"../update-sources/types.js\";\n\nexport interface DeployOptions {\n readonly source: SourceName;\n readonly localDir?: string;\n readonly skipFreshness?: boolean;\n}\n\nfunction readJsonField(file: string, field: string): unknown {\n try { return JSON.parse(readFileSync(file, \"utf-8\"))[field]; } catch { return undefined; }\n}\n\n/**\n * True when THIS process lives inside the abtars-watchdog.service cgroup (Linux).\n *\n * The `/update dev` bridge command spawns this deploy process detached \u2014 which on\n * Linux is a new session but the SAME cgroup (detached \u2260 new cgroup). The service\n * runs KillMode=control-group, so `systemctl stop`/restarting the unit or killing\n * the watchdog (\u2192 systemd restart \u2192 cgroup teardown) would SIGTERM this very\n * process before it finishes \u2192 nothing respawns (#1299 cgroup suicide).\n *\n * The manual `abtars update --dev` CLI and scripts/emergency-update.sh run from a\n * login shell (a different cgroup) \u2192 returns false \u2192 safe to stop/restart the\n * service (instant, and refreshes the watchdog). macOS has no such cgroup teardown.\n */\nfunction inWatchdogServiceCgroup(): boolean {\n if (process.platform === \"darwin\") return false;\n try {\n return readFileSync(\"/proc/self/cgroup\", \"utf-8\").includes(\"abtars-watchdog.service\");\n } catch {\n return false; // no /proc or unreadable \u2014 assume out-of-cgroup (safe path)\n }\n}\n\n/**\n * Sync source repos into <releasesDir>/src \u2014 clone if missing, fetch+reset if\n * present, nuke+reclone on failure. Throws if a required repo (abtars) cannot\n * be synced. Obtain step \u2014 fail-safe (no release is swapped here).\n */\nexport function syncSrcRepos(srcDir: string, names: readonly string[]): void {\n mkdirSync(srcDir, { recursive: true });\n for (const name of names) {\n const dir = join(srcDir, name);\n try {\n if (existsSync(join(dir, \".git\"))) {\n execSync(\"git fetch --depth 1 origin dev && git reset --hard origin/dev\", { cwd: dir, stdio: \"pipe\", timeout: 30_000 });\n } else {\n rmSync(dir, { recursive: true, force: true });\n execSync(`git clone --depth 1 -b dev https://github.com/aksika/${name}.git`, { cwd: srcDir, stdio: \"pipe\", timeout: 120_000 });\n }\n } catch {\n try {\n rmSync(dir, { recursive: true, force: true });\n execSync(`git clone --depth 1 -b dev https://github.com/aksika/${name}.git`, { cwd: srcDir, stdio: \"pipe\", timeout: 120_000 });\n } catch (err) {\n process.stderr.write(`Failed to sync ${name}: ${err instanceof Error ? err.message : String(err)}\\n`);\n if (name === \"abtars\") throw err;\n }\n }\n }\n}\n\n// abmind is no longer built or bundled by abtars (#1243) \u2014 it ships as a\n// separate global package, discovered at runtime via import(\"abmind\").\n\n/**\n * Monolithic deploy: obtain (sync + prepare + abmind) then activate.\n * Used by `abtars update --local <dir>` and as the single-process path.\n * The bootstrap (#1237) instead obtains, then execs fresh `__deploy` which\n * calls deployActivation() directly.\n */\nexport async function deploy(opts: DeployOptions): Promise<number> {\n const paths = packagePaths(\"abtars\");\n\n if (!opts.localDir) {\n const srcDir = join(paths.releasesDir, \"src\");\n try { syncSrcRepos(srcDir, [\"abtars\"]); } catch { return 1; }\n }\n\n const repoRoot = opts.localDir ?? join(paths.releasesDir, \"src\", \"abtars\");\n if (!existsSync(join(repoRoot, \"package.json\"))) {\n process.stderr.write(`Source not found at ${repoRoot}\\nUse: abtars update --local <DIR>\\n`);\n return 1;\n }\n\n const { migrateIfNeeded } = await import(\"./migrate-layout.js\");\n migrateIfNeeded(paths.home);\n\n const release = await acquireLock(paths.lock, \"deploy\");\n try {\n cleanStaleStaging(paths.appStaging);\n cleanStaleStaging(join(paths.home, 'app.staging')); // legacy #1247 cleanup\n process.stdout.write(`Building from ${repoRoot}...\\n`);\n\n const source = opts.source === \"alpha\" || opts.source === \"stable\"\n ? makeNpmSource(\"abtars\", opts.source === \"alpha\" ? \"alpha\" : \"latest\")\n : makeLocalBuildSource({ repoRoot, allowStale: !!opts.skipFreshness });\n\n const staged = await source.prepare({ stagingDir: paths.appStaging, home: paths.home, allowStale: !!opts.skipFreshness });\n process.stdout.write(`\u2713 staged ${staged.version}\\n`);\n\n return await deployActivation({ staged, channel: opts.source, repoRoot });\n } finally {\n await release();\n }\n}\n\n/**\n * `__deploy` CLI entry \u2014 runs as FRESHLY-staged code (the bundle the bootstrap\n * just produced). Consumes a StagedRelease via flags and performs activation\n * only. Hidden command; stable, forward-compatible arg contract:\n * __deploy --staged <dir> --version <v> [--commit <c>] [--branch <b>]\n * [--channel dev|alpha|stable] [--package-lock-hash <h>] [--repo-root <dir>]\n * Unknown flags are ignored.\n */\nexport async function deployActivationCli(flags: ReadonlyMap<string, string | boolean>): Promise<number> {\n const str = (k: string): string | undefined => (typeof flags.get(k) === \"string\" ? (flags.get(k) as string) : undefined);\n const stagedPath = str(\"staged\");\n if (!stagedPath) {\n process.stderr.write(`__deploy: --staged <dir> is required\\n`);\n return 2;\n }\n const paths = packagePaths(\"abtars\");\n const channel = (str(\"channel\") ?? \"dev\") as SourceName;\n const staged: StagedRelease = {\n version: str(\"version\") ?? \"unknown\",\n stagedPath,\n commit: str(\"commit\") ?? null,\n branch: str(\"branch\") ?? null,\n packageLockHash: str(\"package-lock-hash\") ?? null,\n source: channel,\n };\n const repoRoot = str(\"repo-root\") ?? join(paths.releasesDir, \"src\", \"abtars\");\n\n const { migrateIfNeeded } = await import(\"./migrate-layout.js\");\n migrateIfNeeded(paths.home);\n\n const release = await acquireLock(paths.lock, \"deploy\");\n try {\n return await deployActivation({ staged, channel, repoRoot });\n } finally {\n await release();\n }\n}\n\n/**\n * Activation: stage \u2192 releases/<commit> \u2192 history \u2192 symlink \u2192 refresh \u2192\n * manifest \u2192 stop \u2192 respawn \u2192 healthProbe. BRICK-RISK \u2014 always runs fresh.\n * Caller MUST hold the deploy lock. Does not build/fetch (obtain is done).\n *\n * The stop/respawn sequence (Step 7/8) is FROZEN (abtars.md watchdog) \u2014 moved\n * verbatim from the previous monolithic deploy().\n *\n * BASH MIRROR: scripts/emergency-update.sh reimplements this activation in pure\n * shell as the zero-dependency last resort (no deployed binary needed). If this\n * stop/respawn sequence or the release path layout changes, update it too.\n */\nasync function deployActivation(args: { staged: StagedRelease; channel: SourceName; repoRoot: string }): Promise<number> {\n const { staged, channel, repoRoot } = args;\n const paths = packagePaths(\"abtars\");\n const isFirstInstall = !existsSync(paths.manifest);\n process.stdout.write(`[__deploy] activating ${staged.version} from ${staged.stagedPath}\\n`);\n\n // Validate entry point\n if (!existsSync(join(staged.stagedPath, \"bundle\", \"abtars.js\"))) {\n process.stderr.write(`x entry point not found\\n`);\n return 1;\n }\n\n // \u2500\u2500 Step 3: Deploy to releases dir + repoint symlink \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n const { symlinkSync, unlinkSync: unlink } = await import(\"node:fs\");\n mkdirSync(paths.releasesDir, { recursive: true });\n const releaseDir = join(paths.releasesDir, staged.commit || staged.version);\n if (existsSync(releaseDir)) rmSync(releaseDir, { recursive: true, force: true });\n // Copy (not rename): the running __deploy CLI execs from staged.stagedPath;\n // moving it would break code-split dynamic imports. staged/ is reclaimed by\n // cleanStaleStaging on the next bootstrap.\n cpSync(staged.stagedPath, releaseDir, { recursive: true });\n\n // Update history.json (ordered array, max 4, deduped)\n // Dedup ensures history[1] is always a DIFFERENT commit than history[0],\n // so the circuit-breaker rollback target is never the just-deployed version.\n let history: string[] = [];\n try { history = JSON.parse(readFileSync(paths.releasesHistory, \"utf-8\")); } catch {}\n const newRef = staged.commit || staged.version;\n history = history.filter(h => h !== newRef);\n history.unshift(newRef);\n if (history.length > 4) {\n const dropped = history.pop()!;\n rmSync(join(paths.releasesDir, dropped), { recursive: true, force: true });\n }\n writeFileSync(paths.releasesHistory, JSON.stringify(history) + \"\\n\");\n\n // Repoint current symlink\n try { unlink(paths.releasesCurrentLink); } catch {}\n symlinkSync(releaseDir, paths.releasesCurrentLink);\n\n // Keep legacy app/ as symlink for backward compat (WD, bridge.lock paths)\n try { rmSync(paths.app, { recursive: true, force: true }); } catch {}\n symlinkSync(releaseDir, paths.app);\n\n process.stdout.write(`\u2713 deployed to releases/${staged.commit || staged.version}\\n`);\n\n // \u2500\u2500 Step 4: Bootstrap manifest if missing \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n if (isFirstInstall) {\n await writeManifest(paths.manifest, {\n ...emptyManifest(\"abtars\", hostname()),\n installMode: \"daemon\",\n source: channel,\n } as any);\n }\n\n // \u2500\u2500 Step 5: Refresh \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n await refresh(paths, repoRoot);\n\n // \u2500\u2500 Step 6: Manifest + deploy.state \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n const prior = isFirstInstall ? null : await readManifest(paths.manifest);\n await writeManifest(paths.manifest, {\n ...(prior ?? emptyManifest(\"abtars\", hostname())),\n version: staged.version,\n commit: staged.commit,\n branch: staged.branch,\n packageLockHash: staged.packageLockHash,\n activatedAt: new Date().toISOString(),\n source: channel,\n previousVersion: prior?.version ?? null,\n previousCommit: prior?.commit ?? null,\n installMode: prior?.installMode ?? \"daemon\",\n repoRoot,\n } as any);\n writeFileSync(join(paths.home, \"deploy.state\"), JSON.stringify({ status: \"deploying\", version: staged.version, startedAt: new Date().toISOString() }) + \"\\n\");\n process.stdout.write(`\u2713 manifest updated\\n`);\n\n // \u2500\u2500 Step 7 + 8: Stop + respawn (FROZEN \u2014 abtars.md watchdog; #1299) \u2500\u2500\u2500\n // CGROUP DIVERGENCE (#1299): when this deploy process is inside the\n // abtars-watchdog.service cgroup (the `/update dev` bridge path \u2014 spawned\n // detached but same cgroup, KillMode=control-group), stopping the service or\n // killing the watchdog would SIGTERM THIS process before it finishes. So on\n // that path we touch NEITHER the service NOR the watchdog: we kill only the\n // bridge PID and let the live L3 watchdog (abtars-watchdog.sh poll loop)\n // detect process-gone and respawn the bridge from the freshly-repointed app/\n // symlink. Consequence: a changed abtars-watchdog.sh is NOT picked up on this\n // path \u2014 use scripts/emergency-update.sh (runs OUTSIDE the cgroup) or a manual\n // `abtars update --dev` for a full watchdog refresh.\n // The out-of-cgroup CLI/emergency path and macOS keep the full stop \u2192 kill \u2192\n // respawn sequence below (instant, and refreshes the watchdog).\n // DO NOT re-add `systemctl stop`/watchdog-kill to the in-cgroup branch \u2014 it\n // reintroduces the cgroup-suicide bug.\n const inCgroup = inWatchdogServiceCgroup();\n\n if (!isFirstInstall) {\n if (inCgroup) {\n // In-cgroup (Linux `/update dev`): kill ONLY the bridge; L3 respawns it.\n // No systemctl stop, no watchdog kill, and NO `update:` .start-reason \u2014\n // that would make the live watchdog exit 0 for a systemd restart that\n // tears down (and SIGTERMs) our own cgroup.\n try { rmSync(join(paths.home, \".stopped\")); } catch {}\n const bridgePid = readJsonField(join(paths.home, \"bridge.lock\"), \"pid\") as number | undefined;\n if (bridgePid && bridgePid > 0) {\n try { process.kill(bridgePid, \"SIGTERM\"); } catch {}\n process.stdout.write(` x Killing bridge (PID ${bridgePid}) \u2014 L3 watchdog will respawn from new release...\\n`);\n for (let i = 0; i < 10; i++) {\n await new Promise(r => setTimeout(r, 500));\n try { process.kill(bridgePid, 0); } catch { break; }\n }\n }\n } else {\n // Out-of-cgroup (macOS, or manual `abtars update --dev` from a login\n // shell): full stop sequence \u2014 safe here, and refreshes the watchdog.\n // 7.1 Stop daemon service (tells WD to exit via service manager)\n if (process.platform === \"darwin\") {\n const uid = `gui/${process.getuid?.() ?? 501}`;\n try { execSync(`launchctl bootout ${uid}/com.abtars.watchdog 2>/dev/null`, { stdio: \"ignore\", timeout: 5000 }); } catch {}\n } else {\n try { execSync(\"systemctl --user stop abtars-watchdog\", { stdio: \"ignore\", timeout: 5000 }); } catch {}\n }\n\n // 7.2 Write .start-reason = \"update:X\" (safety net if WD survives service stop)\n writeFileSync(join(paths.home, \".start-reason\"), `update:${staged.version}`);\n\n // 7.3 Kill WD PID explicitly (belt)\n const wdPid = readJsonField(join(paths.home, \"bridge.lock\"), \"watchdogPid\") as number | undefined;\n if (wdPid && wdPid > 0) {\n try { process.kill(wdPid, \"SIGTERM\"); } catch {}\n }\n\n // 7.4 Kill bridge PID\n const bridgePid = readJsonField(join(paths.home, \"bridge.lock\"), \"pid\") as number | undefined;\n if (bridgePid && bridgePid > 0) {\n try { process.kill(bridgePid, \"SIGTERM\"); } catch {}\n process.stdout.write(` x Killing bridge (PID ${bridgePid})...\\n`);\n for (let i = 0; i < 10; i++) {\n await new Promise(r => setTimeout(r, 500));\n try { process.kill(bridgePid, 0); } catch { break; }\n }\n }\n\n // 7.5 Wait for WD to die (flock release). SIGKILL after 3s.\n if (wdPid && wdPid > 0) {\n let wdAlive = false;\n for (let i = 0; i < 6; i++) {\n try { process.kill(wdPid, 0); wdAlive = true; } catch { wdAlive = false; break; }\n await new Promise(r => setTimeout(r, 500));\n }\n if (wdAlive) { try { process.kill(wdPid, \"SIGKILL\"); } catch {} }\n }\n\n // 7.6 Clear .stopped sentinel\n try { rmSync(join(paths.home, \".stopped\")); } catch {}\n }\n }\n\n // \u2500\u2500 Step 8: Respawn \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n const manifest = await readManifest(paths.manifest);\n const mode = manifest?.installMode ?? \"daemon\";\n\n if (mode === \"daemon\") {\n if (inCgroup) {\n // Nothing to start \u2014 the live L3 watchdog respawns the bridge from the\n // new app/ symlink after the process-gone kill above.\n process.stdout.write(` Bridge killed \u2014 L3 watchdog respawning from new release\\n`);\n } else {\n // 8.1 Write neutral .start-reason \u2014 new WD won't match any exit case\n writeFileSync(join(paths.home, \".start-reason\"), \"deploy-respawn\");\n // 8.2 Restart daemon service\n if (process.platform === \"darwin\") {\n const plistPath = join(homedir(), \"Library/LaunchAgents/com.abtars.watchdog.plist\");\n const uid = `gui/${process.getuid?.() ?? 501}`;\n try { execSync(`launchctl bootstrap ${uid} \"${plistPath}\"`, { stdio: \"ignore\", timeout: 5000 }); } catch {}\n } else {\n try { execSync(\"systemctl --user daemon-reload\", { stdio: \"ignore\", timeout: 5000 }); } catch {}\n try { execSync(\"systemctl --user unmask abtars-watchdog\", { stdio: \"ignore\", timeout: 5000 }); } catch {}\n try { execSync(\"systemctl --user enable abtars-watchdog\", { stdio: \"ignore\", timeout: 5000 }); } catch {}\n try { execSync(\"systemctl --user start abtars-watchdog\", { stdio: \"ignore\", timeout: 5000 }); } catch {}\n }\n process.stdout.write(` Daemon started\\n`);\n }\n } else {\n process.stdout.write(` Deployed. Run 'abtars start' to launch the bridge.\\n`);\n }\n\n // \u2500\u2500 Step 9: Health probe \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n process.stdout.write(`Waiting for bridge health...\\n`);\n const health = await healthProbe(paths.home, Date.now(), 180_000);\n if (health.healthy) {\n process.stdout.write(`\u2713 Bridge healthy (PID ${health.pid}, tick at ${new Date(health.heartbeat!).toISOString()})\\n`);\n writeFileSync(join(paths.home, \"deploy.state\"), JSON.stringify({ status: \"success\", version: staged.version, completedAt: new Date().toISOString() }) + \"\\n\");\n } else {\n process.stderr.write(`\u26A0 Bridge not healthy after 120s \u2014 check logs. Watchdog will keep trying.\\n`);\n writeFileSync(join(paths.home, \"deploy.state\"), JSON.stringify({ status: \"unhealthy\", version: staged.version, completedAt: new Date().toISOString() }) + \"\\n\");\n }\n\n return 0;\n}\n\n// \u2500\u2500 Refresh \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nasync function refresh(paths: ReturnType<typeof packagePaths>, repoRoot: string): Promise<void> {\n // CLI wrappers\n await mkdir(paths.bin, { recursive: true });\n const { writeWrapper } = await import(\"../commands/install.js\");\n const { loadManifest } = await import(\"../install-manifest.js\");\n const installManifest = loadManifest(paths.app);\n for (const name of installManifest.cliWrappers) {\n await writeWrapper(paths.bin, name, paths.app, false);\n }\n\n // abmind CLI wrappers \u2014 point at the bundled copy inside the release\n const abmindDist = join(paths.app, \"node_modules\", \"abmind\", \"dist\", \"cli\");\n if (existsSync(abmindDist)) {\n for (const name of [\"abmind\", \"abmind-embed\"]) {\n const cliFile = name === \"abmind\" ? \"abmind.js\" : `${name}.js`;\n const target = join(abmindDist, cliFile);\n const content = `#!/usr/bin/env bash\\nexport NODE_PATH=\"$HOME/.local/lib/node_modules:\\${NODE_PATH:-}\"\\nexec node \"${target}\" \"$@\"\\n`;\n const dest = join(paths.bin, name);\n try { rmSync(dest); } catch {}\n await writeFile(dest, content, { mode: 0o755 });\n }\n }\n\n process.stdout.write(`\u2713 wrappers refreshed (${installManifest.cliWrappers.length} files)\\n`);\n\n // One-time cleanup: remove stale binary dirs from data directories (#1134)\n const abmindHome = resolveAbmindHome();\n for (const stale of [join(abmindHome, \"bin\"), join(abmindHome, \"current\"), join(abmindHome, \"lib\"), join(paths.home, \"bin\"), join(paths.home, \"scripts\"), join(paths.releasesDir, \"deps\")]) {\n if (existsSync(stale)) {\n rmSync(stale, { recursive: true, force: true });\n process.stdout.write(`\u2713 removed stale ${stale}\\n`);\n }\n }\n\n // Reload plist/systemd if changed (scripts run from repoRoot directly)\n const repoScripts = join(repoRoot, \"scripts\");\n if (process.platform === \"darwin\") {\n const src = join(repoScripts, \"com.abtars.watchdog.plist\");\n const dst = join(homedir(), \"Library/LaunchAgents/com.abtars.watchdog.plist\");\n if (existsSync(src)) {\n let srcContent = readFileSync(src, \"utf-8\").replace(/\\{\\{HOME\\}\\}/g, homedir());\n const dstContent = existsSync(dst) ? readFileSync(dst, \"utf-8\") : \"\";\n if (srcContent !== dstContent) {\n writeFileSync(dst, srcContent);\n const uid = `gui/${process.getuid?.() ?? 501}`;\n try { execSync(`launchctl bootout ${uid}/com.abtars.watchdog 2>/dev/null`, { stdio: \"ignore\", timeout: 5000 }); } catch {}\n try { execSync(`launchctl bootstrap ${uid} \"${dst}\"`, { stdio: \"ignore\", timeout: 5000 }); } catch {}\n process.stdout.write(` \u2713 plist reloaded\\n`);\n }\n }\n } else {\n const src = join(repoScripts, \"abtars-watchdog.service\");\n const dst = join(homedir(), \".config/systemd/user/abtars-watchdog.service\");\n if (existsSync(src) && existsSync(dst)) {\n const srcContent = readFileSync(src, \"utf-8\");\n const dstContent = readFileSync(dst, \"utf-8\");\n if (srcContent !== dstContent) {\n copyFileSync(src, dst);\n try { execSync(\"systemctl --user daemon-reload\", { stdio: \"ignore\", timeout: 5000 }); } catch {}\n process.stdout.write(` \u2713 systemd unit reloaded\\n`);\n }\n }\n }\n\n // Reconcile runtime tree from templates\n const { reconcile, migrate } = await import(\"./reconcile.js\");\n const templatesSrc = join(paths.app, \"templates\");\n reconcile(templatesSrc, paths.home);\n migrate(paths.home);\n process.stdout.write(`\u2713 skills + prompts synced\\n`);\n}\n\n// abmind is no longer copied into the release (#1243) \u2014 it is discovered at\n// runtime from the global install. The legacy two-mode copy (sibling-repo\n// rebuild + registry tarball) lived here.\n", "/**\n * LocalBuildSource: the Phase 1 adapter. Builds the current working-tree\n * checkout and stages the output into releases/<version>/dist/.\n *\n * Staleness guard: runs `git fetch` and refuses to proceed if HEAD is behind\n * origin/<branch>, unless allowStale (--local) is passed. Handles the\n * detached-HEAD / no-upstream / unpushed edge cases with a friendly message.\n *\n * Version string: `<package-version>-<short-sha>`, e.g. `0.1.0-28f71ef`.\n * Uniqueness: if the same version is staged twice, the second stage\n * overwrites (rsync --delete semantics via rm + cp). Rare; only happens when\n * operator runs update twice without changing a commit or bumping version.\n */\n\nimport { spawnSync } from 'node:child_process';\nimport { existsSync, cpSync } from 'node:fs';\nimport { copyFile, cp, mkdir, readFile, rm, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { hashFile } from '../deploy-lib-import.js';\nimport type { PrepareContext, StagedRelease, UpdateSource } from './types.js';\n\nexport class LocalBuildError extends Error {\n constructor(\n message: string,\n public readonly hint?: string,\n ) {\n super(hint ? `${message}\\n\\n${hint}` : message);\n this.name = 'LocalBuildError';\n }\n}\n\nexport interface LocalBuildOptions {\n /** Repository root for the build (defaults to process.cwd()). */\n readonly repoRoot?: string;\n /** If true, skip the behind-origin guard. Operator opt-in. */\n readonly allowStale?: boolean;\n /** If true, skip `npm install` (assume node_modules is already current). */\n readonly skipInstall?: boolean;\n}\n\nfunction runCmd(cmd: string, args: readonly string[], cwd: string): string {\n const r = spawnSync(cmd, args, { cwd, encoding: 'utf-8' });\n if (r.error) throw new LocalBuildError(`${cmd} ${args.join(' ')} failed: ${r.error.message}`);\n if (r.status !== 0) {\n throw new LocalBuildError(\n `${cmd} ${args.join(' ')} exited with status ${r.status}`,\n r.stderr?.trim() || undefined,\n );\n }\n return r.stdout.trim();\n}\n\nfunction tryCmd(cmd: string, args: readonly string[], cwd: string): string | null {\n const r = spawnSync(cmd, args, { cwd, encoding: 'utf-8' });\n if (r.status !== 0) return null;\n return r.stdout.trim();\n}\n\nfunction checkStaleness(repoRoot: string, allowStale: boolean): { commit: string; branch: string | null } {\n const commit = runCmd('git', ['rev-parse', '--short', 'HEAD'], repoRoot);\n const branch = tryCmd('git', ['rev-parse', '--abbrev-ref', 'HEAD'], repoRoot);\n if (allowStale) return { commit, branch: branch === 'HEAD' ? null : branch };\n\n // Detached HEAD / no-branch case\n if (branch === 'HEAD' || branch === null) {\n throw new LocalBuildError(\n 'Working tree is in detached HEAD (no current branch).',\n 'Cannot check for staleness. Pass --local to proceed with the current tree.',\n );\n }\n\n // Fetch to refresh origin refs. Not --unshallow; caller may have a shallow clone intentionally.\n runCmd('git', ['fetch', '--quiet'], repoRoot);\n\n // Does the branch have an upstream?\n const upstream = tryCmd('git', ['rev-parse', '--abbrev-ref', `${branch}@{upstream}`], repoRoot);\n if (upstream === null) {\n throw new LocalBuildError(\n `Branch '${branch}' has no upstream configured.`,\n 'Cannot check for staleness. Push the branch, or pass --local to proceed with the current tree.',\n );\n }\n\n // How many commits is HEAD behind upstream?\n const behindStr = tryCmd('git', ['rev-list', '--count', `HEAD..${upstream}`], repoRoot);\n const behind = behindStr === null ? null : Number(behindStr);\n if (behind === null || !Number.isFinite(behind)) {\n throw new LocalBuildError(\n `Could not determine how far HEAD is behind ${upstream}.`,\n 'Pass --local to proceed anyway.',\n );\n }\n if (behind > 0) {\n throw new LocalBuildError(\n `Current branch: ${branch} (${commit})\\n${upstream} is ahead by ${behind} commit${behind === 1 ? '' : 's'}.`,\n `Run 'git pull' first, or pass --local to build from the current tree.`,\n );\n }\n\n // Enforce dev branch for deployments\n if (branch !== 'dev') {\n throw new LocalBuildError(\n `Current branch is '${branch}', but deployments must come from 'dev'.`,\n `Run 'git checkout dev && git pull', or pass --local to override.`,\n );\n }\n\n return { commit, branch };\n}\n\nasync function readPackageVersion(repoRoot: string): Promise<string> {\n const pkg = JSON.parse(await readFile(join(repoRoot, 'package.json'), 'utf-8')) as { version?: string };\n if (typeof pkg.version !== 'string') {\n throw new LocalBuildError('package.json has no version field.');\n }\n return pkg.version;\n}\n\nexport function makeLocalBuildSource(opts: LocalBuildOptions = {}): UpdateSource {\n const repoRoot = opts.repoRoot ?? process.cwd();\n const isNpmPackage = !existsSync(join(repoRoot, '.git'));\n\n return {\n name: 'dev',\n async prepare(ctx: PrepareContext): Promise<StagedRelease> {\n // npm package mode: no git, no build \u2014 just copy the pre-built bundle\n if (isNpmPackage) {\n const bundleDir = join(repoRoot, 'bundle');\n if (!existsSync(bundleDir)) {\n throw new Error(`No bundle/ found at ${repoRoot}. Run from the abtars npm package or a git checkout.`);\n }\n const pkgVersion = await readPackageVersion(repoRoot);\n const version = pkgVersion;\n const stagedPath = ctx.stagingDir;\n await rm(stagedPath, { recursive: true, force: true });\n await mkdir(stagedPath, { recursive: true });\n await cp(bundleDir, join(stagedPath, 'bundle'), { recursive: true });\n const templatesDir = join(repoRoot, 'templates');\n if (existsSync(templatesDir)) await cp(templatesDir, join(stagedPath, 'templates'), { recursive: true });\n const configSrc = join(repoRoot, 'config');\n if (existsSync(configSrc)) await cp(configSrc, join(stagedPath, 'config'), { recursive: true });\n const manifestSrc = join(repoRoot, 'install-manifest.json');\n if (existsSync(manifestSrc)) await copyFile(manifestSrc, join(stagedPath, 'install-manifest.json'));\n await writeFile(join(stagedPath, 'package.json'), JSON.stringify({ type: \"module\", name: \"abtars\", version }, null, 2) + \"\\n\");\n process.stdout.write(`\u2713 staged ${version} (from npm package)\\n`);\n return { version, stagedPath, commit: null, branch: null, packageLockHash: null, source: 'dev' };\n }\n\n // Git checkout mode: build from source\n const { commit, branch } = checkStaleness(repoRoot, opts.allowStale === true || ctx.allowStale);\n const pkgVersion = await readPackageVersion(repoRoot);\n const version = `${pkgVersion}-${commit}`;\n\n // Install deps into the repo (if not skipped). npm ci wipes node_modules\n // and installs from package-lock.json \u2014 also clears any stale pnpm store\n // (the .pnpm workspace: links that npm cannot parse). (#1234)\n if (opts.skipInstall !== true) {\n runCmd('npm', ['ci'], repoRoot);\n }\n\n // Bundle mode (esbuild) \u2014 build directly, skip npm run bundle (it requires ../abmind)\n runCmd('node', ['esbuild.config.js'], repoRoot);\n const publicSrc = join(repoRoot, 'src', 'components', 'dashboard', 'public');\n if (existsSync(publicSrc)) cpSync(publicSrc, join(repoRoot, 'bundle', 'public'), { recursive: true });\n const agentsSrc = join(repoRoot, 'agents');\n if (existsSync(agentsSrc)) cpSync(agentsSrc, join(repoRoot, 'bundle', 'agents'), { recursive: true });\n\n const stagedPath = ctx.stagingDir;\n await rm(stagedPath, { recursive: true, force: true });\n await mkdir(stagedPath, { recursive: true });\n await cp(join(repoRoot, 'bundle'), join(stagedPath, 'bundle'), { recursive: true });\n\n // Copy templates/ for reconcile (skills, prompts, config seeds, tasks)\n const templatesSrc = join(repoRoot, 'templates');\n if (existsSync(templatesSrc)) {\n await cp(templatesSrc, join(stagedPath, 'templates'), { recursive: true });\n }\n\n // Ensure ESM works\n await writeFile(join(stagedPath, 'package.json'), JSON.stringify({ type: \"module\", name: \"abtars\", version }, null, 2) + \"\\n\");\n\n // Copy install-manifest.json for doctor reconciliation\n await copyFile(join(repoRoot, 'install-manifest.json'), join(stagedPath, 'install-manifest.json'));\n\n const packageLockHash = await hashFile(join(repoRoot, 'package-lock.json'));\n return { version, stagedPath, commit, branch, packageLockHash, source: 'dev' };\n },\n };\n}\n", "/**\n * NpmSource: fetch latest published version directly from npm registry (#1176).\n * Pure HTTP fetch \u2014 no npm/pnpm CLI dependency.\n */\n\nimport { spawnSync } from \"node:child_process\";\nimport { existsSync, readFileSync, unlinkSync } from \"node:fs\";\nimport { mkdir, rm } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { resolveVersion, downloadTarball } from \"./registry-client.js\";\nimport type { PrepareContext, StagedRelease, UpdateSource } from \"./types.js\";\n\nconst TAR_TIMEOUT_MS = 60_000;\n\nfunction run(cmd: string, args: string[], cwd: string): string {\n const r = spawnSync(cmd, args, { cwd, encoding: \"utf-8\", timeout: TAR_TIMEOUT_MS });\n if (r.error) throw new Error(`${cmd} ${args.join(\" \")}: ${r.error.message}`);\n if (r.status !== 0) throw new Error(`${cmd} ${args.join(\" \")} exited ${r.status}: ${r.stderr?.trim()}`);\n return r.stdout.trim();\n}\n\nfunction readLocalVersion(home: string): string | null {\n try {\n const pkg = JSON.parse(readFileSync(join(home, \"app\", \"package.json\"), \"utf-8\"));\n return pkg.version ?? null;\n } catch { return null; }\n}\n\nexport function makeNpmSource(packageName: string, tag?: string): UpdateSource {\n const distTag = tag ?? \"latest\";\n const sourceName = distTag === \"alpha\" ? \"alpha\" : \"stable\";\n return {\n name: sourceName,\n async prepare(ctx: PrepareContext): Promise<StagedRelease> {\n const { version, tarballUrl } = await resolveVersion(packageName, distTag);\n const current = readLocalVersion(ctx.home);\n if (version === current) {\n throw new Error(`Already at ${distTag} version (${version}). Nothing to update.`);\n }\n\n const stagedPath = ctx.stagingDir;\n await rm(stagedPath, { recursive: true, force: true });\n await mkdir(stagedPath, { recursive: true });\n\n // Download tarball directly from registry\n const tgzPath = join(stagedPath, `${packageName.replace(\"/\", \"-\")}-${version}.tgz`);\n await downloadTarball(tarballUrl, tgzPath);\n\n // Extract (strip package/ prefix)\n run(\"tar\", [\"-xzf\", tgzPath, \"--strip-components=1\"], stagedPath);\n\n // Cleanup tarball\n if (existsSync(tgzPath)) unlinkSync(tgzPath);\n\n // No dep install \u2014 native deps handled by #1191 (manifest-driven copy from deps/ dir)\n\n return { version, stagedPath, commit: null, branch: null, packageLockHash: null, source: sourceName };\n },\n };\n}\n", "/**\n * registry-client.ts \u2014 Direct npm registry HTTP fetch (#1176).\n * No npm/pnpm CLI dependency. Pure fetch() + tar.\n */\nimport { writeFileSync } from \"node:fs\";\n\nconst REGISTRY = \"https://registry.npmjs.org\";\nconst METADATA_TIMEOUT_MS = 30_000;\nconst TARBALL_TIMEOUT_MS = 120_000;\n\nexport interface ResolvedVersion {\n version: string;\n tarballUrl: string;\n}\n\n/** Resolve a dist-tag (alpha, latest) to a concrete version + tarball URL. */\nexport async function resolveVersion(packageName: string, tag: string): Promise<ResolvedVersion> {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), METADATA_TIMEOUT_MS);\n try {\n const res = await fetch(`${REGISTRY}/${packageName}`, {\n headers: { Accept: \"application/vnd.npm.install-v1+json\" },\n signal: controller.signal,\n });\n if (!res.ok) throw new Error(`Registry returned ${res.status} for ${packageName}`);\n const data = await res.json() as { \"dist-tags\"?: Record<string, string>; versions?: Record<string, { dist?: { tarball?: string } }> };\n const version = data[\"dist-tags\"]?.[tag];\n if (!version) throw new Error(`No dist-tag '${tag}' for ${packageName}`);\n const tarballUrl = data.versions?.[version]?.dist?.tarball;\n if (!tarballUrl) throw new Error(`No tarball URL for ${packageName}@${version}`);\n return { version, tarballUrl };\n } finally {\n clearTimeout(timer);\n }\n}\n\n/** Download a tarball to a local file path. */\nexport async function downloadTarball(url: string, destPath: string): Promise<void> {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), TARBALL_TIMEOUT_MS);\n try {\n const res = await fetch(url, { signal: controller.signal });\n if (!res.ok) throw new Error(`Tarball download failed: ${res.status} ${url}`);\n const buf = Buffer.from(await res.arrayBuffer());\n writeFileSync(destPath, buf);\n } finally {\n clearTimeout(timer);\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["join", "existsSync", "readFileSync", "writeFileSync", "cpSync", "mkdir", "writeFile", "pkgVersion", "version", "stagedPath", "spawnSync", "existsSync", "mkdir", "rm", "join", "spawnSync", "join", "rm", "mkdir", "existsSync", "readFileSync", "join", "existsSync", "cpSync", "writeFileSync", "mkdir", "writeFile"]
7
+ }
@@ -2,37 +2,36 @@
2
2
  import { createRequire as __bundleCreateRequire } from 'node:module'; import { fileURLToPath as __bundleFileURLToPath } from 'node:url'; import { dirname as __bundleDirname } from 'node:path'; const require = __bundleCreateRequire(import.meta.url); const __chunk_filename = __bundleFileURLToPath(import.meta.url); const __chunk_dirname = __bundleDirname(__chunk_filename);
3
3
  import {
4
4
  updateCtxStart
5
- } from "./chunk-JQDJPUHM.js";
5
+ } from "./chunk-TWB2ZGVH.js";
6
6
  import {
7
7
  createAgentTransport
8
- } from "./chunk-GXL7HJPT.js";
8
+ } from "./chunk-EAX5ZZUL.js";
9
9
  import {
10
10
  init_spin,
11
11
  spin_exports
12
- } from "./chunk-ONBF5DDU.js";
12
+ } from "./chunk-L72RIPEC.js";
13
13
  import {
14
14
  abmind
15
- } from "./chunk-IKUZPMVA.js";
15
+ } from "./chunk-YJZE4OK3.js";
16
16
  import {
17
17
  init_user_registry,
18
18
  loadUsers
19
- } from "./chunk-ZV4IWKDJ.js";
19
+ } from "./chunk-E7XD5UGB.js";
20
20
  import {
21
21
  getEnv,
22
22
  init_env_schema
23
- } from "./chunk-65VCEC32.js";
23
+ } from "./chunk-6PA5JBUU.js";
24
24
  import {
25
25
  init_log_and_swallow,
26
26
  logAndSwallow
27
- } from "./chunk-YSKCQH6E.js";
27
+ } from "./chunk-2IYJ4I66.js";
28
28
  import {
29
29
  init_logger,
30
- isLogLevel,
31
30
  logDebug,
32
31
  logError,
33
32
  logInfo,
34
33
  logWarn
35
- } from "./chunk-GWILHZPT.js";
34
+ } from "./chunk-XRTXYN66.js";
36
35
  import {
37
36
  abtarsHome,
38
37
  init_paths
@@ -414,9 +413,9 @@ var TAG2 = "transport";
414
413
  async function phaseTransport(ctx) {
415
414
  const { memoryConfig } = ctx;
416
415
  await buildTransport(ctx);
417
- const { isDockerActive, isSeatbeltActive } = await import("./guardrails-DL7ZSWVN.js");
416
+ const { isDockerActive, isSeatbeltActive } = await import("./guardrails-64GQ5Y5K.js");
418
417
  if (isDockerActive()) {
419
- const { dockerAvailable } = await import("./sandbox-runtime-QROWHDCS.js");
418
+ const { dockerAvailable } = await import("./sandbox-runtime-DV6E25J6.js");
420
419
  if (dockerAvailable()) {
421
420
  ctx.sandboxEnabled = true;
422
421
  logInfo("main", "\u{1F433} Docker mode active \u2014 W/B/C sessions will run in Docker containers");
@@ -442,7 +441,7 @@ async function phaseTransport(ctx) {
442
441
  async function buildTransport(ctx) {
443
442
  const { config } = ctx;
444
443
  let transport;
445
- const { resolveAgent, getEnvFallback, loadTransport, resolveHailMary, clearTransportCache, validateProviderReady } = await import("./transport-config-KBF5W2DP.js");
444
+ const { resolveAgent, getEnvFallback, loadTransport, resolveHailMary, clearTransportCache, validateProviderReady } = await import("./transport-config-6MB2K2XC.js");
446
445
  const { existsSync, renameSync } = await import("node:fs");
447
446
  const { join: pathJoin } = await import("node:path");
448
447
  clearTransportCache();
@@ -483,7 +482,7 @@ async function buildTransport(ctx) {
483
482
  logWarn("main", `\u26A0\uFE0F No transport.json \u2014 emergency mode: ${fb.model} via ${fb.providerName}`);
484
483
  resolved = { model: fb.model, provider: fb.provider, providerName: fb.providerName, contextWindow: fb.contextWindow, maxOutput: fb.maxOutput, fallbacks: [] };
485
484
  setTimeout(() => {
486
- import("./notification-BFSIEECG.js").then(({ sendNotification }) => sendNotification(ctx, `\u26A0\uFE0F transport.json missing, no backup. Running emergency model: ${fb.model}. Fix: /update deploy`)).catch(() => {
485
+ import("./notification-3JICGXWU.js").then(({ sendNotification }) => sendNotification(ctx, `\u26A0\uFE0F transport.json missing, no backup. Running emergency model: ${fb.model}. Fix: /update deploy`)).catch(() => {
487
486
  });
488
487
  }, 1e4);
489
488
  } else {
@@ -536,8 +535,8 @@ async function buildTransport(ctx) {
536
535
  defaults?.maxWaitSec ?? config.transport.tmuxMaxWaitSec
537
536
  );
538
537
  } else if (resolved.provider.transport === "api") {
539
- const { DirectApiTransport } = await import("./direct-api-transport-E3LNDBJT.js");
540
- const { ModelHealthRegistry } = await import("./model-health-registry-MLEIZSTV.js");
538
+ const { DirectApiTransport } = await import("./direct-api-transport-QNNY2WWP.js");
539
+ const { ModelHealthRegistry } = await import("./model-health-registry-QADMFQFQ.js");
541
540
  const { FallbackPolicy } = await import("./fallback-policy-SR6ED5I3.js");
542
541
  const apiKey = getEnv().getApiKey(resolved.provider.apiKeyEnv ?? "API_KEY");
543
542
  const candidates = [
@@ -557,8 +556,8 @@ async function buildTransport(ctx) {
557
556
  }
558
557
  if (!ctx.modelHealthRegistry.onDemote) {
559
558
  ctx.modelHealthRegistry.onDemote = (model, _endpoint, reason) => {
560
- import("./transport-config-KBF5W2DP.js").then(({ demoteModel }) => demoteModel(model, reason));
561
- import("./notification-BFSIEECG.js").then(({ sendNotification }) => sendNotification(ctx, `\u26A0\uFE0F ${model} demoted (${reason}). Next healthy model promoted.`)).catch((err) => logAndSwallow(TAG2, "sendNotification model-demote", err));
559
+ import("./transport-config-6MB2K2XC.js").then(({ demoteModel }) => demoteModel(model, reason));
560
+ import("./notification-3JICGXWU.js").then(({ sendNotification }) => sendNotification(ctx, `\u26A0\uFE0F ${model} demoted (${reason}). Next healthy model promoted.`)).catch((err) => logAndSwallow(TAG2, "sendNotification model-demote", err));
562
561
  };
563
562
  }
564
563
  const policy = new FallbackPolicy(candidates, ctx.modelHealthRegistry);
@@ -575,7 +574,7 @@ async function buildTransport(ctx) {
575
574
  }, policy);
576
575
  logInfo("main", `\u{1F50C} Direct API transport (${resolved.providerName}, model=${resolved.model}, ${candidates.length} candidates)`);
577
576
  } else {
578
- const { readAndClearAcpPids } = await import("./bridge-lock-transport-4ZH7QTJP.js");
577
+ const { readAndClearAcpPids } = await import("./bridge-lock-transport-7RSN7OLJ.js");
579
578
  const stalePids = readAndClearAcpPids();
580
579
  for (const pid of stalePids) {
581
580
  try {
@@ -639,20 +638,20 @@ async function buildTransport(ctx) {
639
638
  ctx.runtime.setSessionManager(ctx.sessionManager);
640
639
  if (ctx.sandboxEnabled) ctx.runtime.setSandboxEnabled(true);
641
640
  if (getEnv().enableAsyncDelegation) {
642
- const { setDelegationDeps } = await import("./delegation-tools-QKNYQGTQ.js");
641
+ const { setDelegationDeps } = await import("./delegation-tools-WS7Z56KZ.js");
643
642
  setDelegationDeps(ctx.runtime);
644
643
  }
645
644
  logInfo("main", "\u2713 Transport ready");
646
645
  const { join: join2 } = await import("node:path");
647
646
  const { abtarsHome: abtarsHome2 } = await import("./paths-X4LRYUI6.js");
648
- const { ActionGate } = await import("./action-gate-G2V47NHW.js");
649
- const { setActionGate } = await import("./tool-registry-IZX2IOBM.js");
647
+ const { ActionGate } = await import("./action-gate-V4FCBHFB.js");
648
+ const { setActionGate } = await import("./tool-registry-JJMWCQKZ.js");
650
649
  const authDir = join2(abtarsHome2(), "auth");
651
650
  ctx.actionGate = new ActionGate(authDir);
652
651
  setActionGate(ctx.actionGate);
653
652
  logDebug("main", "\u{1F512} ActionGate wired");
654
653
  if (ctx.seatbeltActive) {
655
- const { setSeatbelt } = await import("./tool-registry-IZX2IOBM.js");
654
+ const { setSeatbelt } = await import("./tool-registry-JJMWCQKZ.js");
656
655
  const { getPolicy } = await import("./seatbelt-GFJ3BR2E.js");
657
656
  const home = abtarsHome2();
658
657
  const policy = getPolicy("A", join2(home, "workspace"), home);
@@ -666,21 +665,16 @@ async function buildTransport(ctx) {
666
665
  const mod = abmind();
667
666
  if (mod) {
668
667
  const { ContextEngine } = mod;
669
- const { createContextOrchestrator } = await import("./context-2RJHC2LE.js");
668
+ const { createContextOrchestrator } = await import("./context-CL2RSLII.js");
669
+ const { spin } = await import("./spin-VHNGNWTD.js");
670
+ const { recordCompaction } = await import("./metrics-collector-YMUGY3PI.js");
670
671
  const contextEngine = new ContextEngine(db);
672
+ const compactionModel = (tc ? resolveAgent("dreamy", tc) : null)?.model ?? null;
671
673
  const orchestrator = createContextOrchestrator(
672
674
  contextEngine,
673
- async (systemPrompt, userPrompt) => {
674
- const { streamSingleCompletion } = await import("./stream-single-RFJNUTL6.js");
675
- return streamSingleCompletion({
676
- endpoint: resolved.provider.endpoint ?? "http://localhost:11434/v1",
677
- apiKey: getEnv().getApiKey(resolved.provider.apiKeyEnv ?? "API_KEY") ?? void 0,
678
- model: resolved.model,
679
- systemPrompt,
680
- userPrompt,
681
- maxTokens: 4096
682
- });
683
- },
675
+ (systemPrompt, userPrompt) => spin.dispatchBackground({ agent: "dreamy", prompt: `${systemPrompt}
676
+
677
+ ${userPrompt}` }),
684
678
  (_chatId) => {
685
679
  try {
686
680
  return ctx.memory?.getLastMessageTimestamp(true) ?? null;
@@ -688,10 +682,11 @@ async function buildTransport(ctx) {
688
682
  logAndSwallow(TAG2, "getLastMessageTimestamp", err);
689
683
  return null;
690
684
  }
691
- }
685
+ },
686
+ { compactionModel, onCompactionEvent: recordCompaction }
692
687
  );
693
688
  transport.contextOrchestrator = orchestrator;
694
- logInfo("main", "\u{1F4E6} Context engine wired (auto-compaction active)");
689
+ logInfo("main", `\u{1F4E6} Context engine wired (auto-compaction active, model: ${compactionModel ?? "main"})`);
695
690
  }
696
691
  }
697
692
  }
@@ -701,11 +696,16 @@ async function buildTransport(ctx) {
701
696
  const reasonTag = reason ? ` (${reason})` : "";
702
697
  const msg = `\u26A1 Fallback${reasonTag}: ${model}${ctxPct >= 0 ? ` (ctx: ~${ctxPct}%)` : ""}`;
703
698
  logInfo("main", msg);
704
- if (model !== lastNotifiedModel || isLogLevel("debug")) {
699
+ if (model !== lastNotifiedModel) {
705
700
  lastNotifiedModel = model;
706
- import("./notification-BFSIEECG.js").then(({ sendNotification }) => sendNotification(ctx, msg)).catch((err) => logAndSwallow(TAG2, "sendNotification fallback", err));
701
+ import("./notification-3JICGXWU.js").then(({ sendNotification }) => sendNotification(ctx, msg)).catch((err) => logAndSwallow(TAG2, "sendNotification fallback", err));
707
702
  }
708
703
  };
704
+ if ("onPrimaryRestored" in transport) {
705
+ transport.onPrimaryRestored = () => {
706
+ lastNotifiedModel = null;
707
+ };
708
+ }
709
709
  }
710
710
  return "ran";
711
711
  }
@@ -727,4 +727,4 @@ export {
727
727
  buildTransport,
728
728
  rebuildTransport
729
729
  };
730
- //# sourceMappingURL=chunk-YRU2K3O6.js.map
730
+ //# sourceMappingURL=chunk-IMIGG5EO.js.map