abtars 0.3.3 → 0.3.4-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (384) hide show
  1. package/bundle/{_registry.generated-7DRCE4V6.js → _registry.generated-ZJBAZMXN.js} +16 -15
  2. package/bundle/{_registry.generated-7DRCE4V6.js.map → _registry.generated-ZJBAZMXN.js.map} +1 -1
  3. package/bundle/abtars-browser.js +6 -5
  4. package/bundle/abtars-browser.js.map +1 -1
  5. package/bundle/abtars-cli.js +47 -39
  6. package/bundle/abtars-cli.js.map +2 -2
  7. package/bundle/abtars-restart.js +7 -7
  8. package/bundle/abtars-rss.js +2 -1
  9. package/bundle/abtars-rss.js.map +2 -2
  10. package/bundle/abtars-task.js +6 -5
  11. package/bundle/abtars-task.js.map +1 -1
  12. package/bundle/abtars-todo.js +2 -1
  13. package/bundle/abtars-todo.js.map +1 -1
  14. package/bundle/abtars.js +299 -209
  15. package/bundle/abtars.js.map +4 -4
  16. package/bundle/{acp-raw-client-AZJCEB6S.js → acp-raw-client-YTBGFN4S.js} +4 -3
  17. package/bundle/{acp-raw-client-AZJCEB6S.js.map → acp-raw-client-YTBGFN4S.js.map} +1 -1
  18. package/bundle/{action-gate-QYJL57IX.js → action-gate-YISTP773.js} +4 -3
  19. package/bundle/{action-gate-QYJL57IX.js.map → action-gate-YISTP773.js.map} +1 -1
  20. package/bundle/{agent-api-adapter-PYMNQXHE.js → agent-api-adapter-E4HWVJ32.js} +5 -4
  21. package/bundle/{agent-api-adapter-PYMNQXHE.js.map → agent-api-adapter-E4HWVJ32.js.map} +1 -1
  22. package/bundle/{agent-api-rate-limit-4GEZ4YN5.js → agent-api-rate-limit-VENFGOAD.js} +6 -5
  23. package/bundle/{agent-registry-563P4EUJ.js → agent-registry-DL7UT272.js} +9 -8
  24. package/bundle/bootstrap-V5MROD3X.js +62 -0
  25. package/bundle/bootstrap-V5MROD3X.js.map +7 -0
  26. package/bundle/{bridge-lock-transport-LXCF2IVN.js → bridge-lock-transport-BJAMHMXW.js} +6 -5
  27. package/bundle/{browser-2VZOGOGX.js → browser-PT54UWSW.js} +8 -7
  28. package/bundle/{budget-PPA7WY3D.js → budget-QNK6IIT6.js} +5 -4
  29. package/bundle/{budget-PPA7WY3D.js.map → budget-QNK6IIT6.js.map} +1 -1
  30. package/bundle/{capability-WXEA2WFK.js → capability-EKPGHQIO.js} +7 -6
  31. package/bundle/{chunk-C3EYYJN3.js → chunk-2BXXQG7P.js} +16 -4
  32. package/bundle/chunk-2BXXQG7P.js.map +7 -0
  33. package/bundle/{chunk-4PIVWXUJ.js → chunk-2ZD7VQRW.js} +2 -2
  34. package/bundle/{chunk-OY2HAK33.js → chunk-36ZEYDKZ.js} +1 -1
  35. package/bundle/chunk-36ZEYDKZ.js.map +7 -0
  36. package/bundle/{chunk-3QW2K53E.js → chunk-4IGLXZCC.js} +11 -19
  37. package/bundle/chunk-4IGLXZCC.js.map +7 -0
  38. package/bundle/{chunk-T7TAWGBX.js → chunk-52PQM4EZ.js} +2 -2
  39. package/bundle/{chunk-2RGR3LSV.js → chunk-5P5HF7IJ.js} +2 -2
  40. package/bundle/{chunk-LE23VPN3.js → chunk-63A7ZRIH.js} +4 -4
  41. package/bundle/{chunk-LE23VPN3.js.map → chunk-63A7ZRIH.js.map} +1 -1
  42. package/bundle/chunk-6IB3GVXK.js +77 -0
  43. package/bundle/chunk-6IB3GVXK.js.map +7 -0
  44. package/bundle/{chunk-OOKNHOCB.js → chunk-6S3G6GPO.js} +2 -2
  45. package/bundle/{chunk-E7MV7WFT.js → chunk-6VTHSN4V.js} +6 -6
  46. package/bundle/{chunk-NGZVJ52F.js → chunk-76YN7O3U.js} +7 -7
  47. package/bundle/{chunk-43DKPXTP.js → chunk-7LORCJCQ.js} +4 -4
  48. package/bundle/{chunk-HDOFJVFS.js → chunk-7OI46MH7.js} +3 -3
  49. package/bundle/{chunk-H2K23MOF.js → chunk-7XXISOHU.js} +21 -5
  50. package/bundle/chunk-7XXISOHU.js.map +7 -0
  51. package/bundle/{chunk-CB6S3ZRF.js → chunk-AFFW2LRY.js} +3 -3
  52. package/bundle/{chunk-TCI6FZTP.js → chunk-AHJDG6OM.js} +9 -9
  53. package/bundle/{chunk-NP72ZB7P.js → chunk-AMUJEP6L.js} +45 -45
  54. package/bundle/{chunk-NP72ZB7P.js.map → chunk-AMUJEP6L.js.map} +2 -2
  55. package/bundle/{chunk-BU7LTI2W.js → chunk-AWCO3DQ3.js} +6 -7
  56. package/bundle/chunk-AWCO3DQ3.js.map +7 -0
  57. package/bundle/{chunk-YME7NRGP.js → chunk-B2TIRDZC.js} +2 -2
  58. package/bundle/{chunk-SSCGWDIC.js → chunk-BWJ37KMW.js} +2 -2
  59. package/bundle/{chunk-ULO2PX3T.js → chunk-CCZ43JB7.js} +3 -3
  60. package/bundle/{chunk-FVUL44T4.js → chunk-CNENVY37.js} +2 -2
  61. package/bundle/{chunk-J5NOL4DB.js → chunk-DJOSXXM2.js} +2 -2
  62. package/bundle/{chunk-7RAGSHSH.js → chunk-DMDX35YT.js} +12 -10
  63. package/bundle/chunk-DMDX35YT.js.map +7 -0
  64. package/bundle/{chunk-DNDYD5SL.js → chunk-E7DZYCSF.js} +3 -3
  65. package/bundle/{chunk-M6Q3IQ4H.js → chunk-FF2F7ENH.js} +250 -118
  66. package/bundle/chunk-FF2F7ENH.js.map +7 -0
  67. package/bundle/{chunk-GCFIK6OB.js → chunk-FSGICOCX.js} +21 -21
  68. package/bundle/{chunk-IXKQ4JMX.js → chunk-GFAJSPMD.js} +33 -17
  69. package/bundle/chunk-GFAJSPMD.js.map +7 -0
  70. package/bundle/{chunk-FJF42RZY.js → chunk-GHRLO2UL.js} +3 -3
  71. package/bundle/{chunk-3LQOJVTB.js → chunk-HFOCNYEO.js} +1842 -1220
  72. package/bundle/{chunk-3LQOJVTB.js.map → chunk-HFOCNYEO.js.map} +4 -4
  73. package/bundle/{chunk-7WHXTCVD.js → chunk-HWFN7JGU.js} +2 -2
  74. package/bundle/{chunk-KBPVJGD7.js → chunk-IXGDDDAB.js} +3 -3
  75. package/bundle/chunk-JHLKEUHE.js +37 -0
  76. package/bundle/chunk-JHLKEUHE.js.map +7 -0
  77. package/bundle/{chunk-YEOZN5IE.js → chunk-JRGEEGZF.js} +2 -2
  78. package/bundle/{chunk-56D3Y44D.js → chunk-KLG4SCF7.js} +10 -10
  79. package/bundle/{chunk-ASYX43OU.js → chunk-LB43Q7G6.js} +26 -26
  80. package/bundle/{chunk-TVSPVZTX.js → chunk-LN5MNDSA.js} +3 -3
  81. package/bundle/{chunk-RJX45XIC.js → chunk-LPF2HELD.js} +9 -4
  82. package/bundle/chunk-LPF2HELD.js.map +7 -0
  83. package/bundle/{chunk-72T2Q7IG.js → chunk-MJACYH7A.js} +270 -282
  84. package/bundle/chunk-MJACYH7A.js.map +7 -0
  85. package/bundle/{chunk-SESM4GBM.js → chunk-MPQ2PJQX.js} +52 -25
  86. package/bundle/chunk-MPQ2PJQX.js.map +7 -0
  87. package/bundle/{chunk-FIAVVKGN.js → chunk-MTE32OQH.js} +3 -3
  88. package/bundle/{chunk-MV5KOWOR.js → chunk-N3Q3TASM.js} +7 -7
  89. package/bundle/{chunk-IQKADER4.js → chunk-O4YBJS2K.js} +2 -2
  90. package/bundle/{chunk-VJATH7AN.js → chunk-OOUCUCUW.js} +9 -8
  91. package/bundle/chunk-OOUCUCUW.js.map +7 -0
  92. package/bundle/{chunk-5V4VHKEA.js → chunk-OT6HLPEA.js} +3 -3
  93. package/bundle/{chunk-V6CV3QPH.js → chunk-OWPQIBAO.js} +2 -2
  94. package/bundle/{chunk-EDZGF6BC.js → chunk-QJPDBJDP.js} +11 -4
  95. package/bundle/chunk-QJPDBJDP.js.map +7 -0
  96. package/bundle/{chunk-N5VROZ7A.js → chunk-QMP2KC4W.js} +5 -5
  97. package/bundle/{chunk-4HNCOQSK.js → chunk-QOGZ7BFL.js} +7 -7
  98. package/bundle/{chunk-2LKQV2ND.js → chunk-R23FHZRY.js} +3 -3
  99. package/bundle/{chunk-SXNY6HC4.js → chunk-R4GYWVCR.js} +6 -6
  100. package/bundle/chunk-R4GYWVCR.js.map +7 -0
  101. package/bundle/{chunk-S7ZIGIR5.js → chunk-R76K6L6H.js} +27 -27
  102. package/bundle/{chunk-S7ZIGIR5.js.map → chunk-R76K6L6H.js.map} +1 -1
  103. package/bundle/{chunk-TY26WMQY.js → chunk-RCWQ34QR.js} +2 -2
  104. package/bundle/{chunk-MQJG7OJX.js → chunk-RJ2OUNFU.js} +38 -36
  105. package/bundle/chunk-RJ2OUNFU.js.map +7 -0
  106. package/bundle/{chunk-S6HEHCCG.js → chunk-RO3TAYBR.js} +83 -46
  107. package/bundle/chunk-RO3TAYBR.js.map +7 -0
  108. package/bundle/{chunk-ZOCEBV62.js → chunk-UU3RLJSD.js} +3 -3
  109. package/bundle/{chunk-P5O6QZDC.js → chunk-V7Y2LFO4.js} +10 -6
  110. package/bundle/chunk-V7Y2LFO4.js.map +7 -0
  111. package/bundle/{chunk-WP7FZHMI.js → chunk-W2PSVV2T.js} +2 -2
  112. package/bundle/{chunk-V2QIAXWZ.js → chunk-WEGFRA6G.js} +3 -3
  113. package/bundle/{chunk-ZY6DH2S4.js → chunk-WTIGZO3N.js} +80 -70
  114. package/bundle/chunk-WTIGZO3N.js.map +7 -0
  115. package/bundle/{chunk-O4GKI3Q3.js → chunk-X7DLKIQM.js} +4 -4
  116. package/bundle/{chunk-BNBC4T45.js → chunk-XZ4ZBDM5.js} +3 -3
  117. package/bundle/{chunk-24V4A6RP.js → chunk-YI2KSYB4.js} +4 -4
  118. package/bundle/{chunk-37EX63K4.js → chunk-YWHJJHJ2.js} +6998 -3621
  119. package/bundle/chunk-YWHJJHJ2.js.map +7 -0
  120. package/bundle/{chunk-IK4R3RBZ.js → chunk-YZCOA4DC.js} +3 -3
  121. package/bundle/{chunk-2FZJDMAF.js → chunk-ZGNSCJWH.js} +10 -10
  122. package/bundle/{chunk-W726UGI6.js → chunk-ZKMKAO75.js} +3 -3
  123. package/bundle/{chunk-WGWM4IZM.js → chunk-ZT5ZBGWS.js} +4 -4
  124. package/bundle/{chunk-WGWM4IZM.js.map → chunk-ZT5ZBGWS.js.map} +1 -1
  125. package/bundle/{commands-XXFU2ZF7.js → commands-2JQ5YTJX.js} +20 -20
  126. package/bundle/{config-EWDZ234X.js → config-ZEWIM5Z2.js} +8 -7
  127. package/bundle/{config-show-6J33O4TE.js → config-show-WBJPQPRD.js} +5 -5
  128. package/bundle/{context-OCS7HLJP.js → context-V75QNXB5.js} +5 -2
  129. package/bundle/{context-OCS7HLJP.js.map → context-V75QNXB5.js.map} +1 -1
  130. package/bundle/{daemon-LTDAXNA2.js → daemon-W7VQOSZC.js} +7 -7
  131. package/bundle/{delegation-tools-YDTWQMZD.js → delegation-tools-VGTRFQBF.js} +13 -11
  132. package/bundle/{registry-client-VN2MM2HI.js → deploy-5AGIULM2.js} +10 -6
  133. package/bundle/{deploy-lib-import-RGZJ3CGC.js → deploy-lib-import-ZBDYORN4.js} +5 -3
  134. package/bundle/{deps-PHSLIA77.js → deps-VB3S3RLF.js} +21 -19
  135. package/bundle/deps-VB3S3RLF.js.map +7 -0
  136. package/bundle/{direct-api-transport-OAKYQBJR.js → direct-api-transport-YSROTC35.js} +30 -28
  137. package/bundle/direct-api-transport-YSROTC35.js.map +7 -0
  138. package/bundle/{discord-adapter-WUNYPTDE.js → discord-adapter-LKBSIFLV.js} +26 -26
  139. package/bundle/{dist-7HEHHQI2.js → dist-KMK7TZGN.js} +376 -348
  140. package/bundle/dist-KMK7TZGN.js.map +7 -0
  141. package/bundle/{dns-wakeup-F55ALHXJ.js → dns-wakeup-KIURCCFJ.js} +4 -3
  142. package/bundle/{dns-wakeup-F55ALHXJ.js.map → dns-wakeup-KIURCCFJ.js.map} +1 -1
  143. package/bundle/{doctor-probes-3SLIUGKS.js → doctor-probes-46UKIROK.js} +4 -3
  144. package/bundle/{env-schema-MSDP2YBO.js → env-schema-YGHCKX5B.js} +5 -4
  145. package/bundle/{gossip-CS3G3447.js → gossip-VSEY2HSE.js} +7 -6
  146. package/bundle/{guardrails-24XK2COI.js → guardrails-U7M6H2GE.js} +6 -5
  147. package/bundle/{health-check-FRUNRVNQ.js → health-check-ASRLUJE5.js} +6 -2
  148. package/bundle/health-check-ASRLUJE5.js.map +7 -0
  149. package/bundle/{heartbeat-system-G4IFQXT6.js → heartbeat-system-MUXLT4E6.js} +7 -6
  150. package/bundle/{heartbeat-tier3-3ZO3EVXP.js → heartbeat-tier3-636ZMM4E.js} +45 -44
  151. package/bundle/heartbeat-tier3-636ZMM4E.js.map +7 -0
  152. package/bundle/{hook-system-X6INNJGV.js → hook-system-Z4XD6IM5.js} +5 -4
  153. package/bundle/{hotskills-6FQYTJIO.js → hotskills-AOUWVTQB.js} +7 -6
  154. package/bundle/{install-ZAHTZ5M5.js → install-3GGZUN22.js} +23 -20
  155. package/bundle/install-3GGZUN22.js.map +7 -0
  156. package/bundle/{install-manifest-QX7KVDCA.js → install-manifest-624KOB4S.js} +4 -3
  157. package/bundle/{install-manifest-QX7KVDCA.js.map → install-manifest-624KOB4S.js.map} +1 -1
  158. package/bundle/{irc-adapter-IEJQKKJF.js → irc-adapter-SA7GLJGR.js} +5 -4
  159. package/bundle/{irc-adapter-IEJQKKJF.js.map → irc-adapter-SA7GLJGR.js.map} +1 -1
  160. package/bundle/{irc-config-TTWNYFLH.js → irc-config-PG4X2I4M.js} +6 -5
  161. package/bundle/{irc-config-TTWNYFLH.js.map → irc-config-PG4X2I4M.js.map} +1 -1
  162. package/bundle/{kanban-board-J6RO3ZU7.js → kanban-board-4AI5Z6B5.js} +7 -5
  163. package/bundle/{kanban-channel-5EIXBFSA.js → kanban-channel-JMBYWGWD.js} +8 -6
  164. package/bundle/{lazy-require-V6EFUATC.js → lazy-require-GURNBC3C.js} +11 -6
  165. package/bundle/{logger-Y3VILPRH.js → logger-UQJPZMYV.js} +4 -3
  166. package/bundle/{logs-YS3GDURO.js → logs-2WTDLMB5.js} +5 -5
  167. package/bundle/{main-chat-YLZDNQPO.js → main-chat-EID5Y6H2.js} +6 -5
  168. package/bundle/{master-user-Z4M7KCJE.js → master-user-TKA7M2GL.js} +7 -6
  169. package/bundle/{media-utils-P6RZ2K3U.js → media-utils-X3UN342B.js} +44 -43
  170. package/bundle/{media-utils-P6RZ2K3U.js.map → media-utils-X3UN342B.js.map} +2 -2
  171. package/bundle/{message-pipeline-MHEBDJLH.js → message-pipeline-TAWXNEVS.js} +20 -20
  172. package/bundle/meta.json +9264 -8575
  173. package/bundle/{migrate-layout-RJJQLVGR.js → migrate-layout-KEAIIN26.js} +8 -4
  174. package/bundle/migrate-layout-KEAIIN26.js.map +7 -0
  175. package/bundle/{nerve-VZNMFDGY.js → nerve-TC34H4EL.js} +5 -4
  176. package/bundle/{notification-VV2OR6NW.js → notification-JQNVGICN.js} +8 -7
  177. package/bundle/{openrouter-credits-LXC7P4G6.js → openrouter-credits-5Q3EYWE5.js} +5 -4
  178. package/bundle/{openrouter-credits-LXC7P4G6.js.map → openrouter-credits-5Q3EYWE5.js.map} +1 -1
  179. package/bundle/{orc-KC4USP55.js → orc-74Z62W7B.js} +4 -4
  180. package/bundle/{orc-tools-CHRSXSAS.js → orc-tools-GME3DKIN.js} +5 -4
  181. package/bundle/{paths-EDK6KWHG.js → paths-BAUNPLNJ.js} +6 -2
  182. package/bundle/{paths-RZF6WDMG.js → paths-MZC2KU2C.js} +3 -2
  183. package/bundle/{peer-auth-SRONOLNG.js → peer-auth-VRO3JYL5.js} +9 -8
  184. package/bundle/{peer-client-VOF77T6C.js → peer-client-WLK5GZQS.js} +9 -8
  185. package/bundle/{peer-client-VOF77T6C.js.map → peer-client-WLK5GZQS.js.map} +1 -1
  186. package/bundle/{peer-config-FRWLEYQ5.js → peer-config-24WILLCJ.js} +6 -5
  187. package/bundle/{peer-jwt-XY3XRIA2.js → peer-jwt-ZR6RF3XM.js} +6 -5
  188. package/bundle/{peer-transport-UBBXTDRP.js → peer-transport-BK5VHI2M.js} +8 -7
  189. package/bundle/{phase-transport-4NQHZX75.js → phase-transport-7QJM7J6V.js} +18 -16
  190. package/bundle/{reconcile-2EUXJ6W5.js → reconcile-7N7OE2GU.js} +5 -4
  191. package/bundle/{reconciler-FFQGV4DO.js → reconciler-7LOOUK43.js} +13 -11
  192. package/bundle/{reconciler-FFQGV4DO.js.map → reconciler-7LOOUK43.js.map} +1 -1
  193. package/bundle/{restore-NFDE2RG6.js → restore-MENZ3I3K.js} +13 -9
  194. package/bundle/{restore-NFDE2RG6.js.map → restore-MENZ3I3K.js.map} +3 -3
  195. package/bundle/{rollback-MVZ53XS4.js → rollback-JOHY6KWW.js} +5 -5
  196. package/bundle/{chunk-SKY6656M.js → sandbox-runtime-T7RF4WJD.js} +11 -28
  197. package/bundle/{chunk-SKY6656M.js.map → sandbox-runtime-T7RF4WJD.js.map} +1 -1
  198. package/bundle/{self-healer-utils-KD6LV63S.js → self-healer-utils-OR2N6RLD.js} +5 -4
  199. package/bundle/{self-healer-utils-KD6LV63S.js.map → self-healer-utils-OR2N6RLD.js.map} +1 -1
  200. package/bundle/{sha-tracker-2DB4R2TW.js → sha-tracker-BXOLWZJL.js} +5 -4
  201. package/bundle/{skill-session-BPDVA6ZG.js → skill-session-H6EQ4NGN.js} +5 -4
  202. package/bundle/{skill-session-BPDVA6ZG.js.map → skill-session-H6EQ4NGN.js.map} +1 -1
  203. package/bundle/{skill-stats-TPD2NROA.js → skill-stats-7O777ZSZ.js} +6 -5
  204. package/bundle/{skill-watcher-D7QYYYON.js → skill-watcher-ZGLTDPG5.js} +6 -5
  205. package/bundle/{sleep-GH6DLBJJ.js → sleep-3LFZH727.js} +10 -9
  206. package/bundle/{soul-bundle-GXLMDBCC.js → soul-bundle-RQ2YQMJW.js} +10 -9
  207. package/bundle/{spin-4DBYHS3E.js → spin-76K4R6FK.js} +12 -10
  208. package/bundle/{spin-notifications-IKYJPER5.js → spin-notifications-LD46B4K5.js} +7 -5
  209. package/bundle/{spin-notifications-IKYJPER5.js.map → spin-notifications-LD46B4K5.js.map} +1 -1
  210. package/bundle/{spin-types-PLJH3SIK.js → spin-types-MOKTZXGB.js} +5 -4
  211. package/bundle/{src-SUFZ27S5.js → src-6BTCMOD3.js} +4 -4
  212. package/bundle/{sse-parser-anthropic-U7ILHOY5.js → sse-parser-anthropic-NV2CGBIT.js} +5 -4
  213. package/bundle/{sse-parser-anthropic-U7ILHOY5.js.map → sse-parser-anthropic-NV2CGBIT.js.map} +1 -1
  214. package/bundle/{sse-parser-responses-OI73R3AH.js → sse-parser-responses-FC3PFHQ5.js} +5 -4
  215. package/bundle/{sse-parser-responses-OI73R3AH.js.map → sse-parser-responses-FC3PFHQ5.js.map} +1 -1
  216. package/bundle/{ssrf-guard-6GP4QYVA.js → ssrf-guard-E2YPLW6G.js} +5 -4
  217. package/bundle/{ssrf-guard-6GP4QYVA.js.map → ssrf-guard-E2YPLW6G.js.map} +1 -1
  218. package/bundle/{start-JT2BPMSW.js → start-HPO5LYJP.js} +5 -5
  219. package/bundle/start-HPO5LYJP.js.map +7 -0
  220. package/bundle/{stt-KD3AABKG.js → stt-UE7EOYD7.js} +6 -5
  221. package/bundle/{subagent-runtime-LVECAUPV.js → subagent-runtime-4X3UHF4H.js} +6 -5
  222. package/bundle/system-status-PLPWV4RF.js +346 -0
  223. package/bundle/system-status-PLPWV4RF.js.map +7 -0
  224. package/bundle/{task-store-2XRDM3AW.js → task-store-RAFMDQ7N.js} +6 -5
  225. package/bundle/{telegram-adapter-UJ3RYYV6.js → telegram-adapter-PPXKTGOP.js} +35 -35
  226. package/bundle/{tool-registry-YU6WBXPA.js → tool-registry-NKIPNJZ5.js} +25 -23
  227. package/bundle/{tool-sandbox-RNNPDR5M.js → tool-sandbox-DQCP3UTU.js} +6 -5
  228. package/bundle/{transport-config-OK3MZPJK.js → transport-config-SF6GBV47.js} +9 -8
  229. package/bundle/{update-ENNPRW7Y.js → update-QOOGMFSJ.js} +6 -6
  230. package/bundle/{update-check-SJB6GV3A.js → update-check-LPZG3K5P.js} +3 -2
  231. package/bundle/{update-check-SJB6GV3A.js.map → update-check-LPZG3K5P.js.map} +1 -1
  232. package/bundle/{usage-tracker-HRSGC7QC.js → usage-tracker-TBDM4KE6.js} +2 -2
  233. package/bundle/{user-registry-6PUJJ5J2.js → user-registry-OYJVAHDD.js} +6 -5
  234. package/bundle/{wrapper-WLHLG4MI.js → wrapper-W66YICNZ.js} +3 -3
  235. package/bundle/{ws-peer-client-WHW3RJTD.js → ws-peer-client-G5QHOF6K.js} +15 -14
  236. package/bundle/{ws-peer-client-WHW3RJTD.js.map → ws-peer-client-G5QHOF6K.js.map} +2 -2
  237. package/package.json +3 -7
  238. package/scripts/emergency-deploy.sh +11 -8
  239. package/scripts/emergency-update.sh +156 -23
  240. package/templates/config/.env +1 -1
  241. package/templates/config/models.json +13 -0
  242. package/bundle/chunk-37EX63K4.js.map +0 -7
  243. package/bundle/chunk-3QW2K53E.js.map +0 -7
  244. package/bundle/chunk-72T2Q7IG.js.map +0 -7
  245. package/bundle/chunk-7RAGSHSH.js.map +0 -7
  246. package/bundle/chunk-BU7LTI2W.js.map +0 -7
  247. package/bundle/chunk-C3EYYJN3.js.map +0 -7
  248. package/bundle/chunk-CAOIIVFP.js +0 -110
  249. package/bundle/chunk-CAOIIVFP.js.map +0 -7
  250. package/bundle/chunk-EDZGF6BC.js.map +0 -7
  251. package/bundle/chunk-H2K23MOF.js.map +0 -7
  252. package/bundle/chunk-HAZHNBBY.js +0 -156
  253. package/bundle/chunk-HAZHNBBY.js.map +0 -7
  254. package/bundle/chunk-IXKQ4JMX.js.map +0 -7
  255. package/bundle/chunk-JAJ3DUQ2.js +0 -30
  256. package/bundle/chunk-JAJ3DUQ2.js.map +0 -7
  257. package/bundle/chunk-KMFR5AVY.js +0 -45
  258. package/bundle/chunk-KMFR5AVY.js.map +0 -7
  259. package/bundle/chunk-M6Q3IQ4H.js.map +0 -7
  260. package/bundle/chunk-MQJG7OJX.js.map +0 -7
  261. package/bundle/chunk-OY2HAK33.js.map +0 -7
  262. package/bundle/chunk-P5O6QZDC.js.map +0 -7
  263. package/bundle/chunk-RJX45XIC.js.map +0 -7
  264. package/bundle/chunk-S6HEHCCG.js.map +0 -7
  265. package/bundle/chunk-SESM4GBM.js.map +0 -7
  266. package/bundle/chunk-SXNY6HC4.js.map +0 -7
  267. package/bundle/chunk-VJATH7AN.js.map +0 -7
  268. package/bundle/chunk-ZY6DH2S4.js.map +0 -7
  269. package/bundle/deps-PHSLIA77.js.map +0 -7
  270. package/bundle/direct-api-transport-OAKYQBJR.js.map +0 -7
  271. package/bundle/dist-7HEHHQI2.js.map +0 -7
  272. package/bundle/health-check-FRUNRVNQ.js.map +0 -7
  273. package/bundle/heartbeat-tier3-3ZO3EVXP.js.map +0 -7
  274. package/bundle/install-ZAHTZ5M5.js.map +0 -7
  275. package/bundle/migrate-layout-RJJQLVGR.js.map +0 -7
  276. package/bundle/phase-config-V4XETN5F.js +0 -18
  277. package/bundle/sandbox-runtime-WHACQLLN.js +0 -22
  278. package/bundle/start-JT2BPMSW.js.map +0 -7
  279. package/bundle/system-status-XXJWTVJN.js +0 -243
  280. package/bundle/system-status-XXJWTVJN.js.map +0 -7
  281. package/bundle/user-registry-6PUJJ5J2.js.map +0 -7
  282. package/bundle/wrapper-WLHLG4MI.js.map +0 -7
  283. /package/bundle/{agent-api-rate-limit-4GEZ4YN5.js.map → agent-api-rate-limit-VENFGOAD.js.map} +0 -0
  284. /package/bundle/{agent-registry-563P4EUJ.js.map → agent-registry-DL7UT272.js.map} +0 -0
  285. /package/bundle/{bridge-lock-transport-LXCF2IVN.js.map → bridge-lock-transport-BJAMHMXW.js.map} +0 -0
  286. /package/bundle/{browser-2VZOGOGX.js.map → browser-PT54UWSW.js.map} +0 -0
  287. /package/bundle/{capability-WXEA2WFK.js.map → capability-EKPGHQIO.js.map} +0 -0
  288. /package/bundle/{chunk-4PIVWXUJ.js.map → chunk-2ZD7VQRW.js.map} +0 -0
  289. /package/bundle/{chunk-T7TAWGBX.js.map → chunk-52PQM4EZ.js.map} +0 -0
  290. /package/bundle/{chunk-2RGR3LSV.js.map → chunk-5P5HF7IJ.js.map} +0 -0
  291. /package/bundle/{chunk-OOKNHOCB.js.map → chunk-6S3G6GPO.js.map} +0 -0
  292. /package/bundle/{chunk-E7MV7WFT.js.map → chunk-6VTHSN4V.js.map} +0 -0
  293. /package/bundle/{chunk-NGZVJ52F.js.map → chunk-76YN7O3U.js.map} +0 -0
  294. /package/bundle/{chunk-43DKPXTP.js.map → chunk-7LORCJCQ.js.map} +0 -0
  295. /package/bundle/{chunk-HDOFJVFS.js.map → chunk-7OI46MH7.js.map} +0 -0
  296. /package/bundle/{chunk-CB6S3ZRF.js.map → chunk-AFFW2LRY.js.map} +0 -0
  297. /package/bundle/{chunk-TCI6FZTP.js.map → chunk-AHJDG6OM.js.map} +0 -0
  298. /package/bundle/{chunk-YME7NRGP.js.map → chunk-B2TIRDZC.js.map} +0 -0
  299. /package/bundle/{chunk-SSCGWDIC.js.map → chunk-BWJ37KMW.js.map} +0 -0
  300. /package/bundle/{chunk-ULO2PX3T.js.map → chunk-CCZ43JB7.js.map} +0 -0
  301. /package/bundle/{chunk-FVUL44T4.js.map → chunk-CNENVY37.js.map} +0 -0
  302. /package/bundle/{chunk-J5NOL4DB.js.map → chunk-DJOSXXM2.js.map} +0 -0
  303. /package/bundle/{chunk-DNDYD5SL.js.map → chunk-E7DZYCSF.js.map} +0 -0
  304. /package/bundle/{chunk-GCFIK6OB.js.map → chunk-FSGICOCX.js.map} +0 -0
  305. /package/bundle/{chunk-FJF42RZY.js.map → chunk-GHRLO2UL.js.map} +0 -0
  306. /package/bundle/{chunk-7WHXTCVD.js.map → chunk-HWFN7JGU.js.map} +0 -0
  307. /package/bundle/{chunk-KBPVJGD7.js.map → chunk-IXGDDDAB.js.map} +0 -0
  308. /package/bundle/{chunk-YEOZN5IE.js.map → chunk-JRGEEGZF.js.map} +0 -0
  309. /package/bundle/{chunk-56D3Y44D.js.map → chunk-KLG4SCF7.js.map} +0 -0
  310. /package/bundle/{chunk-ASYX43OU.js.map → chunk-LB43Q7G6.js.map} +0 -0
  311. /package/bundle/{chunk-TVSPVZTX.js.map → chunk-LN5MNDSA.js.map} +0 -0
  312. /package/bundle/{chunk-FIAVVKGN.js.map → chunk-MTE32OQH.js.map} +0 -0
  313. /package/bundle/{chunk-MV5KOWOR.js.map → chunk-N3Q3TASM.js.map} +0 -0
  314. /package/bundle/{chunk-IQKADER4.js.map → chunk-O4YBJS2K.js.map} +0 -0
  315. /package/bundle/{chunk-5V4VHKEA.js.map → chunk-OT6HLPEA.js.map} +0 -0
  316. /package/bundle/{chunk-V6CV3QPH.js.map → chunk-OWPQIBAO.js.map} +0 -0
  317. /package/bundle/{chunk-N5VROZ7A.js.map → chunk-QMP2KC4W.js.map} +0 -0
  318. /package/bundle/{chunk-4HNCOQSK.js.map → chunk-QOGZ7BFL.js.map} +0 -0
  319. /package/bundle/{chunk-2LKQV2ND.js.map → chunk-R23FHZRY.js.map} +0 -0
  320. /package/bundle/{chunk-TY26WMQY.js.map → chunk-RCWQ34QR.js.map} +0 -0
  321. /package/bundle/{chunk-ZOCEBV62.js.map → chunk-UU3RLJSD.js.map} +0 -0
  322. /package/bundle/{chunk-WP7FZHMI.js.map → chunk-W2PSVV2T.js.map} +0 -0
  323. /package/bundle/{chunk-V2QIAXWZ.js.map → chunk-WEGFRA6G.js.map} +0 -0
  324. /package/bundle/{chunk-O4GKI3Q3.js.map → chunk-X7DLKIQM.js.map} +0 -0
  325. /package/bundle/{chunk-BNBC4T45.js.map → chunk-XZ4ZBDM5.js.map} +0 -0
  326. /package/bundle/{chunk-24V4A6RP.js.map → chunk-YI2KSYB4.js.map} +0 -0
  327. /package/bundle/{chunk-IK4R3RBZ.js.map → chunk-YZCOA4DC.js.map} +0 -0
  328. /package/bundle/{chunk-2FZJDMAF.js.map → chunk-ZGNSCJWH.js.map} +0 -0
  329. /package/bundle/{chunk-W726UGI6.js.map → chunk-ZKMKAO75.js.map} +0 -0
  330. /package/bundle/{commands-XXFU2ZF7.js.map → commands-2JQ5YTJX.js.map} +0 -0
  331. /package/bundle/{config-EWDZ234X.js.map → config-ZEWIM5Z2.js.map} +0 -0
  332. /package/bundle/{config-show-6J33O4TE.js.map → config-show-WBJPQPRD.js.map} +0 -0
  333. /package/bundle/{daemon-LTDAXNA2.js.map → daemon-W7VQOSZC.js.map} +0 -0
  334. /package/bundle/{delegation-tools-YDTWQMZD.js.map → delegation-tools-VGTRFQBF.js.map} +0 -0
  335. /package/bundle/{deploy-lib-import-RGZJ3CGC.js.map → deploy-5AGIULM2.js.map} +0 -0
  336. /package/bundle/{doctor-probes-3SLIUGKS.js.map → deploy-lib-import-ZBDYORN4.js.map} +0 -0
  337. /package/bundle/{discord-adapter-WUNYPTDE.js.map → discord-adapter-LKBSIFLV.js.map} +0 -0
  338. /package/bundle/{env-schema-MSDP2YBO.js.map → doctor-probes-46UKIROK.js.map} +0 -0
  339. /package/bundle/{gossip-CS3G3447.js.map → env-schema-YGHCKX5B.js.map} +0 -0
  340. /package/bundle/{guardrails-24XK2COI.js.map → gossip-VSEY2HSE.js.map} +0 -0
  341. /package/bundle/{heartbeat-system-G4IFQXT6.js.map → guardrails-U7M6H2GE.js.map} +0 -0
  342. /package/bundle/{hook-system-X6INNJGV.js.map → heartbeat-system-MUXLT4E6.js.map} +0 -0
  343. /package/bundle/{hotskills-6FQYTJIO.js.map → hook-system-Z4XD6IM5.js.map} +0 -0
  344. /package/bundle/{kanban-board-J6RO3ZU7.js.map → hotskills-AOUWVTQB.js.map} +0 -0
  345. /package/bundle/{kanban-channel-5EIXBFSA.js.map → kanban-board-4AI5Z6B5.js.map} +0 -0
  346. /package/bundle/{lazy-require-V6EFUATC.js.map → kanban-channel-JMBYWGWD.js.map} +0 -0
  347. /package/bundle/{logger-Y3VILPRH.js.map → lazy-require-GURNBC3C.js.map} +0 -0
  348. /package/bundle/{main-chat-YLZDNQPO.js.map → logger-UQJPZMYV.js.map} +0 -0
  349. /package/bundle/{logs-YS3GDURO.js.map → logs-2WTDLMB5.js.map} +0 -0
  350. /package/bundle/{master-user-Z4M7KCJE.js.map → main-chat-EID5Y6H2.js.map} +0 -0
  351. /package/bundle/{message-pipeline-MHEBDJLH.js.map → master-user-TKA7M2GL.js.map} +0 -0
  352. /package/bundle/{nerve-VZNMFDGY.js.map → message-pipeline-TAWXNEVS.js.map} +0 -0
  353. /package/bundle/{notification-VV2OR6NW.js.map → nerve-TC34H4EL.js.map} +0 -0
  354. /package/bundle/{orc-tools-CHRSXSAS.js.map → notification-JQNVGICN.js.map} +0 -0
  355. /package/bundle/{orc-KC4USP55.js.map → orc-74Z62W7B.js.map} +0 -0
  356. /package/bundle/{paths-EDK6KWHG.js.map → orc-tools-GME3DKIN.js.map} +0 -0
  357. /package/bundle/{paths-RZF6WDMG.js.map → paths-BAUNPLNJ.js.map} +0 -0
  358. /package/bundle/{peer-auth-SRONOLNG.js.map → paths-MZC2KU2C.js.map} +0 -0
  359. /package/bundle/{peer-config-FRWLEYQ5.js.map → peer-auth-VRO3JYL5.js.map} +0 -0
  360. /package/bundle/{peer-jwt-XY3XRIA2.js.map → peer-config-24WILLCJ.js.map} +0 -0
  361. /package/bundle/{peer-transport-UBBXTDRP.js.map → peer-jwt-ZR6RF3XM.js.map} +0 -0
  362. /package/bundle/{phase-config-V4XETN5F.js.map → peer-transport-BK5VHI2M.js.map} +0 -0
  363. /package/bundle/{phase-transport-4NQHZX75.js.map → phase-transport-7QJM7J6V.js.map} +0 -0
  364. /package/bundle/{reconcile-2EUXJ6W5.js.map → reconcile-7N7OE2GU.js.map} +0 -0
  365. /package/bundle/{registry-client-VN2MM2HI.js.map → rollback-JOHY6KWW.js.map} +0 -0
  366. /package/bundle/{rollback-MVZ53XS4.js.map → sha-tracker-BXOLWZJL.js.map} +0 -0
  367. /package/bundle/{sandbox-runtime-WHACQLLN.js.map → skill-stats-7O777ZSZ.js.map} +0 -0
  368. /package/bundle/{sha-tracker-2DB4R2TW.js.map → skill-watcher-ZGLTDPG5.js.map} +0 -0
  369. /package/bundle/{skill-stats-TPD2NROA.js.map → sleep-3LFZH727.js.map} +0 -0
  370. /package/bundle/{skill-watcher-D7QYYYON.js.map → soul-bundle-RQ2YQMJW.js.map} +0 -0
  371. /package/bundle/{sleep-GH6DLBJJ.js.map → spin-76K4R6FK.js.map} +0 -0
  372. /package/bundle/{soul-bundle-GXLMDBCC.js.map → spin-types-MOKTZXGB.js.map} +0 -0
  373. /package/bundle/{spin-4DBYHS3E.js.map → src-6BTCMOD3.js.map} +0 -0
  374. /package/bundle/{spin-types-PLJH3SIK.js.map → stt-UE7EOYD7.js.map} +0 -0
  375. /package/bundle/{src-SUFZ27S5.js.map → subagent-runtime-4X3UHF4H.js.map} +0 -0
  376. /package/bundle/{stt-KD3AABKG.js.map → task-store-RAFMDQ7N.js.map} +0 -0
  377. /package/bundle/{telegram-adapter-UJ3RYYV6.js.map → telegram-adapter-PPXKTGOP.js.map} +0 -0
  378. /package/bundle/{subagent-runtime-LVECAUPV.js.map → tool-registry-NKIPNJZ5.js.map} +0 -0
  379. /package/bundle/{task-store-2XRDM3AW.js.map → tool-sandbox-DQCP3UTU.js.map} +0 -0
  380. /package/bundle/{tool-registry-YU6WBXPA.js.map → transport-config-SF6GBV47.js.map} +0 -0
  381. /package/bundle/{tool-sandbox-RNNPDR5M.js.map → update-QOOGMFSJ.js.map} +0 -0
  382. /package/bundle/{transport-config-OK3MZPJK.js.map → usage-tracker-TBDM4KE6.js.map} +0 -0
  383. /package/bundle/{update-ENNPRW7Y.js.map → user-registry-OYJVAHDD.js.map} +0 -0
  384. /package/bundle/{usage-tracker-HRSGC7QC.js.map → wrapper-W66YICNZ.js.map} +0 -0
