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
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/cli/commands/doctor.ts", "../src/cli/commands/uninstall.ts", "../src/cli/commands/stop.ts", "../src/cli/commands/backup.ts", "../src/cli/commands/onboard.ts", "../src/components/hints.ts", "../src/cli/commands/status.ts", "../src/cli/abtars.ts"],
4
- "sourcesContent": ["import { printBanner } from './banner.js';\n/**\n * `abtars doctor` \u2014 TypeScript health probes grouped by subsystem layer.\n * --json: machine-readable output for /doctor Telegram handler.\n * --fix: diagnose + apply fixes + re-probe.\n */\n\nimport { runAllProbes, runFixes, renderHuman, renderJson } from './doctor-probes.js';\n\nexport async function doctor(args: readonly string[] = []): Promise<number> {\n const json = args.includes(\"--json\");\n const fix = args.includes(\"--fix\");\n\n if (!json) await printBanner(\"doctor\");\n\n const output = await runAllProbes();\n\n if (fix) {\n const fixes = await runFixes();\n output.fixes = fixes;\n if (!json) {\n for (const f of fixes) {\n const icon = f.success ? \"+\" : \"x\";\n process.stdout.write(` [${icon}] ${f.action}\\n`);\n }\n if (fixes.length > 0) process.stdout.write(`\\n${fixes.filter(f => f.success).length} fix(es) applied.\\n\\n`);\n // Re-probe after fixes\n const recheck = await runAllProbes();\n process.stdout.write(renderHuman(recheck) + \"\\n\");\n return Object.values(recheck.layers).flat().filter(r => r.status === \"failed\").length > 0 ? 1 : 0;\n }\n }\n\n if (json) {\n process.stdout.write(renderJson(output) + \"\\n\");\n } else {\n process.stdout.write(renderHuman(output) + \"\\n\");\n }\n\n const failed = Object.values(output.layers).flat().filter(r => r.status === \"failed\").length;\n return failed > 0 ? 1 : 0;\n}\n", "import { printBanner } from './banner.js';\n/**\n * abtars uninstall \u2014 stop everything, remove ~/.abtars/ and CLI symlinks.\n *\n * Destructive. Requires typing \"uninstall\" to confirm (or --yes flag).\n */\n\nimport { existsSync, readdirSync, unlinkSync, readlinkSync, rmSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { createInterface } from \"node:readline\";\nimport { stop } from \"./stop.js\";\nimport { abtarsHome } from \"../../paths.js\";\n\n\nfunction binDir(): string {\n return join(process.env[\"HOME\"] ?? \"\", \".local\", \"bin\");\n}\n\nasync function confirm(): Promise<boolean> {\n const rl = createInterface({ input: process.stdin, output: process.stderr });\n return new Promise((resolve) => {\n rl.question(\"\u26A0\uFE0F This will DELETE ~/.abtars/ entirely. Type 'uninstall' to confirm: \", (answer) => {\n rl.close();\n resolve(answer.trim() === \"uninstall\");\n });\n });\n}\n\nfunction removeSymlinks(): string[] {\n const dir = binDir();\n if (!existsSync(dir)) return [];\n const home = abtarsHome();\n const removed: string[] = [];\n for (const entry of readdirSync(dir)) {\n if (!entry.startsWith(\"abtars\")) continue;\n const full = join(dir, entry);\n try {\n const target = readlinkSync(full);\n if (target.includes(home) || target.includes(\".abtars\")) {\n unlinkSync(full);\n removed.push(entry);\n }\n } catch { /* not a symlink or already gone */ }\n }\n return removed;\n}\n\nfunction unloadLaunchd(): void {\n if (process.platform !== \"darwin\") return;\n const plist = join(process.env[\"HOME\"] ?? \"\", \"Library\", \"LaunchAgents\", \"com.abtars.watchdog.plist\");\n if (!existsSync(plist)) return;\n try {\n const { execSync } = require(\"node:child_process\");\n execSync(`launchctl bootout gui/$(id -u) \"${plist}\" 2>/dev/null`, { stdio: \"ignore\" });\n unlinkSync(plist);\n } catch { /* already unloaded or missing */ }\n}\n\nexport async function uninstall(opts: { yes?: boolean }): Promise<number> {\n await printBanner(\"uninstall\");\n const home = abtarsHome();\n\n if (!existsSync(home)) {\n process.stdout.write(\"Nothing to uninstall \u2014 ~/.abtars/ does not exist.\\n\");\n return 0;\n }\n\n if (!opts.yes) {\n const confirmed = await confirm();\n if (!confirmed) {\n process.stdout.write(\"Aborted.\\n\");\n return 1;\n }\n }\n\n // 1. Stop bridge + watchdog\n await stop({ force: true });\n\n // 2. Unload launchd plist\n unloadLaunchd();\n\n // 3. Remove CLI symlinks\n const removed = removeSymlinks();\n\n // 4. Remove ~/.abtars/\n rmSync(home, { recursive: true, force: true });\n\n // 5. Summary\n process.stdout.write(`\\n\u2713 Uninstalled abtars\\n`);\n process.stdout.write(` Removed: ${home}/\\n`);\n if (removed.length > 0) {\n process.stdout.write(` Symlinks removed: ${removed.join(\", \")}\\n`);\n }\n process.stdout.write(`\\n Source repo (~/abtars/) is untouched.\\n`);\n return 0;\n}\n", "import { printBanner } from './banner.js';\n/**\n * abtars stop \u2014 kill watchdog (if running) then bridge.\n *\n * Ordering: watchdog dies first so it doesn't respawn the bridge.\n * Each process gets SIGTERM \u2192 5s grace \u2192 SIGKILL.\n * Daemon mode: unloads launchd/systemd service before killing.\n */\n\nimport { logAndSwallow } from \"../../components/log-and-swallow.js\";\nimport { existsSync, readFileSync, unlinkSync } from \"node:fs\";\nimport { execFileSync } from \"node:child_process\";\nimport { join } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport { abtarsHome } from \"../../paths.js\";\n\n\nfunction readJsonField(file: string, field: string): unknown {\n try {\n const data = JSON.parse(readFileSync(file, \"utf-8\"));\n return data[field];\n } catch { return undefined; }\n}\n\nfunction pidAlive(pid: number): boolean {\n try { process.kill(pid, 0); return true; } catch { return false; }\n}\n\n/** Linux-only guard: verify cmdline contains expected substring. Mac has no /proc \u2014 returns true. */\nfunction pidLooksLike(pid: number, needles: string[]): boolean {\n try {\n const cmdline = readFileSync(`/proc/${pid}/cmdline`, \"utf-8\");\n return needles.some(n => cmdline.includes(n));\n } catch { return true; /* /proc unavailable \u2014 trust the lock */ }\n}\n\ntype KillResult = \"killed\" | \"forced\" | \"gone\" | \"stale\" | \"not-running\";\n\nasync function killGracefully(pid: number, needles: string[]): Promise<KillResult> {\n if (!pidAlive(pid)) return \"not-running\";\n if (!pidLooksLike(pid, needles)) return \"stale\";\n\n try { process.kill(pid, \"SIGTERM\"); } catch { return \"not-running\"; }\n\n // 10 \u00D7 500ms poll = 5s grace per process\n for (let i = 0; i < 10; i++) {\n await new Promise(r => setTimeout(r, 500));\n if (!pidAlive(pid)) return \"killed\";\n }\n\n // Force kill\n try { process.kill(pid, \"SIGKILL\"); } catch { /* already gone */ }\n await new Promise(r => setTimeout(r, 500));\n return pidAlive(pid) ? \"not-running\" : \"forced\";\n}\n\nfunction removeLock(path: string): void {\n try { if (existsSync(path)) unlinkSync(path); }\n catch (err) { logAndSwallow(\"stop\", \"op\", err); }\n}\n\nexport async function stop(_opts: {}): Promise<number> {\n await printBanner(\"stop\");\n const home = abtarsHome();\n const manifestPath = join(home, \"manifest.json\");\n const bridgeLock = join(home, \"bridge.lock\");\n const stoppedSentinel = join(home, \".start-reason\");\n\n const installMode = readJsonField(manifestPath, \"installMode\") as string | undefined;\n\n // 0) Write sentinel \u2014 prevents watchdog from respawning even if kill races with launchd\n try { require(\"node:fs\").writeFileSync(stoppedSentinel, \"stopped\"); } catch {}\n\n // 1) Unload supervisor service (prevent respawn)\n let serviceWasStopped = false;\n if (installMode === \"daemon\") {\n if (process.platform === \"darwin\") {\n const plistPath = join(homedir(), \"Library\", \"LaunchAgents\", \"com.abtars.watchdog.plist\");\n const uid = `gui/${process.getuid!()}`;\n try { execFileSync(\"launchctl\", [\"bootout\", uid, plistPath], { timeout: 5000, stdio: 'pipe' }); serviceWasStopped = true; } catch {}\n await new Promise(r => setTimeout(r, 1000));\n // Retry in case launchd respawned before bootout took effect\n try { execFileSync(\"launchctl\", [\"bootout\", uid, plistPath], { timeout: 5000, stdio: 'pipe' }); } catch {}\n } else {\n try { execFileSync(\"systemctl\", [\"--user\", \"stop\", \"abtars-watchdog\"], { timeout: 5000, stdio: 'pipe' }); serviceWasStopped = true; } catch {}\n try { execFileSync(\"systemctl\", [\"--user\", \"disable\", \"abtars-watchdog\"], { timeout: 5000, stdio: 'pipe' }); } catch {}\n }\n }\n\n const wdPid = readJsonField(bridgeLock, \"watchdogPid\") as number | undefined;\n let wdResult: KillResult = \"not-running\";\n let wdPidActual: number | undefined;\n if (wdPid && wdPid > 0) {\n wdPidActual = wdPid;\n wdResult = await killGracefully(wdPid, [\"abtars-watchdog.sh\"]);\n }\n\n // 2) Bridge second\n const brPid = readJsonField(bridgeLock, \"pid\") as number | undefined;\n let brResult: KillResult = \"not-running\";\n let brPidActual: number | undefined;\n if (brPid && brPid > 0) {\n brPidActual = brPid;\n brResult = await killGracefully(brPid, [\"abtars\", \"main.js\", \"bundle\"]);\n if (brResult === \"killed\" || brResult === \"forced\") {\n removeLock(bridgeLock);\n } else if (brResult === \"stale\") {\n process.stdout.write(`\u26A0\uFE0F bridge.lock PID ${brPid} is not abtars \u2014 stale lock, removing\\n`);\n removeLock(bridgeLock);\n }\n }\n\n // 3) Summary + exit code\n const wdMsg = formatResult(\"Watchdog\", wdResult, wdPidActual);\n const brMsg = formatResult(\"Bridge\", brResult, brPidActual);\n\n if (wdResult === \"not-running\" && brResult === \"not-running\") {\n if (serviceWasStopped) {\n removeLock(bridgeLock);\n process.stdout.write(`\uD83D\uDED1 Stopped via service manager.\\n`);\n } else {\n process.stdout.write(`Nothing to stop \u2014 neither watchdog nor bridge running.\\n`);\n }\n return 0;\n }\n\n process.stdout.write(`\uD83D\uDED1 ${wdMsg}\\n ${brMsg}\\n`);\n\n if (installMode === \"daemon\") {\n process.stdout.write(` Service unloaded. Use 'abtars start' to restart.\\n`);\n }\n\n // Return 0 if nothing's still alive; 1 if we left something running\n const allDown =\n (wdResult === \"not-running\" || wdResult === \"killed\" || wdResult === \"forced\" || wdResult === \"stale\") &&\n (brResult === \"not-running\" || brResult === \"killed\" || brResult === \"forced\" || brResult === \"stale\");\n return allDown ? 0 : 1;\n}\n\nfunction formatResult(label: string, result: KillResult, pid: number | undefined): string {\n switch (result) {\n case \"killed\": return `${label} stopped (PID ${pid}, SIGTERM)`;\n case \"forced\": return `${label} stopped (PID ${pid}, SIGKILL)`;\n case \"stale\": return `${label} lock was stale (PID ${pid} not ours)`;\n case \"not-running\": return `${label} was not running`;\n case \"gone\": return `${label} kill failed \u2014 PID ${pid} still alive`;\n }\n}\n", "import { printBanner } from './banner.js';\n/**\n * `abtars backup` \u2014 full or config-only backup.\n *\n * Full (default): abtars zip + abmind zip (calls `abmind backup`)\n * Config: abtars config dirs only, no abmind\n *\n * Flags: --full (default), --config, --encrypt, --output <dir>, --prune-days N\n */\n\nimport { existsSync, mkdirSync, readdirSync, statSync, unlinkSync, renameSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { join, dirname, basename } from \"node:path\";\nimport { spawnSync } from \"node:child_process\";\nimport { createCipheriv, hkdfSync, randomBytes } from \"node:crypto\";\nimport { abtarsHome, abmindHome as resolveAbmindHome } from \"../../paths.js\";\n\nconst DEFAULT_PRUNE_DAYS = 7;\n\nconst ABTARS_EXCLUDE = [\n \"src\", \"logs\", \"overflow\", \"browser-socket\", \"app\", \"app.staging\", \"bin\", \"bridge.lock\",\n \"deploy.state\", \".bridge.flock\", \"state\", \"lib\", \"scripts\", \"skills/core\", \"core\",\n \"*.sock\", \"*.db-wal\", \"*.db-shm\",\n];\n\nconst CONFIG_DIRS = [\"config\", \"secret\", \"tasks\", \"skills\", \"kanban\", \"metrics\", \"auth\"];\n\nexport interface BackupOpts {\n config?: boolean;\n encrypt?: boolean;\n outputDir?: string;\n pruneDays?: number;\n}\n\nfunction timestamp(): string {\n const now = new Date();\n const d = `${now.getFullYear()}${String(now.getMonth() + 1).padStart(2, \"0\")}${String(now.getDate()).padStart(2, \"0\")}`;\n const t = `${String(now.getHours()).padStart(2, \"0\")}${String(now.getMinutes()).padStart(2, \"0\")}`;\n return `${d}-${t}`;\n}\n\nexport async function backup(opts: BackupOpts = {}): Promise<number> {\n await printBanner(\"backup\");\n const abHome = abtarsHome();\n const abmindHome = resolveAbmindHome();\n const ts = timestamp();\n const destDir = opts.outputDir ?? join(dirname(abHome), \".backup-abtars\");\n mkdirSync(destDir, { recursive: true });\n\n const isConfig = opts.config === true;\n const has7z = spawnSync(\"which\", [\"7z\"], { encoding: \"utf-8\" }).status === 0;\n const zipExt = has7z ? \".7z\" : \".zip\";\n\n // 1. Zip abtars state\n const abtarsPrefix = isConfig ? `abtars-config-${ts}` : `abtars-${ts}`;\n const abtarsZip = join(destDir, abtarsPrefix + zipExt);\n let zipOk: boolean;\n\n if (isConfig) {\n const existingDirs = CONFIG_DIRS.filter(d => existsSync(join(abHome, d)));\n if (existingDirs.length === 0) {\n process.stderr.write(\"Nothing to backup \u2014 no config dirs found\\n\");\n return 1;\n }\n if (has7z) {\n zipOk = spawnSync(\"7z\", [\"a\", abtarsZip, ...existingDirs], { cwd: abHome, encoding: \"utf-8\" }).status === 0;\n } else {\n zipOk = spawnSync(\"zip\", [\"-qr\", abtarsZip, ...existingDirs], { cwd: abHome, encoding: \"utf-8\" }).status === 0;\n }\n } else {\n if (has7z) {\n const excludeArgs = ABTARS_EXCLUDE.flatMap(ex => [\"-xr!\" + ex]);\n zipOk = spawnSync(\"7z\", [\"a\", abtarsZip, \".\", ...excludeArgs], { cwd: abHome, encoding: \"utf-8\" }).status === 0;\n } else {\n const excludePatterns = ABTARS_EXCLUDE.flatMap(ex => [`${ex}/*`, ex]);\n zipOk = spawnSync(\"zip\", [\"-qr\", abtarsZip, \".\", \"-x\", ...excludePatterns], { cwd: abHome, encoding: \"utf-8\" }).status === 0;\n }\n }\n\n if (!zipOk) {\n process.stderr.write(\"abtars zip failed\\n\");\n return 1;\n }\n\n const abtarsSize = (statSync(abtarsZip).size / 1024 / 1024).toFixed(1);\n process.stdout.write(`\u2713 ${basename(abtarsZip)} (${abtarsSize}MB)\\n`);\n\n // 2. Call abmind backup (full), move result to destDir\n if (!isConfig && existsSync(abmindHome)) {\n const abmindFile = runAbmindBackup(abmindHome);\n if (abmindFile) {\n const dest = join(destDir, basename(abmindFile));\n renameSync(abmindFile, dest);\n const size = (statSync(dest).size / 1024 / 1024).toFixed(1);\n process.stdout.write(`\u2713 ${basename(dest)} (${size}MB)\\n`);\n } else {\n process.stderr.write(\"\u26A0\uFE0F abmind backup failed\\n\");\n }\n }\n\n // 3. Encrypt abtars zip if requested\n if (opts.encrypt) {\n const encPath = abtarsZip + \".enc\";\n const ok = encryptFile(abtarsZip, encPath, abmindHome);\n if (!ok) return 1;\n unlinkSync(abtarsZip);\n process.stdout.write(`\u2713 encrypted \u2192 ${basename(encPath)}\\n`);\n }\n\n // 4. Prune old backups\n const pruneDays = opts.pruneDays ?? DEFAULT_PRUNE_DAYS;\n if (pruneDays > 0) {\n const maxAge = pruneDays * 86_400_000;\n const now = Date.now();\n for (const f of readdirSync(destDir)) {\n if (!(f.startsWith(\"abtars-\") || f.startsWith(\"abmind-\"))) continue;\n if (!(f.endsWith(\".zip\") || f.endsWith(\".7z\") || f.endsWith(\".abm\") || f.endsWith(\".enc\"))) continue;\n const fPath = join(destDir, f);\n try {\n if (now - statSync(fPath).mtimeMs > maxAge) unlinkSync(fPath);\n } catch { /* skip */ }\n }\n }\n\n return 0;\n}\n\nfunction runAbmindBackup(abmindHome: string): string | null {\n const backupsDir = join(abmindHome, \"backups\");\n mkdirSync(backupsDir, { recursive: true });\n\n const result = spawnSync(\"abmind\", [\"backup\"], { encoding: \"utf-8\", env: { ...process.env } });\n if (result.status !== 0) return null;\n\n // Full backup produces .zip; fallback to .abm for backward compat\n const files = readdirSync(backupsDir).filter(f => f.endsWith(\".zip\") || f.endsWith(\".7z\") || f.endsWith(\".abm\")).sort().reverse();\n return files[0] ? join(backupsDir, files[0]) : null;\n}\n\nfunction encryptFile(inputPath: string, outputPath: string, abmindHome: string): boolean {\n const keyPath = join(abmindHome, \"secret\", \"abmind.key\");\n if (!existsSync(keyPath)) {\n process.stderr.write(`\u26A0\uFE0F --encrypt requires ${keyPath}\\n`);\n return false;\n }\n const master = Buffer.from(readFileSync(keyPath, \"utf-8\").trim(), \"hex\");\n const key = Buffer.from(hkdfSync(\"sha256\", master, \"\", \"abtars-backup-v1\", 32));\n const iv = randomBytes(12);\n const cipher = createCipheriv(\"aes-256-gcm\", key, iv);\n\n const input = readFileSync(inputPath);\n const encrypted = Buffer.concat([cipher.update(input), cipher.final()]);\n const tag = cipher.getAuthTag();\n\n const out = Buffer.concat([iv, encrypted, tag]);\n writeFileSync(outputPath, out);\n return true;\n}\n", "import { printBanner } from './banner.js';\nimport { deriveFromPassphrase, writeKeyFile, writeKeyVerify, deriveKey } from '../../utils/crypto.js';\n/**\n * `abtars install` \u2014 first-time interactive configuration wizard\n * (plan #158 Phase 3, subsumes ticket #153).\n *\n * Two modes:\n * - Interactive (default): @clack/prompts wizard asks for bot token,\n * chat ID, transport provider, etc. Writes config/.env + config/users.json.\n * - Non-interactive: --non-interactive --accept-risk with explicit flags\n * for every choice. Fails if any required flag is missing.\n *\n * Scope (kept minimal \u2014 plan caps at ~200 LOC):\n * Prompts cover: Telegram bot token + primary chat ID, default transport\n * provider (openrouter | anthropic | openai), default model, optional\n * Discord a2a channel.\n *\n * Out of scope for Phase 3:\n * - Channel allowlist/users.json multi-user editing (#67 / #204)\n * - Skills configuration (each skill's .env key)\n * - Transport provider credentials beyond DEFAULT_PROVIDER (operator\n * edits config/.env directly post-install)\n */\n\nimport { logAndSwallow } from \"../../components/log-and-swallow.js\";\nimport { mkdir, readFile, writeFile } from 'node:fs/promises';\nimport { dirname, join } from 'node:path';\nimport { packagePaths, readManifest, resolveReleasesDir } from '../deploy-lib-import.js';\nimport { showHintOnce } from '../../components/hints.js';\n\nexport interface OnboardOptions {\n readonly nonInteractive: boolean;\n readonly acceptRisk: boolean;\n readonly telegramToken?: string;\n readonly telegramChatId?: string;\n readonly defaultProvider?: string;\n readonly defaultModel?: string;\n readonly apiKey?: string;\n readonly discordA2aChannel?: string;\n readonly userName?: string;\n readonly instanceName?: string;\n readonly passphrase?: string;\n readonly force: boolean;\n readonly source?: 'dev' | 'alpha' | 'stable';\n readonly localDir?: string;\n}\n\ntype ProviderChoice = 'openrouter' | 'anthropic' | 'openai' | 'ollama' | 'kiro' | 'gemini';\n\nconst VALID_PROVIDERS: readonly ProviderChoice[] = ['openrouter', 'anthropic', 'openai', 'ollama', 'kiro', 'gemini'];\n\n/** Map onboard choice \u2192 transport.json provider name */\nconst PROVIDER_TRANSPORT_NAME: Record<ProviderChoice, string> = {\n openrouter: 'openrouter',\n anthropic: 'anthropic',\n openai: 'openai',\n ollama: 'ollama',\n kiro: 'kiro',\n gemini: 'gemini',\n};\nconst DEFAULT_MODELS: Record<ProviderChoice, string> = {\n openrouter: 'deepseek/deepseek-v4-flash',\n anthropic: 'claude-sonnet-4-5-20250929',\n openai: 'gpt-4o',\n ollama: 'kimi-k2.5:cloud',\n kiro: 'claude-sonnet-4.6',\n gemini: 'gemini-2.5-flash',\n};\n\n/** Providers that use an API key + HTTP endpoint (can validate via /v1/models). */\nconst API_PROVIDERS: ReadonlySet<ProviderChoice> = new Set(['openrouter', 'anthropic', 'openai', 'ollama']);\n\nconst PROVIDER_ENDPOINT: Record<string, string> = {\n openrouter: 'https://openrouter.ai/api/v1',\n anthropic: 'https://api.anthropic.com/v1',\n openai: 'https://api.openai.com/v1',\n ollama: 'http://localhost:11434/v1',\n};\n\nconst PROVIDER_API_KEY_ENV: Record<ProviderChoice, string> = {\n openrouter: 'OPENROUTER_API_KEY',\n anthropic: 'ANTHROPIC_API_KEY',\n openai: 'OPENAI_API_KEY',\n ollama: 'OLLAMA_API_KEY',\n kiro: 'KIRO_API_KEY',\n gemini: 'GEMINI_API_KEY',\n};\n\ninterface WizardAnswers {\n readonly installMode: \"simple\" | \"daemon\";\n readonly userName: string;\n readonly instanceName: string;\n readonly passphrase: string;\n readonly telegramToken: string;\n readonly telegramChatId: string;\n readonly discordBotToken: string;\n readonly discordAppId: string;\n readonly discordA2aChannel: string;\n readonly defaultProvider: ProviderChoice;\n readonly defaultModel: string;\n readonly providerApiKey: string;\n readonly hailMaryModel: string;\n readonly bedTime: string;\n readonly wakeTime: string;\n readonly groqApiKey: string;\n readonly securityMode: string;\n readonly trustMode: boolean;\n}\n\n\nasync function runInteractive(existing: WizardAnswers | null): Promise<WizardAnswers | null> {\n const { intro, outro, text, select, confirm, isCancel, cancel } = await import('@clack/prompts');\n\n intro('abtars onboard \u2014 first-time setup');\n\n let userName = '';\n\n // 1. Agent name\n const instanceName = await text({\n message: 'abTARS agent name',\n placeholder: 'MyBot',\n initialValue: existing?.instanceName ?? '',\n validate: (v) => v?.trim() ? undefined : 'required',\n });\n if (isCancel(instanceName)) { cancel('Cancelled.'); return null; }\n\n // 2. Install mode\n const installMode = await select({\n message: 'Install mode',\n options: [\n { value: 'daemon', label: 'daemon \u2014 auto-restart, survives reboot (recommended)' },\n { value: 'simple', label: 'simple \u2014 manual start/stop' },\n ],\n initialValue: existing?.installMode ?? 'daemon',\n });\n if (isCancel(installMode)) { cancel('Cancelled.'); return null; }\n\n // 2b. Your name (used for encryption + user identity)\n if (!userName) {\n const uname = await text({\n message: 'Your name (used for encryption + identity)',\n placeholder: 'aksika',\n validate: (v) => v?.trim() ? undefined : 'required',\n });\n if (isCancel(uname)) { cancel('Cancelled.'); return null; }\n userName = String(uname).trim();\n }\n\n // 2c. Encryption passphrase (mandatory \u2014 protects secrets at rest)\n const passphrase = await text({\n message: 'Encryption passphrase (protects secrets at rest)',\n placeholder: 'choose a strong passphrase',\n validate: (v) => v?.trim() ? undefined : 'required \u2014 secrets are encrypted with this',\n });\n if (isCancel(passphrase)) { cancel('Cancelled.'); return null; }\n\n // 3. Security mode\n const securityMode = await select({\n message: 'Security mode',\n options: [\n { value: 'off', label: 'off \u2014 no restrictions (ActionGate still active)' },\n { value: 'guardrails', label: 'guardrails \u2014 path guard + command blocklist (recommended)' },\n { value: 'seatbelt', label: 'seatbelt \u2014 guardrails + OS per-command sandbox (bwrap/sandbox-exec)' },\n { value: 'docker', label: 'docker \u2014 full isolation: per-session Docker containers (requires Docker)' },\n ],\n initialValue: existing?.securityMode ?? 'guardrails',\n });\n if (isCancel(securityMode)) { cancel('Cancelled.'); return null; }\n\n // 4. Main chat ID\n const telegramChatId = await text({\n message: 'Main chat ID (Telegram)',\n placeholder: '123456789',\n initialValue: existing?.telegramChatId ?? '',\n validate: (v) => (!v || /^-?\\d+$/.test(v.trim())) ? undefined : 'expected numeric ID',\n });\n if (isCancel(telegramChatId)) { cancel('Cancelled.'); return null; }\n\n // 5. Telegram bot token\n const telegramToken = await text({\n message: 'Telegram bot token (@BotFather)',\n placeholder: '123456789:ABCdefGHI...',\n initialValue: existing?.telegramToken ?? '',\n validate: (v) => (!v || v.includes(':')) ? undefined : 'expected format \"id:secret\"',\n });\n if (isCancel(telegramToken)) { cancel('Cancelled.'); return null; }\n\n // 6-8. Discord (optional)\n const noteEmpty = 'Enter to skip';\n const discordBotToken = await text({\n message: `Discord bot token (${noteEmpty})`,\n placeholder: 'MTIzNDU2...',\n initialValue: existing?.discordBotToken,\n });\n if (isCancel(discordBotToken)) { cancel('Cancelled.'); return null; }\n\n const discordAppId = await text({\n message: `Discord app ID (${noteEmpty})`,\n placeholder: '987654321098765432',\n initialValue: existing?.discordAppId,\n validate: (v) => (!v || v.trim() === '' || /^\\d{10,20}$/.test(v.trim())) ? undefined : 'expected snowflake or empty',\n });\n if (isCancel(discordAppId)) { cancel('Cancelled.'); return null; }\n\n const discordA2aChannel = await text({\n message: `Discord channel ID (${noteEmpty})`,\n placeholder: '987654321098765432',\n initialValue: existing?.discordA2aChannel,\n validate: (v) => (!v || v.trim() === '' || /^\\d{10,20}$/.test(v.trim())) ? undefined : 'expected snowflake or empty',\n });\n if (isCancel(discordA2aChannel)) { cancel('Cancelled.'); return null; }\n\n // 9. Provider\n const defaultProvider = await select<ProviderChoice>({\n message: \"Model's provider (use /model to change later)\",\n options: [\n { value: 'openrouter', label: 'openrouter \u2014 many models via API key' },\n { value: 'anthropic', label: 'anthropic \u2014 Claude API (direct)' },\n { value: 'openai', label: 'openai \u2014 GPT API (direct)' },\n { value: 'ollama', label: 'ollama \u2014 local/cloud Ollama endpoint' },\n { value: 'kiro', label: 'kiro \u2014 Kiro CLI' },\n { value: 'gemini', label: 'gemini \u2014 Gemini CLI' },\n ],\n initialValue: existing?.defaultProvider ?? 'openrouter',\n });\n if (isCancel(defaultProvider)) { cancel('Cancelled.'); return null; }\n\n // 10. Main model (prefilled per provider)\n const defaultModel = await text({\n message: 'Main model',\n placeholder: DEFAULT_MODELS[defaultProvider],\n initialValue: existing?.defaultModel ?? DEFAULT_MODELS[defaultProvider],\n });\n if (isCancel(defaultModel)) { cancel('Cancelled.'); return null; }\n const modelStr = String(defaultModel ?? '').trim() || DEFAULT_MODELS[defaultProvider];\n\n // 11. API key \u2014 required + validated for OpenRouter, optional for others\n const apiKeyEnv = PROVIDER_API_KEY_ENV[defaultProvider];\n let providerApiKey = existing?.providerApiKey ?? '';\n if (defaultProvider === 'openrouter') {\n const endpoint = PROVIDER_ENDPOINT[defaultProvider] ?? '';\n let validated = false;\n while (!validated) {\n const v = await text({\n message: `${apiKeyEnv} (required)`,\n placeholder: 'sk-or-v1-...',\n initialValue: providerApiKey || existing?.providerApiKey,\n validate: (val) => val?.trim() ? undefined : 'API key required for OpenRouter',\n });\n if (isCancel(v)) { cancel('Cancelled.'); return null; }\n providerApiKey = String(v ?? '').trim();\n process.stdout.write(' Validating key...');\n const result = await checkModelAvailability(endpoint, providerApiKey, modelStr);\n if (result.ok) {\n process.stdout.write(` \u2713 valid\\n`);\n validated = true;\n } else {\n process.stdout.write(` \u2717 ${result.message}\\n`);\n const retry = await confirm({ message: 'Try a different key?', initialValue: true });\n if (isCancel(retry)) { cancel('Cancelled.'); return null; }\n if (!retry) { validated = true; }\n }\n }\n } else {\n const v = await text({\n message: `${apiKeyEnv} (${noteEmpty})`,\n placeholder: 'leave blank for local providers',\n initialValue: existing?.providerApiKey,\n });\n if (isCancel(v)) { cancel('Cancelled.'); return null; }\n providerApiKey = String(v ?? '').trim() || existing?.providerApiKey || '';\n }\n\n // Summary\n const mask = (s: string): string => s ? (s.length > 8 ? `${s.slice(0, 4)}\u2026${s.slice(-4)}` : '***') : '(skipped)';\n const lines = [\n '',\n '\u2500\u2500 Summary \u2500\u2500',\n ` Agent name: ${String(instanceName ?? '')}`,\n ` Install mode: ${installMode}`,\n ` Security: ${securityMode}`,\n ` Telegram chat ID: ${String(telegramChatId ?? '') || '(skipped)'}`,\n ` Telegram token: ${mask(String(telegramToken ?? ''))}`,\n ` Discord bot token: ${mask(String(discordBotToken ?? ''))}`,\n ` Provider: ${defaultProvider}`,\n ` Main model: ${modelStr}`,\n ` ${apiKeyEnv}: ${mask(providerApiKey)}`,\n '',\n ];\n process.stdout.write(lines.join('\\n'));\n\n const ok = await confirm({ message: 'Looks good? Write config?', initialValue: true });\n if (isCancel(ok) || !ok) { cancel('Cancelled \u2014 no files written.'); return null; }\n\n outro('Writing config\u2026');\n\n return {\n installMode: installMode as \"simple\" | \"daemon\",\n userName,\n instanceName: String(instanceName ?? '').trim(),\n passphrase: String(passphrase).trim(),\n telegramToken: String(telegramToken ?? '').trim(),\n telegramChatId: String(telegramChatId ?? '').trim(),\n discordBotToken: String(discordBotToken ?? '').trim(),\n discordAppId: String(discordAppId ?? '').trim(),\n discordA2aChannel: String(discordA2aChannel ?? '').trim(),\n defaultProvider: defaultProvider as ProviderChoice,\n defaultModel: modelStr,\n providerApiKey,\n hailMaryModel: modelStr,\n bedTime: '',\n wakeTime: '',\n groqApiKey: existing?.groqApiKey ?? '',\n securityMode: String(securityMode ?? 'guardrails'),\n trustMode: true,\n };\n}\n\n/** Ping GET <endpoint>/models with the API key. Returns ok=true if the model ID is listed. */\nasync function checkModelAvailability(endpoint: string, apiKey: string, model: string): Promise<{ ok: boolean; message: string }> {\n try {\n const res = await fetch(`${endpoint}/models`, {\n headers: { Authorization: `Bearer ${apiKey}` },\n signal: AbortSignal.timeout(8000),\n });\n if (!res.ok) return { ok: false, message: `provider returned ${res.status}` };\n const json = await res.json() as { data?: Array<{ id: string }> };\n const ids = (json.data ?? []).map(m => m.id);\n return ids.includes(model)\n ? { ok: true, message: 'available' }\n : { ok: false, message: `\"${model}\" not found in provider's model list` };\n } catch (err) {\n return { ok: false, message: `check failed: ${err instanceof Error ? err.message : String(err)}` };\n }\n}\n\nasync function validateModelCatalog(model: string, provider: string): Promise<{ ok: boolean; message: string }> {\n try {\n const { fileURLToPath } = await import('node:url');\n const here = dirname(fileURLToPath(import.meta.url));\n const candidates = [\n join(here, '..', '..', '..', 'templates', 'config', 'models.json'),\n join(here, '..', '..', 'templates', 'config', 'models.json'),\n join(here, '..', 'templates', 'config', 'models.json'),\n join(resolveReleasesDir(), 'src', 'abtars', 'templates', 'config', 'models.json'),\n join(process.env['HOME'] ?? '', '.abtars', 'config', 'models.json'),\n ];\n let catalog: Record<string, { transports?: string[] }> | null = null;\n for (const p of candidates) {\n try {\n catalog = JSON.parse(await readFile(p, 'utf-8'));\n break;\n } catch { /* try next */ }\n }\n if (!catalog) return { ok: true, message: '' }; // no catalog = skip validation\n const entry = catalog[model];\n if (!entry) return { ok: false, message: `Model \"${model}\" not found in models.json catalog` };\n const provName = PROVIDER_TRANSPORT_NAME[provider as ProviderChoice] ?? provider;\n if (entry.transports && !entry.transports.includes(provName)) {\n return { ok: false, message: `Model \"${model}\" not available for provider \"${provName}\" (supported: ${entry.transports.join(', ')})` };\n }\n return { ok: true, message: '' };\n } catch {\n return { ok: true, message: '' }; // validation error = don't block install\n }\n}\n\nfunction validateNonInteractive(opts: OnboardOptions): WizardAnswers | string {\n if (!opts.acceptRisk) {\n return '--non-interactive requires --accept-risk (you are bypassing safety prompts)';\n }\n if (!opts.instanceName) return '--instance-name is required in non-interactive mode';\n if (!opts.telegramToken) return '--telegram-token is required in non-interactive mode';\n if (!opts.telegramChatId) return '--telegram-chat-id is required in non-interactive mode';\n if (!opts.userName) return '--user-name is required in non-interactive mode';\n if (!opts.passphrase) return '--passphrase is required in non-interactive mode';\n const provider = (opts.defaultProvider ?? 'openrouter') as ProviderChoice;\n if (!VALID_PROVIDERS.includes(provider)) {\n return `--default-provider must be one of: ${VALID_PROVIDERS.join(', ')}`;\n }\n return {\n installMode: 'daemon',\n userName: opts.userName ?? '',\n instanceName: opts.instanceName ?? '',\n passphrase: opts.passphrase ?? '',\n telegramToken: opts.telegramToken ?? '',\n telegramChatId: opts.telegramChatId ?? '',\n discordBotToken: '',\n discordAppId: '',\n discordA2aChannel: opts.discordA2aChannel ?? '',\n defaultProvider: provider,\n defaultModel: opts.defaultModel ?? DEFAULT_MODELS[provider],\n providerApiKey: opts.apiKey ?? '',\n hailMaryModel: '',\n bedTime: '',\n wakeTime: '',\n groqApiKey: '',\n securityMode: 'guardrails',\n trustMode: true,\n };\n}\n\nasync function readExisting(envPath: string): Promise<WizardAnswers | null> {\n try {\n const content = await readFile(envPath, 'utf-8');\n const kv = new Map<string, string>();\n for (const line of content.split('\\n')) {\n const m = line.match(/^([A-Z_][A-Z0-9_]*)=(.*)$/);\n if (m && m[1] !== undefined && m[2] !== undefined) kv.set(m[1], m[2]);\n }\n const provider = (kv.get('DEFAULT_PROVIDER') ?? 'openrouter') as ProviderChoice;\n if (!VALID_PROVIDERS.includes(provider)) return null;\n const apiKeyEnv = PROVIDER_API_KEY_ENV[provider];\n return {\n installMode: 'simple',\n userName: kv.get('USER_DISPLAY_NAME') ?? '',\n instanceName: '',\n passphrase: '',\n telegramToken: kv.get('TELEGRAM_BOT_TOKEN') ?? '',\n telegramChatId: kv.get('MAIN_CHAT_ID') ?? '',\n discordBotToken: kv.get('DISCORD_BOT_TOKEN') ?? '',\n discordAppId: kv.get('DISCORD_APP_ID') ?? '',\n discordA2aChannel: kv.get('DISCORD_A2A_CHANNEL_ID') ?? '',\n defaultProvider: provider,\n defaultModel: kv.get('DEFAULT_MODEL') ?? DEFAULT_MODELS[provider],\n providerApiKey: apiKeyEnv ? (kv.get(apiKeyEnv) ?? '') : '',\n hailMaryModel: '',\n bedTime: kv.get('BED_TIME') ?? '',\n wakeTime: kv.get('WAKE_TIME') ?? '',\n groqApiKey: kv.get('GROQ_API_KEY') ?? '',\n securityMode: kv.get('SECURITY_MODE') ?? 'guardrails',\n trustMode: kv.get('TRUST_MODE') === 'true',\n };\n } catch {\n return null;\n }\n}\n\nfunction mergeEnvContent(existing: string, answers: WizardAnswers): string {\n const owned = new Set([\n 'MAIN_CHAT_ID',\n 'DISCORD_APP_ID', 'DISCORD_A2A_CHANNEL_ID',\n 'DEFAULT_PROVIDER', 'DEFAULT_MODEL',\n 'BED_TIME', 'WAKE_TIME', 'HEARTBEAT_INTERVAL_SEC', 'TRUST_MODE',\n 'TELEGRAM_ENABLED', 'DISCORD_ENABLED', 'IRC_ENABLED',\n 'LOG_LEVEL', 'ACTIVE_MEMORY', 'ENABLE_AGENT_API', 'SELFHEAL_ENABLED',\n ]);\n const keptLines: string[] = [];\n for (const line of existing.split('\\n')) {\n const m = line.match(/^([A-Z_][A-Z0-9_]*)=/);\n if (m && m[1] !== undefined && owned.has(m[1])) continue;\n keptLines.push(line);\n }\n while (keptLines.length > 0 && keptLines[keptLines.length - 1] === '') keptLines.pop();\n\n const newBlock = [\n '',\n '# --- abtars onboard-managed ---',\n `DEFAULT_PROVIDER=${answers.defaultProvider}`,\n `DEFAULT_MODEL=${answers.defaultModel}`,\n ];\n if (answers.telegramChatId) newBlock.push(`MAIN_CHAT_ID=${answers.telegramChatId}`);\n else if (answers.discordA2aChannel) newBlock.push(`MAIN_CHAT_ID=${answers.discordA2aChannel}`);\n if (answers.discordAppId) newBlock.push(`DISCORD_APP_ID=${answers.discordAppId}`);\n if (answers.discordA2aChannel) newBlock.push(`DISCORD_A2A_CHANNEL_ID=${answers.discordA2aChannel}`);\n if (answers.bedTime) newBlock.push(`BED_TIME=${answers.bedTime}`);\n if (answers.wakeTime) newBlock.push(`WAKE_TIME=${answers.wakeTime}`);\n newBlock.push(`HEARTBEAT_INTERVAL_SEC=60`);\n newBlock.push(`SECURITY_MODE=${answers.securityMode}`);\n newBlock.push(`TRUST_MODE=${answers.trustMode ? 'true' : 'false'}`);\n newBlock.push(`TELEGRAM_ENABLED=${answers.telegramToken ? 'true' : 'false'}`);\n newBlock.push(`DISCORD_ENABLED=${answers.discordBotToken ? 'true' : 'false'}`);\n newBlock.push(`IRC_ENABLED=false`);\n newBlock.push(`LOG_LEVEL=debug`);\n newBlock.push(`ACTIVE_MEMORY=true`);\n newBlock.push(`ENABLE_AGENT_API=false`);\n newBlock.push(`SELFHEAL_ENABLED=true`);\n\n return [...keptLines, ...newBlock, ''].join('\\n');\n}\n\nexport async function onboard(opts: OnboardOptions): Promise<number> {\n await printBanner(\"install\");\n const paths = packagePaths('abtars');\n\n // Install log (#718)\n const { initInstallLog, logInstall, logInstallHeader } = await import(\"../install-log.js\");\n initInstallLog(paths.home);\n logInstallHeader(\"onboard\");\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\") || chunk.startsWith(\"\u2022\"))) logInstall(chunk.trimEnd());\n return _origWrite(chunk, ...args);\n }) as typeof process.stdout.write;\n\n let manifest = await readManifest(paths.manifest);\n if (!manifest) {\n // First install \u2014 create skeleton + manifest\n const { mkdirSync, existsSync: fileExists, symlinkSync } = await import(\"node:fs\");\n const { chmod } = await import(\"node:fs/promises\");\n for (const d of [\"logs\", \"config\", \"secret\", \"skills/core\", \"skills/self\", \"skills/custom\", \"skills/downloaded\", \"kanban\", \"state\"]) {\n mkdirSync(join(paths.home, d), { recursive: true });\n }\n await chmod(join(paths.home, \"secret\"), 0o700);\n await chmod(join(paths.home, \"config\"), 0o700);\n // Ensure ~/.local/bin/ exists and has our binary (symlink from global npm bin if needed)\n const { homedir } = await import(\"node:os\");\n const localBin = join(homedir(), \".local\", \"bin\");\n mkdirSync(localBin, { recursive: true });\n const localAbtars = join(localBin, \"abtars\");\n if (!fileExists(localAbtars)) {\n try {\n const { execSync: ex } = await import(\"node:child_process\");\n const globalBin = ex(\"npm root -g\", { encoding: \"utf-8\", timeout: 5000, stdio: [\"pipe\", \"pipe\", \"ignore\"] }).trim().replace(/\\/node_modules$/, \"\");\n const npmAbtars = join(globalBin, \"abtars\");\n if (fileExists(npmAbtars)) {\n symlinkSync(npmAbtars, localAbtars);\n }\n } catch { /* npm not available \u2014 binary already in PATH */ }\n }\n const { hostname } = await import(\"node:os\");\n const { emptyManifest, writeManifest: wm } = await import(\"../deploy-lib-import.js\");\n const mode = process.platform === \"darwin\" ? \"daemon\" : \"daemon\";\n manifest = { ...emptyManifest(\"abtars\", hostname()), installMode: mode } as any;\n await wm(paths.manifest, manifest as any);\n process.stdout.write(`\u2713 skeleton at ${paths.home}\\n\u2713 install mode: ${mode}\\n`);\n }\n\n const envPath = join(paths.config, '.env');\n const existing = await readExisting(envPath);\n const secretDir = join(paths.home, 'secret');\n const { existsSync: secretExists } = await import('node:fs');\n const hasSecretToken = secretExists(join(secretDir, 'TELEGRAM_BOT_TOKEN')) || secretExists(join(secretDir, 'DISCORD_BOT_TOKEN'));\n const hasUserConfig = existing !== null && (existing.telegramToken || existing.discordBotToken || hasSecretToken);\n if (hasUserConfig && !opts.force) {\n showHintOnce(\"onboard-reoffer\", \"Re-running onboard overwrites config. Use --force to confirm, or edit ~/.abtars/config/.env directly.\");\n if (opts.nonInteractive) {\n process.stderr.write(`config/.env already configured. Re-run with --force to overwrite.\\n`);\n return 3;\n }\n }\n\n let answers: WizardAnswers | null;\n if (opts.nonInteractive) {\n const result = validateNonInteractive(opts);\n if (typeof result === 'string') {\n process.stderr.write(`error: ${result}\\n`);\n return 4;\n }\n answers = result;\n // Validate API key in non-interactive mode \u2014 warn but continue\n if (answers.providerApiKey && API_PROVIDERS.has(answers.defaultProvider)) {\n const endpoint = PROVIDER_ENDPOINT[answers.defaultProvider] ?? '';\n const check = await checkModelAvailability(endpoint, answers.providerApiKey, answers.defaultModel);\n if (check.ok) {\n process.stdout.write(`\u2713 API key valid (${answers.defaultModel} available)\\n`);\n } else {\n process.stderr.write(`\u26A0 API key validation failed: ${check.message}\\n Continuing \u2014 fix key in ~/.abtars/config/.env or secret/ later.\\n`);\n }\n }\n } else {\n answers = await runInteractive(existing);\n if (answers === null) return 1;\n }\n\n // Validate model against models.json catalog\n const catalogResult = await validateModelCatalog(answers.defaultModel, answers.defaultProvider);\n if (!catalogResult.ok) {\n if (opts.nonInteractive) {\n if (!opts.force) {\n process.stderr.write(`error: ${catalogResult.message}\\n Use --force to override.\\n`);\n return 4;\n }\n process.stderr.write(`\u26A0 ${catalogResult.message} (--force: continuing)\\n`);\n } else {\n const { confirm: cfm, isCancel: isCnl, cancel: cnl } = await import('@clack/prompts');\n process.stderr.write(`\u26A0 ${catalogResult.message}\\n`);\n const cont = await cfm({ message: 'Continue with this model?', initialValue: false });\n if (isCnl(cont) || !cont) { cnl('Cancelled.'); return 1; }\n }\n }\n\n // Read current .env to preserve operator-added lines.\n let currentContent = '';\n try {\n currentContent = await readFile(envPath, 'utf-8');\n } catch {\n // File doesn't exist yet \u2014 install should have seeded it, but guard anyway.\n currentContent = '';\n }\n\n const next = mergeEnvContent(currentContent, answers);\n await writeFile(envPath, next, { mode: 0o600 });\n process.stdout.write(`\\n\u2713 Wrote ${envPath}\\n`);\n\n // Write secrets to ~/.abtars/secret/ (boot auto-encrypts on first start)\n const secretDirPath = join(paths.home, 'secret');\n await mkdir(secretDirPath, { recursive: true });\n const secrets: Array<[string, string]> = [];\n if (answers.telegramToken) secrets.push(['TELEGRAM_BOT_TOKEN', answers.telegramToken]);\n if (answers.discordBotToken) secrets.push(['DISCORD_BOT_TOKEN', answers.discordBotToken]);\n if (answers.providerApiKey) {\n const providerKeyName = PROVIDER_API_KEY_ENV[answers.defaultProvider];\n if (providerKeyName) secrets.push([providerKeyName, answers.providerApiKey]);\n }\n if (answers.groqApiKey) secrets.push(['GROQ_API_KEY', answers.groqApiKey]);\n for (const [name, value] of secrets) {\n await writeFile(join(secretDirPath, name), value, { mode: 0o600 });\n }\n if (secrets.length > 0) process.stdout.write(`\u2713 ${secrets.length} secrets \u2192 ${secretDirPath}\\n`);\n\n // Write install mode to manifest\n const { writeManifest } = await import('../deploy-lib-import.js');\n const mf = await readManifest(paths.manifest);\n if (mf) await writeManifest(paths.manifest, { ...mf, installMode: answers.installMode });\n process.stdout.write(`\u2713 install mode: ${answers.installMode}\\n`);\n\n // Write transport.json with selected provider + model\n {\n const transportPath = join(paths.config, 'transport.json');\n let tc: Record<string, unknown> = {};\n try {\n tc = JSON.parse(await readFile(transportPath, 'utf-8'));\n } catch (err) { logAndSwallow(\"onboard\", \"op\", err); }\n\n // Seed providers and agents if not already present\n if (!tc[\"providers\"]) {\n tc[\"providers\"] = {\n \"kiro\": { \"transport\": \"acp\", \"cli\": \"kiro-cli\" },\n \"ollama\": { \"transport\": \"api\", \"endpoint\": \"http://localhost:11434/v1\" },\n \"openrouter\": { \"transport\": \"api\", \"endpoint\": \"https://openrouter.ai/api/v1\", \"apiKeyEnv\": \"OPENROUTER_API_KEY\" },\n };\n }\n if (!tc[\"agents\"]) {\n const provName = PROVIDER_TRANSPORT_NAME[answers.defaultProvider] ?? answers.defaultProvider;\n tc[\"agents\"] = {\n \"professor\": { \"model\": answers.defaultModel, \"provider\": provName },\n \"dreamy\": { \"model\": answers.defaultModel, \"provider\": provName },\n \"browsie\": { \"model\": answers.defaultModel, \"provider\": provName },\n \"coding\": { \"model\": answers.defaultModel, \"provider\": provName },\n };\n }\n if (answers.hailMaryModel) {\n const provName = PROVIDER_TRANSPORT_NAME[answers.defaultProvider] ?? answers.defaultProvider;\n tc[\"hailMary\"] = { model: answers.hailMaryModel, provider: provName };\n }\n\n await writeFile(transportPath, JSON.stringify(tc, null, 2) + '\\n', { mode: 0o600 });\n process.stdout.write(`\u2713 transport.json \u2192 ${transportPath}\\n`);\n }\n\n // Write users.json (always \u2014 onboard has the real chat ID)\n {\n const usersPath = join(paths.config, 'users.json');\n const userId = answers.userName.toLowerCase().replace(/[^a-z0-9]/g, '') || 'user';\n const platforms: Record<string, unknown> = {};\n if (answers.telegramChatId) platforms[\"telegram\"] = parseInt(answers.telegramChatId, 10) || answers.telegramChatId;\n if (answers.discordAppId) platforms[\"discord\"] = answers.discordAppId;\n const users = {\n users: [{\n userId,\n displayName: answers.userName || userId,\n role: \"master\",\n maxClass: 3,\n tools: [\"all\"],\n platforms,\n allowedChats: [],\n }],\n };\n await writeFile(usersPath, JSON.stringify(users, null, 2) + '\\n', { mode: 0o600 });\n process.stdout.write(`\u2713 users.json \u2192 ${usersPath}\\n`);\n\n // #1009: Write instance name to peers.json\n const peersPath = join(paths.config, 'peers.json');\n let peersJson: Record<string, unknown> = { self: { name: \"default\" }, peers: {} };\n try { peersJson = JSON.parse(await readFile(peersPath, 'utf-8')); } catch { /* missing \u2014 use default */ }\n if (!peersJson.self || typeof peersJson.self !== 'object') peersJson.self = {};\n (peersJson.self as Record<string, unknown>).name = answers.instanceName || answers.userName.toLowerCase().replace(/[^a-z0-9-]/g, '') || 'default';\n await writeFile(peersPath, JSON.stringify(peersJson, null, 2) + '\\n', { mode: 0o600 });\n process.stdout.write(`\u2713 peers.json (self.name: ${(peersJson.self as Record<string, unknown>).name}) \u2192 ${peersPath}\\n`);\n\n // Copy models.json (model metadata for context window, cost, rank)\n const modelsPath = join(paths.config, 'models.json');\n const { existsSync: modelsExists, copyFileSync: modelsCopy } = await import('node:fs');\n if (!modelsExists(modelsPath)) {\n const { fileURLToPath } = await import('node:url');\n const here = dirname(fileURLToPath(import.meta.url));\n const modelsCandidates = [\n join(here, '..', '..', '..', 'config', 'models.json'),\n join(here, '..', '..', 'config', 'models.json'),\n join(resolveReleasesDir(), 'src', 'abtars', 'config', 'models.json'),\n ];\n for (const p of modelsCandidates) {\n if (modelsExists(p)) { modelsCopy(p, modelsPath); process.stdout.write(`\u2713 models.json \u2192 ${modelsPath}\\n`); break; }\n }\n }\n\n // Check abmind encryption compatibility\n try {\n const { abmindHome } = await import(\"../../paths.js\");\n const manifestPath = join(abmindHome(), 'manifest.json');\n const manifest = JSON.parse((await import('node:fs')).readFileSync(manifestPath, 'utf-8'));\n if (manifest.encryptionUser && manifest.encryptionUser !== answers.userName) {\n process.stdout.write(`\u26A0\uFE0F abmind encryption uses name '${manifest.encryptionUser}' but you entered '${answers.userName}'. Backup restore will need the encryption name ('${manifest.encryptionUser}').\\n`);\n }\n } catch { /* no abmind or no manifest \u2014 fine */ }\n }\n\n // Initialize passphrase-based encryption \u2014 generate abtars.key (#1166)\n if (answers.passphrase && answers.userName) {\n try {\n const master = deriveFromPassphrase(answers.passphrase, answers.userName);\n const keyPath = join(paths.home, \"config\", \"abtars.key\");\n writeKeyFile(keyPath, master);\n writeKeyVerify(keyPath, deriveKey(master));\n process.stdout.write(`\u2713 abtars.key derived from passphrase\\n`);\n } catch (err) {\n process.stdout.write(`\u26A0 Key init failed: ${err instanceof Error ? err.message : String(err)}\\n`);\n }\n }\n\n // Seed default tasks (#383) \u2014 morning greeting + midnight backup\n if (answers.telegramChatId) {\n await seedDefaultTasks(answers.telegramChatId, paths.home);\n }\n\n // Seed default agent-api rules\n process.stdout.write(`\\n\uD83D\uDCA1 To edit providers, agents, hailMary, fallback chains \u2014 edit:\\n ${join(paths.config, 'transport.json')}\\n Docs: https://aksika.github.io/abtars/\\n`);\n\n // Run update (clone source, build, deploy, start bridge)\n process.stdout.write(`\\nRunning abtars update...\\n`);\n const { update } = await import(\"./update.js\");\n return await update({ source: opts.source ?? \"alpha\", localDir: opts.localDir, skipFreshness: true, allowAbmindMismatch: false });\n}\n\n// \u2500\u2500 Default task seeding (#383) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/**\n * Seed default tasks (#383) via copy \u2014 skipped if tasks.json\n * already exists. Called from onboard after .env is persisted so chatId\n * is available.\n */\nasync function seedDefaultTasks(_chatId: string, abtarsHome: string): Promise<void> {\n const { existsSync, mkdirSync, copyFileSync } = await import('node:fs');\n const tasksJson = join(abtarsHome, 'tasks', 'tasks.json');\n if (existsSync(tasksJson)) {\n process.stdout.write(`\u2022 tasks.json exists \u2014 skipping default-task seed\\n`);\n return;\n }\n\n const { fileURLToPath } = await import('node:url');\n const here = dirname(fileURLToPath(import.meta.url));\n const candidates = [\n join(here, '..', '..', '..', 'config', 'tasks', 'tasks.json'),\n join(here, '..', '..', 'config', 'tasks', 'tasks.json'),\n join(resolveReleasesDir(), 'src', 'abtars', 'config', 'tasks', 'tasks.json'),\n ];\n let templatePath: string | null = null;\n for (const p of candidates) {\n if (existsSync(p)) { templatePath = p; break; }\n }\n if (!templatePath) {\n return;\n }\n\n mkdirSync(join(abtarsHome, 'tasks'), { recursive: true });\n copyFileSync(templatePath, tasksJson);\n process.stdout.write(`\u2713 default tasks seeded\\n`);\n}\n", "/**\n * First-touch hint system \u2014 show a hint once, persist to manifest.\n * Output to stderr with \uD83D\uDCA1 prefix. Never corrupts manifest (atomic write).\n */\n\nimport { existsSync, readFileSync, writeFileSync, renameSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\nfunction manifestPath(): string {\n const home = process.env[\"ABTARS_HOME\"] ?? join(process.env[\"HOME\"] ?? \"\", \".abtars\");\n return join(home, \"manifest.json\");\n}\n\nfunction readManifest(): Record<string, unknown> {\n const path = manifestPath();\n if (!existsSync(path)) return {};\n try { return JSON.parse(readFileSync(path, \"utf-8\")); }\n catch { return {}; }\n}\n\nfunction writeManifestAtomic(data: Record<string, unknown>): void {\n const path = manifestPath();\n const tmp = path + \".tmp\";\n writeFileSync(tmp, JSON.stringify(data, null, 2) + \"\\n\");\n renameSync(tmp, path);\n}\n\nexport function showHintOnce(id: string, text: string): void {\n const manifest = readManifest();\n const seen = (manifest[\"hintsSeen\"] as Record<string, string> | undefined) ?? {};\n if (seen[id]) return;\n\n process.stderr.write(`\\n\uD83D\uDCA1 ${text}\\n\\n`);\n\n seen[id] = new Date().toISOString();\n manifest[\"hintsSeen\"] = seen;\n writeManifestAtomic(manifest);\n}\n", "import { printBanner } from './banner.js';\n/**\n * `abtars status` \u2014 print manifest + bridge state.\n * Read-only. Exit code 0 on healthy install, 1 otherwise.\n */\n\nimport { existsSync } from 'node:fs';\nimport { packagePaths, readManifest, readSentinel } from '../deploy-lib-import.js';\nimport { readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\nexport async function status(): Promise<number> {\n await printBanner(\"status\");\n const paths = packagePaths('abtars');\n const manifest = await readManifest(paths.manifest);\n\n if (!manifest) {\n process.stdout.write(\n `abtars: not installed (no manifest at ${paths.manifest})\\n` +\n `Run 'abtars install' to set up.\\n`,\n );\n return 1;\n }\n\n const appExists = existsSync(paths.app);\n let rollbackCount = 0;\n try {\n const history: string[] = JSON.parse(readFileSync(paths.releasesHistory, \"utf-8\"));\n rollbackCount = Math.min(history.length - 1, 3); // skip current\n } catch {}\n\n const lines = [\n `abtars status`,\n ` home: ${paths.home}`,\n ` version: ${manifest.version || '(unset \u2014 run update)'}`,\n ` commit: ${manifest.commit ?? '(unknown)'}`,\n ` branch: ${manifest.branch ?? '(unknown)'}`,\n ` source: ${manifest.source}`,\n ` mode: ${manifest.installMode ?? 'daemon'}`,\n ` activated: ${manifest.activatedAt}`,\n ` app/: ${appExists ? '\u2713 present' : '\u2717 missing'}`,\n ` rollback: ${rollbackCount > 0 ? `${rollbackCount} available` : '\u25CB none'}`,\n ` previous: ${manifest.previousVersion ?? '(none)'}`,\n ` host: ${manifest.host}`,\n ];\n\n // Bridge state\n try {\n const bridgeLock = JSON.parse(readFileSync(join(paths.home, 'bridge.lock'), 'utf-8'));\n if (bridgeLock.pid) {\n const alive = (() => { try { process.kill(bridgeLock.pid, 0); return true; } catch { return false; } })();\n lines.push(` bridge: ${alive ? '\u25CF running' : '\u2717 dead'} (pid ${bridgeLock.pid})`);\n } else {\n lines.push(` bridge: \u25CB stopped`);\n }\n } catch {\n lines.push(` bridge: \u25CB stopped`);\n }\n\n // Dashboard + Agent API ports from .env\n try {\n const envContent = readFileSync(join(paths.home, 'config', '.env'), 'utf-8');\n const webPort = envContent.match(/^WEB_PORT=(\\d+)/m)?.[1];\n const apiPort = envContent.match(/^AGENT_API_PORT=(\\d+)/m)?.[1];\n if (webPort) lines.push(` dashboard: :${webPort}`);\n if (apiPort) lines.push(` agent-api: :${apiPort}`);\n } catch { /* no .env */ }\n\n process.stdout.write(`${lines.join('\\n')}\\n`);\n\n // Sentinel warning\n const sentinel = readSentinel(paths.home);\n if (sentinel?.status === 'pending') {\n const age = Date.now() - new Date(sentinel.startedAt).getTime();\n if (age > 5 * 60_000) {\n process.stderr.write(`\\n\u26A0\uFE0F Last update (${sentinel.version}) may have failed \u2014 bridge never confirmed boot.\\n`);\n return 1;\n }\n }\n\n if (!appExists) {\n process.stderr.write(`\\n\u26A0\uFE0F app/ directory missing. Run 'abtars update' to deploy.\\n`);\n return 1;\n }\n\n return 0;\n}\n", "/**\n * abtars CLI top-level dispatcher.\n *\n * Subcommands:\n * install [--upgrade] [--force]\n * update [--dev [DIR] | --alpha | --stable]\n * rollback [--to <version>]\n * status\n */\n\nprocess.umask(0o077); // #441: all runtime files 600, dirs 700\nimport { doctor } from './commands/doctor.js';\nimport { uninstall } from './commands/uninstall.js';\nimport { backup } from './commands/backup.js';\nimport { onboard } from './commands/onboard.js';\nimport { rollback } from './commands/rollback.js';\nimport { restart } from './commands/restart.js';\nimport { status } from './commands/status.js';\nimport { stop } from './commands/stop.js';\nimport { update } from './commands/update.js';\n\ntype Args = {\n readonly command: string;\n readonly flags: ReadonlyMap<string, string | boolean>;\n};\n\nfunction parseArgs(argv: readonly string[]): Args {\n const command = argv[0] ?? '';\n const flags = new Map<string, string | boolean>();\n for (let i = 1; i < argv.length; i++) {\n const a = argv[i];\n if (a === undefined) continue;\n if (a.startsWith('--')) {\n const eqIdx = a.indexOf('=');\n if (eqIdx > 2) {\n flags.set(a.slice(2, eqIdx), a.slice(eqIdx + 1));\n } else {\n const next = argv[i + 1];\n if (next !== undefined && !next.startsWith('--')) {\n flags.set(a.slice(2), next);\n i++;\n } else {\n flags.set(a.slice(2), true);\n }\n }\n }\n }\n return { command, flags };\n}\n\nfunction printUsage(): void {\n process.stdout.write(\n `abtars \u2014 install/update CLI (#158)\n\nUsage:\n abtars install [--force] [--mode=simple|daemon] [--restore <backup.zip>]\n abtars install --non-interactive --accept-risk [onboard flags...]\n abtars uninstall [--yes]\n abtars update [--dev [DIR] | --alpha | --stable]\n abtars rollback [--to <version>]\n abtars backup [--config] [--encrypt] [--output <dir>] [--prune-days N]\n abtars restore <file.zip|.7z|.abm|.enc> [--config] [--passphrase <p>]\n abtars doctor [--json] [--fix]\n abtars restart [--cold]\n abtars start\n abtars stop\n abtars status\n abtars logs\n abtars config\n abtars deps [list|install|remove]\n `,\n );\n}\n\nexport async function main(argv: readonly string[]): Promise<number> {\n // Handle --version before parsing (it looks like a command to parseArgs)\n if (argv[0] === '--version' || argv[0] === '-v' || argv[0] === 'version') {\n const { readFileSync } = await import('node:fs');\n const { join, dirname } = await import('node:path');\n const { fileURLToPath } = await import('node:url');\n const here = dirname(fileURLToPath(import.meta.url));\n try {\n const pkg = JSON.parse(readFileSync(join(here, '..', 'package.json'), 'utf-8'));\n process.stdout.write(`${pkg.version}\\n`);\n } catch {\n process.stdout.write('unknown\\n');\n }\n return 0;\n }\n\n const { command, flags } = parseArgs(argv);\n\n try {\n switch (command) {\n case 'install': {\n if (flags.get('help') === true) { printUsage(); return 0; }\n // Channel: --dev [dir], --alpha, --stable (same as update)\n let source: 'dev' | 'alpha' | 'stable' = 'alpha';\n let installLocalDir: string | undefined;\n if (flags.get('dev') === true || typeof flags.get('dev') === 'string') {\n source = 'dev';\n if (typeof flags.get('dev') === 'string') installLocalDir = flags.get('dev') as string;\n } else if (flags.get('alpha') === true) {\n source = 'alpha';\n } else if (flags.get('stable') === true) {\n source = 'stable';\n } else if (flags.has('local') || flags.get('source') === 'local') {\n source = 'dev';\n if (typeof flags.get('local') === 'string') installLocalDir = flags.get('local') as string;\n } else if (flags.get('source') === 'npm') {\n source = 'alpha';\n }\n return await onboard({\n nonInteractive: flags.get('non-interactive') === true,\n acceptRisk: flags.get('accept-risk') === true,\n telegramToken: typeof flags.get('telegram-token') === 'string' ? (flags.get('telegram-token') as string) : undefined,\n telegramChatId: typeof flags.get('telegram-chat-id') === 'string' ? (flags.get('telegram-chat-id') as string) : undefined,\n defaultProvider: typeof flags.get('default-provider') === 'string' ? (flags.get('default-provider') as string) : undefined,\n defaultModel: typeof flags.get('default-model') === 'string' ? (flags.get('default-model') as string) : undefined,\n apiKey: typeof flags.get('api-key') === 'string' ? (flags.get('api-key') as string) : undefined,\n discordA2aChannel: typeof flags.get('discord-a2a-channel') === 'string' ? (flags.get('discord-a2a-channel') as string) : undefined,\n userName: typeof flags.get('user-name') === 'string' ? (flags.get('user-name') as string) : undefined,\n instanceName: typeof flags.get('instance-name') === 'string' ? (flags.get('instance-name') as string) : undefined,\n passphrase: typeof flags.get('passphrase') === 'string' ? (flags.get('passphrase') as string) : undefined,\n force: flags.get('force') === true,\n source,\n localDir: installLocalDir,\n });\n }\n case 'uninstall':\n return await uninstall({ yes: flags.get('yes') === true });\n case 'update': {\n // Determine channel: --dev [dir], --alpha, --stable (hidden: --local [dir], --source local|npm)\n let source: 'dev' | 'alpha' | 'stable' | null = null;\n let localDir: string | undefined;\n if (flags.get('dev') === true || typeof flags.get('dev') === 'string') {\n source = 'dev';\n if (typeof flags.get('dev') === 'string') localDir = flags.get('dev') as string;\n } else if (flags.get('alpha') === true) {\n source = 'alpha';\n } else if (flags.get('stable') === true) {\n source = 'stable';\n } else if (flags.has('local') || flags.get('source') === 'local') {\n // Hidden alias: --local [dir] or --source local\n source = 'dev';\n if (typeof flags.get('local') === 'string') localDir = flags.get('local') as string;\n } else if (flags.get('source') === 'npm') {\n // Hidden alias: --source npm \u2192 alpha\n source = 'alpha';\n }\n return await update({\n source,\n localDir,\n skipFreshness: source === 'dev',\n allowAbmindMismatch: flags.get('allow-abmind-mismatch') === true,\n });\n }\n case '__deploy': {\n // Hidden (#1237): activation entry. Run by the freshly-staged bundle;\n // consumes a StagedRelease produced by the bootstrap. Not user-facing.\n const { deployActivationCli } = await import('./deploy-lib/deploy.js');\n return await deployActivationCli(flags);\n }\n case 'rollback':\n return await rollback({ to: typeof flags.get('to') === 'string' ? Number(flags.get('to')) : undefined });\n case 'backup':\n return await backup({\n config: flags.get('config') === true,\n encrypt: flags.get('encrypt') === true,\n outputDir: typeof flags.get('output') === 'string' ? (flags.get('output') as string) : undefined,\n pruneDays: typeof flags.get('prune-days') === 'string' ? Number(flags.get('prune-days')) : undefined,\n });\n case 'restore': {\n const { restore } = await import('./commands/restore.js');\n return await restore(argv[1] ?? '', {\n config: flags.get('config') === true,\n passphrase: typeof flags.get('passphrase') === 'string' ? (flags.get('passphrase') as string) : undefined,\n });\n }\n case 'doctor':\n return await doctor(argv.slice(1).filter((a) => a !== ''));\n case 'status':\n return await status();\n case 'restart':\n return await restart({ cold: flags.get('cold') === true });\n case 'stop':\n return await stop({});\n case 'start': {\n const { start: startCmd } = await import('./commands/start.js');\n return await startCmd();\n }\n case 'daemon': {\n const { daemon: daemonCmd } = await import('./commands/daemon.js');\n return await daemonCmd(argv.slice(1));\n }\n case 'deps': {\n const { deps: depsCmd } = await import('./commands/deps.js');\n return await depsCmd(argv.slice(1));\n }\n case 'logs': {\n const { logs } = await import('./commands/logs.js');\n return await logs();\n }\n case 'orc': {\n const { orc: orcCmd } = await import('./commands/orc.js');\n return await orcCmd(argv.slice(1));\n }\n case 'config': {\n const { configShow } = await import('./commands/config-show.js');\n return await configShow();\n }\n case '':\n case 'help':\n case '--help':\n case '-h':\n printUsage();\n return 0;\n default:\n process.stderr.write(`unknown subcommand: ${command}\\n\\n`);\n printUsage();\n return 2;\n }\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n process.stderr.write(`error: ${msg}\\n`);\n return 1;\n }\n}\n\n// Direct-run guard: works when invoked as `node dist/cli/abtars.js` AND\n// as `abtars` (npm-installed bin). Not executed under vitest.\nconst isDirectRun =\n typeof process.argv[1] === 'string' &&\n (process.argv[1].endsWith('abtars.js') ||\n process.argv[1].endsWith('abtars-cli.js') ||\n process.argv[1].endsWith('abtars') ||\n process.argv[1].endsWith('abtars.ts'));\n\nif (isDirectRun && process.env['VITEST'] === undefined) {\n void main(process.argv.slice(2)).then((code) => process.exit(code));\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { printBanner } from './banner.js';\n/**\n * `abtars doctor` \u2014 TypeScript health probes grouped by subsystem layer.\n * --json: machine-readable output for /doctor Telegram handler.\n * --fix: diagnose + apply fixes + re-probe.\n */\n\nimport { runAllProbes, runFixes, renderHuman, renderJson } from './doctor-probes.js';\n\nexport async function doctor(args: readonly string[] = []): Promise<number> {\n const json = args.includes(\"--json\");\n const fix = args.includes(\"--fix\");\n\n if (!json) await printBanner(\"doctor\");\n\n const output = await runAllProbes();\n\n if (fix) {\n const fixes = await runFixes();\n output.fixes = fixes;\n if (!json) {\n for (const f of fixes) {\n const icon = f.success ? \"+\" : \"x\";\n process.stdout.write(` [${icon}] ${f.action}\\n`);\n }\n if (fixes.length > 0) process.stdout.write(`\\n${fixes.filter(f => f.success).length} fix(es) applied.\\n\\n`);\n // Re-probe after fixes\n const recheck = await runAllProbes();\n process.stdout.write(renderHuman(recheck) + \"\\n\");\n return Object.values(recheck.layers).flat().filter(r => r.status === \"failed\").length > 0 ? 1 : 0;\n }\n }\n\n if (json) {\n process.stdout.write(renderJson(output) + \"\\n\");\n } else {\n process.stdout.write(renderHuman(output) + \"\\n\");\n }\n\n const failed = Object.values(output.layers).flat().filter(r => r.status === \"failed\").length;\n return failed > 0 ? 1 : 0;\n}\n", "import { printBanner } from './banner.js';\n/**\n * abtars uninstall \u2014 stop everything, remove ~/.abtars/ and CLI symlinks.\n *\n * Destructive. Requires typing \"uninstall\" to confirm (or --yes flag).\n */\n\nimport { existsSync, readdirSync, unlinkSync, readlinkSync, rmSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { createInterface } from \"node:readline\";\nimport { stop } from \"./stop.js\";\nimport { abtarsHome } from \"../../paths.js\";\n\n\nfunction binDir(): string {\n return join(process.env[\"HOME\"] ?? \"\", \".local\", \"bin\");\n}\n\nasync function confirm(): Promise<boolean> {\n const rl = createInterface({ input: process.stdin, output: process.stderr });\n return new Promise((resolve) => {\n rl.question(\"\u26A0\uFE0F This will DELETE ~/.abtars/ entirely. Type 'uninstall' to confirm: \", (answer) => {\n rl.close();\n resolve(answer.trim() === \"uninstall\");\n });\n });\n}\n\nfunction removeSymlinks(): string[] {\n const dir = binDir();\n if (!existsSync(dir)) return [];\n const home = abtarsHome();\n const removed: string[] = [];\n for (const entry of readdirSync(dir)) {\n if (!entry.startsWith(\"abtars\")) continue;\n const full = join(dir, entry);\n try {\n const target = readlinkSync(full);\n if (target.includes(home) || target.includes(\".abtars\")) {\n unlinkSync(full);\n removed.push(entry);\n }\n } catch { /* not a symlink or already gone */ }\n }\n return removed;\n}\n\nfunction unloadLaunchd(): void {\n if (process.platform !== \"darwin\") return;\n const plist = join(process.env[\"HOME\"] ?? \"\", \"Library\", \"LaunchAgents\", \"com.abtars.watchdog.plist\");\n if (!existsSync(plist)) return;\n try {\n const { execSync } = require(\"node:child_process\");\n execSync(`launchctl bootout gui/$(id -u) \"${plist}\" 2>/dev/null`, { stdio: \"ignore\" });\n unlinkSync(plist);\n } catch { /* already unloaded or missing */ }\n}\n\nexport async function uninstall(opts: { yes?: boolean }): Promise<number> {\n await printBanner(\"uninstall\");\n const home = abtarsHome();\n\n if (!existsSync(home)) {\n process.stdout.write(\"Nothing to uninstall \u2014 ~/.abtars/ does not exist.\\n\");\n return 0;\n }\n\n if (!opts.yes) {\n const confirmed = await confirm();\n if (!confirmed) {\n process.stdout.write(\"Aborted.\\n\");\n return 1;\n }\n }\n\n // 1. Stop bridge + watchdog\n await stop({ force: true });\n\n // 2. Unload launchd plist\n unloadLaunchd();\n\n // 3. Remove CLI symlinks\n const removed = removeSymlinks();\n\n // 4. Remove ~/.abtars/\n rmSync(home, { recursive: true, force: true });\n\n // 5. Summary\n process.stdout.write(`\\n\u2713 Uninstalled abtars\\n`);\n process.stdout.write(` Removed: ${home}/\\n`);\n if (removed.length > 0) {\n process.stdout.write(` Symlinks removed: ${removed.join(\", \")}\\n`);\n }\n process.stdout.write(`\\n Source repo (~/abtars/) is untouched.\\n`);\n return 0;\n}\n", "import { printBanner } from './banner.js';\n/**\n * abtars stop \u2014 kill watchdog (if running) then bridge.\n *\n * Ordering: watchdog dies first so it doesn't respawn the bridge.\n * Each process gets SIGTERM \u2192 5s grace \u2192 SIGKILL.\n * Daemon mode: unloads launchd/systemd service before killing.\n */\n\nimport { logAndSwallow } from \"../../components/log-and-swallow.js\";\nimport { existsSync, readFileSync, unlinkSync } from \"node:fs\";\nimport { execFileSync } from \"node:child_process\";\nimport { join } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport { abtarsHome } from \"../../paths.js\";\n\n\nfunction readJsonField(file: string, field: string): unknown {\n try {\n const data = JSON.parse(readFileSync(file, \"utf-8\"));\n return data[field];\n } catch { return undefined; }\n}\n\nfunction pidAlive(pid: number): boolean {\n try { process.kill(pid, 0); return true; } catch { return false; }\n}\n\n/** Linux-only guard: verify cmdline contains expected substring. Mac has no /proc \u2014 returns true. */\nfunction pidLooksLike(pid: number, needles: string[]): boolean {\n try {\n const cmdline = readFileSync(`/proc/${pid}/cmdline`, \"utf-8\");\n return needles.some(n => cmdline.includes(n));\n } catch { return true; /* /proc unavailable \u2014 trust the lock */ }\n}\n\ntype KillResult = \"killed\" | \"forced\" | \"gone\" | \"stale\" | \"not-running\";\n\nasync function killGracefully(pid: number, needles: string[]): Promise<KillResult> {\n if (!pidAlive(pid)) return \"not-running\";\n if (!pidLooksLike(pid, needles)) return \"stale\";\n\n try { process.kill(pid, \"SIGTERM\"); } catch { return \"not-running\"; }\n\n // 10 \u00D7 500ms poll = 5s grace per process\n for (let i = 0; i < 10; i++) {\n await new Promise(r => setTimeout(r, 500));\n if (!pidAlive(pid)) return \"killed\";\n }\n\n // Force kill\n try { process.kill(pid, \"SIGKILL\"); } catch { /* already gone */ }\n await new Promise(r => setTimeout(r, 500));\n return pidAlive(pid) ? \"not-running\" : \"forced\";\n}\n\nfunction removeLock(path: string): void {\n try { if (existsSync(path)) unlinkSync(path); }\n catch (err) { logAndSwallow(\"stop\", \"op\", err); }\n}\n\nexport async function stop(_opts: {}): Promise<number> {\n await printBanner(\"stop\");\n const home = abtarsHome();\n const manifestPath = join(home, \"manifest.json\");\n const bridgeLock = join(home, \"bridge.lock\");\n const stoppedSentinel = join(home, \".start-reason\");\n\n const installMode = readJsonField(manifestPath, \"installMode\") as string | undefined;\n\n // 0) Write sentinel \u2014 prevents watchdog from respawning even if kill races with launchd\n try { require(\"node:fs\").writeFileSync(stoppedSentinel, \"stopped\"); } catch {}\n\n // 1) Unload supervisor service (prevent respawn)\n let serviceWasStopped = false;\n if (installMode === \"daemon\") {\n if (process.platform === \"darwin\") {\n const plistPath = join(homedir(), \"Library\", \"LaunchAgents\", \"com.abtars.watchdog.plist\");\n const uid = `gui/${process.getuid!()}`;\n try { execFileSync(\"launchctl\", [\"bootout\", uid, plistPath], { timeout: 5000, stdio: 'pipe' }); serviceWasStopped = true; } catch {}\n await new Promise(r => setTimeout(r, 1000));\n // Retry in case launchd respawned before bootout took effect\n try { execFileSync(\"launchctl\", [\"bootout\", uid, plistPath], { timeout: 5000, stdio: 'pipe' }); } catch {}\n } else {\n try { execFileSync(\"systemctl\", [\"--user\", \"stop\", \"abtars-watchdog\"], { timeout: 5000, stdio: 'pipe' }); serviceWasStopped = true; } catch {}\n try { execFileSync(\"systemctl\", [\"--user\", \"disable\", \"abtars-watchdog\"], { timeout: 5000, stdio: 'pipe' }); } catch {}\n }\n }\n\n const wdPid = readJsonField(bridgeLock, \"watchdogPid\") as number | undefined;\n let wdResult: KillResult = \"not-running\";\n let wdPidActual: number | undefined;\n if (wdPid && wdPid > 0) {\n wdPidActual = wdPid;\n wdResult = await killGracefully(wdPid, [\"abtars-watchdog.sh\"]);\n }\n\n // 2) Bridge second\n const brPid = readJsonField(bridgeLock, \"pid\") as number | undefined;\n let brResult: KillResult = \"not-running\";\n let brPidActual: number | undefined;\n if (brPid && brPid > 0) {\n brPidActual = brPid;\n brResult = await killGracefully(brPid, [\"abtars\", \"main.js\", \"bundle\"]);\n if (brResult === \"killed\" || brResult === \"forced\") {\n removeLock(bridgeLock);\n } else if (brResult === \"stale\") {\n process.stdout.write(`\u26A0\uFE0F bridge.lock PID ${brPid} is not abtars \u2014 stale lock, removing\\n`);\n removeLock(bridgeLock);\n }\n }\n\n // 3) Summary + exit code\n const wdMsg = formatResult(\"Watchdog\", wdResult, wdPidActual);\n const brMsg = formatResult(\"Bridge\", brResult, brPidActual);\n\n if (wdResult === \"not-running\" && brResult === \"not-running\") {\n if (serviceWasStopped) {\n removeLock(bridgeLock);\n process.stdout.write(`\uD83D\uDED1 Stopped via service manager.\\n`);\n } else {\n process.stdout.write(`Nothing to stop \u2014 neither watchdog nor bridge running.\\n`);\n }\n return 0;\n }\n\n process.stdout.write(`\uD83D\uDED1 ${wdMsg}\\n ${brMsg}\\n`);\n\n if (installMode === \"daemon\") {\n process.stdout.write(` Service unloaded. Use 'abtars start' to restart.\\n`);\n }\n\n // Return 0 if nothing's still alive; 1 if we left something running\n const allDown =\n (wdResult === \"not-running\" || wdResult === \"killed\" || wdResult === \"forced\" || wdResult === \"stale\") &&\n (brResult === \"not-running\" || brResult === \"killed\" || brResult === \"forced\" || brResult === \"stale\");\n return allDown ? 0 : 1;\n}\n\nfunction formatResult(label: string, result: KillResult, pid: number | undefined): string {\n switch (result) {\n case \"killed\": return `${label} stopped (PID ${pid}, SIGTERM)`;\n case \"forced\": return `${label} stopped (PID ${pid}, SIGKILL)`;\n case \"stale\": return `${label} lock was stale (PID ${pid} not ours)`;\n case \"not-running\": return `${label} was not running`;\n case \"gone\": return `${label} kill failed \u2014 PID ${pid} still alive`;\n }\n}\n", "import { printBanner } from './banner.js';\n/**\n * `abtars backup` \u2014 full or config-only backup.\n *\n * Full (default): abtars zip + abmind zip (calls `abmind backup`)\n * Config: abtars config dirs only, no abmind\n *\n * Flags: --full (default), --config, --encrypt, --output <dir>, --prune-days N\n */\n\nimport { existsSync, mkdirSync, readdirSync, statSync, unlinkSync, renameSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { join, dirname, basename } from \"node:path\";\nimport { spawnSync } from \"node:child_process\";\nimport { createCipheriv, hkdfSync, randomBytes } from \"node:crypto\";\nimport { abtarsHome, abmindHome as resolveAbmindHome } from \"../../paths.js\";\n\nconst DEFAULT_PRUNE_DAYS = 7;\n\nconst ABTARS_EXCLUDE = [\n \"src\", \"logs\", \"overflow\", \"browser-socket\", \"app\", \"app.staging\", \"bin\", \"bridge.lock\",\n \"deploy.state\", \".bridge.flock\", \"state\", \"lib\", \"scripts\", \"skills/core\", \"core\",\n \"*.sock\", \"*.db-wal\", \"*.db-shm\",\n];\n\nconst CONFIG_DIRS = [\"config\", \"secret\", \"tasks\", \"skills\", \"kanban\", \"metrics\", \"auth\"];\n\nexport interface BackupOpts {\n config?: boolean;\n encrypt?: boolean;\n outputDir?: string;\n pruneDays?: number;\n}\n\nfunction timestamp(): string {\n const now = new Date();\n const d = `${now.getFullYear()}${String(now.getMonth() + 1).padStart(2, \"0\")}${String(now.getDate()).padStart(2, \"0\")}`;\n const t = `${String(now.getHours()).padStart(2, \"0\")}${String(now.getMinutes()).padStart(2, \"0\")}`;\n return `${d}-${t}`;\n}\n\nexport async function backup(opts: BackupOpts = {}): Promise<number> {\n await printBanner(\"backup\");\n const abHome = abtarsHome();\n const abmindHome = resolveAbmindHome();\n const ts = timestamp();\n const destDir = opts.outputDir ?? join(dirname(abHome), \".backup-abtars\");\n mkdirSync(destDir, { recursive: true });\n\n const isConfig = opts.config === true;\n const has7z = spawnSync(\"which\", [\"7z\"], { encoding: \"utf-8\" }).status === 0;\n const zipExt = has7z ? \".7z\" : \".zip\";\n\n // 1. Zip abtars state\n const abtarsPrefix = isConfig ? `abtars-config-${ts}` : `abtars-${ts}`;\n const abtarsZip = join(destDir, abtarsPrefix + zipExt);\n let zipOk: boolean;\n\n if (isConfig) {\n const existingDirs = CONFIG_DIRS.filter(d => existsSync(join(abHome, d)));\n if (existingDirs.length === 0) {\n process.stderr.write(\"Nothing to backup \u2014 no config dirs found\\n\");\n return 1;\n }\n if (has7z) {\n zipOk = spawnSync(\"7z\", [\"a\", abtarsZip, ...existingDirs], { cwd: abHome, encoding: \"utf-8\" }).status === 0;\n } else {\n zipOk = spawnSync(\"zip\", [\"-qr\", abtarsZip, ...existingDirs], { cwd: abHome, encoding: \"utf-8\" }).status === 0;\n }\n } else {\n if (has7z) {\n const excludeArgs = ABTARS_EXCLUDE.flatMap(ex => [\"-xr!\" + ex]);\n zipOk = spawnSync(\"7z\", [\"a\", abtarsZip, \".\", ...excludeArgs], { cwd: abHome, encoding: \"utf-8\" }).status === 0;\n } else {\n const excludePatterns = ABTARS_EXCLUDE.flatMap(ex => [`${ex}/*`, ex]);\n zipOk = spawnSync(\"zip\", [\"-qr\", abtarsZip, \".\", \"-x\", ...excludePatterns], { cwd: abHome, encoding: \"utf-8\" }).status === 0;\n }\n }\n\n if (!zipOk) {\n process.stderr.write(\"abtars zip failed\\n\");\n return 1;\n }\n\n const abtarsSize = (statSync(abtarsZip).size / 1024 / 1024).toFixed(1);\n process.stdout.write(`\u2713 ${basename(abtarsZip)} (${abtarsSize}MB)\\n`);\n\n // 2. Call abmind backup (full), move result to destDir\n if (!isConfig && existsSync(abmindHome)) {\n const abmindFile = runAbmindBackup(abmindHome);\n if (abmindFile) {\n const dest = join(destDir, basename(abmindFile));\n renameSync(abmindFile, dest);\n const size = (statSync(dest).size / 1024 / 1024).toFixed(1);\n process.stdout.write(`\u2713 ${basename(dest)} (${size}MB)\\n`);\n } else {\n process.stderr.write(\"\u26A0\uFE0F abmind backup failed\\n\");\n }\n }\n\n // 3. Encrypt abtars zip if requested\n if (opts.encrypt) {\n const encPath = abtarsZip + \".enc\";\n const ok = encryptFile(abtarsZip, encPath, abmindHome);\n if (!ok) return 1;\n unlinkSync(abtarsZip);\n process.stdout.write(`\u2713 encrypted \u2192 ${basename(encPath)}\\n`);\n }\n\n // 4. Prune old backups\n const pruneDays = opts.pruneDays ?? DEFAULT_PRUNE_DAYS;\n if (pruneDays > 0) {\n const maxAge = pruneDays * 86_400_000;\n const now = Date.now();\n for (const f of readdirSync(destDir)) {\n if (!(f.startsWith(\"abtars-\") || f.startsWith(\"abmind-\"))) continue;\n if (!(f.endsWith(\".zip\") || f.endsWith(\".7z\") || f.endsWith(\".abm\") || f.endsWith(\".enc\"))) continue;\n const fPath = join(destDir, f);\n try {\n if (now - statSync(fPath).mtimeMs > maxAge) unlinkSync(fPath);\n } catch { /* skip */ }\n }\n }\n\n return 0;\n}\n\nfunction runAbmindBackup(abmindHome: string): string | null {\n const backupsDir = join(abmindHome, \"backups\");\n mkdirSync(backupsDir, { recursive: true });\n\n const result = spawnSync(\"abmind\", [\"backup\"], { encoding: \"utf-8\", env: { ...process.env } });\n if (result.status !== 0) return null;\n\n // Full backup produces .zip; fallback to .abm for backward compat\n const files = readdirSync(backupsDir).filter(f => f.endsWith(\".zip\") || f.endsWith(\".7z\") || f.endsWith(\".abm\")).sort().reverse();\n return files[0] ? join(backupsDir, files[0]) : null;\n}\n\nfunction encryptFile(inputPath: string, outputPath: string, abmindHome: string): boolean {\n const keyPath = join(abmindHome, \"secret\", \"abmind.key\");\n if (!existsSync(keyPath)) {\n process.stderr.write(`\u26A0\uFE0F --encrypt requires ${keyPath}\\n`);\n return false;\n }\n const master = Buffer.from(readFileSync(keyPath, \"utf-8\").trim(), \"hex\");\n const key = Buffer.from(hkdfSync(\"sha256\", master, \"\", \"abtars-backup-v1\", 32));\n const iv = randomBytes(12);\n const cipher = createCipheriv(\"aes-256-gcm\", key, iv);\n\n const input = readFileSync(inputPath);\n const encrypted = Buffer.concat([cipher.update(input), cipher.final()]);\n const tag = cipher.getAuthTag();\n\n const out = Buffer.concat([iv, encrypted, tag]);\n writeFileSync(outputPath, out);\n return true;\n}\n", "import { printBanner } from './banner.js';\nimport { deriveFromPassphrase, writeKeyFile, writeKeyVerify, deriveKey } from '../../utils/crypto.js';\n/**\n * `abtars install` \u2014 first-time interactive configuration wizard\n * (plan #158 Phase 3, subsumes ticket #153).\n *\n * Two modes:\n * - Interactive (default): @clack/prompts wizard asks for bot token,\n * chat ID, transport provider, etc. Writes config/.env + config/users.json.\n * - Non-interactive: --non-interactive --accept-risk with explicit flags\n * for every choice. Fails if any required flag is missing.\n *\n * Scope (kept minimal \u2014 plan caps at ~200 LOC):\n * Prompts cover: Telegram bot token + primary chat ID, default transport\n * provider (openrouter | anthropic | openai), default model, optional\n * Discord a2a channel.\n *\n * Out of scope for Phase 3:\n * - Channel allowlist/users.json multi-user editing (#67 / #204)\n * - Skills configuration (each skill's .env key)\n * - Transport provider credentials beyond DEFAULT_PROVIDER (operator\n * edits config/.env directly post-install)\n */\n\nimport { logAndSwallow } from \"../../components/log-and-swallow.js\";\nimport { mkdir, readFile, writeFile } from 'node:fs/promises';\nimport { dirname, join } from 'node:path';\nimport { packagePaths, readManifest, resolveReleasesDir } from '../deploy-lib-import.js';\nimport { showHintOnce } from '../../components/hints.js';\n\nexport interface OnboardOptions {\n readonly nonInteractive: boolean;\n readonly acceptRisk: boolean;\n readonly telegramToken?: string;\n readonly telegramChatId?: string;\n readonly defaultProvider?: string;\n readonly defaultModel?: string;\n readonly apiKey?: string;\n readonly discordA2aChannel?: string;\n readonly userName?: string;\n readonly instanceName?: string;\n readonly passphrase?: string;\n readonly force: boolean;\n readonly source?: 'dev' | 'alpha' | 'stable';\n readonly localDir?: string;\n}\n\ntype ProviderChoice = 'openrouter' | 'anthropic' | 'openai' | 'ollama' | 'kiro' | 'gemini';\n\nconst VALID_PROVIDERS: readonly ProviderChoice[] = ['openrouter', 'anthropic', 'openai', 'ollama', 'kiro', 'gemini'];\n\n/** Map onboard choice \u2192 transport.json provider name */\nconst PROVIDER_TRANSPORT_NAME: Record<ProviderChoice, string> = {\n openrouter: 'openrouter',\n anthropic: 'anthropic',\n openai: 'openai',\n ollama: 'ollama',\n kiro: 'kiro',\n gemini: 'gemini',\n};\nconst DEFAULT_MODELS: Record<ProviderChoice, string> = {\n openrouter: 'deepseek/deepseek-v4-flash',\n anthropic: 'claude-sonnet-4-5-20250929',\n openai: 'gpt-4o',\n ollama: 'kimi-k2.5:cloud',\n kiro: 'claude-sonnet-4.6',\n gemini: 'gemini-2.5-flash',\n};\n\n/** Providers that use an API key + HTTP endpoint (can validate via /v1/models). */\nconst API_PROVIDERS: ReadonlySet<ProviderChoice> = new Set(['openrouter', 'anthropic', 'openai', 'ollama']);\n\nconst PROVIDER_ENDPOINT: Record<string, string> = {\n openrouter: 'https://openrouter.ai/api/v1',\n anthropic: 'https://api.anthropic.com/v1',\n openai: 'https://api.openai.com/v1',\n ollama: 'http://localhost:11434/v1',\n};\n\nconst PROVIDER_API_KEY_ENV: Record<ProviderChoice, string> = {\n openrouter: 'OPENROUTER_API_KEY',\n anthropic: 'ANTHROPIC_API_KEY',\n openai: 'OPENAI_API_KEY',\n ollama: 'OLLAMA_API_KEY',\n kiro: 'KIRO_API_KEY',\n gemini: 'GEMINI_API_KEY',\n};\n\ninterface WizardAnswers {\n readonly installMode: \"simple\" | \"daemon\";\n readonly userName: string;\n readonly instanceName: string;\n readonly passphrase: string;\n readonly telegramToken: string;\n readonly telegramChatId: string;\n readonly discordBotToken: string;\n readonly discordAppId: string;\n readonly discordA2aChannel: string;\n readonly defaultProvider: ProviderChoice;\n readonly defaultModel: string;\n readonly providerApiKey: string;\n readonly hailMaryModel: string;\n readonly bedTime: string;\n readonly wakeTime: string;\n readonly groqApiKey: string;\n readonly securityMode: string;\n readonly trustMode: boolean;\n}\n\n\nasync function runInteractive(existing: WizardAnswers | null): Promise<WizardAnswers | null> {\n const { intro, outro, text, select, confirm, isCancel, cancel } = await import('@clack/prompts');\n\n intro('abtars onboard \u2014 first-time setup');\n\n let userName = '';\n\n // 1. Agent name\n const instanceName = await text({\n message: 'abTARS agent name',\n placeholder: 'MyBot',\n initialValue: existing?.instanceName ?? '',\n validate: (v) => v?.trim() ? undefined : 'required',\n });\n if (isCancel(instanceName)) { cancel('Cancelled.'); return null; }\n\n // 2. Install mode\n const installMode = await select({\n message: 'Install mode',\n options: [\n { value: 'daemon', label: 'daemon \u2014 auto-restart, survives reboot (recommended)' },\n { value: 'simple', label: 'simple \u2014 manual start/stop' },\n ],\n initialValue: existing?.installMode ?? 'daemon',\n });\n if (isCancel(installMode)) { cancel('Cancelled.'); return null; }\n\n // 2b. Your name (used for encryption + user identity)\n if (!userName) {\n const uname = await text({\n message: 'Your name (used for encryption + identity)',\n placeholder: 'aksika',\n validate: (v) => v?.trim() ? undefined : 'required',\n });\n if (isCancel(uname)) { cancel('Cancelled.'); return null; }\n userName = String(uname).trim();\n }\n\n // 2c. Encryption passphrase (mandatory \u2014 protects secrets at rest)\n const passphrase = await text({\n message: 'Encryption passphrase (protects secrets at rest)',\n placeholder: 'choose a strong passphrase',\n validate: (v) => v?.trim() ? undefined : 'required \u2014 secrets are encrypted with this',\n });\n if (isCancel(passphrase)) { cancel('Cancelled.'); return null; }\n\n // 3. Security mode\n const securityMode = await select({\n message: 'Security mode',\n options: [\n { value: 'off', label: 'off \u2014 no restrictions (ActionGate still active)' },\n { value: 'guardrails', label: 'guardrails \u2014 path guard + command blocklist (recommended)' },\n { value: 'seatbelt', label: 'seatbelt \u2014 guardrails + OS per-command sandbox (bwrap/sandbox-exec)' },\n { value: 'docker', label: 'docker \u2014 full isolation: per-session Docker containers (requires Docker)' },\n ],\n initialValue: existing?.securityMode ?? 'guardrails',\n });\n if (isCancel(securityMode)) { cancel('Cancelled.'); return null; }\n\n // 4. Main chat ID\n const telegramChatId = await text({\n message: 'Main chat ID (Telegram)',\n placeholder: '123456789',\n initialValue: existing?.telegramChatId ?? '',\n validate: (v) => (!v || /^-?\\d+$/.test(v.trim())) ? undefined : 'expected numeric ID',\n });\n if (isCancel(telegramChatId)) { cancel('Cancelled.'); return null; }\n\n // 5. Telegram bot token\n const telegramToken = await text({\n message: 'Telegram bot token (@BotFather)',\n placeholder: '123456789:ABCdefGHI...',\n initialValue: existing?.telegramToken ?? '',\n validate: (v) => (!v || v.includes(':')) ? undefined : 'expected format \"id:secret\"',\n });\n if (isCancel(telegramToken)) { cancel('Cancelled.'); return null; }\n\n // 6-8. Discord (optional)\n const noteEmpty = 'Enter to skip';\n const discordBotToken = await text({\n message: `Discord bot token (${noteEmpty})`,\n placeholder: 'MTIzNDU2...',\n initialValue: existing?.discordBotToken,\n });\n if (isCancel(discordBotToken)) { cancel('Cancelled.'); return null; }\n\n const discordAppId = await text({\n message: `Discord app ID (${noteEmpty})`,\n placeholder: '987654321098765432',\n initialValue: existing?.discordAppId,\n validate: (v) => (!v || v.trim() === '' || /^\\d{10,20}$/.test(v.trim())) ? undefined : 'expected snowflake or empty',\n });\n if (isCancel(discordAppId)) { cancel('Cancelled.'); return null; }\n\n const discordA2aChannel = await text({\n message: `Discord channel ID (${noteEmpty})`,\n placeholder: '987654321098765432',\n initialValue: existing?.discordA2aChannel,\n validate: (v) => (!v || v.trim() === '' || /^\\d{10,20}$/.test(v.trim())) ? undefined : 'expected snowflake or empty',\n });\n if (isCancel(discordA2aChannel)) { cancel('Cancelled.'); return null; }\n\n // 9. Provider\n const defaultProvider = await select<ProviderChoice>({\n message: \"Model's provider (use /model to change later)\",\n options: [\n { value: 'openrouter', label: 'openrouter \u2014 many models via API key' },\n { value: 'anthropic', label: 'anthropic \u2014 Claude API (direct)' },\n { value: 'openai', label: 'openai \u2014 GPT API (direct)' },\n { value: 'ollama', label: 'ollama \u2014 local/cloud Ollama endpoint' },\n { value: 'kiro', label: 'kiro \u2014 Kiro CLI' },\n { value: 'gemini', label: 'gemini \u2014 Gemini CLI' },\n ],\n initialValue: existing?.defaultProvider ?? 'openrouter',\n });\n if (isCancel(defaultProvider)) { cancel('Cancelled.'); return null; }\n\n // 10. Main model (prefilled per provider)\n const defaultModel = await text({\n message: 'Main model',\n placeholder: DEFAULT_MODELS[defaultProvider],\n initialValue: existing?.defaultModel ?? DEFAULT_MODELS[defaultProvider],\n });\n if (isCancel(defaultModel)) { cancel('Cancelled.'); return null; }\n const modelStr = String(defaultModel ?? '').trim() || DEFAULT_MODELS[defaultProvider];\n\n // 11. API key \u2014 required + validated for OpenRouter, optional for others\n const apiKeyEnv = PROVIDER_API_KEY_ENV[defaultProvider];\n let providerApiKey = existing?.providerApiKey ?? '';\n if (defaultProvider === 'openrouter') {\n const endpoint = PROVIDER_ENDPOINT[defaultProvider] ?? '';\n let validated = false;\n while (!validated) {\n const v = await text({\n message: `${apiKeyEnv} (required)`,\n placeholder: 'sk-or-v1-...',\n initialValue: providerApiKey || existing?.providerApiKey,\n validate: (val) => val?.trim() ? undefined : 'API key required for OpenRouter',\n });\n if (isCancel(v)) { cancel('Cancelled.'); return null; }\n providerApiKey = String(v ?? '').trim();\n process.stdout.write(' Validating key...');\n const result = await checkModelAvailability(endpoint, providerApiKey, modelStr);\n if (result.ok) {\n process.stdout.write(` \u2713 valid\\n`);\n validated = true;\n } else {\n process.stdout.write(` \u2717 ${result.message}\\n`);\n const retry = await confirm({ message: 'Try a different key?', initialValue: true });\n if (isCancel(retry)) { cancel('Cancelled.'); return null; }\n if (!retry) { validated = true; }\n }\n }\n } else {\n const v = await text({\n message: `${apiKeyEnv} (${noteEmpty})`,\n placeholder: 'leave blank for local providers',\n initialValue: existing?.providerApiKey,\n });\n if (isCancel(v)) { cancel('Cancelled.'); return null; }\n providerApiKey = String(v ?? '').trim() || existing?.providerApiKey || '';\n }\n\n // Summary\n const mask = (s: string): string => s ? (s.length > 8 ? `${s.slice(0, 4)}\u2026${s.slice(-4)}` : '***') : '(skipped)';\n const lines = [\n '',\n '\u2500\u2500 Summary \u2500\u2500',\n ` Agent name: ${String(instanceName ?? '')}`,\n ` Install mode: ${installMode}`,\n ` Security: ${securityMode}`,\n ` Telegram chat ID: ${String(telegramChatId ?? '') || '(skipped)'}`,\n ` Telegram token: ${mask(String(telegramToken ?? ''))}`,\n ` Discord bot token: ${mask(String(discordBotToken ?? ''))}`,\n ` Provider: ${defaultProvider}`,\n ` Main model: ${modelStr}`,\n ` ${apiKeyEnv}: ${mask(providerApiKey)}`,\n '',\n ];\n process.stdout.write(lines.join('\\n'));\n\n const ok = await confirm({ message: 'Looks good? Write config?', initialValue: true });\n if (isCancel(ok) || !ok) { cancel('Cancelled \u2014 no files written.'); return null; }\n\n outro('Writing config\u2026');\n\n return {\n installMode: installMode as \"simple\" | \"daemon\",\n userName,\n instanceName: String(instanceName ?? '').trim(),\n passphrase: String(passphrase).trim(),\n telegramToken: String(telegramToken ?? '').trim(),\n telegramChatId: String(telegramChatId ?? '').trim(),\n discordBotToken: String(discordBotToken ?? '').trim(),\n discordAppId: String(discordAppId ?? '').trim(),\n discordA2aChannel: String(discordA2aChannel ?? '').trim(),\n defaultProvider: defaultProvider as ProviderChoice,\n defaultModel: modelStr,\n providerApiKey,\n hailMaryModel: modelStr,\n bedTime: '',\n wakeTime: '',\n groqApiKey: existing?.groqApiKey ?? '',\n securityMode: String(securityMode ?? 'guardrails'),\n trustMode: true,\n };\n}\n\n/** Ping GET <endpoint>/models with the API key. Returns ok=true if the model ID is listed. */\nasync function checkModelAvailability(endpoint: string, apiKey: string, model: string): Promise<{ ok: boolean; message: string }> {\n try {\n const res = await fetch(`${endpoint}/models`, {\n headers: { Authorization: `Bearer ${apiKey}` },\n signal: AbortSignal.timeout(8000),\n });\n if (!res.ok) return { ok: false, message: `provider returned ${res.status}` };\n const json = await res.json() as { data?: Array<{ id: string }> };\n const ids = (json.data ?? []).map(m => m.id);\n return ids.includes(model)\n ? { ok: true, message: 'available' }\n : { ok: false, message: `\"${model}\" not found in provider's model list` };\n } catch (err) {\n return { ok: false, message: `check failed: ${err instanceof Error ? err.message : String(err)}` };\n }\n}\n\nasync function validateModelCatalog(model: string, provider: string): Promise<{ ok: boolean; message: string }> {\n try {\n const { fileURLToPath } = await import('node:url');\n const here = dirname(fileURLToPath(import.meta.url));\n const candidates = [\n join(here, '..', '..', '..', 'templates', 'config', 'models.json'),\n join(here, '..', '..', 'templates', 'config', 'models.json'),\n join(here, '..', 'templates', 'config', 'models.json'),\n join(resolveReleasesDir(), 'src', 'abtars', 'templates', 'config', 'models.json'),\n join(process.env['HOME'] ?? '', '.abtars', 'config', 'models.json'),\n ];\n let catalog: Record<string, { transports?: string[] }> | null = null;\n for (const p of candidates) {\n try {\n catalog = JSON.parse(await readFile(p, 'utf-8'));\n break;\n } catch { /* try next */ }\n }\n if (!catalog) return { ok: true, message: '' }; // no catalog = skip validation\n const entry = catalog[model];\n if (!entry) return { ok: false, message: `Model \"${model}\" not found in models.json catalog` };\n const provName = PROVIDER_TRANSPORT_NAME[provider as ProviderChoice] ?? provider;\n if (entry.transports && !entry.transports.includes(provName)) {\n return { ok: false, message: `Model \"${model}\" not available for provider \"${provName}\" (supported: ${entry.transports.join(', ')})` };\n }\n return { ok: true, message: '' };\n } catch {\n return { ok: true, message: '' }; // validation error = don't block install\n }\n}\n\nfunction validateNonInteractive(opts: OnboardOptions): WizardAnswers | string {\n if (!opts.acceptRisk) {\n return '--non-interactive requires --accept-risk (you are bypassing safety prompts)';\n }\n if (!opts.instanceName) return '--instance-name is required in non-interactive mode';\n if (!opts.telegramToken) return '--telegram-token is required in non-interactive mode';\n if (!opts.telegramChatId) return '--telegram-chat-id is required in non-interactive mode';\n if (!opts.userName) return '--user-name is required in non-interactive mode';\n if (!opts.passphrase) return '--passphrase is required in non-interactive mode';\n const provider = (opts.defaultProvider ?? 'openrouter') as ProviderChoice;\n if (!VALID_PROVIDERS.includes(provider)) {\n return `--default-provider must be one of: ${VALID_PROVIDERS.join(', ')}`;\n }\n return {\n installMode: 'daemon',\n userName: opts.userName ?? '',\n instanceName: opts.instanceName ?? '',\n passphrase: opts.passphrase ?? '',\n telegramToken: opts.telegramToken ?? '',\n telegramChatId: opts.telegramChatId ?? '',\n discordBotToken: '',\n discordAppId: '',\n discordA2aChannel: opts.discordA2aChannel ?? '',\n defaultProvider: provider,\n defaultModel: opts.defaultModel ?? DEFAULT_MODELS[provider],\n providerApiKey: opts.apiKey ?? '',\n hailMaryModel: '',\n bedTime: '',\n wakeTime: '',\n groqApiKey: '',\n securityMode: 'guardrails',\n trustMode: true,\n };\n}\n\nasync function readExisting(envPath: string): Promise<WizardAnswers | null> {\n try {\n const content = await readFile(envPath, 'utf-8');\n const kv = new Map<string, string>();\n for (const line of content.split('\\n')) {\n const m = line.match(/^([A-Z_][A-Z0-9_]*)=(.*)$/);\n if (m && m[1] !== undefined && m[2] !== undefined) kv.set(m[1], m[2]);\n }\n const provider = (kv.get('DEFAULT_PROVIDER') ?? 'openrouter') as ProviderChoice;\n if (!VALID_PROVIDERS.includes(provider)) return null;\n const apiKeyEnv = PROVIDER_API_KEY_ENV[provider];\n return {\n installMode: 'simple',\n userName: kv.get('USER_DISPLAY_NAME') ?? '',\n instanceName: '',\n passphrase: '',\n telegramToken: kv.get('TELEGRAM_BOT_TOKEN') ?? '',\n telegramChatId: kv.get('MAIN_CHAT_ID') ?? '',\n discordBotToken: kv.get('DISCORD_BOT_TOKEN') ?? '',\n discordAppId: kv.get('DISCORD_APP_ID') ?? '',\n discordA2aChannel: kv.get('DISCORD_A2A_CHANNEL_ID') ?? '',\n defaultProvider: provider,\n defaultModel: kv.get('DEFAULT_MODEL') ?? DEFAULT_MODELS[provider],\n providerApiKey: apiKeyEnv ? (kv.get(apiKeyEnv) ?? '') : '',\n hailMaryModel: '',\n bedTime: kv.get('BED_TIME') ?? '',\n wakeTime: kv.get('WAKE_TIME') ?? '',\n groqApiKey: kv.get('GROQ_API_KEY') ?? '',\n securityMode: kv.get('SECURITY_MODE') ?? 'guardrails',\n trustMode: kv.get('TRUST_MODE') === 'true',\n };\n } catch {\n return null;\n }\n}\n\nfunction mergeEnvContent(existing: string, answers: WizardAnswers): string {\n const owned = new Set([\n 'MAIN_CHAT_ID',\n 'DISCORD_APP_ID', 'DISCORD_A2A_CHANNEL_ID',\n 'DEFAULT_PROVIDER', 'DEFAULT_MODEL',\n 'BED_TIME', 'WAKE_TIME', 'HEARTBEAT_INTERVAL_SEC', 'TRUST_MODE',\n 'TELEGRAM_ENABLED', 'DISCORD_ENABLED', 'IRC_ENABLED',\n 'LOG_LEVEL', 'ACTIVE_MEMORY', 'ENABLE_AGENT_API', 'SELFHEAL_ENABLED',\n ]);\n const keptLines: string[] = [];\n for (const line of existing.split('\\n')) {\n const m = line.match(/^([A-Z_][A-Z0-9_]*)=/);\n if (m && m[1] !== undefined && owned.has(m[1])) continue;\n keptLines.push(line);\n }\n while (keptLines.length > 0 && keptLines[keptLines.length - 1] === '') keptLines.pop();\n\n const newBlock = [\n '',\n '# --- abtars onboard-managed ---',\n `DEFAULT_PROVIDER=${answers.defaultProvider}`,\n `DEFAULT_MODEL=${answers.defaultModel}`,\n ];\n if (answers.telegramChatId) newBlock.push(`MAIN_CHAT_ID=${answers.telegramChatId}`);\n else if (answers.discordA2aChannel) newBlock.push(`MAIN_CHAT_ID=${answers.discordA2aChannel}`);\n if (answers.discordAppId) newBlock.push(`DISCORD_APP_ID=${answers.discordAppId}`);\n if (answers.discordA2aChannel) newBlock.push(`DISCORD_A2A_CHANNEL_ID=${answers.discordA2aChannel}`);\n if (answers.bedTime) newBlock.push(`BED_TIME=${answers.bedTime}`);\n if (answers.wakeTime) newBlock.push(`WAKE_TIME=${answers.wakeTime}`);\n newBlock.push(`HEARTBEAT_INTERVAL_SEC=60`);\n newBlock.push(`SECURITY_MODE=${answers.securityMode}`);\n newBlock.push(`TRUST_MODE=${answers.trustMode ? 'true' : 'false'}`);\n newBlock.push(`TELEGRAM_ENABLED=${answers.telegramToken ? 'true' : 'false'}`);\n newBlock.push(`DISCORD_ENABLED=${answers.discordBotToken ? 'true' : 'false'}`);\n newBlock.push(`IRC_ENABLED=false`);\n newBlock.push(`LOG_LEVEL=debug`);\n newBlock.push(`ACTIVE_MEMORY=true`);\n newBlock.push(`ENABLE_AGENT_API=false`);\n newBlock.push(`SELFHEAL_ENABLED=true`);\n\n return [...keptLines, ...newBlock, ''].join('\\n');\n}\n\nexport async function onboard(opts: OnboardOptions): Promise<number> {\n await printBanner(\"install\");\n const paths = packagePaths('abtars');\n\n // Install log (#718)\n const { initInstallLog, logInstall, logInstallHeader } = await import(\"../install-log.js\");\n initInstallLog(paths.home);\n logInstallHeader(\"onboard\");\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\") || chunk.startsWith(\"\u2022\"))) logInstall(chunk.trimEnd());\n return _origWrite(chunk, ...args);\n }) as typeof process.stdout.write;\n\n let manifest = await readManifest(paths.manifest);\n if (!manifest) {\n // First install \u2014 create skeleton + manifest\n const { mkdirSync, existsSync: fileExists, symlinkSync } = await import(\"node:fs\");\n const { chmod } = await import(\"node:fs/promises\");\n for (const d of [\"logs\", \"config\", \"secret\", \"skills/core\", \"skills/self\", \"skills/custom\", \"skills/downloaded\", \"kanban\", \"state\"]) {\n mkdirSync(join(paths.home, d), { recursive: true });\n }\n await chmod(join(paths.home, \"secret\"), 0o700);\n await chmod(join(paths.home, \"config\"), 0o700);\n // Ensure ~/.local/bin/ exists and has our binary (symlink from global npm bin if needed)\n const { homedir } = await import(\"node:os\");\n const localBin = join(homedir(), \".local\", \"bin\");\n mkdirSync(localBin, { recursive: true });\n const localAbtars = join(localBin, \"abtars\");\n if (!fileExists(localAbtars)) {\n try {\n const { execSync: ex } = await import(\"node:child_process\");\n const globalBin = ex(\"npm root -g\", { encoding: \"utf-8\", timeout: 5000, stdio: [\"pipe\", \"pipe\", \"ignore\"] }).trim().replace(/\\/node_modules$/, \"\");\n const npmAbtars = join(globalBin, \"abtars\");\n if (fileExists(npmAbtars)) {\n symlinkSync(npmAbtars, localAbtars);\n }\n } catch { /* npm not available \u2014 binary already in PATH */ }\n }\n const { hostname } = await import(\"node:os\");\n const { emptyManifest, writeManifest: wm } = await import(\"../deploy-lib-import.js\");\n const mode = process.platform === \"darwin\" ? \"daemon\" : \"daemon\";\n manifest = { ...emptyManifest(\"abtars\", hostname()), installMode: mode } as any;\n await wm(paths.manifest, manifest as any);\n process.stdout.write(`\u2713 skeleton at ${paths.home}\\n\u2713 install mode: ${mode}\\n`);\n }\n\n const envPath = join(paths.config, '.env');\n const existing = await readExisting(envPath);\n const secretDir = join(paths.home, 'secret');\n const { existsSync: secretExists } = await import('node:fs');\n const hasSecretToken = secretExists(join(secretDir, 'TELEGRAM_BOT_TOKEN')) || secretExists(join(secretDir, 'DISCORD_BOT_TOKEN'));\n const hasUserConfig = existing !== null && (existing.telegramToken || existing.discordBotToken || hasSecretToken);\n if (hasUserConfig && !opts.force) {\n showHintOnce(\"onboard-reoffer\", \"Re-running onboard overwrites config. Use --force to confirm, or edit ~/.abtars/config/.env directly.\");\n if (opts.nonInteractive) {\n process.stderr.write(`config/.env already configured. Re-run with --force to overwrite.\\n`);\n return 3;\n }\n }\n\n let answers: WizardAnswers | null;\n if (opts.nonInteractive) {\n const result = validateNonInteractive(opts);\n if (typeof result === 'string') {\n process.stderr.write(`error: ${result}\\n`);\n return 4;\n }\n answers = result;\n // Validate API key in non-interactive mode \u2014 warn but continue\n if (answers.providerApiKey && API_PROVIDERS.has(answers.defaultProvider)) {\n const endpoint = PROVIDER_ENDPOINT[answers.defaultProvider] ?? '';\n const check = await checkModelAvailability(endpoint, answers.providerApiKey, answers.defaultModel);\n if (check.ok) {\n process.stdout.write(`\u2713 API key valid (${answers.defaultModel} available)\\n`);\n } else {\n process.stderr.write(`\u26A0 API key validation failed: ${check.message}\\n Continuing \u2014 fix key in ~/.abtars/config/.env or secret/ later.\\n`);\n }\n }\n } else {\n answers = await runInteractive(existing);\n if (answers === null) return 1;\n }\n\n // Validate model against models.json catalog\n const catalogResult = await validateModelCatalog(answers.defaultModel, answers.defaultProvider);\n if (!catalogResult.ok) {\n if (opts.nonInteractive) {\n if (!opts.force) {\n process.stderr.write(`error: ${catalogResult.message}\\n Use --force to override.\\n`);\n return 4;\n }\n process.stderr.write(`\u26A0 ${catalogResult.message} (--force: continuing)\\n`);\n } else {\n const { confirm: cfm, isCancel: isCnl, cancel: cnl } = await import('@clack/prompts');\n process.stderr.write(`\u26A0 ${catalogResult.message}\\n`);\n const cont = await cfm({ message: 'Continue with this model?', initialValue: false });\n if (isCnl(cont) || !cont) { cnl('Cancelled.'); return 1; }\n }\n }\n\n // Read current .env to preserve operator-added lines.\n let currentContent = '';\n try {\n currentContent = await readFile(envPath, 'utf-8');\n } catch {\n // File doesn't exist yet \u2014 install should have seeded it, but guard anyway.\n currentContent = '';\n }\n\n const next = mergeEnvContent(currentContent, answers);\n await writeFile(envPath, next, { mode: 0o600 });\n process.stdout.write(`\\n\u2713 Wrote ${envPath}\\n`);\n\n // Write secrets to ~/.abtars/secret/ (boot auto-encrypts on first start)\n const secretDirPath = join(paths.home, 'secret');\n await mkdir(secretDirPath, { recursive: true });\n const secrets: Array<[string, string]> = [];\n if (answers.telegramToken) secrets.push(['TELEGRAM_BOT_TOKEN', answers.telegramToken]);\n if (answers.discordBotToken) secrets.push(['DISCORD_BOT_TOKEN', answers.discordBotToken]);\n if (answers.providerApiKey) {\n const providerKeyName = PROVIDER_API_KEY_ENV[answers.defaultProvider];\n if (providerKeyName) secrets.push([providerKeyName, answers.providerApiKey]);\n }\n if (answers.groqApiKey) secrets.push(['GROQ_API_KEY', answers.groqApiKey]);\n for (const [name, value] of secrets) {\n await writeFile(join(secretDirPath, name), value, { mode: 0o600 });\n }\n if (secrets.length > 0) process.stdout.write(`\u2713 ${secrets.length} secrets \u2192 ${secretDirPath}\\n`);\n\n // Write install mode to manifest\n const { writeManifest } = await import('../deploy-lib-import.js');\n const mf = await readManifest(paths.manifest);\n if (mf) await writeManifest(paths.manifest, { ...mf, installMode: answers.installMode });\n process.stdout.write(`\u2713 install mode: ${answers.installMode}\\n`);\n\n // Write transport.json with selected provider + model\n {\n const transportPath = join(paths.config, 'transport.json');\n let tc: Record<string, unknown> = {};\n try {\n tc = JSON.parse(await readFile(transportPath, 'utf-8'));\n } catch (err) { logAndSwallow(\"onboard\", \"op\", err); }\n\n // Seed providers and agents if not already present\n if (!tc[\"providers\"]) {\n tc[\"providers\"] = {\n \"kiro\": { \"transport\": \"acp\", \"cli\": \"kiro-cli\" },\n \"ollama\": { \"transport\": \"api\", \"endpoint\": \"http://localhost:11434/v1\" },\n \"openrouter\": { \"transport\": \"api\", \"endpoint\": \"https://openrouter.ai/api/v1\", \"apiKeyEnv\": \"OPENROUTER_API_KEY\" },\n };\n }\n if (!tc[\"agents\"]) {\n const provName = PROVIDER_TRANSPORT_NAME[answers.defaultProvider] ?? answers.defaultProvider;\n tc[\"agents\"] = {\n \"professor\": { \"model\": answers.defaultModel, \"provider\": provName },\n \"dreamy\": { \"model\": answers.defaultModel, \"provider\": provName },\n \"browsie\": { \"model\": answers.defaultModel, \"provider\": provName },\n \"coding\": { \"model\": answers.defaultModel, \"provider\": provName },\n };\n }\n if (answers.hailMaryModel) {\n const provName = PROVIDER_TRANSPORT_NAME[answers.defaultProvider] ?? answers.defaultProvider;\n tc[\"hailMary\"] = { model: answers.hailMaryModel, provider: provName };\n }\n\n await writeFile(transportPath, JSON.stringify(tc, null, 2) + '\\n', { mode: 0o600 });\n process.stdout.write(`\u2713 transport.json \u2192 ${transportPath}\\n`);\n }\n\n // Write users.json (always \u2014 onboard has the real chat ID)\n {\n const usersPath = join(paths.config, 'users.json');\n const userId = answers.userName.toLowerCase().replace(/[^a-z0-9]/g, '') || 'user';\n const platforms: Record<string, unknown> = {};\n if (answers.telegramChatId) platforms[\"telegram\"] = parseInt(answers.telegramChatId, 10) || answers.telegramChatId;\n if (answers.discordAppId) platforms[\"discord\"] = answers.discordAppId;\n const users = {\n users: [{\n userId,\n displayName: answers.userName || userId,\n role: \"master\",\n maxClass: 3,\n tools: [\"all\"],\n platforms,\n allowedChats: [],\n }],\n };\n await writeFile(usersPath, JSON.stringify(users, null, 2) + '\\n', { mode: 0o600 });\n process.stdout.write(`\u2713 users.json \u2192 ${usersPath}\\n`);\n\n // #1009: Write instance name to peers.json\n const peersPath = join(paths.config, 'peers.json');\n let peersJson: Record<string, unknown> = { self: { name: \"default\" }, peers: {} };\n try { peersJson = JSON.parse(await readFile(peersPath, 'utf-8')); } catch { /* missing \u2014 use default */ }\n if (!peersJson.self || typeof peersJson.self !== 'object') peersJson.self = {};\n (peersJson.self as Record<string, unknown>).name = answers.instanceName || answers.userName.toLowerCase().replace(/[^a-z0-9-]/g, '') || 'default';\n await writeFile(peersPath, JSON.stringify(peersJson, null, 2) + '\\n', { mode: 0o600 });\n process.stdout.write(`\u2713 peers.json (self.name: ${(peersJson.self as Record<string, unknown>).name}) \u2192 ${peersPath}\\n`);\n\n // Copy models.json (model metadata for context window, cost, rank)\n const modelsPath = join(paths.config, 'models.json');\n const { existsSync: modelsExists, copyFileSync: modelsCopy } = await import('node:fs');\n if (!modelsExists(modelsPath)) {\n const { fileURLToPath } = await import('node:url');\n const here = dirname(fileURLToPath(import.meta.url));\n const modelsCandidates = [\n join(here, '..', '..', '..', 'config', 'models.json'),\n join(here, '..', '..', 'config', 'models.json'),\n join(resolveReleasesDir(), 'src', 'abtars', 'config', 'models.json'),\n ];\n for (const p of modelsCandidates) {\n if (modelsExists(p)) { modelsCopy(p, modelsPath); process.stdout.write(`\u2713 models.json \u2192 ${modelsPath}\\n`); break; }\n }\n }\n\n // Check abmind encryption compatibility\n try {\n const { abmindHome } = await import(\"../../paths.js\");\n const manifestPath = join(abmindHome(), 'manifest.json');\n const manifest = JSON.parse((await import('node:fs')).readFileSync(manifestPath, 'utf-8'));\n if (manifest.encryptionUser && manifest.encryptionUser !== answers.userName) {\n process.stdout.write(`\u26A0\uFE0F abmind encryption uses name '${manifest.encryptionUser}' but you entered '${answers.userName}'. Backup restore will need the encryption name ('${manifest.encryptionUser}').\\n`);\n }\n } catch { /* no abmind or no manifest \u2014 fine */ }\n }\n\n // Initialize passphrase-based encryption \u2014 generate abtars.key (#1166)\n if (answers.passphrase && answers.userName) {\n try {\n const master = deriveFromPassphrase(answers.passphrase, answers.userName);\n const keyPath = join(paths.home, \"config\", \"abtars.key\");\n writeKeyFile(keyPath, master);\n writeKeyVerify(keyPath, deriveKey(master));\n process.stdout.write(`\u2713 abtars.key derived from passphrase\\n`);\n } catch (err) {\n process.stdout.write(`\u26A0 Key init failed: ${err instanceof Error ? err.message : String(err)}\\n`);\n }\n }\n\n // Seed default tasks (#383) \u2014 morning greeting + midnight backup\n if (answers.telegramChatId) {\n await seedDefaultTasks(answers.telegramChatId, paths.home);\n }\n\n // Seed default agent-api rules\n process.stdout.write(`\\n\uD83D\uDCA1 To edit providers, agents, hailMary, fallback chains \u2014 edit:\\n ${join(paths.config, 'transport.json')}\\n Docs: https://aksika.github.io/abtars/\\n`);\n\n // Run update (clone source, build, deploy, start bridge)\n process.stdout.write(`\\nRunning abtars update...\\n`);\n const { update } = await import(\"./update.js\");\n return await update({ source: opts.source ?? \"alpha\", localDir: opts.localDir, skipFreshness: true, allowAbmindMismatch: false });\n}\n\n// \u2500\u2500 Default task seeding (#383) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/**\n * Seed default tasks (#383) via copy \u2014 skipped if tasks.json\n * already exists. Called from onboard after .env is persisted so chatId\n * is available.\n */\nasync function seedDefaultTasks(_chatId: string, abtarsHome: string): Promise<void> {\n const { existsSync, mkdirSync, copyFileSync } = await import('node:fs');\n const tasksJson = join(abtarsHome, 'tasks', 'tasks.json');\n if (existsSync(tasksJson)) {\n process.stdout.write(`\u2022 tasks.json exists \u2014 skipping default-task seed\\n`);\n return;\n }\n\n const { fileURLToPath } = await import('node:url');\n const here = dirname(fileURLToPath(import.meta.url));\n const candidates = [\n join(here, '..', '..', '..', 'config', 'tasks', 'tasks.json'),\n join(here, '..', '..', 'config', 'tasks', 'tasks.json'),\n join(resolveReleasesDir(), 'src', 'abtars', 'config', 'tasks', 'tasks.json'),\n ];\n let templatePath: string | null = null;\n for (const p of candidates) {\n if (existsSync(p)) { templatePath = p; break; }\n }\n if (!templatePath) {\n return;\n }\n\n mkdirSync(join(abtarsHome, 'tasks'), { recursive: true });\n copyFileSync(templatePath, tasksJson);\n process.stdout.write(`\u2713 default tasks seeded\\n`);\n}\n", "/**\n * First-touch hint system \u2014 show a hint once, persist to manifest.\n * Output to stderr with \uD83D\uDCA1 prefix. Never corrupts manifest (atomic write).\n */\n\nimport { existsSync, readFileSync, writeFileSync, renameSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\nfunction manifestPath(): string {\n const home = process.env[\"ABTARS_HOME\"] ?? join(process.env[\"HOME\"] ?? \"\", \".abtars\");\n return join(home, \"manifest.json\");\n}\n\nfunction readManifest(): Record<string, unknown> {\n const path = manifestPath();\n if (!existsSync(path)) return {};\n try { return JSON.parse(readFileSync(path, \"utf-8\")); }\n catch { return {}; }\n}\n\nfunction writeManifestAtomic(data: Record<string, unknown>): void {\n const path = manifestPath();\n const tmp = path + \".tmp\";\n writeFileSync(tmp, JSON.stringify(data, null, 2) + \"\\n\");\n renameSync(tmp, path);\n}\n\nexport function showHintOnce(id: string, text: string): void {\n const manifest = readManifest();\n const seen = (manifest[\"hintsSeen\"] as Record<string, string> | undefined) ?? {};\n if (seen[id]) return;\n\n process.stderr.write(`\\n\uD83D\uDCA1 ${text}\\n\\n`);\n\n seen[id] = new Date().toISOString();\n manifest[\"hintsSeen\"] = seen;\n writeManifestAtomic(manifest);\n}\n", "import { printBanner } from './banner.js';\n/**\n * `abtars status` \u2014 print manifest + bridge state.\n * Read-only. Exit code 0 on healthy install, 1 otherwise.\n */\n\nimport { existsSync } from 'node:fs';\nimport { packagePaths, readManifest, readSentinel } from '../deploy-lib-import.js';\nimport { readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\nexport async function status(): Promise<number> {\n await printBanner(\"status\");\n const paths = packagePaths('abtars');\n const manifest = await readManifest(paths.manifest);\n\n if (!manifest) {\n process.stdout.write(\n `abtars: not installed (no manifest at ${paths.manifest})\\n` +\n `Run 'abtars install' to set up.\\n`,\n );\n return 1;\n }\n\n const appExists = existsSync(paths.app);\n let rollbackCount = 0;\n try {\n const history: string[] = JSON.parse(readFileSync(paths.releasesHistory, \"utf-8\"));\n rollbackCount = Math.min(history.length - 1, 3); // skip current\n } catch {}\n\n const lines = [\n `abtars status`,\n ` home: ${paths.home}`,\n ` version: ${manifest.version || '(unset \u2014 run update)'}`,\n ` commit: ${manifest.commit ?? '(unknown)'}`,\n ` branch: ${manifest.branch ?? '(unknown)'}`,\n ` source: ${manifest.source}`,\n ` mode: ${manifest.installMode ?? 'daemon'}`,\n ` activated: ${manifest.activatedAt}`,\n ` app/: ${appExists ? '\u2713 present' : '\u2717 missing'}`,\n ` rollback: ${rollbackCount > 0 ? `${rollbackCount} available` : '\u25CB none'}`,\n ` previous: ${manifest.previousVersion ?? '(none)'}`,\n ` host: ${manifest.host}`,\n ];\n\n // Bridge state\n try {\n const bridgeLock = JSON.parse(readFileSync(join(paths.home, 'bridge.lock'), 'utf-8'));\n if (bridgeLock.pid) {\n const alive = (() => { try { process.kill(bridgeLock.pid, 0); return true; } catch { return false; } })();\n lines.push(` bridge: ${alive ? '\u25CF running' : '\u2717 dead'} (pid ${bridgeLock.pid})`);\n } else {\n lines.push(` bridge: \u25CB stopped`);\n }\n } catch {\n lines.push(` bridge: \u25CB stopped`);\n }\n\n // Dashboard + Agent API ports from .env\n try {\n const envContent = readFileSync(join(paths.home, 'config', '.env'), 'utf-8');\n const webPort = envContent.match(/^WEB_PORT=(\\d+)/m)?.[1];\n const apiPort = envContent.match(/^AGENT_API_PORT=(\\d+)/m)?.[1];\n if (webPort) lines.push(` dashboard: :${webPort}`);\n if (apiPort) lines.push(` agent-api: :${apiPort}`);\n } catch { /* no .env */ }\n\n process.stdout.write(`${lines.join('\\n')}\\n`);\n\n // Sentinel warning\n const sentinel = readSentinel(paths.home);\n if (sentinel?.status === 'pending') {\n const age = Date.now() - new Date(sentinel.startedAt).getTime();\n if (age > 5 * 60_000) {\n process.stderr.write(`\\n\u26A0\uFE0F Last update (${sentinel.version}) may have failed \u2014 bridge never confirmed boot.\\n`);\n return 1;\n }\n }\n\n if (!appExists) {\n process.stderr.write(`\\n\u26A0\uFE0F app/ directory missing. Run 'abtars update' to deploy.\\n`);\n return 1;\n }\n\n return 0;\n}\n", "/**\n * abtars CLI top-level dispatcher.\n *\n * Subcommands:\n * install [--upgrade] [--force]\n * update [--dev [DIR] | --alpha | --stable]\n * rollback [--to <version>]\n * status\n */\n\nprocess.umask(0o077); // #441: all runtime files 600, dirs 700\nimport { doctor } from './commands/doctor.js';\nimport { uninstall } from './commands/uninstall.js';\nimport { backup } from './commands/backup.js';\nimport { onboard } from './commands/onboard.js';\nimport { rollback } from './commands/rollback.js';\nimport { restart } from './commands/restart.js';\nimport { status } from './commands/status.js';\nimport { stop } from './commands/stop.js';\nimport { update } from './commands/update.js';\n\ntype Args = {\n readonly command: string;\n readonly flags: ReadonlyMap<string, string | boolean>;\n};\n\nfunction parseArgs(argv: readonly string[]): Args {\n const command = argv[0] ?? '';\n const flags = new Map<string, string | boolean>();\n for (let i = 1; i < argv.length; i++) {\n const a = argv[i];\n if (a === undefined) continue;\n if (a.startsWith('--')) {\n const eqIdx = a.indexOf('=');\n if (eqIdx > 2) {\n flags.set(a.slice(2, eqIdx), a.slice(eqIdx + 1));\n } else {\n const next = argv[i + 1];\n if (next !== undefined && !next.startsWith('--')) {\n flags.set(a.slice(2), next);\n i++;\n } else {\n flags.set(a.slice(2), true);\n }\n }\n }\n }\n return { command, flags };\n}\n\nfunction printUsage(): void {\n process.stdout.write(\n `abtars \u2014 install/update CLI (#158)\n\nUsage:\n abtars install [--force] [--mode=simple|daemon] [--restore <backup.zip>]\n abtars install --non-interactive --accept-risk [onboard flags...]\n abtars uninstall [--yes]\n abtars update [--dev [DIR] | --alpha | --stable]\n abtars rollback [--to <version>]\n abtars backup [--config] [--encrypt] [--output <dir>] [--prune-days N]\n abtars restore <file.zip|.7z|.abm|.enc> [--config] [--passphrase <p>]\n abtars doctor [--json] [--fix]\n abtars restart [--cold]\n abtars start\n abtars stop\n abtars status\n abtars logs\n abtars config\n abtars deps [list|install|remove]\n abtars tribe join --peer <host:port>\n abtars tribe invite --peer <host:port>\n abtars tribe status\n `,\n );\n}\n\nexport async function main(argv: readonly string[]): Promise<number> {\n // Handle --version before parsing (it looks like a command to parseArgs)\n if (argv[0] === '--version' || argv[0] === '-v' || argv[0] === 'version') {\n const { readFileSync } = await import('node:fs');\n const { join, dirname } = await import('node:path');\n const { fileURLToPath } = await import('node:url');\n const here = dirname(fileURLToPath(import.meta.url));\n try {\n const pkg = JSON.parse(readFileSync(join(here, '..', 'package.json'), 'utf-8'));\n process.stdout.write(`${pkg.version}\\n`);\n } catch {\n process.stdout.write('unknown\\n');\n }\n return 0;\n }\n\n const { command, flags } = parseArgs(argv);\n\n try {\n switch (command) {\n case 'install': {\n if (flags.get('help') === true) { printUsage(); return 0; }\n // Channel: --dev [dir], --alpha, --stable (same as update)\n let source: 'dev' | 'alpha' | 'stable' = 'alpha';\n let installLocalDir: string | undefined;\n if (flags.get('dev') === true || typeof flags.get('dev') === 'string') {\n source = 'dev';\n if (typeof flags.get('dev') === 'string') installLocalDir = flags.get('dev') as string;\n } else if (flags.get('alpha') === true) {\n source = 'alpha';\n } else if (flags.get('stable') === true) {\n source = 'stable';\n } else if (flags.has('local') || flags.get('source') === 'local') {\n source = 'dev';\n if (typeof flags.get('local') === 'string') installLocalDir = flags.get('local') as string;\n } else if (flags.get('source') === 'npm') {\n source = 'alpha';\n }\n return await onboard({\n nonInteractive: flags.get('non-interactive') === true,\n acceptRisk: flags.get('accept-risk') === true,\n telegramToken: typeof flags.get('telegram-token') === 'string' ? (flags.get('telegram-token') as string) : undefined,\n telegramChatId: typeof flags.get('telegram-chat-id') === 'string' ? (flags.get('telegram-chat-id') as string) : undefined,\n defaultProvider: typeof flags.get('default-provider') === 'string' ? (flags.get('default-provider') as string) : undefined,\n defaultModel: typeof flags.get('default-model') === 'string' ? (flags.get('default-model') as string) : undefined,\n apiKey: typeof flags.get('api-key') === 'string' ? (flags.get('api-key') as string) : undefined,\n discordA2aChannel: typeof flags.get('discord-a2a-channel') === 'string' ? (flags.get('discord-a2a-channel') as string) : undefined,\n userName: typeof flags.get('user-name') === 'string' ? (flags.get('user-name') as string) : undefined,\n instanceName: typeof flags.get('instance-name') === 'string' ? (flags.get('instance-name') as string) : undefined,\n passphrase: typeof flags.get('passphrase') === 'string' ? (flags.get('passphrase') as string) : undefined,\n force: flags.get('force') === true,\n source,\n localDir: installLocalDir,\n });\n }\n case 'uninstall':\n return await uninstall({ yes: flags.get('yes') === true });\n case 'update': {\n // Determine channel: --dev [dir], --alpha, --stable (hidden: --local [dir], --source local|npm)\n let source: 'dev' | 'alpha' | 'stable' | null = null;\n let localDir: string | undefined;\n if (flags.get('dev') === true || typeof flags.get('dev') === 'string') {\n source = 'dev';\n if (typeof flags.get('dev') === 'string') localDir = flags.get('dev') as string;\n } else if (flags.get('alpha') === true) {\n source = 'alpha';\n } else if (flags.get('stable') === true) {\n source = 'stable';\n } else if (flags.has('local') || flags.get('source') === 'local') {\n // Hidden alias: --local [dir] or --source local\n source = 'dev';\n if (typeof flags.get('local') === 'string') localDir = flags.get('local') as string;\n } else if (flags.get('source') === 'npm') {\n // Hidden alias: --source npm \u2192 alpha\n source = 'alpha';\n }\n return await update({\n source,\n localDir,\n skipFreshness: source === 'dev',\n allowAbmindMismatch: flags.get('allow-abmind-mismatch') === true,\n });\n }\n case '__deploy': {\n // Hidden (#1237): activation entry. Run by the freshly-staged bundle;\n // consumes a StagedRelease produced by the bootstrap. Not user-facing.\n const { deployActivationCli } = await import('./deploy-lib/deploy.js');\n return await deployActivationCli(flags);\n }\n case 'rollback':\n return await rollback({ to: typeof flags.get('to') === 'string' ? Number(flags.get('to')) : undefined });\n case 'backup':\n return await backup({\n config: flags.get('config') === true,\n encrypt: flags.get('encrypt') === true,\n outputDir: typeof flags.get('output') === 'string' ? (flags.get('output') as string) : undefined,\n pruneDays: typeof flags.get('prune-days') === 'string' ? Number(flags.get('prune-days')) : undefined,\n });\n case 'restore': {\n const { restore } = await import('./commands/restore.js');\n return await restore(argv[1] ?? '', {\n config: flags.get('config') === true,\n passphrase: typeof flags.get('passphrase') === 'string' ? (flags.get('passphrase') as string) : undefined,\n });\n }\n case 'doctor':\n return await doctor(argv.slice(1).filter((a) => a !== ''));\n case 'status':\n return await status();\n case 'restart':\n return await restart({ cold: flags.get('cold') === true });\n case 'stop':\n return await stop({});\n case 'start': {\n const { start: startCmd } = await import('./commands/start.js');\n return await startCmd();\n }\n case 'daemon': {\n const { daemon: daemonCmd } = await import('./commands/daemon.js');\n return await daemonCmd(argv.slice(1));\n }\n case 'deps': {\n const { deps: depsCmd } = await import('./commands/deps.js');\n return await depsCmd(argv.slice(1));\n }\n case 'logs': {\n const { logs } = await import('./commands/logs.js');\n return await logs();\n }\n case 'orc': {\n const { orc: orcCmd } = await import('./commands/orc.js');\n return await orcCmd(argv.slice(1));\n }\n case 'config': {\n const { configShow } = await import('./commands/config-show.js');\n return await configShow();\n }\n case 'tribe': {\n const { tribe: tribeCmd } = await import('./commands/tribe.js');\n return await tribeCmd(argv.slice(1));\n }\n case '':\n case 'help':\n case '--help':\n case '-h':\n printUsage();\n return 0;\n default:\n process.stderr.write(`unknown subcommand: ${command}\\n\\n`);\n printUsage();\n return 2;\n }\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n process.stderr.write(`error: ${msg}\\n`);\n return 1;\n }\n}\n\n// Direct-run guard: works when invoked as `node dist/cli/abtars.js` AND\n// as `abtars` (npm-installed bin). Not executed under vitest.\nconst isDirectRun =\n typeof process.argv[1] === 'string' &&\n (process.argv[1].endsWith('abtars.js') ||\n process.argv[1].endsWith('abtars-cli.js') ||\n process.argv[1].endsWith('abtars') ||\n process.argv[1].endsWith('abtars.ts'));\n\nif (isDirectRun && process.env['VITEST'] === undefined) {\n void main(process.argv.slice(2)).then((code) => process.exit(code));\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["existsSync", "unlinkSync", "join", "manifestPath", "join", "existsSync", "unlinkSync", "existsSync", "readdirSync", "unlinkSync", "readFileSync", "join", "abmindHome", "dirname", "join", "existsSync", "readFileSync", "writeFileSync", "renameSync", "join", "readManifest", "confirm", "dirname", "join", "mkdirSync", "homedir", "abmindHome", "manifestPath", "manifest", "update", "abtarsHome", "existsSync", "existsSync", "readFileSync", "join", "existsSync", "readFileSync", "join", "dirname"]
7
7
  }
