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
@@ -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 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\n // Nerve-driven instant delivery \u2014 sole delivery trigger (#1298: polling backstop removed)\n import(\"../components/nerve.js\").then(({ nerve }) => {\n nerve.on(\"card:done\", async (cardId: number) => {\n try {\n const { kanbanPending } = await import(\"../components/tasks/kanban-board.js\");\n const { deliverCard } = await import(\"../components/tasks/kanban-delivery.js\");\n const pending = kanbanPending();\n const card = pending.find((c: { id: number }) => c.id === cardId);\n if (!card) return;\n await deliverCard(card, {\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 announce: async (prompt) => {\n if (ctx.sendSystemMessage) await ctx.sendSystemMessage(prompt);\n },\n chatIdFor: (card) => card.chat_id || String(masterChatId),\n });\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, `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": ["card"]
7
+ }
@@ -5,8 +5,8 @@ import {
5
5
  getHookSummary,
6
6
  hasHooks,
7
7
  loadHookConfig
8
- } from "./chunk-NRUSRJXR.js";
9
- import "./chunk-GWILHZPT.js";
8
+ } from "./chunk-DZJ5QZFD.js";
9
+ import "./chunk-XRTXYN66.js";
10
10
  import "./chunk-GALQBVKO.js";
11
11
  import "./chunk-O7KQG6ME.js";
12
12
  import "./chunk-7K2YZTLD.js";
@@ -16,4 +16,4 @@ export {
16
16
  hasHooks,
17
17
  loadHookConfig
18
18
  };
19
- //# sourceMappingURL=hook-system-M3POLUIB.js.map
19
+ //# sourceMappingURL=hook-system-YB635OC4.js.map
@@ -5,10 +5,10 @@ import {
5
5
  init_hotskills,
6
6
  register,
7
7
  reloadCatalog
8
- } from "./chunk-JNIHEDKF.js";
9
- import "./chunk-EUZDKV3C.js";
10
- import "./chunk-YSKCQH6E.js";
11
- import "./chunk-GWILHZPT.js";
8
+ } from "./chunk-XPWYDNWL.js";
9
+ import "./chunk-J4RUFAPK.js";
10
+ import "./chunk-2IYJ4I66.js";
11
+ import "./chunk-XRTXYN66.js";
12
12
  import "./chunk-GALQBVKO.js";
13
13
  import "./chunk-O7KQG6ME.js";
14
14
  import "./chunk-7K2YZTLD.js";
@@ -18,4 +18,4 @@ export {
18
18
  register,
19
19
  reloadCatalog
20
20
  };
21
- //# sourceMappingURL=hotskills-FWX4QI7V.js.map
21
+ //# sourceMappingURL=hotskills-Q75D2DK3.js.map
@@ -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-5PPWMD2W.js");
40
+ const { loadManifest } = await import("./install-manifest-J7ICPCJN.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-5PPWMD2W.js");
54
+ const { loadManifest } = await import("./install-manifest-J7ICPCJN.js");
55
55
  const manifest = loadManifest(repoRoot);
56
56
  const seeded = [];