@@ -9,10 +9,11 @@ import {
9
9
  isDockerActive,
10
10
  isGuardrailsActive,
11
11
  isSeatbeltActive
12
- } from "./chunk-KBPVJGD7.js";
13
- import "./chunk-SSCGWDIC.js";
14
- import "./chunk-OOKNHOCB.js";
15
- import "./chunk-H2K23MOF.js";
12
+ } from "./chunk-IXGDDDAB.js";
13
+ import "./chunk-BWJ37KMW.js";
14
+ import "./chunk-6S3G6GPO.js";
15
+ import "./chunk-7XXISOHU.js";
16
+ import "./chunk-2BXXQG7P.js";
16
17
  import "./chunk-7K2YZTLD.js";
17
18
  init_guardrails();
18
19
  export {
@@ -24,4 +25,4 @@ export {
24
25
  isGuardrailsActive,
25
26
  isSeatbeltActive
26
27
  };
27
- //# sourceMappingURL=guardrails-24XK2COI.js.map
28
+ //# sourceMappingURL=guardrails-U7M6H2GE.js.map
@@ -27,12 +27,16 @@ function checkEmbeddingModel() {
27
27
  }
28
28
  }
29
29
  function checkSqliteVec(home) {
30
+ const sharedNm = join(homedir(), ".local", "lib", "node_modules", "sqlite-vec");
31
+ if (existsSync(sharedNm)) {
32
+ return { ok: true, label: "sqlite-vec (vector search)" };
33
+ }
30
34
  const abmindLib = join(process.env["ABMIND_HOME"] ?? join(homedir(), ".abmind"), "lib", "node_modules", "sqlite-vec");
31
35
  const bundleNm = join(home, "current", "node_modules", "sqlite-vec");
32
36
  if (existsSync(abmindLib) || existsSync(bundleNm)) {
33
37
  return { ok: true, label: "sqlite-vec (vector search)" };
34
38
  }
35
- return { ok: false, label: "sqlite-vec (falling back to brute-force search)", hint: "Run: abmind install or cd ~/.abmind/lib && npm install sqlite-vec" };
39
+ return { ok: false, label: "sqlite-vec (falling back to brute-force search)", hint: "Run: abtars deps install" };
36
40
  }