@@ -2,11 +2,11 @@
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
  restart
5
- } from "./chunk-GPZNXY2U.js";
5
+ } from "./chunk-4S3H4OK7.js";
6
6
  import "./chunk-YDY6QVWJ.js";
7
7
  import "./chunk-5NY2YULC.js";
8
- import "./chunk-YSKCQH6E.js";
9
- import "./chunk-GWILHZPT.js";
8
+ import "./chunk-2IYJ4I66.js";
9
+ import "./chunk-XRTXYN66.js";
10
10
  import "./chunk-GALQBVKO.js";
11
11
  import "./chunk-O7KQG6ME.js";
12
12
  import "./chunk-7K2YZTLD.js";
@@ -8,13 +8,13 @@ import {
8
8
  readEntry,
9
9
  removeEntry,
10
10
  writeEntry
11
- } from "./chunk-PEDX56EL.js";
11
+ } from "./chunk-EFGBM555.js";
12
12
  import {
13
13
  init_local_time,
14
14
  localISO
15
15
  } from "./chunk-N5KN3LGD.js";
16
- import "./chunk-YSKCQH6E.js";
17
- import "./chunk-GWILHZPT.js";
16
+ import "./chunk-2IYJ4I66.js";
17
+ import "./chunk-XRTXYN66.js";
18
18
  import "./chunk-GALQBVKO.js";
19
19
  import "./chunk-O7KQG6ME.js";
20
20
  import {