57
57
  for (const seed of manifest.configSeeds) {
@@ -81,7 +81,7 @@ export NODE_PATH="$HOME/.local/lib/node_modules:\${NODE_PATH:-}"
81
81
  ${pathPreamble}# Resolve abmind CLI \u2014 global install is canonical under #1243 (no longer bundled in the release)
82
82
  LOCAL_CLI="$HOME/.local/lib/node_modules/abmind/dist/cli/abmind.js"
83
83
  GLOBAL_CLI="$(npm root -g 2>/dev/null)/abmind/dist/cli/abmind.js"
84
- SRC_CLI="$HOME/.abtars-releases/src/abmind/dist/cli/abmind.js"
84
+ SRC_CLI="$HOME/.abmind/src/abmind/dist/cli/abmind.js"
85
85
  if [ -f "$LOCAL_CLI" ]; then
86
86
  exec node "$LOCAL_CLI" "$@"
87
87
  elif [ -f "$GLOBAL_CLI" ]; then
@@ -184,43 +184,30 @@ Use 'abtars update' to upgrade, or --force to re-seed missing config.
184
184
  process.stdout.write(`\u2713 skeleton at ${home}
185
185
  `);
186
186
  if (!opts.dryRun) {
187
- const deps = await import("./deps-WVK553KF.js");
187
+ const deps = await import("./deps-T63AVJKJ.js");
188
188
  await deps.deps(["install", "native"]);
189
189
  }
190
- const identityKey = join(paths.config, "identity.key");
191
- const identityPub = join(paths.config, "identity.pub");
192
- if (!opts.dryRun && !await exists(identityKey)) {
193
- const { generateKeyPairSync } = await import("node:crypto");
194
- const { privateKey, publicKey } = generateKeyPairSync("ed25519");
195
- await writeFile(identityKey, privateKey.export({ format: "der", type: "pkcs8" }).toString("base64"));
196
- await writeFile(identityPub, publicKey.export({ format: "der", type: "spki" }).toString("base64"));
197
- const { chmodSync } = await import("node:fs");
198
- chmodSync(identityKey, 384);
199
- process.stdout.write(`\u2713 identity keypair generated
190
+ if (!opts.dryRun) {
191
+ const { bootstrapIdentity, deriveVerifyKey } = await import("./peer-config-URM7DCW6.js");
192
+ bootstrapIdentity();
193
+ const { loadPeerConfig } = await import("./peer-config-URM7DCW6.js");
194
+ const peerConfig = loadPeerConfig();
195
+ const verifyKey = deriveVerifyKey(peerConfig.self.signingKey);
196
+ process.stderr.write(`Identity public key (share out-of-band for enrollment):
197
+ ${verifyKey}
200
198
  `);
201
- }
202
- const identityCrt = join(paths.config, "identity.crt");
203
- const identityTlsKey = join(paths.config, "identity.tls.key");
204
- if (!opts.dryRun && !await exists(identityCrt)) {
205
- const { execSync: execSync2 } = await import("node:child_process");
206
- const { chmodSync } = await import("node:fs");
207
- const agentName = hostname();
208
- try {
209
- execSync2(`openssl req -x509 -newkey ed25519 -keyout identity.tls.key -out identity.crt -days 3650 -nodes -subj "/CN=${agentName}"`, { cwd: paths.config, stdio: "ignore" });
210
- chmodSync(identityTlsKey, 384);
211
- process.stdout.write(`\u2713 TLS certificate generated (Ed25519, 10yr)
199
+ process.stdout.write(`+ identity keypair + tribe token ensured
212
200
  `);
213
- } catch (err) {
214
- process.stderr.write(`\u26A0 TLS cert generation failed (openssl not found?). Agent-api will start without TLS.
201
+ } else {
202
+ process.stdout.write(`[dry-run] bootstrapIdentity() \u2014 generate Ed25519 keypair + tribe token
215
203
  `);
216
- }
217
204
  }
218
205
  const seeded = await seedConfig(repoRoot, paths.config, opts.dryRun, home);
219
206
  if (seeded.length > 0) {
220
207
  process.stdout.write(`\u2713 seeded config: ${seeded.join(", ")}
221
208
  `);
222
209
  }
223
- const { loadManifest: loadInstallManifest } = await import("./install-manifest-5PPWMD2W.js");
210
+ const { loadManifest: loadInstallManifest } = await import("./install-manifest-J7ICPCJN.js");
224
211
  const installManifest = loadInstallManifest(repoRoot);
225
212
  if (!opts.dryRun) {
226
213
  await mkdir(paths.bin, { recursive: true });
@@ -362,4 +349,4 @@ export {
362
349
  install,
363
350
  writeWrapper
364
351
  };
365
- //# sourceMappingURL=install-OS3CU7NF.js.map
352
+ //# sourceMappingURL=install-RFKKFSGS.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/.abmind/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 + tribe token via peer-config bootstrap (#1293)\n // This replaces the old manual identity.key/identity.pub generation.\n // bootstrapIdentity() writes signingKey + tribeToken to peers.json.\n if (!opts.dryRun) {\n const { bootstrapIdentity, deriveVerifyKey } = await import(\"../../components/peer-config.js\");\n bootstrapIdentity();\n const { loadPeerConfig } = await import(\"../../components/peer-config.js\");\n const peerConfig = loadPeerConfig();\n const verifyKey = deriveVerifyKey(peerConfig.self.signingKey);\n process.stderr.write(`Identity public key (share out-of-band for enrollment):\\n ${verifyKey}\\n`);\n process.stdout.write(`+ identity keypair + tribe token ensured\\n`);\n } else {\n process.stdout.write(`[dry-run] bootstrapIdentity() \u2014 generate Ed25519 keypair + tribe token\\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,7 +3,7 @@
3
3
  import {
4
4
  init_logger,
5
5
  logWarn
6
- } from "./chunk-GWILHZPT.js";
6
+ } from "./chunk-XRTXYN66.js";
7
7
  import "./chunk-GALQBVKO.js";
8
8
  import "./chunk-O7KQG6ME.js";
9
9
  import "./chunk-7K2YZTLD.js";
@@ -102,4 +102,4 @@ export {
102
102
  loadManifest,
103
103
  reconcileManifest
104
104
  };
105
- //# sourceMappingURL=install-manifest-5PPWMD2W.js.map
105
+ //# sourceMappingURL=install-manifest-J7ICPCJN.js.map
@@ -2,7 +2,7 @@
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
  recordResult
5
- } from "./chunk-IJT4KWXT.js";
5
+ } from "./chunk-U4U47YE7.js";
6
6
  import {
7
7
  init_digital_signature,
8
8
  signMessage,
@@ -13,7 +13,7 @@ import {
13
13
  logDebug,
14
14
  logInfo,
15
15
  logWarn
16
- } from "./chunk-GWILHZPT.js";
16
+ } from "./chunk-XRTXYN66.js";
17
17
  import "./chunk-GALQBVKO.js";
18
18
  import "./chunk-O7KQG6ME.js";
19
19
  import "./chunk-7K2YZTLD.js";
@@ -306,4 +306,4 @@ function escapeRegex(s) {
306
306
  export {
307
307
  IrcAdapter
308
308
  };
309
- //# sourceMappingURL=irc-adapter-PTTZD32W.js.map
309
+ //# sourceMappingURL=irc-adapter-TVEV4R6H.js.map
@@ -4,15 +4,15 @@ import {
4
4
  IRC_SCHEMA,
5
5
  init_config_validator,
6
6
  validateShape
7
- } from "./chunk-LUNA6PM5.js";
7
+ } from "./chunk-5RVOEFGT.js";
8
8
  import {
9
9
  init_log_and_swallow,
10
10
  logAndSwallow
11
- } from "./chunk-YSKCQH6E.js";
11
+ } from "./chunk-2IYJ4I66.js";
12
12
  import {
13
13
  init_logger,
14
14
  logWarn
15
- } from "./chunk-GWILHZPT.js";
15
+ } from "./chunk-XRTXYN66.js";
16
16
  import {
17
17
  abtarsHome,
18
18
  init_paths
@@ -87,4 +87,4 @@ function resolveSecret(val) {
87
87
  export {
88
88
  loadIrcConfig
89
89
  };
90
- //# sourceMappingURL=irc-config-CP7ZMUOX.js.map
90
+ //# sourceMappingURL=irc-config-M676FOFI.js.map
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
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
+ _kanbanExecForTest,
4
5
  cascadeFail,
5
6
  init_kanban_board,
6
7
  isUnblocked,
7
8
  kanbanAddTokens,
8
9
  kanbanCleanup,
9
10
  kanbanComplete,
10
- kanbanDeliveryFailed,
11
11
  kanbanEnqueue,
12
12
  kanbanFail,
13
13
  kanbanGetCard,
@@ -18,23 +18,24 @@ import {
18
18
  kanbanProgress,
19
19
  kanbanRetryOrFail,
20
20
  kanbanRunning,
21
+ kanbanSearch,
21
22
  kanbanSetDelivering,
22
23
  kanbanUpdate
23
- } from "./chunk-EQSG2CRM.js";
24
- import "./chunk-GVM5YU5I.js";
25
- import "./chunk-OXTSWQCX.js";
26
- import "./chunk-GWILHZPT.js";
24
+ } from "./chunk-FGYDIX54.js";
25
+ import "./chunk-Z4FZPB42.js";
26
+ import "./chunk-5Y3FJ2Y7.js";
27
+ import "./chunk-XRTXYN66.js";
27
28
  import "./chunk-GALQBVKO.js";
28
29
  import "./chunk-O7KQG6ME.js";
29
30
  import "./chunk-7K2YZTLD.js";
30
31
  init_kanban_board();
31
32
  export {
33
+ _kanbanExecForTest,
32
34
  cascadeFail,
33
35
  isUnblocked,
34
36
  kanbanAddTokens,
35
37
  kanbanCleanup,
36
38
  kanbanComplete,
37
- kanbanDeliveryFailed,
38
39
  kanbanEnqueue,
39
40
  kanbanFail,
40
41
  kanbanGetCard,
@@ -45,7 +46,8 @@ export {
45
46
  kanbanProgress,
46
47
  kanbanRetryOrFail,
47
48
  kanbanRunning,
49
+ kanbanSearch,
48
50
  kanbanSetDelivering,
49
51
  kanbanUpdate
50
52
  };
51
- //# sourceMappingURL=kanban-board-M326B2XJ.js.map
53
+ //# sourceMappingURL=kanban-board-DLEJUCNN.js.map
@@ -10,11 +10,11 @@ import {
10
10
  channelUnread,
11
11
  initChannelSync,
12
12
  init_kanban_channel
13
- } from "./chunk-KTYGKPYM.js";
14
- import "./chunk-EQSG2CRM.js";
15
- import "./chunk-GVM5YU5I.js";
16
- import "./chunk-OXTSWQCX.js";
17
- import "./chunk-GWILHZPT.js";
13
+ } from "./chunk-2NLUT5S2.js";
14
+ import "./chunk-FGYDIX54.js";
15
+ import "./chunk-Z4FZPB42.js";
16
+ import "./chunk-5Y3FJ2Y7.js";
17
+ import "./chunk-XRTXYN66.js";
18
18
  import "./chunk-GALQBVKO.js";
19
19
  import "./chunk-O7KQG6ME.js";
20
20
  import "./chunk-7K2YZTLD.js";
@@ -29,4 +29,4 @@ export {
29
29
  channelUnread,
30
30
  initChannelSync
31
31
  };
32
- //# sourceMappingURL=kanban-channel-IJ52OMNA.js.map
32
+ //# sourceMappingURL=kanban-channel-XOLUHJZJ.js.map
@@ -0,0 +1,45 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __bundleCreateRequire } from 'node:module'; import { fileURLToPath as __bundleFileURLToPath } from 'node:url'; import { dirname as __bundleDirname } from 'node:path'; const require = __bundleCreateRequire(import.meta.url); const __chunk_filename = __bundleFileURLToPath(import.meta.url); const __chunk_dirname = __bundleDirname(__chunk_filename);
3
+ import {
4
+ init_kanban_board,
5
+ kanbanMarkDelivered,
6
+ kanbanSetDelivering
7
+ } from "./chunk-FGYDIX54.js";
8
+ import "./chunk-Z4FZPB42.js";
9
+ import "./chunk-5Y3FJ2Y7.js";
10
+ import "./chunk-XRTXYN66.js";
11
+ import "./chunk-GALQBVKO.js";
12
+ import "./chunk-O7KQG6ME.js";
13
+ import "./chunk-7K2YZTLD.js";
14
+
15
+ // src/components/tasks/kanban-delivery.ts
16
+ init_kanban_board();
17
+ async function deliverCard(card, deps) {
18
+ kanbanSetDelivering(card.id);
19
+ const chatId = deps.chatIdFor(card);
20
+ if (card.delivery_mode === "silent") {
21
+ kanbanMarkDelivered(card.id);
22
+ return;
23
+ }
24
+ if (card.delivery_mode === "announce") {
25
+ await deps.announce(
26
+ `[TASK COMPLETE] "${card.title}" done.
27
+ Result:
28
+ ${card.result_summary ?? "(no output)"}
29
+
30
+ Deliver this to the user naturally.`
31
+ );
32
+ kanbanMarkDelivered(card.id);
33
+ return;
34
+ }
35
+ if (card.result_path) {
36
+ await deps.sendDocument(chatId, card.result_path, card.title);
37
+ }
38
+ const confirmation = card.result_path ? `Task "${card.title}" complete. File delivered: ${card.result_path}` : `Task "${card.title}" complete.`;
39
+ await deps.sendMessage(chatId, confirmation);
40
+ kanbanMarkDelivered(card.id);
41
+ }
42
+ export {
43
+ deliverCard
44
+ };
45
+ //# sourceMappingURL=kanban-delivery-C4QPBNPX.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/components/tasks/kanban-delivery.ts"],
4
+ "sourcesContent": ["/**\n * kanban-delivery.ts \u2014 shared delivery logic for kanban task cards (#1298).\n *\n * Called exclusively by the nerve card:done handler in heartbeat-tier3.ts.\n * The polling createKanbanDeliveryTask was removed \u2014 nerve is the sole delivery trigger.\n *\n * delivery_mode values:\n * \"deliver\" \u2014 send file (if any) + plain confirmation directly via sendMessage. No model.\n * \"announce\" \u2014 inject into the pipeline for natural language delivery. Fire-and-forget;\n * model failures are suppressed at the pipeline layer (no \u274C spam).\n * \"silent\" \u2014 mark delivered, send nothing.\n */\n\nimport type { KanbanCard } from \"./kanban-board.js\";\nimport { kanbanMarkDelivered, kanbanSetDelivering } from \"./kanban-board.js\";\n\nexport interface DeliverDeps {\n /** Direct Telegram/Discord sendMessage \u2014 must not invoke the model. */\n sendMessage: (chatId: string, text: string) => Promise<void>;\n /** Direct file delivery \u2014 must not invoke the model. */\n sendDocument: (chatId: string, filePath: string, caption: string) => Promise<void>;\n /** Fire-and-forget model route (sendSystemMessage). Used only for announce mode. */\n announce: (prompt: string) => Promise<void>;\n /** Resolve the target chat ID for a card (card.chat_id || masterChatId). */\n chatIdFor: (card: KanbanCard) => string;\n}\n\nexport async function deliverCard(card: KanbanCard, deps: DeliverDeps): Promise<void> {\n kanbanSetDelivering(card.id);\n const chatId = deps.chatIdFor(card);\n\n if (card.delivery_mode === \"silent\") {\n kanbanMarkDelivered(card.id);\n return;\n }\n\n if (card.delivery_mode === \"announce\") {\n // Natural-language delivery via the pipeline (fire-and-forget).\n // If models are down, the pipeline error is suppressed at the message-pipeline layer\n // ([TASK COMPLETE] prefix \u2014 see #1294 / #1298). Card is marked delivered regardless.\n await deps.announce(\n `[TASK COMPLETE] \"${card.title}\" done.\\nResult:\\n${card.result_summary ?? \"(no output)\"}\\n\\nDeliver this to the user naturally.`\n );\n kanbanMarkDelivered(card.id);\n return;\n }\n\n // Default: \"deliver\" \u2014 plain delivery, never touches the model.\n if (card.result_path) {\n await deps.sendDocument(chatId, card.result_path, card.title);\n }\n const confirmation = card.result_path\n ? `Task \"${card.title}\" complete. File delivered: ${card.result_path}`\n : `Task \"${card.title}\" complete.`;\n await deps.sendMessage(chatId, confirmation);\n kanbanMarkDelivered(card.id);\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;AAcA;AAaA,eAAsB,YAAY,MAAkB,MAAkC;AACpF,sBAAoB,KAAK,EAAE;AAC3B,QAAM,SAAS,KAAK,UAAU,IAAI;AAElC,MAAI,KAAK,kBAAkB,UAAU;AACnC,wBAAoB,KAAK,EAAE;AAC3B;AAAA,EACF;AAEA,MAAI,KAAK,kBAAkB,YAAY;AAIrC,UAAM,KAAK;AAAA,MACT,oBAAoB,KAAK,KAAK;AAAA;AAAA,EAAqB,KAAK,kBAAkB,aAAa;AAAA;AAAA;AAAA,IACzF;AACA,wBAAoB,KAAK,EAAE;AAC3B;AAAA,EACF;AAGA,MAAI,KAAK,aAAa;AACpB,UAAM,KAAK,aAAa,QAAQ,KAAK,aAAa,KAAK,KAAK;AAAA,EAC9D;AACA,QAAM,eAAe,KAAK,cACtB,SAAS,KAAK,KAAK,+BAA+B,KAAK,WAAW,KAClE,SAAS,KAAK,KAAK;AACvB,QAAM,KAAK,YAAY,QAAQ,YAAY;AAC3C,sBAAoB,KAAK,EAAE;AAC7B;",
6
+ "names": []
7
+ }
@@ -8,8 +8,8 @@ import {
8
8
  isInstalled,
9
9
  lazyRequire,
10
10
  resolveNativeDep
11
- } from "./chunk-GVM5YU5I.js";
12
- import "./chunk-GWILHZPT.js";
11
+ } from "./chunk-Z4FZPB42.js";
12
+ import "./chunk-XRTXYN66.js";
13
13
  import "./chunk-GALQBVKO.js";