37
41
  function printHealthSummary(home) {
38
42
  const items = [
@@ -54,4 +58,4 @@ function printHealthSummary(home) {
54
58
  export {
55
59
  printHealthSummary
56
60
  };
57
- //# sourceMappingURL=health-check-FRUNRVNQ.js.map
61
+ //# sourceMappingURL=health-check-ASRLUJE5.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/cli/commands/health-check.ts"],
4
+ "sourcesContent": ["/**\n * Post-install/update health summary \u2014 detect missing external deps.\n */\n\nimport { execFileSync } from \"node:child_process\";\nimport { join } from \"node:path\";\nimport { existsSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\n\ninterface HealthItem {\n ok: boolean;\n label: string;\n hint?: string;\n}\n\nfunction checkOllama(): HealthItem {\n try {\n execFileSync(\"ollama\", [\"--version\"], { timeout: 5000, stdio: \"pipe\" });\n return { ok: true, label: \"Ollama\" };\n } catch {\n return { ok: false, label: \"Ollama (memory embeddings disabled)\", hint: \"Install: curl -fsSL https://ollama.com/install.sh | sh\" };\n }\n}\n\nfunction checkEmbeddingModel(): HealthItem {\n try {\n const out = execFileSync(\"ollama\", [\"list\"], { timeout: 10000, stdio: \"pipe\", encoding: \"utf-8\" });\n if (out.includes(\"nomic-embed-text\")) {\n return { ok: true, label: \"Embedding model (nomic-embed-text)\" };\n }\n return { ok: false, label: \"Embedding model missing\", hint: \"Run: ollama pull nomic-embed-text\" };\n } catch {\n return { ok: false, label: \"Embedding model (ollama not reachable)\", hint: \"Start ollama, then: ollama pull nomic-embed-text\" };\n }\n}\n\nfunction checkSqliteVec(home: string): HealthItem {\n const sharedNm = join(homedir(), \".local\", \"lib\", \"node_modules\", \"sqlite-vec\");\n if (existsSync(sharedNm)) {\n return { ok: true, label: \"sqlite-vec (vector search)\" };\n }\n const abmindLib = join(process.env[\"ABMIND_HOME\"] ?? join(homedir(), \".abmind\"), \"lib\", \"node_modules\", \"sqlite-vec\");\n const bundleNm = join(home, \"current\", \"node_modules\", \"sqlite-vec\");\n if (existsSync(abmindLib) || existsSync(bundleNm)) {\n return { ok: true, label: \"sqlite-vec (vector search)\" };\n }\n return { ok: false, label: \"sqlite-vec (falling back to brute-force search)\", hint: \"Run: abtars deps install\" };\n}\n\nexport function printHealthSummary(home: string): void {\n const items: HealthItem[] = [\n { ok: true, label: `Node.js ${process.versions.node}` },\n checkOllama(),\n checkEmbeddingModel(),\n checkSqliteVec(home),\n ];\n\n process.stdout.write(\"\\n\u2500\u2500 Dependency health \u2500\u2500\\n\");\n for (const item of items) {\n const icon = item.ok ? \"\u2713\" : \"\u26A0\uFE0F \";\n process.stdout.write(` ${icon} ${item.label}\\n`);\n if (item.hint) process.stdout.write(` ${item.hint}\\n`);\n }\n process.stdout.write(\"\\n\");\n}\n"],
5
+ "mappings": ";;;;;AAIA,SAAS,oBAAoB;AAC7B,SAAS,YAAY;AACrB,SAAS,kBAAkB;AAC3B,SAAS,eAAe;AAQxB,SAAS,cAA0B;AACjC,MAAI;AACF,iBAAa,UAAU,CAAC,WAAW,GAAG,EAAE,SAAS,KAAM,OAAO,OAAO,CAAC;AACtE,WAAO,EAAE,IAAI,MAAM,OAAO,SAAS;AAAA,EACrC,QAAQ;AACN,WAAO,EAAE,IAAI,OAAO,OAAO,uCAAuC,MAAM,yDAAyD;AAAA,EACnI;AACF;AAEA,SAAS,sBAAkC;AACzC,MAAI;AACF,UAAM,MAAM,aAAa,UAAU,CAAC,MAAM,GAAG,EAAE,SAAS,KAAO,OAAO,QAAQ,UAAU,QAAQ,CAAC;AACjG,QAAI,IAAI,SAAS,kBAAkB,GAAG;AACpC,aAAO,EAAE,IAAI,MAAM,OAAO,qCAAqC;AAAA,IACjE;AACA,WAAO,EAAE,IAAI,OAAO,OAAO,2BAA2B,MAAM,oCAAoC;AAAA,EAClG,QAAQ;AACN,WAAO,EAAE,IAAI,OAAO,OAAO,0CAA0C,MAAM,mDAAmD;AAAA,EAChI;AACF;AAEA,SAAS,eAAe,MAA0B;AAChD,QAAM,WAAW,KAAK,QAAQ,GAAG,UAAU,OAAO,gBAAgB,YAAY;AAC9E,MAAI,WAAW,QAAQ,GAAG;AACxB,WAAO,EAAE,IAAI,MAAM,OAAO,6BAA6B;AAAA,EACzD;AACA,QAAM,YAAY,KAAK,QAAQ,IAAI,aAAa,KAAK,KAAK,QAAQ,GAAG,SAAS,GAAG,OAAO,gBAAgB,YAAY;AACpH,QAAM,WAAW,KAAK,MAAM,WAAW,gBAAgB,YAAY;AACnE,MAAI,WAAW,SAAS,KAAK,WAAW,QAAQ,GAAG;AACjD,WAAO,EAAE,IAAI,MAAM,OAAO,6BAA6B;AAAA,EACzD;AACA,SAAO,EAAE,IAAI,OAAO,OAAO,mDAAmD,MAAM,2BAA2B;AACjH;AAEO,SAAS,mBAAmB,MAAoB;AACrD,QAAM,QAAsB;AAAA,IAC1B,EAAE,IAAI,MAAM,OAAO,WAAW,QAAQ,SAAS,IAAI,GAAG;AAAA,IACtD,YAAY;AAAA,IACZ,oBAAoB;AAAA,IACpB,eAAe,IAAI;AAAA,EACrB;AAEA,UAAQ,OAAO,MAAM,iDAA6B;AAClD,aAAW,QAAQ,OAAO;AACxB,UAAM,OAAO,KAAK,KAAK,WAAM;AAC7B,YAAQ,OAAO,MAAM,KAAK,IAAI,IAAI,KAAK,KAAK;AAAA,CAAI;AAChD,QAAI,KAAK,KAAM,SAAQ,OAAO,MAAM,QAAQ,KAAK,IAAI;AAAA,CAAI;AAAA,EAC3D;AACA,UAAQ,OAAO,MAAM,IAAI;AAC3B;",
6
+ "names": []
7
+ }
@@ -5,12 +5,13 @@ import {
5
5
  getHeartbeatInstance,
6
6
  init_heartbeat_system,
7
7
  setHeartbeatInstance
8
- } from "./chunk-DNDYD5SL.js";
9
- import "./chunk-W726UGI6.js";
8
+ } from "./chunk-E7DZYCSF.js";
9
+ import "./chunk-ZKMKAO75.js";
10
10
  import "./chunk-N5KN3LGD.js";
11
- import "./chunk-WP7FZHMI.js";
12
- import "./chunk-OOKNHOCB.js";
13
- import "./chunk-H2K23MOF.js";
11
+ import "./chunk-W2PSVV2T.js";
12
+ import "./chunk-6S3G6GPO.js";
13
+ import "./chunk-7XXISOHU.js";
14
+ import "./chunk-2BXXQG7P.js";
14
15
  import "./chunk-7K2YZTLD.js";
15
16
  init_heartbeat_system();
16
17
  export {
@@ -18,4 +19,4 @@ export {
18
19
  getHeartbeatInstance,
19
20
  setHeartbeatInstance
20
21
  };
21
- //# sourceMappingURL=heartbeat-system-G4IFQXT6.js.map
22
+ //# sourceMappingURL=heartbeat-system-MUXLT4E6.js.map
@@ -4,7 +4,7 @@ import {
4
4
  loadFixes,
5
5
  recordResult,
6
6
  shouldAttempt
7
- } from "./chunk-FVUL44T4.js";
7
+ } from "./chunk-CNENVY37.js";
8
8
  import {
9
9
  checkCron,
10
10
  clearPendingReminders,
@@ -17,40 +17,40 @@ import {
17
17
  createMetricsTask,
18
18
  createUserSessionExpiryTask,
19
19
  readPendingReminders
20
- } from "./chunk-NP72ZB7P.js";
21
- import "./chunk-M6Q3IQ4H.js";
22
- import "./chunk-LE23VPN3.js";
23
- import "./chunk-J5NOL4DB.js";
20
+ } from "./chunk-AMUJEP6L.js";
21
+ import "./chunk-FF2F7ENH.js";
22
+ import "./chunk-63A7ZRIH.js";
23
+ import "./chunk-DJOSXXM2.js";
24
24
  import "./chunk-ZAA7B5BN.js";
25
- import "./chunk-ZOCEBV62.js";
26
- import "./chunk-37EX63K4.js";
27
- import "./chunk-JAJ3DUQ2.js";
28
- import "./chunk-7WHXTCVD.js";
29
- import "./chunk-HAZHNBBY.js";
30
- import "./chunk-YWZPKBO6.js";
25
+ import "./chunk-UU3RLJSD.js";
26
+ import "./chunk-YWHJJHJ2.js";
27
+ import "./chunk-QOGZ7BFL.js";
28
+ import {
29
+ readEnvWithDefault
30
+ } from "./chunk-OWPQIBAO.js";
31
+ import "./chunk-6IB3GVXK.js";
32
+ import "./chunk-HWFN7JGU.js";
31
33
  import {
32
34
  init_spin,
33
35
  spin_exports
34
- } from "./chunk-GCFIK6OB.js";
35
- import "./chunk-4HNCOQSK.js";
36
- import {
37
- readEnvWithDefault
38
- } from "./chunk-V6CV3QPH.js";
39
- import "./chunk-56D3Y44D.js";
40
- import "./chunk-T7TAWGBX.js";
41
- import "./chunk-S7ZIGIR5.js";
42
- import "./chunk-O4GKI3Q3.js";
43
- import "./chunk-4PIVWXUJ.js";
44
- import "./chunk-W726UGI6.js";
45
- import "./chunk-S6HEHCCG.js";
46
- import "./chunk-YME7NRGP.js";
47
- import "./chunk-TY26WMQY.js";
36
+ } from "./chunk-FSGICOCX.js";
37
+ import "./chunk-YWZPKBO6.js";
38
+ import "./chunk-KLG4SCF7.js";
39
+ import "./chunk-RCWQ34QR.js";
48
40
  import {
49
41
  init_user_registry,
50
42
  loadUsers
51
- } from "./chunk-43DKPXTP.js";
52
- import "./chunk-ZY6DH2S4.js";
53
- import "./chunk-HDOFJVFS.js";
43
+ } from "./chunk-7LORCJCQ.js";
44
+ import "./chunk-52PQM4EZ.js";
45
+ import "./chunk-X7DLKIQM.js";
46
+ import "./chunk-2ZD7VQRW.js";
47
+ import "./chunk-R76K6L6H.js";
48
+ import "./chunk-ZKMKAO75.js";
49
+ import "./chunk-RO3TAYBR.js";
50
+ import "./chunk-GFAJSPMD.js";
51
+ import "./chunk-B2TIRDZC.js";
52
+ import "./chunk-WTIGZO3N.js";
53
+ import "./chunk-7OI46MH7.js";
54
54
  import {
55
55
  init_local_time,
56
56
  localISO
@@ -58,23 +58,24 @@ import {
58
58
  import {
59
59
  getEnv,
60
60
  init_env_schema
61
- } from "./chunk-SSCGWDIC.js";
61
+ } from "./chunk-BWJ37KMW.js";
62
62
  import {
63
63
  init_log_and_swallow,
64
64
  logAndSwallow
65
- } from "./chunk-WP7FZHMI.js";
65
+ } from "./chunk-W2PSVV2T.js";
66
66
  import {
67
67
  getLogFile,
68
68
  init_logger,
69
69
  logDebug,
70
70
  logInfo,
71
71
  logWarn
72
- } from "./chunk-OOKNHOCB.js";
72
+ } from "./chunk-6S3G6GPO.js";
73
73
  import "./chunk-DGS7J4P6.js";