14
14
  import "./chunk-O7KQG6ME.js";
15
15
  import "./chunk-7K2YZTLD.js";
@@ -22,4 +22,4 @@ export {
22
22
  lazyRequire,
23
23
  resolveNativeDep
24
24
  };
25
- //# sourceMappingURL=lazy-require-KCRVT4SI.js.map
25
+ //# sourceMappingURL=lazy-require-JKQSALXN.js.map
@@ -14,7 +14,7 @@ import {
14
14
  redactSecrets,
15
15
  setFileLogging,
16
16
  setLogLevel
17
- } from "./chunk-GWILHZPT.js";
17
+ } from "./chunk-XRTXYN66.js";
18
18
  import "./chunk-GALQBVKO.js";
19
19
  import "./chunk-O7KQG6ME.js";
20
20
  import "./chunk-7K2YZTLD.js";
@@ -33,4 +33,4 @@ export {
33
33
  setFileLogging,
34
34
  setLogLevel
35
35
  };
36
- //# sourceMappingURL=logger-OWCSNYCA.js.map
36
+ //# sourceMappingURL=logger-3EGHBD4R.js.map
@@ -2,14 +2,14 @@
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
  sendToMainChat
5
- } from "./chunk-FRKW6LWB.js";
5
+ } from "./chunk-55UWKI5C.js";
6
6
  import "./chunk-YWZPKBO6.js";