74
74
  import {
75
75
  abtarsHome,
76
76
  init_paths
77
- } from "./chunk-H2K23MOF.js";
77
+ } from "./chunk-7XXISOHU.js";
78
+ import "./chunk-2BXXQG7P.js";
78
79
  import {
79
80
  __toCommonJS
80
81
  } from "./chunk-7K2YZTLD.js";
@@ -207,7 +208,7 @@ function handleKnownFault(rule, _errorKey, adapter, chatId, dryRun) {
207
208
  notify(adapter, chatId, `\u26A0\uFE0F Wired fix failed 3x for "${rule.pattern}" \u2014 suppressed 24h. Manual intervention needed.`);
208
209
  }
209
210
  } else if (rule.verified === false) {
210
- notify(adapter, chatId, `\u{1F527} Self-fix ran: "${rule.pattern}" \u2192 ${rule.command.join(" ")} \u2713
211
+ notify(adapter, chatId, `\u{1F527} Self-fix ran: "${rule.pattern}" \u2192 ${(rule.command ?? []).join(" ")} \u2713
211
212
  Run /healing approve ${rule.pattern.slice(0, 20)} to silence.`);
212
213
  }
213
214
  });
@@ -265,7 +266,7 @@ Do NOT attempt to fix code you don't understand.`;
265
266
  }, 5 * 6e4);