7
- import "./chunk-65VCEC32.js";
8
- import "./chunk-GWILHZPT.js";
7
+ import "./chunk-6PA5JBUU.js";
8
+ import "./chunk-XRTXYN66.js";
9
9
  import "./chunk-GALQBVKO.js";
10
10
  import "./chunk-O7KQG6ME.js";
11
11
  import "./chunk-7K2YZTLD.js";
12
12
  export {
13
13
  sendToMainChat
14
14
  };
15
- //# sourceMappingURL=main-chat-ZNUZCTNS.js.map
15
+ //# sourceMappingURL=main-chat-3H63REKK.js.map
@@ -3,10 +3,10 @@
3
3
  import {
4
4
  getMasterUserId,
5
5
  init_master_user
6
- } from "./chunk-AFREM7FX.js";
7
- import "./chunk-ZV4IWKDJ.js";
8
- import "./chunk-65VCEC32.js";
9
- import "./chunk-GWILHZPT.js";
6
+ } from "./chunk-CK7YTA2F.js";
7
+ import "./chunk-E7XD5UGB.js";
8
+ import "./chunk-6PA5JBUU.js";
9
+ import "./chunk-XRTXYN66.js";
10
10
  import "./chunk-GALQBVKO.js";
11
11
  import "./chunk-O7KQG6ME.js";
12
12
  import "./chunk-7K2YZTLD.js";
@@ -14,4 +14,4 @@ init_master_user();
14
14
  export {
15
15
  getMasterUserId
16
16
  };
17
- //# sourceMappingURL=master-user-HSKM4ZFN.js.map
17
+ //# sourceMappingURL=master-user-MUBUP3KD.js.map
@@ -4,7 +4,7 @@ import {
4
4
  init_logger,
5
5
  logInfo,
6
6
  logWarn
7
- } from "./chunk-GWILHZPT.js";
7
+ } from "./chunk-XRTXYN66.js";
8
8
  import {
9
9
  abtarsHome,
10
10
  init_paths
@@ -4667,7 +4667,7 @@ async function saveInboundMedia(buffer, chatId, opts) {
4667
4667
  return { path, mime, ext, size: finalBuffer.length, isImage };
4668
4668
  }
4669
4669
  async function resizeImage(buffer, mime) {
4670
- const { Jimp } = await (await import("./lazy-require-KCRVT4SI.js")).lazyRequire("jimp", "image");
4670
+ const { Jimp } = await (await import("./lazy-require-JKQSALXN.js")).lazyRequire("jimp", "image");
4671
4671
  const img = await Jimp.read(buffer);
4672
4672
  const maxBytes = IMAGE_MAX_BASE64_MB * 1024 * 1024;
4673
4673
  let w = img.width;
@@ -4746,4 +4746,4 @@ export {
4746
4746
  ieee754/index.js:
4747
4747
  (*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> *)
4748
4748
  */
4749
- //# sourceMappingURL=media-utils-3ZYOD7SK.js.map
4749
+ //# sourceMappingURL=media-utils-HUUIALAJ.js.map