266
267
  (async () => {
267
268
  try {
268
- const { spin } = await import("./spin-4DBYHS3E.js");
269
+ const { spin } = await import("./spin-76K4R6FK.js");
269
270
  const { result } = await spin.dispatchAwait({ type: "H", goal: prompt, title: `SHA: ${errorKey.slice(0, 20)}`, source: "agent" });
270
271
  recordResult("autofix-unknown", errorKey, true);
271
272
  logAutoFix(`AGENT OK: ${errorKey} \u2192 ${result.slice(0, 200)}`);
@@ -297,7 +298,7 @@ function createModelHealthTask(ctx) {
297
298
  const execute = async () => {
298
299
  if (done) return;
299
300
  done = true;
300
- const { loadTransport, resolveAgent, consumeRepairs } = await import("./transport-config-OK3MZPJK.js");
301
+ const { loadTransport, resolveAgent, consumeRepairs } = await import("./transport-config-SF6GBV47.js");
301
302
  const tc = loadTransport();
302
303
  if (!tc) return;
303
304
  const repairs = consumeRepairs();
@@ -357,7 +358,7 @@ function createModelHealthTask(ctx) {
357
358
  }
358
359
  }
359
360
  if (warnings.length > 0) {
360
- const { sendNotification } = await import("./notification-VV2OR6NW.js");
361
+ const { sendNotification } = await import("./notification-JQNVGICN.js");
361
362
  sendNotification(ctx, `\u{1F3E5} Model health check:
362
363
  ${warnings.join("\n")}
363
364
  Subagents will fall back to main model.`);
@@ -448,10 +449,10 @@ async function registerTier3Tasks(ctx) {
448
449
  },
449
450
  chatId: () => String(masterChatId)
450
451
  }));
451
- import("./nerve-VZNMFDGY.js").then(({ nerve }) => {
452
+ import("./nerve-TC34H4EL.js").then(({ nerve }) => {
452
453
  nerve.on("card:done", async (cardId) => {
453
454
  try {
454
- const { kanbanPending, kanbanSetDelivering, kanbanMarkDelivered } = await import("./kanban-board-J6RO3ZU7.js");
455
+ const { kanbanPending, kanbanSetDelivering, kanbanMarkDelivered } = await import("./kanban-board-4AI5Z6B5.js");
455
456
  const pending = kanbanPending();
456
457
  const card = pending.find((c) => c.id === cardId);
457
458
  if (!card) return;
@@ -504,15 +505,15 @@ ${String(meta.message ?? "").slice(0, 200)}`);
504
505
  });
505
506
  heartbeat.registerTask(createMetricsTask(() => cronQueue.pending));
506
507
  heartbeat.registerTask(createUserSessionExpiryTask());
507
- import("./reconciler-FFQGV4DO.js").then(({ startReconciler }) => {
508
+ import("./reconciler-7LOOUK43.js").then(({ startReconciler }) => {
508
509
  startReconciler();
509
510
  }).catch((err) => logAndSwallow(TAG, "reconciler", err));
510
- import("./spin-4DBYHS3E.js").then(({ spin }) => {
511
+ import("./spin-76K4R6FK.js").then(({ spin }) => {
511
512
  heartbeat.registerTask({ name: "spin-tick", execute: () => spin.tick() });
512
513
  }).catch((err) => logAndSwallow(TAG, "spin-tick", err));
513
514
  {
514
515
  const { spin: spinRef } = (init_spin(), __toCommonJS(spin_exports));
515
- heartbeat.registerTask({ name: "busy-unstick", execute: () => {
516
+ heartbeat.registerTask({ name: "busy-unstick", execute: async () => {
516
517
  const now = Date.now();
517
518
  for (const s of spinRef.listAllSessions()) {
518
519
  if (s.busy && s.lastActiveAt && now - s.lastActiveAt > 6e4) {
@@ -526,7 +527,7 @@ ${String(meta.message ?? "").slice(0, 200)}`);
526
527
  }
527
528
  } });
528
529
  }
529
- import("./gossip-CS3G3447.js").then(({ gossipBroadcast, setGossipInterval }) => {
530
+ import("./gossip-VSEY2HSE.js").then(({ gossipBroadcast, setGossipInterval }) => {
530
531
  setGossipInterval(heartbeat.intervalMs);
531
532
  heartbeat.registerTask({ name: "gossip-health", execute: async () => {
532
533
  gossipBroadcast();
@@ -542,7 +543,7 @@ ${String(meta.message ?? "").slice(0, 200)}`);
542
543
  }
543
544
  ctx.selfHealerTask = selfHealerTask;
544
545
  pipelineDeps.selfHealerTask = selfHealerTask;
545
- const { registerCommand } = await import("./commands-XXFU2ZF7.js");
546
+ const { registerCommand } = await import("./commands-2JQ5YTJX.js");
546
547
  for (const [name, handler] of capabilities.commands) {
547
548
  registerCommand(name, handler);
548
549
  }
@@ -558,4 +559,4 @@ ${String(meta.message ?? "").slice(0, 200)}`);
558
559
  export {
559
560
  registerTier3Tasks
560
561
  };
561
- //# sourceMappingURL=heartbeat-tier3-3ZO3EVXP.js.map
562
+ //# sourceMappingURL=heartbeat-tier3-636ZMM4E.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/boot/heartbeat-tier3.ts", "../src/components/self-healer.ts", "../src/boot/heartbeat-model-health.ts"],
4
+ "sourcesContent": ["/**\n * heartbeat-tier3.ts \u2014 Register Tier 3 heartbeat tasks.\n *\n * Called from phasePipelineDeps after transport+platforms+cronQueue are ready.\n * These tasks need transport, memory, cronQueue, or platform adapters.\n */\n\nimport { getEnv } from \"../components/env-schema.js\";\nimport { logAndSwallow } from \"../components/log-and-swallow.js\";\nimport { createSelfHealerTask } from \"../components/self-healer.js\";\nimport {\n createIdleCompactTask, createAgeCheckTask, createDbIntegrityTask,\n createKanbanDeliveryTask, createKanbanCleanupTask, createUserSessionExpiryTask, createMetricsTask,\n} from \"../components/heartbeat-tasks.js\";\nimport { checkCron, readPendingReminders, clearPendingReminders } from \"../components/tasks/task-checker.js\";\nimport { loadUsers } from \"../components/user-registry.js\";\nimport { logInfo, logWarn } from \"../components/logger.js\";\nimport { abtarsHome } from \"../paths.js\";\nimport { createCronCallback } from \"./phase-pipeline-deps.js\";\nimport { createModelHealthTask } from \"./heartbeat-model-health.js\";\nimport { readEnvWithDefault } from \"../components/env.js\";\nimport type { BootCtx } from \"./context.js\";\n\nconst TAG = \"heartbeat\";\n\nexport async function registerTier3Tasks(ctx: BootCtx): Promise<void> {\n const { heartbeat, transport, cronQueue, memory, memoryConfig, config, pipelineDeps, capabilities } = ctx;\n if (!heartbeat || !transport || !cronQueue || !pipelineDeps) return;\n\n const cronCallback = createCronCallback(ctx);\n\n heartbeat.registerTask({\n name: \"tasks\",\n execute: async () => {\n const dueTasks = checkCron();\n for (const entry of dueTasks) cronQueue.enqueue(entry, cronCallback);\n },\n });\n\n heartbeat.registerTask({\n name: \"reminder-injector\",\n execute: async () => {\n const reminders = readPendingReminders();\n if (reminders.length === 0) return;\n clearPendingReminders();\n for (const r of reminders) {\n logInfo(\"main\", `Injecting reminder for chat ${r.chatId}: \"${r.message}\"`);\n if (ctx.telegramAdapter) {\n ctx.telegramAdapter.injectMessage({\n platform: \"telegram\",\n channelId: String(r.chatId),\n userId: loadUsers().byPlatformId.get(\"telegram:\" + r.chatId)?.userId ?? \"master\",\n senderId: String(r.chatId),\n senderName: \"task\",\n text: `[Scheduled reminder] ${r.message}`,\n timestamp: Date.now(),\n threadId: r.threadId ? String(r.threadId) : undefined,\n isGroup: false,\n isVoice: false,\n });\n }\n }\n },\n });\n\n const SLEEP_HOUR = parseInt(readEnvWithDefault(\"BED_TIME\", \"2\", \"bedtime hour\").split(\":\")[0] ?? \"2\", 10);\n const SLEEP_MINUTE = parseInt(readEnvWithDefault(\"BED_TIME\", \"2\", \"bedtime hour\").split(\":\")[1] ?? \"0\", 10);\n\n if (getEnv().ctxIdleCompactMin > 0) {\n heartbeat.registerTask(createIdleCompactTask({\n transport, memory, memoryDir: memoryConfig.memoryDir,\n allowedUserIds: config.telegram.allowedUserIds,\n isSleepActive: ctx.isSleepActive,\n }));\n }\n\n heartbeat.registerTask(createAgeCheckTask({\n memory,\n bridgeLockPath: ctx.bridgeLockPath,\n sleepAuditDir: ctx.sleepAuditDir,\n sleepHour: SLEEP_HOUR,\n sleepMinute: SLEEP_MINUTE,\n isSleepActive: ctx.isSleepActive,\n // doctorPath removed \u2014 runFixes() called directly from heartbeat-tasks.ts\n startSleep: () => { ctx.sleepHandle?.spawn(); },\n checkHwSleep: () => { ctx.sleepHandle?.checkHwSleep(); },\n checkStaleSleep: () => { ctx.sleepHandle?.checkStale(); },\n cronBusy: () => cronQueue.currentJob !== null || cronQueue.pending > 0,\n }));\n\n heartbeat.registerTask(createDbIntegrityTask(memory));\n\n const masterChatId = [...config.telegram.allowedUserIds][0] ?? 0;\n heartbeat.registerTask(createKanbanDeliveryTask({\n sendSystemMessage: ctx.sendSystemMessage!,\n sendMessage: async (chatId, text) => {\n if (!ctx.telegramAdapter) return;\n await ctx.telegramAdapter.sendMessage(chatId, text);\n },\n sendDocument: async (chatId, filePath, caption) => {\n if (!ctx.telegramAdapter) return;\n await ctx.telegramAdapter.sendDocument(chatId, filePath, caption);\n },\n chatId: () => String(masterChatId),\n }));\n\n // Nerve-driven instant delivery\n import(\"../components/nerve.js\").then(({ nerve }) => {\n nerve.on(\"card:done\", async (cardId: number) => {\n try {\n const { kanbanPending, kanbanSetDelivering, kanbanMarkDelivered } = await import(\"../components/tasks/kanban-board.js\");\n const pending = kanbanPending();\n const card = pending.find((c: { id: number }) => c.id === cardId);\n if (!card) return;\n\n kanbanSetDelivering(card.id);\n const targetChat = card.chat_id || String(masterChatId);\n\n if (card.delivery_mode === \"silent\") {\n kanbanMarkDelivered(card.id);\n return;\n }\n\n if (card.delivery_mode === \"deliver\") {\n if (ctx.telegramAdapter) {\n if (card.result_path) await ctx.telegramAdapter.sendDocument(targetChat, card.result_path, card.title);\n }\n if (ctx.sendSystemMessage) {\n await ctx.sendSystemMessage(`[SYSTEM] Task \"${card.title}\" complete. File delivered: ${card.result_path ?? \"(no file)\"}`);\n }\n kanbanMarkDelivered(card.id);\n return;\n }\n\n // \"announce\" \u2014 inject into agent for natural delivery\n if (ctx.sendSystemMessage) {\n await ctx.sendSystemMessage(\n `[TASK COMPLETE] \"${card.title}\" done.\\nResult:\\n${card.result_summary ?? \"(no output)\"}\\n\\nDeliver this to the user naturally.`\n );\n }\n kanbanMarkDelivered(card.id);\n } catch (err) { logAndSwallow(TAG, \"nerve:card:done delivery\", err); }\n });\n\n nerve.on(\"channel:message\", async (_cardId: number, meta?: Record<string, unknown>) => {\n if (!meta || (meta.to as string)?.toUpperCase() !== \"MASTER\") return;\n if (!ctx.telegramAdapter) return;\n try {\n const from = meta.from as string ?? \"agent\";\n await ctx.telegramAdapter.sendMessage(String(masterChatId), `[${from}->MASTER] card:${_cardId}\\n${String(meta.message ?? \"\").slice(0, 200)}`);\n } catch (err) { logAndSwallow(TAG, \"nerve:channel:message TG notify\", err); }\n });\n }).catch(err => logAndSwallow(TAG, \"nerve import\", err));\n\n heartbeat.registerTask(createKanbanCleanupTask());\n\n import(\"../components/metrics-collector.js\").then(({ initMetrics }) => {\n initMetrics(abtarsHome());\n }).catch(() => {});\n heartbeat.registerTask(createMetricsTask(() => cronQueue.pending));\n\n heartbeat.registerTask(createUserSessionExpiryTask());\n\n // Reconciler\n import(\"../components/reconciler.js\").then(({ startReconciler }) => {\n startReconciler();\n }).catch(err => logAndSwallow(TAG, \"reconciler\", err));\n\n // Spin tick\n import(\"../components/spin.js\").then(({ spin }) => {\n heartbeat.registerTask({ name: \"spin-tick\", execute: () => spin.tick() });\n }).catch(err => logAndSwallow(TAG, \"spin-tick\", err));\n\n // Busy-unstick\n {\n const { spin: spinRef } = require(\"../components/spin.js\") as typeof import(\"../components/spin.js\");\n heartbeat.registerTask({ name: \"busy-unstick\", execute: async () => {\n const now = Date.now();\n for (const s of spinRef.listAllSessions()) {\n if (s.busy && s.lastActiveAt && now - s.lastActiveAt > 60_000) {\n if (transport && \"sendInterrupt\" in transport) {\n (transport as { sendInterrupt: (r?: string) => Promise<void> }).sendInterrupt(\"timeout\").catch(() => {});\n }\n s.busy = false;\n logWarn(TAG, `Force-cleared stuck busy on ${s.id} (>60s) \u2014 interrupted`);\n }\n }\n }});\n }\n\n // Gossip\n import(\"../components/peer-transport/gossip.js\").then(({ gossipBroadcast, setGossipInterval }) => {\n setGossipInterval(heartbeat.intervalMs);\n heartbeat.registerTask({ name: \"gossip-health\", execute: async () => { gossipBroadcast(); } });\n }).catch(err => logAndSwallow(TAG, \"gossip\", err));\n\n if (transport.healthCheck) {\n heartbeat.registerTask({ name: \"transport-health\", execute: () => transport.healthCheck!() });\n }\n\n // Self-healer\n let selfHealerTask: ReturnType<typeof createSelfHealerTask> | null = null;\n if (getEnv().selfhealEnabled) {\n selfHealerTask = createSelfHealerTask(() => ctx.telegramAdapter, config.telegram.allowedUserIds);\n heartbeat.registerTask(selfHealerTask);\n }\n ctx.selfHealerTask = selfHealerTask;\n pipelineDeps.selfHealerTask = selfHealerTask;\n\n // Capability tasks + commands\n const { registerCommand } = await import(\"../components/commands/index.js\");\n for (const [name, handler] of capabilities.commands) {\n registerCommand(name, handler);\n }\n for (const task of capabilities.heartbeatTasks) {\n heartbeat.registerTask(task);\n }\n\n // Model health\n const { task: modelHealthTask, runNow: runModelHealth } = createModelHealthTask(ctx);\n heartbeat.registerTask(modelHealthTask);\n queueMicrotask(() => { runModelHealth().catch(err => logAndSwallow(TAG, \"runModelHealth boot\", err)); });\n}\n", "/**\n * Self-healer heartbeat task \u2014 scans bridge log for ERROR lines (#954).\n *\n * Two-state dispatch:\n * 1. Known fault (pattern in sha-policy fixes) \u2192 wired command[], no LLM\n * 2. Unknown fault (no matching rule) \u2192 one-shot agent via Spin (if SELFHEAL_ENABLED)\n *\n * All gating via sha-tracker. No inline state.\n */\n\nimport { readFileSync, appendFileSync, mkdirSync, existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { spawn, execSync } from \"node:child_process\";\nimport { logInfo, logDebug } from \"./logger.js\";\nimport { getLogFile } from \"./logger.js\";\nimport { abtarsHome } from \"../paths.js\";\nimport { logAndSwallow } from \"./log-and-swallow.js\";\nimport { getEnv } from \"./env-schema.js\";\nimport { localISO } from \"../utils/local-time.js\";\nimport { loadFixes, shouldAttempt, recordResult } from \"./sha-tracker.js\";\nimport type { FixRule } from \"./sha-tracker.js\";\nimport type { HeartbeatTask } from \"../types/index.js\";\nimport type { TelegramAdapter } from \"../platforms/telegram/telegram-adapter.js\";\n\n/** Write SHA dispatch to sha-call.log (model reads this for recurrence detection). */\nfunction logShaCall(errorKey: string, errorLine: string): void {\n const logPath = join(abtarsHome(), \"logs\", \"sha-call.log\");\n const entry = JSON.stringify({ ts: localISO(), errorKey, errorLine: errorLine.slice(0, 300) });\n try { appendFileSync(logPath, entry + \"\\n\"); } catch {}\n}\n\n// Known-noise patterns are in sha-policy.json (seeded) \u2014 no hardcoded list.\n\nfunction logAutoFix(message: string): void {\n const dir = join(abtarsHome(), \"logs\");\n try { mkdirSync(dir, { recursive: true }); } catch (err) { logAndSwallow(\"self_healer\", \"op\", err); }\n const date = new Date().toISOString().slice(0, 10);\n appendFileSync(join(dir, `autofix-${date}.log`), `${localISO()} ${message}\\n`);\n}\n\nfunction notify(adapter: TelegramAdapter, chatId: string, msg: string): void {\n try { adapter.sendNotification(chatId, msg); } catch {}\n}\n\nexport function createSelfHealerTask(\n getTelegramAdapter: () => TelegramAdapter | null,\n allowedUserIds: Set<number>,\n): HeartbeatTask & { enabled: boolean } {\n let lastTs = localISO();\n let bridgeStartTs = \"\";\n let enabled = getEnv().selfhealEnabled;\n let agentRunning = false;\n const dryRun = process.env[\"SELFHEAL_DRY_RUN\"] === \"true\";\n\n const task: HeartbeatTask & { enabled: boolean } = {\n name: \"self-healer\",\n get enabled() { return enabled; },\n set enabled(v: boolean) { enabled = v; },\n execute: async () => {\n if (!enabled) return;\n const logFile = getLogFile();\n try {\n const content = readFileSync(logFile, \"utf-8\");\n const lines = content.split(\"\\n\");\n const fixes = loadFixes();\n\n if (!bridgeStartTs) {\n for (let i = lines.length - 1; i >= 0; i--) {\n if (lines[i]!.includes(\"BRIDGE START\")) { bridgeStartTs = lines[i]!.slice(0, 23); break; }\n }\n }\n\n const adapter = getTelegramAdapter();\n const chatId = String([...allowedUserIds][0] ?? \"\");\n if (!adapter || !chatId) return;\n\n for (let i = lines.length - 1; i >= 0; i--) {\n const line = lines[i]!;\n if (line.length < 24 || !line.includes(\" ERROR \")) continue;\n const ts = line.slice(0, 23);\n if (ts <= lastTs) break;\n if (bridgeStartTs && ts < bridgeStartTs) continue;\n if (line.includes(\"TEST \")) continue;\n\n const match = line.match(/\\[([^\\]]+)\\] (.+)/);\n if (!match) continue;\n const stableMsg = match[2]!.slice(0, 80)\n .replace(/\\b[0-9a-f]{8,}\\b/gi, \"X\")\n .replace(/\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}[:\\d.]*/g, \"T\")\n .replace(/\\b\\d{4,}\\b/g, \"N\")\n .replace(/\\s+/g, \" \").trim();\n const errorKey = `${match[1]}:${stableMsg}`;\n\n // Try to match a wired fix rule\n const rule = fixes.find(f => line.includes(f.pattern));\n if (rule) {\n handleKnownFault(rule, errorKey, adapter, chatId, dryRun);\n continue;\n }\n\n // Unknown fault \u2014 agent path (one-shot)\n if (!agentRunning) {\n handleUnknownFault(line, errorKey, adapter, chatId, () => { agentRunning = false; });\n if (!agentRunning) agentRunning = true; // set after dispatch\n }\n }\n\n // Advance watermark\n if (lines.length > 1) {\n const lastLine = lines[lines.length - 2] ?? \"\";\n if (lastLine.length >= 23) lastTs = lastLine.slice(0, 23);\n }\n } catch (err) { logAndSwallow(\"self_healer\", \"op\", err); }\n },\n };\n return task;\n}\n\nfunction handleKnownFault(rule: FixRule, _errorKey: string, adapter: TelegramAdapter, chatId: string, dryRun: boolean): void {\n if (!shouldAttempt(\"autofix-known\", rule.pattern)) return;\n\n // Suppress: known noise, skip silently\n if (rule.action === \"suppress\") {\n logDebug(\"self-healer\", `Suppressed: \"${rule.pattern}\"`);\n return;\n }\n\n if (!rule.command?.length) return;\n\n if (dryRun) {\n logInfo(\"self-healer\", `[DRY-RUN] Would run: ${rule.command.join(\" \")}`);\n return;\n }\n\n logInfo(\"self-healer\", `Wired fix: ${rule.command.join(\" \")} (pattern: \"${rule.pattern}\")`);\n logAutoFix(`WIRED START: ${rule.pattern} \u2192 ${rule.command.join(\" \")}`);\n\n const child = spawn(rule.command[0]!, rule.command.slice(1), { stdio: \"ignore\" });\n child.on(\"exit\", (code) => {\n const ok = code === 0;\n recordResult(\"autofix-known\", rule.pattern, ok, ok ? undefined : `exit ${code}`);\n logAutoFix(`WIRED ${ok ? \"OK\" : \"FAIL\"}: ${rule.pattern} (exit ${code})`);\n\n if (!ok) {\n // Check if we hit maxRetries \u2014 notify user\n if (!shouldAttempt(\"autofix-known\", rule.pattern)) {\n notify(adapter, chatId, `\u26A0\uFE0F Wired fix failed 3x for \"${rule.pattern}\" \u2014 suppressed 24h. Manual intervention needed.`);\n }\n } else if (rule.verified === false) {\n // Unverified self-rule first success \u2014 notify\n notify(adapter, chatId, `\uD83D\uDD27 Self-fix ran: \"${rule.pattern}\" \u2192 ${(rule.command ?? []).join(\" \")} \u2713\\nRun /healing approve ${rule.pattern.slice(0, 20)} to silence.`);\n }\n });\n}\n\nfunction handleUnknownFault(errorLine: string, errorKey: string, adapter: TelegramAdapter, chatId: string, onDone: () => void): void {\n if (!shouldAttempt(\"autofix-unknown\", errorKey)) return;\n\n // Skip dispatch during darkwake (deploy restart) or night hours\n const hour = new Date().getHours();\n if (hour < 7) { logDebug(\"self-healer\", `Skipping SHA dispatch \u2014 night hours (${hour}:xx)`); return; }\n try {\n const lock = JSON.parse(readFileSync(join(abtarsHome(), \"bridge.lock\"), \"utf-8\"));\n if (lock.bootType === \"darkwake\") { logDebug(\"self-healer\", \"Skipping SHA dispatch \u2014 darkwake boot\"); return; }\n } catch { /* proceed if unreadable */ }\n\n logInfo(\"self-healer\", `Unknown fault \u2014 dispatching agent: ${errorKey.slice(0, 60)}`);\n logAutoFix(`AGENT START: ${errorKey}`);\n logShaCall(errorKey, errorLine);\n\n // Ensure source is available for SHA to investigate\n const srcDir = join(abtarsHome(), \"src/abtars\");\n if (!existsSync(srcDir)) {\n try {\n mkdirSync(join(abtarsHome(), \"src\"), { recursive: true });\n execSync(`git clone -b dev git@github.com:aksika/abtars.git \"${srcDir}\"`, { timeout: 60_000, stdio: \"ignore\" });\n } catch { /* proceed without source */ }\n }\n\n const prompt = `A runtime error occurred:\\n\"${errorLine.slice(0, 500)}\"\\n\\nBefore investigating, check ~/.abtars/logs/sha-call.log for prior entries matching this error pattern.\\nIf you find a PREVIOUS entry with a similar error pattern:\\n - This is a recurring fault you could not eliminate last time.\\n - Add a suppress rule to ~/.abtars/config/sha-policy-self.json (read existing file, append to fixes array):\\n {\"pattern\": \"<plain substring from the error line>\", \"action\": \"suppress\"}\\n Pattern is matched via substring (includes), NOT regex. Use a distinctive fragment.\\n - Report: \"Recurring unfixable fault \u2014 suppressed.\"\\n - Do NOT attempt a fix.\\n\\nOtherwise, diagnose and fix it. After fixing:\\n1. Report what you did (1 paragraph)\\n2. If this error is likely to recur and you found a deterministic fix, write a wired rule to ~/.abtars/config/sha-policy-self.json:\\n {\"pattern\": \"<substring>\", \"action\": \"run\", \"command\": [...], \"cooldownMin\": 30}\\n Pattern is matched via substring (includes), NOT regex.\\n If the error was a one-off or no reliable automated fix exists, skip this step.\\n\\nIf you cannot find the root cause in the source code, tell the user:\\n\"This may be fixed in a newer version. Try /update to get the latest.\"\nDo NOT attempt to fix code you don't understand.`;\n\n const timeout = setTimeout(() => { onDone(); }, 5 * 60_000);\n\n (async () => {\n try {\n const { spin } = await import(\"./spin.js\");\n const { result } = await spin.dispatchAwait({ type: \"H\", goal: prompt, title: `SHA: ${errorKey.slice(0, 20)}`, source: \"agent\" });\n recordResult(\"autofix-unknown\", errorKey, true);\n logAutoFix(`AGENT OK: ${errorKey} \u2192 ${result.slice(0, 200)}`);\n notify(adapter, chatId, `\uD83E\uDDE0 SHA agent fixed: ${errorKey.slice(0, 40)}\\n${result.slice(0, 300)}`);\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n recordResult(\"autofix-unknown\", errorKey, false, msg);\n logAutoFix(`AGENT FAIL: ${errorKey} \u2192 ${msg}`);\n notify(adapter, chatId, `\u26A0\uFE0F SHA agent failed: ${errorKey.slice(0, 40)}\\n${msg.slice(0, 200)}`);\n } finally {\n clearTimeout(timeout);\n onDone();\n }\n })();\n}\n", "/**\n * heartbeat-model-health.ts \u2014 Model health check task.\n * Probes each configured model on first tick. Reports failures to Telegram.\n */\n\nimport { getEnv } from \"../components/env-schema.js\";\nimport { logInfo, logWarn } from \"../components/logger.js\";\nimport type { BootCtx } from \"./context.js\";\nimport type { HeartbeatTask } from \"../types/index.js\";\n\nexport function createModelHealthTask(ctx: BootCtx): { task: HeartbeatTask; runNow: () => Promise<void> } {\n let done = false;\n\n const execute = async (): Promise<void> => {\n if (done) return;\n done = true;\n const { loadTransport, resolveAgent, consumeRepairs } = await import(\"../components/transport-config.js\");\n const tc = loadTransport();\n if (!tc) return;\n\n const repairs = consumeRepairs();\n const warnings: string[] = [];\n if (repairs.length > 0) {\n for (const r of repairs) warnings.push(`\uD83D\uDD27 ${r.agent} auto-repaired: was ${r.oldProvider} \u2014 ${r.reason}`);\n }\n\n const prof = resolveAgent(\"professor\", tc);\n if (!prof) return;\n const profType = prof.provider.transport ?? \"api\";\n\n if (profType === \"api\") {\n const agents = [\"professor\", \"dreamy\", \"browsie\", \"coding\"] as const;\n const modelToAgents = new Map<string, string[]>();\n const modelToResolved = new Map<string, { endpoint: string; apiKey: string }>();\n for (const a of agents) {\n const r = resolveAgent(a, tc);\n if (!r) continue;\n if (!modelToAgents.has(r.model)) {\n modelToAgents.set(r.model, []);\n modelToResolved.set(r.model, { endpoint: r.provider.endpoint ?? \"http://localhost:11434/v1\", apiKey: getEnv().getApiKey(r.provider.apiKeyEnv ?? \"API_KEY\") ?? \"\" });\n }\n modelToAgents.get(r.model)!.push(a);\n }\n for (const [model, agentNames] of modelToAgents) {\n const { endpoint, apiKey } = modelToResolved.get(model)!;\n try {\n const res = await fetch(`${endpoint}/chat/completions`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\", ...(apiKey ? { Authorization: `Bearer ${apiKey}` } : {}) },\n body: JSON.stringify({ model, messages: [{ role: \"user\", content: \"hi\" }], max_tokens: 1 }),\n signal: AbortSignal.timeout(30_000),\n });\n if (!res.ok) {\n warnings.push(`\u26A0\uFE0F ${model} \u2014 ${res.status} ${res.statusText} (affects ${agentNames.join(\", \")})`);\n logWarn(\"model-health\", `${model} failed: ${res.status} (${agentNames.join(\", \")})`);\n } else {\n logInfo(\"model-health\", `\u2713 ${agentNames[0]}=${model}`);\n }\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n warnings.push(`\u26A0\uFE0F ${model} \u2014 ${msg} (affects ${agentNames.join(\", \")})`);\n logWarn(\"model-health\", `${model} unreachable: ${msg} (${agentNames.join(\", \")})`);\n }\n }\n } else if (profType === \"acp\" || profType === \"tmux\") {\n const transport = ctx.transport;\n if (transport && \"isConnected\" in transport && typeof (transport as { isConnected?: () => boolean }).isConnected === \"function\") {\n const connected = (transport as { isConnected: () => boolean }).isConnected();\n if (connected) {\n logInfo(\"model-health\", `\u2713 ${profType} transport connected`);\n } else {\n warnings.push(`\u26A0\uFE0F ${profType} transport not connected`);\n logWarn(\"model-health\", `${profType} transport not connected`);\n }\n } else {\n logInfo(\"model-health\", `\u2713 ${profType} transport (no isConnected check available)`);\n }\n }\n\n if (warnings.length > 0) {\n const { sendNotification } = await import(\"../components/notification.js\");\n sendNotification(ctx, `\uD83C\uDFE5 Model health check:\\n${warnings.join(\"\\n\")}\\nSubagents will fall back to main model.`);\n }\n };\n\n return { task: { name: \"model-health\", execute }, runNow: execute };\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -5,9 +5,10 @@ import {
5
5
  getHookSummary,
6
6
  hasHooks,
7
7
  loadHookConfig
8
- } from "./chunk-7WHXTCVD.js";
9
- import "./chunk-OOKNHOCB.js";
10
- import "./chunk-H2K23MOF.js";
8
+ } from "./chunk-HWFN7JGU.js";
9
+ import "./chunk-6S3G6GPO.js";
10
+ import "./chunk-7XXISOHU.js";
11
+ import "./chunk-2BXXQG7P.js";
11
12
  import "./chunk-7K2YZTLD.js";
12
13
  export {
13
14
  fire,
@@ -15,4 +16,4 @@ export {
15
16
  hasHooks,
16
17
  loadHookConfig
17
18
  };
18
- //# sourceMappingURL=hook-system-X6INNJGV.js.map
19
+ //# sourceMappingURL=hook-system-Z4XD6IM5.js.map
@@ -5,11 +5,12 @@ import {
5
5
  init_hotskills,
6
6
  register,
7
7
  reloadCatalog
8
- } from "./chunk-IK4R3RBZ.js";
9
- import "./chunk-FIAVVKGN.js";
10
- import "./chunk-WP7FZHMI.js";
11
- import "./chunk-OOKNHOCB.js";
12
- import "./chunk-H2K23MOF.js";
8
+ } from "./chunk-YZCOA4DC.js";
9
+ import "./chunk-MTE32OQH.js";
10
+ import "./chunk-W2PSVV2T.js";
11
+ import "./chunk-6S3G6GPO.js";
12
+ import "./chunk-7XXISOHU.js";
13
+ import "./chunk-2BXXQG7P.js";
13
14
  import "./chunk-7K2YZTLD.js";
14
15
  init_hotskills();
15
16
  export {
@@ -17,4 +18,4 @@ export {
17
18
  register,
18
19
  reloadCatalog
19
20
  };
20
- //# sourceMappingURL=hotskills-6FQYTJIO.js.map
21
+ //# sourceMappingURL=hotskills-AOUWVTQB.js.map
@@ -4,15 +4,15 @@ import {
4
4
  emptyManifest,
5
5
  readManifest,
6
6
  writeManifest
7
- } from "./chunk-EDZGF6BC.js";
7
+ } from "./chunk-QJPDBJDP.js";
8
8
  import {
9
9
  packagePaths,
10
- resolveUserBinDir
11
- } from "./chunk-C3EYYJN3.js";
10
+ resolveReleasesDir
11
+ } from "./chunk-2BXXQG7P.js";
12
12
  import "./chunk-7K2YZTLD.js";
13
13
 
14
14
  // src/cli/commands/install.ts
15
- import { mkdir, readFile, stat, symlink, writeFile } from "node:fs/promises";
15
+ import { mkdir, readFile, stat, writeFile } from "node:fs/promises";
16
16
  import { existsSync, readFileSync, readdirSync, copyFileSync, mkdirSync, realpathSync } from "node:fs";
17
17
  import { hostname, homedir as _homedir } from "node:os";
18
18
  import { execSync } from "node:child_process";
@@ -37,7 +37,7 @@ async function exists(p) {
37
37
  }
38
38
  }
39
39
  async function createSkeleton(home, dryRun) {
40
- const { loadManifest } = await import("./install-manifest-QX7KVDCA.js");
40
+ const { loadManifest } = await import("./install-manifest-624KOB4S.js");
41
41
  const manifest = loadManifest();
42
42
  const dirs = manifest.directories.map((d) => join(home, d.path));
43
43
  if (dryRun) {
@@ -51,7 +51,7 @@ async function createSkeleton(home, dryRun) {
51
51
  }
52
52
  }
53
53
  async function seedConfig(repoRoot, _configDir, dryRun, home) {
54
- const { loadManifest } = await import("./install-manifest-QX7KVDCA.js");
54
+ const { loadManifest } = await import("./install-manifest-624KOB4S.js");
55
55
  const manifest = loadManifest(repoRoot);
56
56
  const seeded = [];
57
57
  for (const seed of manifest.configSeeds) {
@@ -78,18 +78,18 @@ export NODE_PATH="$HOME/.local/lib/node_modules:\${NODE_PATH:-}"
78
78
  let content;
79
79
  if (name === "abmind") {
80
80
  content = `#!/usr/bin/env bash
81
- ${pathPreamble}# Resolve abmind CLI \u2014 no ~/.abmind/current dependency (#863)
82
- BUNDLE_CLI="$HOME/.abtars/app/node_modules/abmind/dist/cli/abmind.js"
83
- SRC_CLI="$HOME/.abtars-releases/src/abmind/dist/cli/abmind.js"
81
+ ${pathPreamble}# Resolve abmind CLI \u2014 global install is canonical under #1243 (no longer bundled in the release)
82
+ LOCAL_CLI="$HOME/.local/lib/node_modules/abmind/dist/cli/abmind.js"
84
83
  GLOBAL_CLI="$(npm root -g 2>/dev/null)/abmind/dist/cli/abmind.js"
85
- if [ -f "$BUNDLE_CLI" ]; then
86
- exec node "$BUNDLE_CLI" "$@"
87
- elif [ -f "$SRC_CLI" ]; then
88
- exec node "$SRC_CLI" "$@"
84
+ SRC_CLI="$HOME/.abtars-releases/src/abmind/dist/cli/abmind.js"
85
+ if [ -f "$LOCAL_CLI" ]; then
86
+ exec node "$LOCAL_CLI" "$@"
89
87
  elif [ -f "$GLOBAL_CLI" ]; then
90
88
  exec node "$GLOBAL_CLI" "$@"
89
+ elif [ -f "$SRC_CLI" ]; then
90
+ exec node "$SRC_CLI" "$@"
91
91
  else
92
- echo "abmind: not found. Install via npm or deploy via abtars update." >&2
92
+ echo "abmind: not found. Install via: npm install -g abmind" >&2
93
93
  exit 1
94
94
  fi
95
95
  `;
@@ -132,7 +132,6 @@ function isPathOnPATH(userBinDir) {
132
132
  async function install(opts) {
133
133
  const paths = packagePaths("abtars");
134
134
  const home = paths.home;
135
- const userBinDir = resolveUserBinDir();
136
135
  const repoRoot = join(dirname(realpathSync(process.argv[1] ?? fileURLToPath(import.meta.url))), "..");
137
136
  const { initInstallLog, logInstall, logInstallHeader } = await import("./install-log-Q6RUHKWC.js");
138
137
  initInstallLog(home);
@@ -184,6 +183,10 @@ Use 'abtars update' to upgrade, or --force to re-seed missing config.
184
183
  await createSkeleton(home, opts.dryRun);
185
184
  process.stdout.write(`\u2713 skeleton at ${home}
186
185
  `);
186
+ if (!opts.dryRun) {
187
+ const deps = await import("./deps-VB3S3RLF.js");
188
+ await deps.deps(["install", "native"]);
189
+ }
187
190
  const identityKey = join(paths.config, "identity.key");
188
191
  const identityPub = join(paths.config, "identity.pub");
189
192
  if (!opts.dryRun && !await exists(identityKey)) {
@@ -217,7 +220,7 @@ Use 'abtars update' to upgrade, or --force to re-seed missing config.
217
220
  process.stdout.write(`\u2713 seeded config: ${seeded.join(", ")}
218
221
  `);
219
222
  }
220
- const { loadManifest: loadInstallManifest } = await import("./install-manifest-QX7KVDCA.js");
223
+ const { loadManifest: loadInstallManifest } = await import("./install-manifest-624KOB4S.js");
221
224
  const installManifest = loadInstallManifest(repoRoot);
222
225
  if (!opts.dryRun) {
223
226
  await mkdir(paths.bin, { recursive: true });
@@ -279,7 +282,7 @@ Warning: ${paths.bin} is not on $PATH. Add to your shell config:
279
282
  process.stdout.write(`\u2713 restored abtars data
280
283
  `);
281
284
  }
282
- const { resolveAbmindHome } = await import("./paths-EDK6KWHG.js");
285
+ const { resolveAbmindHome } = await import("./paths-BAUNPLNJ.js");
283
286
  const abmindHome = resolveAbmindHome();
284
287
  const abmindSrc = join(tmpDir, "abmind");
285
288
  if (fileExists(abmindSrc)) {
@@ -311,7 +314,7 @@ Warning: ${paths.bin} is not on $PATH. Add to your shell config:
311
314
  `);
312
315
  }
313
316
  } else if (process.platform === "linux") {
314
- const releaseSrc = join(homedir(), ".abtars-releases", "src", "abtars", "scripts", "abtars-watchdog.service");
317
+ const releaseSrc = join(resolveReleasesDir(), "src", "abtars", "scripts", "abtars-watchdog.service");
315
318
  const unitSrc = existsSync(releaseSrc) ? releaseSrc : join(home, "scripts", "abtars-watchdog.service");
316
319
  const unitDir = join(homedir(), ".config", "systemd", "user");
317
320
  if (existsSync(unitSrc)) {
@@ -342,7 +345,7 @@ Install complete.
342
345
 
343
346
  `);
344
347
  }
345
- const { printHealthSummary } = await import("./health-check-FRUNRVNQ.js");
348
+ const { printHealthSummary } = await import("./health-check-ASRLUJE5.js");
346
349
  printHealthSummary(paths.home);
347
350
  if (!opts.dryRun && opts.restore) {
348
351
  const { validateMinimumViability, formatValidationError } = await import("./install-validate-H74LUCE2.js");
@@ -359,4 +362,4 @@ export {
359
362
  install,
360
363
  writeWrapper
361
364
  };
362
- //# sourceMappingURL=install-ZAHTZ5M5.js.map
365
+ //# sourceMappingURL=install-3GGZUN22.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/cli/commands/install.ts"],
4
+ "sourcesContent": ["/**\n * `abtars install [--force]` \u2014 first-time scaffolding + configuration wizard.\n *\n * Exports writeWrapper (used by deploy.ts) and install() for legacy paths.\n * The primary install flow is in onboard.ts (called by CLI dispatcher as `abtars install`).\n */\n\nimport { mkdir, readFile, stat, writeFile } from 'node:fs/promises';\nimport { existsSync, readFileSync, readdirSync, copyFileSync, mkdirSync, realpathSync } from 'node:fs';\nimport { hostname, homedir as _homedir } from 'node:os';\nimport { execSync } from 'node:child_process';\nimport { basename, dirname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { emptyManifest, packagePaths, readManifest, resolveReleasesDir, writeManifest } from '../deploy-lib-import.js';\n\n/** Resolve real user home even under sudo. */\nfunction homedir(): string {\n const sudoUser = process.env['SUDO_USER'];\n if (sudoUser) {\n try { return execSync(`getent passwd ${sudoUser}`, { encoding: 'utf-8' }).split(':')[5]!.trim(); }\n catch { /* fall through */ }\n }\n return _homedir();\n}\n\nexport interface InstallOptions {\n readonly restore?: string;\n readonly force: boolean;\n readonly dryRun: boolean;\n readonly mode?: \"simple\" | \"daemon\";\n}\n\n// CLI wrappers are read from install-manifest.json at runtime.\n// Each is a thin wrapper that invokes `node current/dist/cli/<name>.js \"$@\"`.\n// Regenerated on every install / flat-to-releases migration.\n\nasync function exists(p: string): Promise<boolean> {\n try {\n await stat(p);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function createSkeleton(home: string, dryRun: boolean): Promise<void> {\n const { loadManifest } = await import('../install-manifest.js');\n const manifest = loadManifest();\n const dirs = manifest.directories.map(d => join(home, d.path));\n if (dryRun) {\n process.stdout.write(`[dry-run] mkdir -p:\\n ${dirs.join('\\n ')}\\n`);\n return;\n }\n for (const d of manifest.directories) {\n await mkdir(join(home, d.path), { recursive: true, mode: d.mode ? parseInt(d.mode, 8) : undefined });\n }\n}\n\nasync function seedConfig(repoRoot: string, _configDir: string, dryRun: boolean, home: string): Promise<readonly string[]> {\n const { loadManifest } = await import('../install-manifest.js');\n const manifest = loadManifest(repoRoot);\n const seeded: string[] = [];\n for (const seed of manifest.configSeeds) {\n const src = join(repoRoot, seed.source);\n const dst = join(home, seed.dest);\n if (!(await exists(src))) continue;\n if (await exists(dst)) continue;\n if (dryRun) {\n seeded.push(`[dry-run] cp ${src} ${dst}`);\n continue;\n }\n const content = await readFile(src, 'utf-8');\n await mkdir(dirname(dst), { recursive: true });\n await writeFile(dst, content, { mode: seed.mode ? parseInt(seed.mode, 8) : 0o644 });\n seeded.push(basename(dst));\n }\n return seeded;\n}\n\nexport async function writeWrapper(binDir: string, name: string, currentLink: string, dryRun: boolean): Promise<void> {\n const bundleFile = name === 'abtars' ? 'abtars-cli.js' : `${name}.js`;\n // #912: ensure node is in PATH on macOS (homebrew) and Linux (.local/bin)\n const pathPreamble = `export PATH=\"/opt/homebrew/bin:$HOME/.local/bin:$PATH\"\\nexport NODE_PATH=\"$HOME/.local/lib/node_modules:\\${NODE_PATH:-}\"\\n`;\n let content: string;\n\n if (name === 'abmind') {\n content = `#!/usr/bin/env bash\n${pathPreamble}# Resolve abmind CLI \u2014 global install is canonical under #1243 (no longer bundled in the release)\nLOCAL_CLI=\"$HOME/.local/lib/node_modules/abmind/dist/cli/abmind.js\"\nGLOBAL_CLI=\"$(npm root -g 2>/dev/null)/abmind/dist/cli/abmind.js\"\nSRC_CLI=\"$HOME/.abtars-releases/src/abmind/dist/cli/abmind.js\"\nif [ -f \"$LOCAL_CLI\" ]; then\n exec node \"$LOCAL_CLI\" \"$@\"\nelif [ -f \"$GLOBAL_CLI\" ]; then\n exec node \"$GLOBAL_CLI\" \"$@\"\nelif [ -f \"$SRC_CLI\" ]; then\n exec node \"$SRC_CLI\" \"$@\"\nelse\n echo \"abmind: not found. Install via: npm install -g abmind\" >&2\n exit 1\nfi\n`;\n } else {\n const target = join(currentLink, 'bundle', bundleFile);\n const distFile = name === 'abtars' ? 'abtars.js' : `${name}.js`;\n const fallback = join(currentLink, 'dist', 'cli', distFile);\n content = `#!/usr/bin/env bash\n${pathPreamble}if [ -f \"${target}\" ]; then\n exec node \"${target}\" \"$@\"\nelif [ -f \"${fallback}\" ]; then\n exec node \"${fallback}\" \"$@\"\nelse\n GLOBAL_BIN=\"$(npm root -g 2>/dev/null)/abtars/bundle/${bundleFile}\"\n if [ -f \"$GLOBAL_BIN\" ]; then\n exec node \"$GLOBAL_BIN\" \"$@\"\n fi\n echo \"abtars: no release staged. Run 'abtars install' first.\" >&2\n exit 1\nfi\n`;\n }\n const path = join(binDir, name);\n if (dryRun) {\n process.stdout.write(`[dry-run] write wrapper ${path}\\n`);\n return;\n }\n try { const { unlinkSync } = await import(\"node:fs\"); unlinkSync(path); } catch { /* doesn't exist */ }\n await writeFile(path, content, { mode: 0o755 });\n}\n\nfunction isPathOnPATH(userBinDir: string): boolean {\n const PATH = process.env['PATH'] ?? '';\n return PATH.split(':').some((p) => p === userBinDir);\n}\n\nexport async function install(opts: InstallOptions): Promise<number> {\n const paths = packagePaths('abtars');\n const home = paths.home;\n const repoRoot = join(dirname(realpathSync(process.argv[1] ?? fileURLToPath(import.meta.url))), \"..\");\n\n // Install log (#718)\n const { initInstallLog, logInstall, logInstallHeader } = await import(\"../install-log.js\");\n initInstallLog(home);\n logInstallHeader(\"install\");\n const _origWrite = process.stdout.write.bind(process.stdout);\n process.stdout.write = ((chunk: any, ...args: any[]) => {\n if (typeof chunk === \"string\" && (chunk.startsWith(\"\u2713\") || chunk.startsWith(\"\u26A0\"))) logInstall(chunk.trimEnd());\n return _origWrite(chunk, ...args);\n }) as typeof process.stdout.write;\n\n const homeExists = await exists(home);\n const manifest = homeExists ? await readManifest(paths.manifest) : null;\n\n // #1101: Detect and remove stale shims from previous installs\n try {\n const { execSync } = await import(\"node:child_process\");\n const shimPath = execSync(\"which abtars 2>/dev/null\", { encoding: \"utf-8\" }).trim();\n const pnpmHome = process.env.PNPM_HOME ?? \"\";\n if (shimPath && pnpmHome && !shimPath.startsWith(pnpmHome) && !shimPath.includes(\".abtars\")) {\n const { unlinkSync } = await import(\"node:fs\");\n try { unlinkSync(shimPath); process.stdout.write(`\u2713 removed stale shim ${shimPath}\\n`); }\n catch { process.stderr.write(`\u26A0\uFE0F Stale shim at ${shimPath} \u2014 remove manually: rm ${shimPath}\\n`); }\n }\n } catch { /* which failed \u2014 no shim */ }\n\n if (homeExists && manifest && !opts.force && !opts.restore) {\n process.stderr.write(\n `~/.abtars already installed at version ${manifest.version || '(unset)'}.\\nUse 'abtars update' to upgrade, or --force to re-seed missing config.\\n`,\n );\n return 2;\n }\n\n // Kill stale daemon/watchdog from previous install (#771)\n try {\n const { execSync } = await import(\"node:child_process\");\n execSync(\"systemctl is-active abtars 2>/dev/null\", { stdio: \"ignore\" });\n execSync(\"sudo -n systemctl stop abtars 2>/dev/null\", { stdio: \"ignore\" });\n execSync(\"sudo -n systemctl disable abtars 2>/dev/null\", { stdio: \"ignore\" });\n } catch { /* not running or no sudo \u2014 fine */ }\n try {\n const { execSync } = await import(\"node:child_process\");\n execSync(\"pkill -f 'abtars-watchdog.sh' 2>/dev/null\", { stdio: \"ignore\" });\n } catch { /* no watchdog \u2014 fine */ }\n\n // Create skeleton (idempotent)\n await createSkeleton(home, opts.dryRun);\n process.stdout.write(`\u2713 skeleton at ${home}\\n`);\n\n // Install native deps (better-sqlite3, sqlite-vec) \u2014 required for kanban\n if (!opts.dryRun) {\n const deps = await import('./deps.js');\n await deps.deps(['install', 'native']);\n }\n\n // Core templates: abmind seeds its own on first boot (#427 ensureInitialized).\n // No longer seeded by abtars install.\n\n // Kiro agent config created on-demand by ACP transport (ensureAgentConfig)\n\n // Generate Ed25519 identity keypair (skip if already exists)\n const identityKey = join(paths.config, 'identity.key');\n const identityPub = join(paths.config, 'identity.pub');\n if (!opts.dryRun && !(await exists(identityKey))) {\n const { generateKeyPairSync } = await import('node:crypto');\n const { privateKey, publicKey } = generateKeyPairSync('ed25519');\n await writeFile(identityKey, privateKey.export({ format: 'der', type: 'pkcs8' }).toString('base64'));\n await writeFile(identityPub, publicKey.export({ format: 'der', type: 'spki' }).toString('base64'));\n const { chmodSync } = await import('node:fs');\n chmodSync(identityKey, 0o600);\n process.stdout.write(`\u2713 identity keypair generated\\n`);\n }\n\n // Generate self-signed Ed25519 TLS certificate (skip if already exists)\n const identityCrt = join(paths.config, 'identity.crt');\n const identityTlsKey = join(paths.config, 'identity.tls.key');\n if (!opts.dryRun && !(await exists(identityCrt))) {\n const { execSync } = await import('node:child_process');\n const { chmodSync } = await import('node:fs');\n const agentName = hostname();\n try {\n execSync(`openssl req -x509 -newkey ed25519 -keyout identity.tls.key -out identity.crt -days 3650 -nodes -subj \"/CN=${agentName}\"`, { cwd: paths.config, stdio: 'ignore' });\n chmodSync(identityTlsKey, 0o600);\n process.stdout.write(`\u2713 TLS certificate generated (Ed25519, 10yr)\\n`);\n } catch (err) {\n process.stderr.write(`\u26A0 TLS cert generation failed (openssl not found?). Agent-api will start without TLS.\\n`);\n }\n }\n\n // Seed config from examples (only missing ones)\n const seeded = await seedConfig(repoRoot, paths.config, opts.dryRun, home);\n if (seeded.length > 0) {\n process.stdout.write(`\u2713 seeded config: ${seeded.join(', ')}\\n`);\n }\n\n // Write wrappers (always overwrite \u2014 they're regenerable thin shims)\n const { loadManifest: loadInstallManifest } = await import('../install-manifest.js');\n const installManifest = loadInstallManifest(repoRoot);\n if (!opts.dryRun) {\n await mkdir(paths.bin, { recursive: true });\n }\n for (const name of installManifest.cliWrappers) {\n await writeWrapper(paths.bin, name, paths.current, opts.dryRun);\n }\n process.stdout.write(`\u2713 wrappers in ${paths.bin}\\n`);\n\n // Warn if ~/.local/bin not on PATH\n if (!isPathOnPATH(paths.bin)) {\n process.stderr.write(\n `\\nWarning: ${paths.bin} is not on $PATH. Add to your shell config:\\n export PATH=\"${paths.bin}:$PATH\"\\n`,\n );\n }\n\n // Initialize manifest if brand-new install AND migration didn't write one.\n // (Migration 003 writes a manifest mid-flow with version + migration record;\n // we must not clobber it here.)\n const manifestAfter = await readManifest(paths.manifest);\n if (manifestAfter === null && !opts.dryRun) {\n await writeManifest(paths.manifest, {\n ...emptyManifest('abtars', hostname()),\n version: '',\n });\n process.stdout.write(`\u2713 manifest initialized at ${paths.manifest}\\n`);\n }\n\n // Write install mode to manifest. Priority:\n // 1. --mode flag (explicit) \u2014 always wins\n // 2. existing manifest installMode \u2014 preserved (don't clobber on --force)\n // 3. default: supervised\n const manifestForMode = await readManifest(paths.manifest);\n const existingMode = manifestForMode?.installMode;\n const mode = opts.mode ?? existingMode ?? \"daemon\";\n if (manifestForMode) {\n await writeManifest(paths.manifest, { ...manifestForMode, installMode: mode });\n }\n process.stdout.write(`\u2713 install mode: ${mode}\\n`);\n\n // Release staging is handled by `abtars update` (auto-detects npm vs git source)\n\n // Restore from backup zip\n if (opts.restore) {\n const { spawnSync } = await import('node:child_process');\n const { existsSync: fileExists } = await import('node:fs');\n const zipPath = opts.restore;\n if (!fileExists(zipPath)) {\n process.stderr.write(`error: backup file not found: ${zipPath}\\n`);\n return 1;\n }\n // Extract to temp dir\n const tmpDir = join(process.env['TMPDIR'] ?? '/tmp', `abtars-restore-${Date.now()}`);\n const is7z = zipPath.endsWith('.7z');\n const extractCmd = is7z\n ? spawnSync('7z', ['x', zipPath, `-o${tmpDir}`, '-y'], { encoding: 'utf-8' })\n : spawnSync('unzip', ['-o', zipPath, '-d', tmpDir], { encoding: 'utf-8' });\n if (extractCmd.status !== 0) {\n process.stderr.write(`error: extract failed: ${extractCmd.stderr}\\n`);\n return 1;\n }\n // Copy abtars files \u2014 overwrite everything EXCEPT binaries (releases/, current, bin/)\n const abSrc = join(tmpDir, 'abtars');\n if (fileExists(abSrc)) {\n const skipSet = new Set(['releases', 'current', 'bin']);\n for (const f of readdirSync(abSrc)) {\n if (skipSet.has(f)) continue;\n spawnSync('cp', ['-r', join(abSrc, f), home], { stdio: 'inherit' });\n }\n process.stdout.write(`\u2713 restored abtars data\\n`);\n }\n // Copy abmind files\n const { resolveAbmindHome } = await import(\"../deploy-lib/paths.js\");\n const abmindHome = resolveAbmindHome();\n const abmindSrc = join(tmpDir, 'abmind');\n if (fileExists(abmindSrc)) {\n spawnSync('cp', ['-r', ...readdirSync(abmindSrc).map(f => join(abmindSrc, f)), abmindHome], { stdio: 'inherit' });\n process.stdout.write(`\u2713 restored abmind data\\n`);\n }\n // Cleanup + resync\n spawnSync('rm', ['-rf', tmpDir]);\n process.stdout.write(`\\n\u2713 Restore complete. Run 'abtars update' to resync.\\n`);\n return 0;\n }\n\n // --- supervised: load user-scope watchdog (LaunchAgent / systemd user) ---\n if (mode === 'daemon') {\n const { execSync } = await import('node:child_process');\n if (process.platform === 'darwin') {\n const plistSrc = join(home, 'scripts', 'com.abtars.watchdog.plist');\n const plistDst = join(homedir(), 'Library', 'LaunchAgents', 'com.abtars.watchdog.plist');\n if (existsSync(plistSrc)) {\n const content = readFileSync(plistSrc, 'utf-8').replaceAll('{{HOME}}', homedir());\n const { writeFileSync } = await import('node:fs');\n writeFileSync(plistDst, content);\n const uid = `gui/${process.getuid!()}`;\n try { execSync(`launchctl bootstrap ${uid} \"${plistDst}\"`, { stdio: 'ignore', timeout: 5000 }); } catch { /* already loaded */ }\n process.stdout.write(`\u2713 watchdog LaunchAgent loaded\\n`);\n }\n } else if (process.platform === 'linux') {\n const releaseSrc = join(resolveReleasesDir(), 'src', 'abtars', 'scripts', 'abtars-watchdog.service');\n const unitSrc = existsSync(releaseSrc) ? releaseSrc : join(home, 'scripts', 'abtars-watchdog.service');\n const unitDir = join(homedir(), '.config', 'systemd', 'user');\n if (existsSync(unitSrc)) {\n mkdirSync(unitDir, { recursive: true });\n copyFileSync(unitSrc, join(unitDir, 'abtars-watchdog.service'));\n try { execSync('systemctl --user daemon-reload && systemctl --user enable --now abtars-watchdog', { stdio: 'ignore' }); } catch { /* may fail in chroot */ }\n process.stdout.write(`\u2713 watchdog systemd user service enabled\\n`);\n }\n }\n }\n\n process.stdout.write(`\\nInstall complete.\\n`);\n if (!manifestAfter || manifestAfter.version === '') {\n process.stdout.write(`Next: 'abtars update' to build and activate the first release.\\n`);\n } else {\n process.stdout.write(`\\n\u2500\u2500 Next steps \u2500\u2500\\n`);\n process.stdout.write(` 1. (Optional) Install Ollama for memory embeddings: curl -fsSL https://ollama.com/install.sh | sh\\n`);\n process.stdout.write(` 2. Start the bridge: 'abtars restart' or use the watchdog\\n\\n`);\n }\n\n const { printHealthSummary } = await import('./health-check.js');\n printHealthSummary(paths.home);\n\n // #334: Post-install healthcheck \u2014 validate operator channel exists (only on --restore)\n if (!opts.dryRun && opts.restore) {\n const { validateMinimumViability, formatValidationError } = await import('./install-validate.js');\n const validation = validateMinimumViability(paths.config);\n if (!validation.ok) {\n const invocation = `abtars install --restore ${opts.restore}`;\n process.stderr.write(\"\\n\" + formatValidationError(validation, invocation) + \"\\n\");\n return 1;\n }\n }\n\n return 0;\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["execSync"]
7
+ }
@@ -3,8 +3,9 @@
3
3
  import {
4
4
  init_logger,
5
5
  logWarn
6
- } from "./chunk-OOKNHOCB.js";
7
- import "./chunk-H2K23MOF.js";
6
+ } from "./chunk-6S3G6GPO.js";
7
+ import "./chunk-7XXISOHU.js";
8
+ import "./chunk-2BXXQG7P.js";
8
9
  import "./chunk-7K2YZTLD.js";
9
10
 
10
11
  // src/cli/install-manifest.ts
@@ -101,4 +102,4 @@ export {
101
102
  loadManifest,
102
103
  reconcileManifest
103
104
  };
104
- //# sourceMappingURL=install-manifest-QX7KVDCA.js.map
105
+ //# sourceMappingURL=install-manifest-624KOB4S.js.map