abtars 0.1.0-alpha.2 → 0.1.0-alpha.21

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 (386) hide show
  1. package/CHANGELOG.md +64 -0
  2. package/bundle/_registry.generated-KQODGKTQ.js +36 -0
  3. package/bundle/{_registry.generated-M4WY2MMI.js.map → _registry.generated-KQODGKTQ.js.map} +1 -1
  4. package/bundle/abtars-browser.js +8 -7
  5. package/bundle/abtars-browser.js.map +1 -1
  6. package/bundle/abtars-cli.js +646 -73
  7. package/bundle/abtars-cli.js.map +4 -4
  8. package/bundle/abtars-restart.js +7 -6
  9. package/bundle/abtars-rss.js +2 -1
  10. package/bundle/abtars-rss.js.map +1 -1
  11. package/bundle/abtars-task.js +9 -8
  12. package/bundle/abtars-task.js.map +1 -1
  13. package/bundle/abtars.js +103 -96
  14. package/bundle/abtars.js.map +2 -2
  15. package/bundle/{agent-api-rate-limit-OQNFMXTZ.js → agent-api-rate-limit-7R5TX2F2.js} +7 -6
  16. package/bundle/{agent-api-rate-limit-OQNFMXTZ.js.map → agent-api-rate-limit-7R5TX2F2.js.map} +1 -1
  17. package/bundle/agent-registry-5M77ZOMV.js +19 -0
  18. package/bundle/agent-registry-VJMNIQ5W.js +19 -0
  19. package/bundle/{anthropic-adapter-2APTH3LA.js → anthropic-adapter-IBY3NPXW.js} +4 -3
  20. package/bundle/{anthropic-adapter-2APTH3LA.js.map → anthropic-adapter-IBY3NPXW.js.map} +1 -1
  21. package/bundle/{bridge-lock-transport-4AC2G5G6.js → bridge-lock-transport-HO545SBK.js} +9 -8
  22. package/bundle/browse-delivery-64GQIUHG.js +18 -0
  23. package/bundle/browser-EXR5OQGK.js +19 -0
  24. package/bundle/capability-HIE7UGFU.js +18 -0
  25. package/bundle/{chunk-BUUVFUPO.js → chunk-2BY6I4P5.js} +5 -4
  26. package/bundle/{chunk-BUUVFUPO.js.map → chunk-2BY6I4P5.js.map} +1 -1
  27. package/bundle/{chunk-Y6XAEX2Q.js → chunk-2F6XKG7Y.js} +15 -9
  28. package/bundle/chunk-2F6XKG7Y.js.map +7 -0
  29. package/bundle/{chunk-V76TVMCM.js → chunk-3MO2MDXJ.js} +5 -4
  30. package/bundle/{chunk-V76TVMCM.js.map → chunk-3MO2MDXJ.js.map} +1 -1
  31. package/bundle/{chunk-6UCRKRWR.js → chunk-6XX4OAAM.js} +22 -21
  32. package/bundle/chunk-6XX4OAAM.js.map +7 -0
  33. package/bundle/{chunk-XREWVCUO.js → chunk-7CHLS36W.js} +16 -148
  34. package/bundle/chunk-7CHLS36W.js.map +7 -0
  35. package/bundle/{chunk-NWDBD4PA.js → chunk-7K2YZTLD.js} +3 -2
  36. package/bundle/{chunk-JCJS4ZIB.js → chunk-AQVOAQQI.js} +5 -4
  37. package/bundle/{chunk-JCJS4ZIB.js.map → chunk-AQVOAQQI.js.map} +1 -1
  38. package/bundle/chunk-AUQD2PKM.js +136 -0
  39. package/bundle/chunk-AUQD2PKM.js.map +7 -0
  40. package/bundle/{chunk-YOCTDKKL.js → chunk-BYDUMHXT.js} +4 -3
  41. package/bundle/{chunk-YOCTDKKL.js.map → chunk-BYDUMHXT.js.map} +1 -1
  42. package/bundle/{chunk-RVE2N7FA.js → chunk-CELR236Q.js} +5 -4
  43. package/bundle/{chunk-RVE2N7FA.js.map → chunk-CELR236Q.js.map} +1 -1
  44. package/bundle/{chunk-2XU2X4OI.js → chunk-CUQA2AJT.js} +3 -2
  45. package/bundle/{chunk-2XU2X4OI.js.map → chunk-CUQA2AJT.js.map} +1 -1
  46. package/bundle/chunk-DMPR5MYT.js +183 -0
  47. package/bundle/chunk-DMPR5MYT.js.map +7 -0
  48. package/bundle/{chunk-BHMZ4RCC.js → chunk-DY3R7LDW.js} +55 -54
  49. package/bundle/{chunk-BHMZ4RCC.js.map → chunk-DY3R7LDW.js.map} +1 -1
  50. package/bundle/{chunk-AR6GO6YC.js → chunk-ELRAH7VL.js} +5 -4
  51. package/bundle/{chunk-AR6GO6YC.js.map → chunk-ELRAH7VL.js.map} +1 -1
  52. package/bundle/{chunk-FMWKEPM7.js → chunk-EX2SRTUE.js} +5 -4
  53. package/bundle/{chunk-FMWKEPM7.js.map → chunk-EX2SRTUE.js.map} +1 -1
  54. package/bundle/{chunk-JW6RU47G.js → chunk-FVQGP5YO.js} +8 -7
  55. package/bundle/{chunk-JW6RU47G.js.map → chunk-FVQGP5YO.js.map} +1 -1
  56. package/bundle/{chunk-GRNENTPA.js → chunk-G6IXMYIO.js} +4 -3
  57. package/bundle/{chunk-GRNENTPA.js.map → chunk-G6IXMYIO.js.map} +1 -1
  58. package/bundle/{chunk-6NR3OHEW.js → chunk-H2RZ4NEJ.js} +6 -5
  59. package/bundle/{chunk-6NR3OHEW.js.map → chunk-H2RZ4NEJ.js.map} +1 -1
  60. package/bundle/chunk-HVKJN3AG.js +189 -0
  61. package/bundle/chunk-HVKJN3AG.js.map +7 -0
  62. package/bundle/{chunk-265TPOPC.js → chunk-HXJRZWKA.js} +3 -2
  63. package/bundle/{chunk-265TPOPC.js.map → chunk-HXJRZWKA.js.map} +1 -1
  64. package/bundle/chunk-IU3RI5E4.js +645 -0
  65. package/bundle/chunk-IU3RI5E4.js.map +7 -0
  66. package/bundle/{chunk-GST5T3WZ.js → chunk-J5YIMCLT.js} +6 -5
  67. package/bundle/{chunk-GST5T3WZ.js.map → chunk-J5YIMCLT.js.map} +1 -1
  68. package/bundle/chunk-JAJ3DUQ2.js +30 -0
  69. package/bundle/{chunk-OP7BTAWY.js.map → chunk-JAJ3DUQ2.js.map} +1 -1
  70. package/bundle/chunk-JHF25OOG.js +645 -0
  71. package/bundle/chunk-JHF25OOG.js.map +7 -0
  72. package/bundle/{chunk-MPX525QO.js → chunk-JRG4EFMP.js} +5 -4
  73. package/bundle/{chunk-MPX525QO.js.map → chunk-JRG4EFMP.js.map} +1 -1
  74. package/bundle/{chunk-VVEDVGCR.js → chunk-JU3UBWLN.js} +17 -16
  75. package/bundle/{chunk-VVEDVGCR.js.map → chunk-JU3UBWLN.js.map} +1 -1
  76. package/bundle/{chunk-QBGBT5QS.js → chunk-JX3ZZU3O.js} +5 -4
  77. package/bundle/{chunk-QBGBT5QS.js.map → chunk-JX3ZZU3O.js.map} +1 -1
  78. package/bundle/{chunk-6SETMHNN.js → chunk-K7P74UNQ.js} +8 -7
  79. package/bundle/{chunk-6SETMHNN.js.map → chunk-K7P74UNQ.js.map} +1 -1
  80. package/bundle/{chunk-AZJIODTQ.js → chunk-KED3G7HS.js} +6 -5
  81. package/bundle/{chunk-AZJIODTQ.js.map → chunk-KED3G7HS.js.map} +1 -1
  82. package/bundle/chunk-KI2ROWAH.js +3707 -0
  83. package/bundle/chunk-KI2ROWAH.js.map +7 -0
  84. package/bundle/{chunk-UHRP745J.js → chunk-L7YHV5DL.js} +6 -5
  85. package/bundle/{chunk-UHRP745J.js.map → chunk-L7YHV5DL.js.map} +1 -1
  86. package/bundle/{chunk-BSSBCSCL.js → chunk-LD5BMLHG.js} +11 -10
  87. package/bundle/{chunk-BSSBCSCL.js.map → chunk-LD5BMLHG.js.map} +1 -1
  88. package/bundle/{chunk-2UPU3OW6.js → chunk-LYEAHE5V.js} +5 -4
  89. package/bundle/{chunk-2UPU3OW6.js.map → chunk-LYEAHE5V.js.map} +1 -1
  90. package/bundle/{chunk-3B7BBE4F.js → chunk-MCGEXAG5.js} +8 -7
  91. package/bundle/{chunk-3B7BBE4F.js.map → chunk-MCGEXAG5.js.map} +1 -1
  92. package/bundle/{chunk-X76UX47U.js → chunk-MJ6PHMOK.js} +4 -3
  93. package/bundle/{chunk-X76UX47U.js.map → chunk-MJ6PHMOK.js.map} +1 -1
  94. package/bundle/{chunk-LSPKJQCI.js → chunk-MV6CJFWR.js} +3 -2
  95. package/bundle/{chunk-LSPKJQCI.js.map → chunk-MV6CJFWR.js.map} +1 -1
  96. package/bundle/chunk-MZWMYN4O.js +17 -0
  97. package/bundle/{chunk-M6VBAPNT.js.map → chunk-MZWMYN4O.js.map} +1 -1
  98. package/bundle/{chunk-HX7Y7EYP.js → chunk-NIRYBWUW.js} +4 -3
  99. package/bundle/{chunk-HX7Y7EYP.js.map → chunk-NIRYBWUW.js.map} +1 -1
  100. package/bundle/{chunk-3E545J66.js → chunk-OW64RUE5.js} +3 -2
  101. package/bundle/{chunk-3E545J66.js.map → chunk-OW64RUE5.js.map} +1 -1
  102. package/bundle/chunk-P56PLAIC.js +126 -0
  103. package/bundle/chunk-P56PLAIC.js.map +7 -0
  104. package/bundle/{chunk-TZHIDLDS.js → chunk-P6PN34XD.js} +5 -4
  105. package/bundle/{chunk-TZHIDLDS.js.map → chunk-P6PN34XD.js.map} +1 -1
  106. package/bundle/{chunk-2UENBO6M.js → chunk-PF5UQ64X.js} +9 -8
  107. package/bundle/{chunk-2UENBO6M.js.map → chunk-PF5UQ64X.js.map} +1 -1
  108. package/bundle/{chunk-6CPN4IGS.js → chunk-PQ62LZNA.js} +9 -8
  109. package/bundle/{chunk-6CPN4IGS.js.map → chunk-PQ62LZNA.js.map} +1 -1
  110. package/bundle/{chunk-UCQ2WC3B.js → chunk-PQW5QBPY.js} +15 -8
  111. package/bundle/chunk-PQW5QBPY.js.map +7 -0
  112. package/bundle/{chunk-D2DCBO6M.js → chunk-R36WIOYX.js} +3 -2
  113. package/bundle/{chunk-D2DCBO6M.js.map → chunk-R36WIOYX.js.map} +1 -1
  114. package/bundle/chunk-RB3X66KM.js +386 -0
  115. package/bundle/chunk-RB3X66KM.js.map +7 -0
  116. package/bundle/{chunk-GUQVJC3U.js → chunk-RE3F3CFW.js} +7 -6
  117. package/bundle/{chunk-GUQVJC3U.js.map → chunk-RE3F3CFW.js.map} +1 -1
  118. package/bundle/chunk-RWUINZUQ.js +19 -0
  119. package/bundle/chunk-RWUINZUQ.js.map +7 -0
  120. package/bundle/{chunk-NT3OBORC.js → chunk-S54DBUZ4.js} +10 -9
  121. package/bundle/{chunk-NT3OBORC.js.map → chunk-S54DBUZ4.js.map} +1 -1
  122. package/bundle/{chunk-CWOHNFUV.js → chunk-SY67HM2Y.js} +3 -2
  123. package/bundle/{chunk-CWOHNFUV.js.map → chunk-SY67HM2Y.js.map} +1 -1
  124. package/bundle/{chunk-BQ2L4GMG.js → chunk-TBLYGCPQ.js} +4 -3
  125. package/bundle/{chunk-BQ2L4GMG.js.map → chunk-TBLYGCPQ.js.map} +1 -1
  126. package/bundle/chunk-TCBMBX3Z.js +183 -0
  127. package/bundle/chunk-TCBMBX3Z.js.map +7 -0
  128. package/bundle/chunk-TXRWQIQQ.js +3707 -0
  129. package/bundle/chunk-TXRWQIQQ.js.map +7 -0
  130. package/bundle/chunk-U34CSHFS.js +645 -0
  131. package/bundle/chunk-U34CSHFS.js.map +7 -0
  132. package/bundle/{chunk-CEVRHKJY.js → chunk-UDZIZB5F.js} +6 -5
  133. package/bundle/{chunk-CEVRHKJY.js.map → chunk-UDZIZB5F.js.map} +1 -1
  134. package/bundle/{chunk-W6FAL35D.js → chunk-VA5WKN3Z.js} +7 -6
  135. package/bundle/{chunk-W6FAL35D.js.map → chunk-VA5WKN3Z.js.map} +1 -1
  136. package/bundle/{chunk-X6TERNVJ.js → chunk-WX7GHGFX.js} +10 -9
  137. package/bundle/{chunk-X6TERNVJ.js.map → chunk-WX7GHGFX.js.map} +1 -1
  138. package/bundle/{chunk-PNEDC45Y.js → chunk-XETTJVEU.js} +4 -3
  139. package/bundle/{chunk-PNEDC45Y.js.map → chunk-XETTJVEU.js.map} +1 -1
  140. package/bundle/{chunk-PLCY3GFH.js → chunk-XLLSPBBT.js} +5 -4
  141. package/bundle/{chunk-PLCY3GFH.js.map → chunk-XLLSPBBT.js.map} +1 -1
  142. package/bundle/{chunk-ZXPXCDA6.js → chunk-XOCP5BMO.js} +6 -5
  143. package/bundle/{chunk-ZXPXCDA6.js.map → chunk-XOCP5BMO.js.map} +1 -1
  144. package/bundle/chunk-ZEY6YZAB.js +138 -0
  145. package/bundle/chunk-ZEY6YZAB.js.map +7 -0
  146. package/bundle/{chunk-MW6WDLU7.js → chunk-ZZR3JZHR.js} +10 -9
  147. package/bundle/{chunk-MW6WDLU7.js.map → chunk-ZZR3JZHR.js.map} +1 -1
  148. package/bundle/commands-AIL4XOIZ.js +33 -0
  149. package/bundle/commands-K77NVSXZ.js +32 -0
  150. package/bundle/commands-V6RSVC4Y.js +32 -0
  151. package/bundle/completion-buffer-S3LXDZG2.js +14 -0
  152. package/bundle/config-C6VHRJQ7.js +20 -0
  153. package/bundle/{config-show-ERTATR6E.js → config-show-ZTXX27FW.js} +4 -3
  154. package/bundle/{config-show-ERTATR6E.js.map → config-show-ZTXX27FW.js.map} +1 -1
  155. package/bundle/{context-HCEGZNDC.js → context-OCS7HLJP.js} +5 -4
  156. package/bundle/{context-HCEGZNDC.js.map → context-OCS7HLJP.js.map} +1 -1
  157. package/bundle/daemon-NPKYZ3CJ.js +292 -0
  158. package/bundle/daemon-NPKYZ3CJ.js.map +7 -0
  159. package/bundle/delegation-tools-PF7RD2RW.js +28 -0
  160. package/bundle/{deploy-lib-import-32ZFKHWP.js → deploy-lib-import-ODLDL2DB.js} +5 -4
  161. package/bundle/digital-signature-PNY4TR2W.js +14 -0
  162. package/bundle/{direct-api-transport-YR7SXXNN.js → direct-api-transport-EADHM67Z.js} +21 -20
  163. package/bundle/{direct-api-transport-YR7SXXNN.js.map → direct-api-transport-EADHM67Z.js.map} +1 -1
  164. package/bundle/direct-api-transport-SLJ2Z6NX.js +861 -0
  165. package/bundle/direct-api-transport-SLJ2Z6NX.js.map +7 -0
  166. package/bundle/{discord-adapter-YYWVMPPU.js → discord-adapter-FBJOJSTW.js} +25 -24
  167. package/bundle/{discord-adapter-YYWVMPPU.js.map → discord-adapter-FBJOJSTW.js.map} +1 -1
  168. package/bundle/discord-adapter-IJISVHUE.js +585 -0
  169. package/bundle/discord-adapter-IJISVHUE.js.map +7 -0
  170. package/bundle/discord-adapter-UYOCKRDF.js +586 -0
  171. package/bundle/discord-adapter-UYOCKRDF.js.map +7 -0
  172. package/bundle/{dist-MTMKARCP.js → dist-J3T4XVKX.js} +4 -3
  173. package/bundle/{dist-MTMKARCP.js.map → dist-J3T4XVKX.js.map} +1 -1
  174. package/bundle/{dns-wakeup-27M7D2MR.js → dns-wakeup-RYOCQ6GR.js} +6 -5
  175. package/bundle/{dns-wakeup-27M7D2MR.js.map → dns-wakeup-RYOCQ6GR.js.map} +1 -1
  176. package/bundle/{doctor-QNUSDY73.js → doctor-R54GZPKL.js} +10 -9
  177. package/bundle/{doctor-QNUSDY73.js.map → doctor-R54GZPKL.js.map} +1 -1
  178. package/bundle/{ensure-invariants-NMXNS476.js → ensure-invariants-K2ZUZ6NR.js} +7 -6
  179. package/bundle/{ensure-invariants-NMXNS476.js.map → ensure-invariants-K2ZUZ6NR.js.map} +1 -1
  180. package/bundle/ensure-invariants-KUXIW73S.js +50 -0
  181. package/bundle/ensure-invariants-KUXIW73S.js.map +7 -0
  182. package/bundle/env-schema-DGD6QWPA.js +20 -0
  183. package/bundle/{esm-DDP6NCZG.js → esm-PFOJARXA.js} +5 -4
  184. package/bundle/{esm-DDP6NCZG.js.map → esm-PFOJARXA.js.map} +1 -1
  185. package/bundle/{fallback-policy-L4QV2PEJ.js → fallback-policy-SR6ED5I3.js} +4 -3
  186. package/bundle/{fallback-policy-L4QV2PEJ.js.map → fallback-policy-SR6ED5I3.js.map} +1 -1
  187. package/bundle/{health-check-SPA7NT6N.js → health-check-RJ2SUJYL.js} +4 -3
  188. package/bundle/{health-check-SPA7NT6N.js.map → health-check-RJ2SUJYL.js.map} +1 -1
  189. package/bundle/hook-system-POI5VRIX.js +18 -0
  190. package/bundle/hotskills-6ECHLXTJ.js +13 -0
  191. package/bundle/install-24XR5FO5.js +13 -0
  192. package/bundle/install-AJ7VW76P.js +13 -0
  193. package/bundle/{install-log-IAPHYKD4.js → install-log-Q6RUHKWC.js} +4 -3
  194. package/bundle/{install-log-IAPHYKD4.js.map → install-log-Q6RUHKWC.js.map} +1 -1
  195. package/bundle/{install-manifest-SPQRUNXL.js → install-manifest-MCJCAYSR.js} +9 -7
  196. package/bundle/install-manifest-MCJCAYSR.js.map +7 -0
  197. package/bundle/install-manifest-ZETY4AFS.js +104 -0
  198. package/bundle/install-manifest-ZETY4AFS.js.map +7 -0
  199. package/bundle/{install-validate-PVLZXYLQ.js → install-validate-H74LUCE2.js} +4 -3
  200. package/bundle/{install-validate-PVLZXYLQ.js.map → install-validate-H74LUCE2.js.map} +1 -1
  201. package/bundle/{irc-adapter-OI5UZSQF.js → irc-adapter-RKRUSZXB.js} +7 -6
  202. package/bundle/{irc-adapter-OI5UZSQF.js.map → irc-adapter-RKRUSZXB.js.map} +1 -1
  203. package/bundle/{irc-config-55YO6EGB.js → irc-config-6VY67UPQ.js} +8 -7
  204. package/bundle/{irc-config-55YO6EGB.js.map → irc-config-6VY67UPQ.js.map} +1 -1
  205. package/bundle/{logs-ZNYXX5PA.js → logs-EK4HYRKR.js} +4 -3
  206. package/bundle/{logs-ZNYXX5PA.js.map → logs-EK4HYRKR.js.map} +1 -1
  207. package/bundle/{media-utils-XNNDTYFI.js → media-utils-QBY5WBF3.js} +8 -7
  208. package/bundle/{media-utils-XNNDTYFI.js.map → media-utils-QBY5WBF3.js.map} +1 -1
  209. package/bundle/message-pipeline-ANSMPK5O.js +34 -0
  210. package/bundle/message-pipeline-HXZMRGXZ.js +34 -0
  211. package/bundle/message-pipeline-XUUTGPFH.js +35 -0
  212. package/bundle/meta.json +1828 -1650
  213. package/bundle/model-health-registry-7ECZFCW4.js +12 -0
  214. package/bundle/model-health-registry-LDC76RPP.js +12 -0
  215. package/bundle/notification-OJ4YE4VG.js +14 -0
  216. package/bundle/{openrouter-credits-EDY7ETAU.js → openrouter-credits-L45SYKT3.js} +7 -6
  217. package/bundle/{openrouter-credits-EDY7ETAU.js.map → openrouter-credits-L45SYKT3.js.map} +1 -1
  218. package/bundle/{passwd-RRFV4CC5.js → passwd-QSHZJ2CG.js} +4 -3
  219. package/bundle/{passwd-RRFV4CC5.js.map → passwd-QSHZJ2CG.js.map} +1 -1
  220. package/bundle/paths-ZJYIDND2.js +18 -0
  221. package/bundle/{peer-client-52XYMNI7.js → peer-client-T44VI7NB.js} +13 -12
  222. package/bundle/{peer-client-52XYMNI7.js.map → peer-client-T44VI7NB.js.map} +1 -1
  223. package/bundle/peer-config-D5A4454H.js +17 -0
  224. package/bundle/{peer-sessions-EAXTNQ36.js → peer-sessions-MY2YVXHC.js} +4 -3
  225. package/bundle/{peer-sessions-EAXTNQ36.js.map → peer-sessions-MY2YVXHC.js.map} +1 -1
  226. package/bundle/{pending-callback-RIMQZ7FJ.js → pending-callback-6KLBSHLX.js} +4 -3
  227. package/bundle/{pending-callback-RIMQZ7FJ.js.map → pending-callback-6KLBSHLX.js.map} +1 -1
  228. package/bundle/phase-transport-43NP5XBK.js +23 -0
  229. package/bundle/phase-transport-GNUZI6EW.js +23 -0
  230. package/bundle/phase-transport-Q7K6V3VZ.js +23 -0
  231. package/bundle/phase-transport-SLJXIAY5.js +23 -0
  232. package/bundle/{responses-adapter-AAQTY3K4.js → responses-adapter-DAV2JUL7.js} +4 -3
  233. package/bundle/{responses-adapter-AAQTY3K4.js.map → responses-adapter-DAV2JUL7.js.map} +1 -1
  234. package/bundle/{restore-ZE3SEPSS.js → restore-ROJF22R2.js} +5 -4
  235. package/bundle/{restore-ZE3SEPSS.js.map → restore-ROJF22R2.js.map} +1 -1
  236. package/bundle/{self-healer-utils-DMUUXC47.js → self-healer-utils-7NFH22VJ.js} +7 -6
  237. package/bundle/{self-healer-utils-DMUUXC47.js.map → self-healer-utils-7NFH22VJ.js.map} +1 -1
  238. package/bundle/skill-stats-IPVKMWN3.js +23 -0
  239. package/bundle/sleep-4NVWZHVN.js +20 -0
  240. package/bundle/soul-bundle-7EYTEKFE.js +15 -0
  241. package/bundle/soul-loader-7FN7WDHM.js +18 -0
  242. package/bundle/soul-loader-K237NP4T.js +17 -0
  243. package/bundle/soul-loader-K237NP4T.js.map +7 -0
  244. package/bundle/soul-loader-UVJ6HZM3.js +17 -0
  245. package/bundle/soul-loader-UVJ6HZM3.js.map +7 -0
  246. package/bundle/src-Z3WR7SRT.js +9 -0
  247. package/bundle/src-Z3WR7SRT.js.map +7 -0
  248. package/bundle/{sse-parser-anthropic-P7CE2MH2.js → sse-parser-anthropic-H42TTLBD.js} +7 -6
  249. package/bundle/{sse-parser-anthropic-P7CE2MH2.js.map → sse-parser-anthropic-H42TTLBD.js.map} +1 -1
  250. package/bundle/{sse-parser-responses-EQQA5FWN.js → sse-parser-responses-WG2LY2ML.js} +7 -6
  251. package/bundle/{sse-parser-responses-EQQA5FWN.js.map → sse-parser-responses-WG2LY2ML.js.map} +1 -1
  252. package/bundle/{ssrf-guard-FZCBYIVW.js → ssrf-guard-E2KBBC5E.js} +7 -6
  253. package/bundle/{ssrf-guard-FZCBYIVW.js.map → ssrf-guard-E2KBBC5E.js.map} +1 -1
  254. package/bundle/{start-FH3GRMJ4.js → start-4IWBKLWO.js} +4 -3
  255. package/bundle/{start-FH3GRMJ4.js.map → start-4IWBKLWO.js.map} +1 -1
  256. package/bundle/{stream-single-WSG4D53C.js → stream-single-RFJNUTL6.js} +4 -3
  257. package/bundle/{stream-single-WSG4D53C.js.map → stream-single-RFJNUTL6.js.map} +1 -1
  258. package/bundle/stt-CF3CPFDC.js +15 -0
  259. package/bundle/stt-CF3CPFDC.js.map +7 -0
  260. package/bundle/subagent-runtime-P7GCFBM3.js +13 -0
  261. package/bundle/subagent-runtime-P7GCFBM3.js.map +7 -0
  262. package/bundle/subagent-runtime-USNPO4WF.js +13 -0
  263. package/bundle/subagent-runtime-USNPO4WF.js.map +7 -0
  264. package/bundle/subagent-runtime-XS2ZXYOZ.js +13 -0
  265. package/bundle/subagent-runtime-XS2ZXYOZ.js.map +7 -0
  266. package/bundle/{system-message-T5R3EYYN.js → system-message-TALP6GP2.js} +6 -5
  267. package/bundle/{system-message-T5R3EYYN.js.map → system-message-TALP6GP2.js.map} +1 -1
  268. package/bundle/{system-status-KQ6KHFJ6.js → system-status-2CR5OUDY.js} +10 -9
  269. package/bundle/{system-status-KQ6KHFJ6.js.map → system-status-2CR5OUDY.js.map} +1 -1
  270. package/bundle/task-store-KIBFZL5A.js +23 -0
  271. package/bundle/task-store-KIBFZL5A.js.map +7 -0
  272. package/bundle/{telegram-adapter-2V3XUMT5.js → telegram-adapter-ISQRW7PN.js} +34 -33
  273. package/bundle/{telegram-adapter-2V3XUMT5.js.map → telegram-adapter-ISQRW7PN.js.map} +1 -1
  274. package/bundle/telegram-adapter-QCD7AG5D.js +1062 -0
  275. package/bundle/telegram-adapter-QCD7AG5D.js.map +7 -0
  276. package/bundle/telegram-adapter-Y3PVA25S.js +1061 -0
  277. package/bundle/telegram-adapter-Y3PVA25S.js.map +7 -0
  278. package/bundle/telegram-adapter-YAXSK2RT.js +1062 -0
  279. package/bundle/telegram-adapter-YAXSK2RT.js.map +7 -0
  280. package/bundle/tool-registry-DFCCGZCB.js +39 -0
  281. package/bundle/tool-registry-DFCCGZCB.js.map +7 -0
  282. package/bundle/tool-sandbox-OZMXJZLQ.js +21 -0
  283. package/bundle/tool-sandbox-OZMXJZLQ.js.map +7 -0
  284. package/bundle/{transport-config-YLXU33RO.js → transport-config-ANPS2RYT.js} +11 -10
  285. package/bundle/transport-config-ANPS2RYT.js.map +7 -0
  286. package/bundle/update-check-O5MS6B3L.js +13 -0
  287. package/bundle/update-check-O5MS6B3L.js.map +7 -0
  288. package/bundle/usage-tracker-S4Z2G2K5.js +18 -0
  289. package/bundle/usage-tracker-S4Z2G2K5.js.map +7 -0
  290. package/bundle/user-registry-GTAJIW6E.js +17 -0
  291. package/bundle/user-registry-GTAJIW6E.js.map +7 -0
  292. package/config/.env +2 -0
  293. package/config/auto-fix.json +14 -0
  294. package/config/irc.json.example +30 -0
  295. package/config/models.json.example +229 -0
  296. package/config/peers.json.example +12 -0
  297. package/config/schemas/irc.schema.json +42 -0
  298. package/config/schemas/models.schema.json +17 -0
  299. package/config/schemas/peers.schema.json +35 -0
  300. package/config/schemas/transport.schema.json +35 -0
  301. package/config/schemas/users.schema.json +22 -0
  302. package/config/transport.default.json +30 -0
  303. package/config/transport.json.example +102 -0
  304. package/config/users.json.example +11 -0
  305. package/install-manifest.json +148 -0
  306. package/package.json +4 -2
  307. package/scripts/abtars-daemon.service +1 -0
  308. package/scripts/watchdog.sh +1 -1
  309. package/bundle/_registry.generated-M4WY2MMI.js +0 -35
  310. package/bundle/agent-registry-LT4JNQH6.js +0 -18
  311. package/bundle/browse-delivery-JXBY36GK.js +0 -17
  312. package/bundle/browser-ELNDVPLC.js +0 -18
  313. package/bundle/capability-CIL3G4FI.js +0 -17
  314. package/bundle/chunk-5R2ANXQ7.js +0 -510
  315. package/bundle/chunk-5R2ANXQ7.js.map +0 -7
  316. package/bundle/chunk-6UCRKRWR.js.map +0 -7
  317. package/bundle/chunk-M6VBAPNT.js +0 -16
  318. package/bundle/chunk-OP7BTAWY.js +0 -29
  319. package/bundle/chunk-UCQ2WC3B.js.map +0 -7
  320. package/bundle/chunk-XREWVCUO.js.map +0 -7
  321. package/bundle/chunk-Y6XAEX2Q.js.map +0 -7
  322. package/bundle/commands-BHVUOU3V.js +0 -31
  323. package/bundle/completion-buffer-P253ONKF.js +0 -13
  324. package/bundle/config-RGSDAPZN.js +0 -19
  325. package/bundle/delegation-tools-GYTS2D6A.js +0 -27
  326. package/bundle/digital-signature-OFCGSHWO.js +0 -13
  327. package/bundle/env-schema-2KBHBDGN.js +0 -19
  328. package/bundle/hook-system-6Q5YTR53.js +0 -17
  329. package/bundle/hotskills-K7BM4YLB.js +0 -12
  330. package/bundle/install-6HRZVKUM.js +0 -15
  331. package/bundle/install-manifest-SPQRUNXL.js.map +0 -7
  332. package/bundle/message-pipeline-LLH5SYMO.js +0 -33
  333. package/bundle/model-health-registry-35LQNVQR.js +0 -11
  334. package/bundle/notification-Y5S5MMLV.js +0 -13
  335. package/bundle/paths-G33RZWZ7.js +0 -17
  336. package/bundle/peer-config-VK6EDLN5.js +0 -16
  337. package/bundle/phase-transport-KYERDL2O.js +0 -22
  338. package/bundle/skill-stats-LLEXEXLR.js +0 -22
  339. package/bundle/sleep-OYIUOVQD.js +0 -19
  340. package/bundle/soul-loader-54WCVNLJ.js +0 -16
  341. package/bundle/src-JL4PVO23.js +0 -8
  342. package/bundle/stt-2UH3RITX.js +0 -14
  343. package/bundle/subagent-runtime-LE2ZXH3G.js +0 -12
  344. package/bundle/task-store-K7CQDEPI.js +0 -22
  345. package/bundle/tool-registry-MU3OX4UI.js +0 -38
  346. package/bundle/tool-sandbox-VYOK4ZOA.js +0 -20
  347. package/bundle/update-QCW5LXRN.js +0 -13
  348. package/bundle/update-check-27KZSAP6.js +0 -12
  349. package/bundle/usage-tracker-OVVEVMOY.js +0 -17
  350. package/bundle/user-registry-D4SD73UV.js +0 -16
  351. /package/bundle/{agent-registry-LT4JNQH6.js.map → agent-registry-5M77ZOMV.js.map} +0 -0
  352. /package/bundle/{bridge-lock-transport-4AC2G5G6.js.map → agent-registry-VJMNIQ5W.js.map} +0 -0
  353. /package/bundle/{browse-delivery-JXBY36GK.js.map → bridge-lock-transport-HO545SBK.js.map} +0 -0
  354. /package/bundle/{browser-ELNDVPLC.js.map → browse-delivery-64GQIUHG.js.map} +0 -0
  355. /package/bundle/{capability-CIL3G4FI.js.map → browser-EXR5OQGK.js.map} +0 -0
  356. /package/bundle/{chunk-NWDBD4PA.js.map → capability-HIE7UGFU.js.map} +0 -0
  357. /package/bundle/{commands-BHVUOU3V.js.map → chunk-7K2YZTLD.js.map} +0 -0
  358. /package/bundle/{completion-buffer-P253ONKF.js.map → commands-AIL4XOIZ.js.map} +0 -0
  359. /package/bundle/{config-RGSDAPZN.js.map → commands-K77NVSXZ.js.map} +0 -0
  360. /package/bundle/{delegation-tools-GYTS2D6A.js.map → commands-V6RSVC4Y.js.map} +0 -0
  361. /package/bundle/{deploy-lib-import-32ZFKHWP.js.map → completion-buffer-S3LXDZG2.js.map} +0 -0
  362. /package/bundle/{digital-signature-OFCGSHWO.js.map → config-C6VHRJQ7.js.map} +0 -0
  363. /package/bundle/{env-schema-2KBHBDGN.js.map → delegation-tools-PF7RD2RW.js.map} +0 -0
  364. /package/bundle/{hook-system-6Q5YTR53.js.map → deploy-lib-import-ODLDL2DB.js.map} +0 -0
  365. /package/bundle/{hotskills-K7BM4YLB.js.map → digital-signature-PNY4TR2W.js.map} +0 -0
  366. /package/bundle/{install-6HRZVKUM.js.map → env-schema-DGD6QWPA.js.map} +0 -0
  367. /package/bundle/{message-pipeline-LLH5SYMO.js.map → hook-system-POI5VRIX.js.map} +0 -0
  368. /package/bundle/{model-health-registry-35LQNVQR.js.map → hotskills-6ECHLXTJ.js.map} +0 -0
  369. /package/bundle/{notification-Y5S5MMLV.js.map → install-24XR5FO5.js.map} +0 -0
  370. /package/bundle/{paths-G33RZWZ7.js.map → install-AJ7VW76P.js.map} +0 -0
  371. /package/bundle/{peer-config-VK6EDLN5.js.map → message-pipeline-ANSMPK5O.js.map} +0 -0
  372. /package/bundle/{phase-transport-KYERDL2O.js.map → message-pipeline-HXZMRGXZ.js.map} +0 -0
  373. /package/bundle/{skill-stats-LLEXEXLR.js.map → message-pipeline-XUUTGPFH.js.map} +0 -0
  374. /package/bundle/{sleep-OYIUOVQD.js.map → model-health-registry-7ECZFCW4.js.map} +0 -0
  375. /package/bundle/{soul-loader-54WCVNLJ.js.map → model-health-registry-LDC76RPP.js.map} +0 -0
  376. /package/bundle/{src-JL4PVO23.js.map → notification-OJ4YE4VG.js.map} +0 -0
  377. /package/bundle/{stt-2UH3RITX.js.map → paths-ZJYIDND2.js.map} +0 -0
  378. /package/bundle/{subagent-runtime-LE2ZXH3G.js.map → peer-config-D5A4454H.js.map} +0 -0
  379. /package/bundle/{task-store-K7CQDEPI.js.map → phase-transport-43NP5XBK.js.map} +0 -0
  380. /package/bundle/{tool-registry-MU3OX4UI.js.map → phase-transport-GNUZI6EW.js.map} +0 -0
  381. /package/bundle/{tool-sandbox-VYOK4ZOA.js.map → phase-transport-Q7K6V3VZ.js.map} +0 -0
  382. /package/bundle/{transport-config-YLXU33RO.js.map → phase-transport-SLJXIAY5.js.map} +0 -0
  383. /package/bundle/{update-QCW5LXRN.js.map → skill-stats-IPVKMWN3.js.map} +0 -0
  384. /package/bundle/{update-check-27KZSAP6.js.map → sleep-4NVWZHVN.js.map} +0 -0
  385. /package/bundle/{usage-tracker-OVVEVMOY.js.map → soul-bundle-7EYTEKFE.js.map} +0 -0
  386. /package/bundle/{user-registry-D4SD73UV.js.map → soul-loader-7FN7WDHM.js.map} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/boot/phase-transport.ts", "../src/components/transport/tmux-client.ts", "../src/boot/ctx-start.ts"],
4
+ "sourcesContent": ["import { logAndSwallow } from \"../components/log-and-swallow.js\";\nimport { getEnv } from \"../components/env-schema.js\";\n/**\n * phase-transport \u2014 boot phase 3: select, initialize, and wrap the agent transport.\n *\n * Also exports buildTransport/rebuildTransport for /reset to pick up transport.json changes\n * (including provider switches that can't be live-patched).\n */\n\nimport { execSync } from \"node:child_process\";\nimport { TmuxClient } from \"../components/transport/tmux-client.js\";\nimport { createAgentTransport } from \"../components/agent-registry.js\";\nimport { logInfo, logWarn, logError, isLogLevel } from \"../components/logger.js\";\nimport { loadUsers } from \"../components/user-registry.js\";\nimport { updateCtxStart } from \"./ctx-start.js\";\nimport type { BootCtx, PhaseResult } from \"./context.js\";\nimport type { IKiroTransport } from \"../components/transport/kiro-transport.js\";\n\nconst TAG = \"transport\";\n\nexport async function phaseTransport(ctx: BootCtx): Promise<PhaseResult> {\n const { memoryConfig } = ctx;\n\n await buildTransport(ctx);\n\n // Initialize context-window-start for all known users\n if (memoryConfig.memoryEnabled) {\n const reg = loadUsers();\n for (const user of reg.users) updateCtxStart(memoryConfig.memoryDir, user.userId, ctx.startedAt);\n }\n return \"ran\";\n}\n\n/**\n * Construct professor transport from current transport.json + env and attach to ctx.transport.\n * Idempotent: destroys any existing ctx.transport first.\n *\n * #367 \u2014 Validates the resolved provider BEFORE destroying the old transport.\n * If validation fails:\n * - During `/reset` (old transport exists): logs ERROR, keeps the old transport up\n * - At boot (no old transport): falls back to .env config if possible, or throws\n * - In either case: bridge stays alive in degraded mode rather than crash-looping\n */\nexport async function buildTransport(ctx: BootCtx): Promise<PhaseResult> {\n const { config, memoryConfig } = ctx;\n\n let transport: IKiroTransport;\n\n const { resolveAgent, getEnvFallback, loadTransport, resolveHailMary, clearTransportCache, validateProviderReady } = await import(\"../components/transport-config.js\");\n clearTransportCache(); // always re-read (picks up /models change writes)\n const tc = loadTransport();\n const prof = tc ? resolveAgent(\"professor\", tc) : null;\n\n const hm = resolveHailMary(tc);\n if (hm) {\n ctx.hailMary = {\n model: hm.model,\n endpoint: hm.endpoint,\n apiKey: hm.apiKeyEnv ? getEnv().getApiKey(hm.apiKeyEnv) : undefined,\n };\n logInfo(\"main\", `\uD83D\uDEA8 hailMary configured: ${hm.model} (manual /model emergency only)`);\n } else {\n ctx.hailMary = null;\n }\n\n let resolved = prof ?? (() => {\n const fb = getEnvFallback();\n logWarn(\"main\", `\u26A0\uFE0F Using .env fallback: ${fb.model} via ${fb.providerName}`);\n return { model: fb.model, provider: fb.provider, providerName: fb.providerName, contextWindow: fb.contextWindow, maxOutput: fb.maxOutput, fallbacks: [] };\n })();\n\n // #367 \u2014 validate the resolved provider BEFORE destroying the existing transport.\n // If validation fails and an old transport is up, keep it; surface the error.\n // If no old transport (boot time), try .env fallback.\n const validation = validateProviderReady(resolved.providerName, resolved.provider, getEnv());\n if (!validation.ok) {\n const errMsg = `transport.json configures '${resolved.providerName}' but ${validation.reason}. Fix: ${validation.fix}`;\n if (ctx.transport) {\n // Existing transport still good \u2014 keep it. Don't destroy.\n logError(\"main\", `${errMsg} \u2014 keeping existing transport up (skipping rebuild)`);\n return \"ran\";\n }\n // Boot-time: try falling back to .env if we weren't already using it\n if (prof) {\n const fb = getEnvFallback();\n logError(\"main\", `${errMsg} \u2014 falling back to .env config (${fb.model} via ${fb.providerName})`);\n resolved = { model: fb.model, provider: fb.provider, providerName: fb.providerName, contextWindow: fb.contextWindow, maxOutput: fb.maxOutput, fallbacks: [] };\n // Validate fallback too \u2014 if even .env is broken, let the original error bubble\n const fbValidation = validateProviderReady(resolved.providerName, resolved.provider, getEnv());\n if (!fbValidation.ok) {\n logError(\"main\", `.env fallback '${resolved.providerName}' also invalid: ${fbValidation.reason}`);\n throw new Error(`${errMsg} (and .env fallback is also invalid: ${fbValidation.reason})`);\n }\n } else {\n // Already on .env fallback path and it's invalid \u2014 hard error\n throw new Error(errMsg);\n }\n }\n\n // Destroy old (if any) \u2014 now that we know the new config is valid\n if (ctx.transport) {\n try { await ctx.transport.destroy(); } catch (err) {\n logWarn(\"main\", `Old transport destroy failed: ${err instanceof Error ? err.message : String(err)}`);\n }\n ctx.transport = null;\n }\n\n if (resolved.provider.transport === \"tmux\") {\n const defaults = tc?.transportDefaults?.tmux;\n logInfo(\"main\", `\uD83D\uDDA5\uFE0F tmux transport (${resolved.providerName})`);\n transport = new TmuxClient(\n defaults?.session ?? config.transport.tmuxSession,\n defaults?.captureDelaySec ?? config.transport.tmuxCaptureDelaySec,\n defaults?.maxWaitSec ?? config.transport.tmuxMaxWaitSec,\n );\n } else if (resolved.provider.transport === \"api\") {\n const { DirectApiTransport } = await import(\"../components/transport/direct-api-transport.js\");\n const { ModelHealthRegistry } = await import(\"../components/transport/model-health-registry.js\");\n const { FallbackPolicy } = await import(\"../components/transport/fallback-policy.js\");\n const apiKey = getEnv().getApiKey(resolved.provider.apiKeyEnv ?? \"API_KEY\");\n\n const candidates: Array<{ model: string; endpoint: string; apiKey?: string; maxContext: number }> = [\n { endpoint: resolved.provider.endpoint ?? \"http://localhost:11434/v1\", apiKey, model: resolved.model, maxContext: resolved.contextWindow },\n ];\n for (const fb of resolved.fallbacks) {\n const fbResolved = tc ? resolveAgent(\"_fallback\", { ...tc, agents: { ...tc.agents, _fallback: { model: fb.model, provider: fb.provider } } }) : null;\n candidates.push({\n endpoint: fbResolved?.provider.endpoint ?? resolved.provider.endpoint!,\n apiKey: fbResolved?.provider.apiKeyEnv ? getEnv().getApiKey(fbResolved.provider.apiKeyEnv) : apiKey,\n model: fb.model,\n maxContext: fbResolved?.contextWindow ?? resolved.contextWindow,\n });\n }\n\n if (!ctx.modelHealthRegistry) {\n ctx.modelHealthRegistry = new ModelHealthRegistry(tc?.healthPolicy);\n }\n // Wire auto-demotion\n if (!ctx.modelHealthRegistry.onDemote) {\n ctx.modelHealthRegistry.onDemote = (model, _endpoint, reason) => {\n import(\"../components/transport-config.js\").then(({ demoteModel }) => demoteModel(model, reason));\n import(\"../components/notification.js\").then(({ sendNotification }) =>\n sendNotification(ctx, `\u26A0\uFE0F ${model} demoted (${reason}). Next healthy model promoted.`)).catch(err => logAndSwallow(TAG, \"sendNotification model-demote\", err));\n };\n }\n const policy = new FallbackPolicy(candidates, ctx.modelHealthRegistry);\n\n transport = new DirectApiTransport({\n endpoint: resolved.provider.endpoint ?? \"http://localhost:11434/v1\",\n apiKey,\n model: resolved.model,\n maxContext: resolved.contextWindow,\n maxOutput: resolved.maxOutput,\n maxTurns: tc?.maxTurns ?? 50,\n apiFormat: resolved.provider.apiFormat,\n thinking: resolved.provider.thinking,\n }, policy);\n logInfo(\"main\", `\uD83D\uDD0C Direct API transport (${resolved.providerName}, model=${resolved.model}, ${candidates.length} candidates)`);\n } else {\n try { execSync(\"pkill -f 'kiro-cli.*acp.*professor' 2>/dev/null || true\", { timeout: 3000 }); } catch (err) { logAndSwallow(\"phase_transport\", \"op\", err); }\n logInfo(\"main\", `\uD83D\uDD0C ACP transport (${resolved.provider.cli ?? \"kiro-cli\"}, model=${resolved.model})`);\n transport = createAgentTransport(\"professor\", {\n cliPath: resolved.provider.cli ?? config.transport.agentCliPath,\n workingDir: config.transport.workingDir,\n agentCli: resolved.provider.cli ?? \"kiro-cli\",\n model: resolved.model,\n });\n }\n\n await transport.initialize();\n\n if (\"setSystemPrompt\" in transport && typeof (transport as { setSystemPrompt: unknown }).setSystemPrompt === \"function\") {\n const { loadSoulBundle } = await import(\"../components/soul-loader.js\");\n const soul = loadSoulBundle();\n if (soul) (transport as { setSystemPrompt: (p: string) => void }).setSystemPrompt(soul);\n }\n\n if (resolved.fallbacks.length > 0 && resolved.provider.transport !== \"api\") {\n logWarn(\"main\", `\u26A0\uFE0F Fallbacks configured for ${resolved.provider.transport} transport \u2014 only API transport supports model fallback`);\n }\n\n ctx.transport = transport;\n ctx.modelName = resolved.model;\n ctx.modelProvider = resolved.providerName;\n ctx.fallbackChain = resolved.fallbacks.map((f: { model: string }) => f.model);\n\n if (ctx.modelHealthRegistry) {\n ctx.runtime.setRegistry(ctx.modelHealthRegistry);\n }\n ctx.runtime.setMainTransport(transport);\n ctx.runtime.setSessionManager(ctx.sessionManager);\n\n // Wire async delegation tools (#570)\n if (getEnv().enableAsyncDelegation) {\n const { setDelegationDeps } = await import(\"../components/transport/delegation-tools.js\");\n setDelegationDeps(ctx.runtime, ctx.sessionManager);\n }\n\n logInfo(\"main\", \"\u2705 Transport ready\");\n\n if (resolved.provider.transport === \"api\" && (ctx.memory as any)?.available) {\n const { setMemoryBackend } = await import(\"../components/transport/tool-registry.js\");\n const { SqliteBackend } = await import(\"abmind\");\n const backend = new SqliteBackend(memoryConfig);\n await backend.initialize();\n setMemoryBackend(backend);\n logInfo(\"main\", \"\uD83E\uDDE0 In-process memory wired to tool registry\");\n\n // Wire context engine for automatic compaction\n const db = ctx.memory!.getDb?.() ?? ctx.memory!.getDatabase?.();\n if (db && resolved.contextWindow >= 128000) {\n const { ContextEngine } = await import(\"abmind\");\n const { createContextOrchestrator } = await import(\"../components/context/index.js\");\n const contextEngine = new ContextEngine(db);\n const orchestrator = createContextOrchestrator(\n contextEngine,\n async (systemPrompt: string, userPrompt: string) => {\n // Use the transport itself for summarization (same model, same endpoint)\n const { streamSingleCompletion } = await import(\"../components/transport/stream-single.js\");\n return streamSingleCompletion({\n endpoint: resolved.provider.endpoint ?? \"http://localhost:11434/v1\",\n apiKey: getEnv().getApiKey(resolved.provider.apiKeyEnv ?? \"API_KEY\") ?? undefined,\n model: resolved.model,\n systemPrompt,\n userPrompt,\n maxTokens: 4096,\n });\n },\n (_chatId: string) => {\n try { return ctx.memory?.getLastMessageTimestamp(true) ?? null; } catch (err) { logAndSwallow(TAG, \"getLastMessageTimestamp\", err); return null; }\n },\n );\n (transport as import(\"../components/transport/direct-api-transport.js\").DirectApiTransport).contextOrchestrator = orchestrator;\n logInfo(\"main\", \"\uD83D\uDCE6 Context engine wired (auto-compaction active)\");\n }\n }\n\n if (\"onFallback\" in transport) {\n let lastNotifiedModel: string | null = null;\n (transport as unknown as { onFallback: (model: string, ctxPct: number, reason?: string) => void }).onFallback = (model, ctxPct, reason) => {\n const reasonTag = reason ? ` (${reason})` : \"\";\n const msg = `\u26A1 Fallback${reasonTag}: ${model}${ctxPct >= 0 ? ` (ctx: ~${ctxPct}%)` : \"\"}`;\n logInfo(\"main\", msg);\n if (model !== lastNotifiedModel || isLogLevel(\"debug\")) {\n lastNotifiedModel = model;\n import(\"../components/notification.js\").then(({ sendNotification }) => sendNotification(ctx, msg)).catch(err => logAndSwallow(TAG, \"sendNotification fallback\", err));\n }\n };\n }\n return \"ran\";\n}\n\n/**\n * Rebuild professor transport in place (picks up transport.json changes).\n * Patches downstream references that captured the old transport (pipelineDeps, idleSave).\n */\nexport async function rebuildTransport(ctx: BootCtx): Promise<PhaseResult> {\n logInfo(\"main\", \"\uD83D\uDD04 Rebuilding transport...\");\n await buildTransport(ctx);\n if (ctx.pipelineDeps && ctx.transport) {\n (ctx.pipelineDeps as { transport: IKiroTransport }).transport = ctx.transport;\n }\n if (ctx.idleSave && ctx.transport) {\n (ctx.idleSave as unknown as { transport: IKiroTransport }).transport = ctx.transport;\n }\n logInfo(\"main\", \"\u2705 Transport rebuilt\");\n return \"ran\";\n}\n", "import { execSync } from \"node:child_process\";\nimport { writeFileSync, unlinkSync, mkdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { IKiroTransport } from \"./kiro-transport.js\";\nimport { logInfo, logDebug, logWarn } from \"../logger.js\";\nimport { logAndSwallow } from \"../log-and-swallow.js\";\nimport { abtarsHome } from \"../../paths.js\";\n\nconst TAG = \"tmux\";\n\n// Kiro CLI prompt pattern: \"N% >\" or \"N% !>\" where N is a number (context usage percentage)\n// The \"!\" appears in trust-all-tools mode\nconst KIRO_PROMPT_RE = /^\\d+%\\s*!?>/;\n\n// Also match common shell prompts as fallback\nconst SHELL_PROMPT_RE = /[$\u276F%#]\\s*$/;\n\n/**\n * Communicates with kiro-cli running inside a tmux session.\n * Uses `tmux send-keys` to send prompts and `tmux capture-pane`\n * to read responses.\n */\nexport class TmuxClient implements IKiroTransport {\n private readonly sessionName: string;\n private readonly captureDelaySec: number;\n private readonly maxWaitSec: number;\n private ready = false;\n\n /** Optional callback for streaming intermediate responses before final prompt. */\n onIntermediateResponse?: (text: string) => void;\n\n /** Tracks the cumulative text delivered via intermediate chunks (for tail detection). */\n private lastIntermediateDelivered = \"\";\n\n constructor(sessionName: string, captureDelaySec: number, maxWaitSec: number) {\n this.sessionName = sessionName;\n this.captureDelaySec = captureDelaySec;\n this.maxWaitSec = maxWaitSec;\n }\n\n async initialize(): Promise<void> {\n if (!this.sessionExists()) {\n throw new Error(\n `tmux session \"${this.sessionName}\" not found. ` +\n `Run: scripts/tmux-session.sh to start it.`,\n );\n }\n this.ready = true;\n logInfo(\"tmux\", `Session \"${this.sessionName}\" found`);\n }\n\n get isReady(): boolean {\n return this.ready && this.sessionExists();\n }\n\n readonly transportCommands: string[] = [];\n\n async sendPrompt(_sessionKey: string, message: string): Promise<string> {\n if (!this.isReady) {\n throw new Error(\"tmux session not available\");\n }\n\n this.lastIntermediateDelivered = \"\";\n const maxAttempts = 2;\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n // Snapshot pane content before sending\n const before = this.capturePaneRaw();\n if (attempt === 1) {\n logDebug(\"tmux\", `Sending: \"${message.slice(0, 80)}\"`);\n } else {\n logInfo(\"tmux\", `Retry #${attempt}: resending prompt`);\n }\n\n // Send the message \u2014 use temp file for long prompts to avoid tmux command length limit\n try {\n if (message.length > 4000) {\n const tmpDir = join(abtarsHome(), \"tmp\");\n mkdirSync(tmpDir, { recursive: true });\n const tmpFile = join(tmpDir, `prompt-${Date.now()}.txt`);\n writeFileSync(tmpFile, message);\n const readCmd = `My full message is in ${tmpFile} \u2014 please read it and respond.`;\n const escaped = readCmd.replace(/'/g, \"'\\\\''\");\n this.exec(`tmux send-keys -t ${this.sessionName} '${escaped}' Enter`);\n setTimeout(() => { try { unlinkSync(tmpFile); } catch (err) { logAndSwallow(TAG, \"unlink tmpFile\", err); } }, 120_000);\n } else {\n const escaped = message.replace(/'/g, \"'\\\\''\");\n this.exec(`tmux send-keys -t ${this.sessionName} '${escaped}' Enter`);\n }\n } catch (err) {\n logWarn(\"tmux\", `send-keys failed: ${err instanceof Error ? err.message : String(err)}`);\n return \"\u26A0\uFE0F Failed to send message to Kiro session. The tmux session may be in copy mode or unresponsive. Try /reset.\";\n }\n\n // Wait for initial processing\n await sleep(this.captureDelaySec * 1000);\n\n // Poll until Kiro finishes\n const response = await this.pollForResponse(before);\n\n // Check for Kiro transient error \u2014 retry once\n if (response.startsWith(\"Kiro is having trouble\") && attempt < maxAttempts) {\n logInfo(\"tmux\", `Kiro trouble detected, will retry in 5s...`);\n await sleep(5000);\n continue;\n }\n\n logDebug(\"tmux\", `Got response (${response.length} chars)`);\n return response;\n }\n\n // Should not reach here, but just in case\n return \"\u26A0\uFE0F Kiro is having trouble responding. Try again or /reset.\";\n }\n\n async resetSession(_sessionKey: string): Promise<void> {\n if (!this.sessionExists()) return;\n this.exec(`tmux send-keys -t ${this.sessionName} C-c`);\n await sleep(1000);\n this.exec(`tmux send-keys -t ${this.sessionName} '/clear' Enter`);\n await sleep(2000);\n // Kiro asks \"Are you sure? [y/n]:\" \u2014 confirm with 'y'\n this.exec(`tmux send-keys -t ${this.sessionName} 'y' Enter`);\n await sleep(1000);\n }\n\n async restartSession(workingDir: string, kiroModel?: string): Promise<void> {\n // Kill existing tmux session and start fresh\n if (this.sessionExists()) {\n this.exec(`tmux kill-session -t ${this.sessionName}`);\n await sleep(1000);\n }\n let cmd = `kiro-cli chat --trust-all-tools`;\n if (kiroModel) cmd += ` --model ${kiroModel}`;\n this.exec(`tmux new-session -d -s ${this.sessionName} -c '${workingDir}' '${cmd}'`);\n this.exec(`tmux set-option -t ${this.sessionName} history-limit 5000`);\n await sleep(3000);\n // Enable thinking tool\n this.exec(`tmux send-keys -t ${this.sessionName} '/settings chat.enableThinking true' Enter`);\n await sleep(2000);\n this.ready = this.sessionExists();\n logInfo(\"tmux\", `Session restarted (ready=${this.ready})`);\n }\n\n async sendInterrupt(): Promise<void> {\n if (!this.sessionExists()) return;\n logInfo(\"tmux\", \"Sending Ctrl+C interrupt\");\n this.exec(`tmux send-keys -t ${this.sessionName} C-c`);\n }\n\n destroy(): void {\n this.ready = false;\n }\n\n /**\n * Poll capture-pane until Kiro's prompt reappears (N% >).\n * Delivers intermediate purple-line responses via onIntermediateResponse callback\n * so the user sees partial answers while Kiro continues with tools.\n * Only returns when the actual Kiro prompt appears or timeout.\n */\n private async pollForResponse(beforeSnapshot: string): Promise<string> {\n const startTime = Date.now();\n const maxWaitMs = this.maxWaitSec * 1000;\n let lastCapture = \"\";\n let stableCount = 0;\n let lastDeliveredAnswer = \"\";\n\n while (Date.now() - startTime < maxWaitMs) {\n const capture = this.capturePaneRaw();\n\n // Get only the NEW content (diff from before)\n const newContent = this.diffOutput(beforeSnapshot, capture);\n\n if (newContent.length === 0) {\n await sleep(2000);\n continue;\n }\n\n // Check if the last non-empty line is a Kiro prompt (N% >)\n const lines = capture.split(\"\\n\");\n const lastNonEmpty = this.getLastNonEmptyLine(lines);\n const lastClean = this.stripAnsi(lastNonEmpty);\n\n if (KIRO_PROMPT_RE.test(lastClean)) {\n const pctMatch = lastClean.match(/^(\\d+)%/);\n if (pctMatch) {\n this.lastContextPercent = parseInt(pctMatch[1]!, 10);\n logDebug(\"tmux\", `Context window: ${this.lastContextPercent}%`);\n }\n logDebug(\"tmux\", `Detected Kiro prompt: \"${lastClean}\"`);\n return this.extractResponse(newContent);\n }\n\n // Check for shell prompt as fallback\n if (SHELL_PROMPT_RE.test(lastClean) && newContent.length > 10) {\n logDebug(\"tmux\", `Detected shell prompt: \"${lastClean}\"`);\n return this.extractResponse(newContent);\n }\n\n // No prompt yet \u2014 deliver intermediate answer if we have new purple lines\n if (this.onIntermediateResponse && capture !== lastCapture) {\n const intermediateAnswer = this.extractAnswerOnly(newContent);\n if (intermediateAnswer && intermediateAnswer !== lastDeliveredAnswer) {\n const newPart = intermediateAnswer.startsWith(lastDeliveredAnswer)\n ? intermediateAnswer.slice(lastDeliveredAnswer.length).trim()\n : intermediateAnswer;\n if (newPart) {\n logDebug(\"tmux\", `Delivering intermediate chunk (${newPart.length} chars)`);\n this.onIntermediateResponse(newPart);\n lastDeliveredAnswer = intermediateAnswer;\n this.lastIntermediateDelivered = intermediateAnswer;\n }\n }\n }\n\n // Track stabilization but do NOT return on it \u2014 only N% > ends the poll\n if (capture === lastCapture) {\n stableCount++;\n } else {\n stableCount = 0;\n lastCapture = capture;\n }\n\n await sleep(2000);\n }\n\n // Timeout\n const finalCapture = this.capturePaneRaw();\n const finalNew = this.diffOutput(beforeSnapshot, finalCapture);\n if (finalNew.length > 0) {\n return this.extractResponse(finalNew) + \"\\n\\n\u23F1\uFE0F (response may be incomplete \u2014 timed out)\";\n }\n return \"\u23F1\uFE0F Kiro is still processing. Check the tmux session directly.\";\n }\n\n /**\n * Extract the meaningful response from the diff.\n * Removes the echoed user input line and Kiro's prompt lines.\n * Stores the \"answer only\" portion (lines that were \"> \" prefixed)\n * separately for TTS use.\n *\n * Kiro output format:\n * N% > <echoed user input>\n * > <response line 1>\n * > <response line 2>\n * \u25B8 Time: Ns\n * M% >\n */\n private lastAnswerOnly = \"\";\n private lastContextPercent = -1;\n\n /** Get just the Kiro answer lines (\"> \" prefixed) from the last response \u2014 for TTS. */\n get answerOnly(): string {\n return this.lastAnswerOnly;\n }\n get toolCallsSucceeded(): number { return 0; }\n\n /** Get the context window usage percentage from the last Kiro prompt (e.g. 10 for \"10% >\"). Returns -1 if unknown. */\n get contextPercent(): number {\n return this.lastContextPercent;\n }\n /** Get the cumulative text that was delivered via intermediate streaming. */\n get intermediateDeliveredText(): string {\n return this.lastIntermediateDelivered;\n }\n\n /** Extract just the purple \"> \" answer lines from raw tmux output (no side effects). */\n private extractAnswerOnly(raw: string): string {\n const PURPLE_PREFIX = /\\x1b\\[38;5;141m>\\s/;\n const lines = raw.split(\"\\n\");\n\n // Find last contiguous block of purple lines\n let blockStart = -1;\n for (let i = lines.length - 1; i >= 0; i--) {\n if (PURPLE_PREFIX.test(lines[i]!)) {\n blockStart = i;\n while (blockStart > 0 && PURPLE_PREFIX.test(lines[blockStart - 1]!)) blockStart--;\n break;\n }\n }\n if (blockStart < 0) return \"\";\n\n const answerLines: string[] = [];\n for (let i = blockStart; i < lines.length; i++) {\n const clean = this.stripAnsi(lines[i]!).trim();\n if (KIRO_PROMPT_RE.test(clean)) break;\n if (clean.startsWith(\"\u25B8 Time:\")) break;\n if (clean.startsWith(\"> \")) answerLines.push(clean.slice(2));\n else if (clean === \">\") answerLines.push(\"\");\n else if (clean === \"\") answerLines.push(\"\");\n else answerLines.push(clean);\n }\n return answerLines.join(\"\\n\").trim();\n }\n\n private extractResponse(raw: string): string {\n // ANSI color 141 (light purple) marks the \"> \" prefix on actual LLM response lines.\n // We detect these BEFORE stripping ANSI to reliably distinguish LLM output from\n // injected context (gray, color 245) and other noise.\n const PURPLE_PREFIX = /\\x1b\\[38;5;141m>\\s/;\n\n const lines = raw.split(\"\\n\");\n\n // First pass: identify lines that are genuine LLM responses (purple \"> \" prefix)\n const answerLines: string[] = [];\n let lastPurpleBlockStart = -1;\n\n for (let i = 0; i < lines.length; i++) {\n if (PURPLE_PREFIX.test(lines[i]!)) {\n if (lastPurpleBlockStart === -1) lastPurpleBlockStart = i;\n }\n }\n\n // Find the LAST contiguous block of purple \"> \" lines \u2014 that's the real answer.\n // Walk backwards to find the start of the last block.\n let blockStart = -1;\n for (let i = lines.length - 1; i >= 0; i--) {\n if (PURPLE_PREFIX.test(lines[i]!)) {\n blockStart = i;\n // Keep walking back through contiguous purple lines and continuation lines\n while (blockStart > 0) {\n const prev = lines[blockStart - 1]!;\n if (PURPLE_PREFIX.test(prev) || (!KIRO_PROMPT_RE.test(this.stripAnsi(prev).trim()) && !prev.includes(\"\u25B8 Time:\") && this.stripAnsi(prev).trim() !== \"\" && !PURPLE_PREFIX.test(prev) && blockStart === i)) {\n // Only extend back through purple lines\n if (PURPLE_PREFIX.test(prev)) {\n blockStart--;\n } else {\n break;\n }\n } else {\n break;\n }\n }\n break;\n }\n }\n\n if (blockStart >= 0) {\n // Extract from the last purple block to the end, stripping ANSI and \"> \" prefix\n for (let i = blockStart; i < lines.length; i++) {\n const line = lines[i]!;\n const clean = this.stripAnsi(line).trim();\n // Stop at Kiro prompt or Time summary\n if (KIRO_PROMPT_RE.test(clean)) break;\n if (clean.startsWith(\"\u25B8 Time:\") || clean.startsWith(\"\u25B8 Time:\")) break;\n if (clean === \"\") {\n answerLines.push(\"\");\n continue;\n }\n // Strip \"> \" prefix\n if (clean.startsWith(\"> \")) {\n answerLines.push(clean.slice(2));\n } else if (clean === \">\") {\n answerLines.push(\"\");\n } else {\n answerLines.push(clean);\n }\n }\n this.lastAnswerOnly = answerLines.join(\"\\n\").trim();\n } else {\n this.lastAnswerOnly = \"\";\n }\n\n // Full response: strip ANSI, then remove prompt lines and noise (legacy behavior)\n const cleaned = this.stripAnsi(raw);\n const allLines = cleaned.split(\"\\n\");\n const result: string[] = [];\n\n for (const line of allLines) {\n const trimmed = line.trim();\n if (result.length === 0 && trimmed === \"\") continue;\n if (KIRO_PROMPT_RE.test(trimmed)) continue;\n if (trimmed.startsWith(\"\u25B8 Time:\") || trimmed.startsWith(\"\u25B8 Time:\")) continue;\n if (/^-{4,}$/.test(trimmed)) continue;\n result.push(line);\n }\n\n const stripped = result.map((line) => {\n const trimmed = line.trimStart();\n if (trimmed.startsWith(\"> \")) return trimmed.slice(2);\n if (trimmed === \">\") return \"\";\n return line;\n });\n\n const final = stripped.join(\"\\n\").trim();\n logDebug(\"tmux\", `extractResponse: ${result.length} lines \u2192 \"${final.slice(0, 120)}\"`);\n if (this.lastAnswerOnly) {\n logDebug(\"tmux\", `answerOnly (${this.lastAnswerOnly.length} chars): \"${this.lastAnswerOnly.slice(0, 120)}\"`);\n }\n return final;\n }\n\n /** Get new content by diffing before/after snapshots. */\n private diffOutput(before: string, after: string): string {\n const beforeLines = before.split(\"\\n\");\n const afterLines = after.split(\"\\n\");\n\n // Find where the new content starts\n let commonPrefix = 0;\n while (\n commonPrefix < beforeLines.length &&\n commonPrefix < afterLines.length &&\n beforeLines[commonPrefix] === afterLines[commonPrefix]\n ) {\n commonPrefix++;\n }\n\n return afterLines.slice(commonPrefix).join(\"\\n\").trim();\n }\n\n /** Get the last non-empty line from an array. */\n private getLastNonEmptyLine(lines: string[]): string {\n for (let i = lines.length - 1; i >= 0; i--) {\n const trimmed = lines[i]!.trim();\n if (trimmed.length > 0) return trimmed;\n }\n return \"\";\n }\n\n /** Strip ANSI escape codes. */\n private stripAnsi(text: string): string {\n // eslint-disable-next-line no-control-regex\n return text.replace(/\\x1B\\[[0-9;]*[a-zA-Z]/g, \"\")\n .replace(/\\x1B\\][^\\x07]*\\x07/g, \"\"); // OSC sequences\n }\n\n private capturePaneRaw(): string {\n try {\n return this.exec(`tmux capture-pane -t ${this.sessionName} -p -e -S -2000`);\n } catch (err) {\n logAndSwallow(TAG, \"capturePaneRaw\", err);\n return \"\";\n }\n }\n\n private sessionExists(): boolean {\n try {\n this.exec(`tmux has-session -t ${this.sessionName}`);\n return true;\n } catch (err) {\n logAndSwallow(TAG, \"sessionExists check\", err);\n return false;\n }\n }\n\n private exec(command: string): string {\n return execSync(command, {\n encoding: \"utf-8\",\n timeout: 15_000,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n }).trim();\n }\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n", "/**\n * Context-window-start persistence \u2014 per-user timestamps tracking when the\n * current context window began. Used by recall fallback stages.\n *\n * Called from phase-transport (initialize at boot), phase-sleep-cycle (reset\n * after sleep), and message-pipeline (update on session turn).\n */\n\nimport { logAndSwallow } from \"../components/log-and-swallow.js\";\nimport { readFileSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\n/** Update context-window-start timestamp for a chat. */\nexport function updateCtxStart(memoryDir: string, userId: string, ts = Date.now()): void {\n const p = join(memoryDir, \"context-window-start.json\");\n let data: Record<string, number> = {};\n try { data = JSON.parse(readFileSync(p, \"utf-8\")); } catch (err) { logAndSwallow(\"ctx_start\", \"op\", err); }\n data[userId] = ts;\n writeFileSync(p, JSON.stringify(data), \"utf-8\");\n}\n\n/** Set all context-window-start entries to now (called after sleep). */\nexport function resetAllCtxStarts(memoryDir: string): void {\n const p = join(memoryDir, \"context-window-start.json\");\n let data: Record<string, number> = {};\n try { data = JSON.parse(readFileSync(p, \"utf-8\")); } catch (err) { logAndSwallow(\"ctx_start\", \"read ctx-start json\", err); return; }\n const now = Date.now();\n for (const key of Object.keys(data)) data[key] = now;\n writeFileSync(p, JSON.stringify(data), \"utf-8\");\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["execSync", "writeFileSync", "join", "TAG", "execSync"]
7
+ }
@@ -1,18 +1,14 @@
1
- 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);
1
+ #!/usr/bin/env node
2
+ import { createRequire as __bundleCreateRequire } from 'node:module'; import { fileURLToPath as __bundleFileURLToPath } from 'node:url'; import { dirname as __bundleDirname } from 'node:path'; const require = __bundleCreateRequire(import.meta.url); const __chunk_filename = __bundleFileURLToPath(import.meta.url); const __chunk_dirname = __bundleDirname(__chunk_filename);
2
3
  import {
3
4
  emptyManifest,
4
5
  packagePaths,
5
6
  readManifest,
6
7
  resolveUserBinDir,
7
8
  writeManifest
8
- } from "./chunk-265TPOPC.js";
9
- import {
10
- init_log_and_swallow,
11
- logAndSwallow
12
- } from "./chunk-FMWKEPM7.js";
9
+ } from "./chunk-HXJRZWKA.js";
13
10
 
14
11
  // src/cli/commands/install.ts
15
- init_log_and_swallow();
16
12
  import { mkdir, readFile, stat, symlink, writeFile } from "node:fs/promises";
17
13
  import { existsSync, readFileSync, readdirSync, copyFileSync, mkdirSync } from "node:fs";
18
14
  import { hostname, homedir } from "node:os";
@@ -44,7 +40,7 @@ async function isSymlink(p) {
44
40
  }
45
41
  }
46
42
  async function createSkeleton(home, dryRun) {
47
- const { loadManifest } = await import("./install-manifest-SPQRUNXL.js");
43
+ const { loadManifest } = await import("./install-manifest-ZETY4AFS.js");
48
44
  const manifest = loadManifest();
49
45
  const dirs = manifest.directories.map((d) => join(home, d.path));
50
46
  if (dryRun) {
@@ -58,7 +54,7 @@ async function createSkeleton(home, dryRun) {
58
54
  }
59
55
  }
60
56
  async function seedConfig(repoRoot, _configDir, dryRun, home) {
61
- const { loadManifest } = await import("./install-manifest-SPQRUNXL.js");
57
+ const { loadManifest } = await import("./install-manifest-ZETY4AFS.js");
62
58
  const manifest = loadManifest(repoRoot);
63
59
  const seeded = [];
64
60
  for (const seed of manifest.configSeeds) {
@@ -130,7 +126,12 @@ if [ -f "${target}" ]; then
130
126
  elif [ -f "${fallback}" ]; then
131
127
  exec node "${fallback}" "$@"
132
128
  else
133
- echo "abtars: no release staged yet. Run 'abtars update' or 'npm run bundle' in the repo checkout." >&2
129
+ # No local release \u2014 fall through to npm global binary
130
+ GLOBAL_BIN="$(npm root -g 2>/dev/null)/abtars/bundle/${bundleFile}"
131
+ if [ -f "$GLOBAL_BIN" ]; then
132
+ exec node "$GLOBAL_BIN" "$@"
133
+ fi
134
+ echo "abtars: no release staged. Run 'abtars install' first." >&2
134
135
  exit 1
135
136
  fi
136
137
  `;
@@ -146,142 +147,12 @@ function isPathOnPATH(userBinDir) {
146
147
  const PATH = process.env["PATH"] ?? "";
147
148
  return PATH.split(":").some((p) => p === userBinDir);
148
149
  }
149
- function isWSL() {
150
- try {
151
- return existsSync("/proc/sys/fs/binfmt_misc/WSLInterop") || /microsoft/i.test(readFileSync("/proc/version", "utf-8"));
152
- } catch {
153
- return false;
154
- }
155
- }
156
- async function installSupervisedDaemon(home, repoRoot, dryRun) {
157
- const platform = process.platform;
158
- if (platform === "linux" && isWSL()) {
159
- process.stderr.write(`\u2139\uFE0F WSL detected \u2014 ensure systemd is enabled (wsl.conf: [boot] systemd=true)
160
- `);
161
- }
162
- const sudoUser = process.env["SUDO_USER"];
163
- if (process.getuid?.() !== 0) {
164
- process.stderr.write(
165
- `supervised-daemon requires sudo for system-scope service install.
166
- Run: sudo -k abtars install --mode=supervised-daemon
167
- `
168
- );
169
- return 2;
170
- }
171
- if (!sudoUser) {
172
- process.stderr.write(
173
- `Cannot determine target user \u2014 $SUDO_USER is not set.
174
- Run via: sudo -k abtars install --mode=supervised-daemon
175
- (Do not use 'su -' \u2014 it doesn't set SUDO_USER.)
176
- `
177
- );
178
- return 2;
179
- }
180
- const currentLink = join(home, "current");
181
- if (!existsSync(currentLink)) {
182
- process.stderr.write(
183
- `No release staged at ${currentLink}.
184
- Run 'abtars install' and 'abtars update' as ${sudoUser} first,
185
- then re-run with sudo for supervised-daemon.
186
- `
187
- );
188
- return 2;
189
- }
190
- const userGroup = sudoUser;
191
- if (platform === "darwin") {
192
- const { execSync } = await import("node:child_process");
193
- let group = userGroup;
194
- try {
195
- group = execSync(`id -gn ${sudoUser}`, { encoding: "utf-8" }).trim();
196
- } catch (err) {
197
- logAndSwallow("install", "op", err);
198
- }
199
- const plistSrc = join(repoRoot, "scripts", "com.abtars.daemon.plist");
200
- if (!existsSync(plistSrc)) {
201
- process.stderr.write(`Template not found: ${plistSrc}
202
- `);
203
- return 1;
204
- }
205
- let content = readFileSync(plistSrc, "utf-8");
206
- content = content.replaceAll("{{USER}}", sudoUser).replaceAll("{{GROUP}}", group);
207
- const dst = "/Library/LaunchDaemons/com.abtars.daemon.plist";
208
- if (dryRun) {
209
- process.stdout.write(`[dry-run] write ${dst}
210
- [dry-run] launchctl bootstrap system ${dst}
211
- `);
212
- return 0;
213
- }
214
- const userAgent = join("/Users", sudoUser, "Library", "LaunchAgents", "com.abtars.watchdog.plist");
215
- if (existsSync(userAgent)) {
216
- const { execFileSync: execFileSync2 } = await import("node:child_process");
217
- try {
218
- execFileSync2("launchctl", ["bootout", `gui/${process.env["SUDO_UID"] ?? ""}`, userAgent]);
219
- } catch (err) {
220
- logAndSwallow("install", "op", err);
221
- }
222
- process.stdout.write(`\u2713 disabled user-scope LaunchAgent
223
- `);
224
- }
225
- const { writeFileSync, chmodSync } = await import("node:fs");
226
- writeFileSync(dst, content);
227
- chmodSync(dst, 420);
228
- const { execFileSync } = await import("node:child_process");
229
- try {
230
- execFileSync("launchctl", ["bootstrap", "system", dst]);
231
- } catch (err) {
232
- logAndSwallow("install", "op", err);
233
- }
234
- process.stdout.write(`\u2713 LaunchDaemon installed at ${dst}
235
- `);
236
- process.stdout.write(`\u2713 supervised-daemon active \u2014 bridge runs as ${sudoUser}, survives logout + reboot
237
- `);
238
- return 0;
239
- }
240
- if (platform === "linux") {
241
- const { execSync } = await import("node:child_process");
242
- try {
243
- execSync("systemctl --version", { stdio: "ignore" });
244
- } catch {
245
- process.stderr.write(`systemctl not found \u2014 supervised-daemon requires systemd.
246
- `);
247
- return 2;
248
- }
249
- const unitSrc = join(repoRoot, "scripts", "abtars-daemon.service");
250
- if (!existsSync(unitSrc)) {
251
- process.stderr.write(`Template not found: ${unitSrc}
252
- `);
253
- return 1;
254
- }
255
- let content = readFileSync(unitSrc, "utf-8");
256
- content = content.replaceAll("{{USER}}", sudoUser);
257
- const dst = "/etc/systemd/system/abtars.service";
258
- if (dryRun) {
259
- process.stdout.write(`[dry-run] write ${dst}
260
- [dry-run] systemctl enable --now abtars
261
- `);
262
- return 0;
263
- }
264
- const { writeFileSync } = await import("node:fs");
265
- writeFileSync(dst, content);
266
- const { execFileSync } = await import("node:child_process");
267
- execFileSync("systemctl", ["daemon-reload"]);
268
- execFileSync("systemctl", ["enable", "--now", "abtars"]);
269
- process.stdout.write(`\u2713 systemd unit installed at ${dst}
270
- `);
271
- process.stdout.write(`\u2713 supervised-daemon active \u2014 bridge runs as ${sudoUser}, survives logout + reboot
272
- `);
273
- return 0;
274
- }
275
- process.stderr.write(`supervised-daemon is not supported on ${platform}.
276
- `);
277
- return 2;
278
- }
279
150
  async function install(opts) {
280
151
  const paths = packagePaths("abtars");
281
152
  const home = paths.home;
282
153
  const userBinDir = resolveUserBinDir();
283
154
  const repoRoot = process.cwd();
284
- const { initInstallLog, logInstall, logInstallHeader } = await import("./install-log-IAPHYKD4.js");
155
+ const { initInstallLog, logInstall, logInstallHeader } = await import("./install-log-Q6RUHKWC.js");
285
156
  initInstallLog(home);
286
157
  logInstallHeader("install");
287
158
  const _origWrite = process.stdout.write.bind(process.stdout);
@@ -355,7 +226,7 @@ Use 'abtars update' to upgrade, or --force to re-seed missing config.
355
226
  process.stdout.write(`\u2713 seeded config: ${seeded.join(", ")}
356
227
  `);
357
228
  }
358
- const { loadManifest: loadInstallManifest } = await import("./install-manifest-SPQRUNXL.js");
229
+ const { loadManifest: loadInstallManifest } = await import("./install-manifest-ZETY4AFS.js");
359
230
  const installManifest = loadInstallManifest(repoRoot);
360
231
  if (!opts.dryRun) {
361
232
  await mkdir(paths.bin, { recursive: true });
@@ -408,9 +279,6 @@ Warning: ${userBinDir} is not on $PATH. Add to your shell config:
408
279
  }
409
280
  process.stdout.write(`\u2713 install mode: ${mode}
410
281
  `);
411
- if (mode === "supervised-daemon") {
412
- return installSupervisedDaemon(home, repoRoot, opts.dryRun);
413
- }
414
282
  if (opts.restore) {
415
283
  const { spawnSync } = await import("node:child_process");
416
284
  const { existsSync: fileExists } = await import("node:fs");
@@ -497,10 +365,10 @@ Install complete.
497
365
 
498
366
  `);
499
367
  }
500
- const { printHealthSummary } = await import("./health-check-SPA7NT6N.js");
368
+ const { printHealthSummary } = await import("./health-check-RJ2SUJYL.js");
501
369
  printHealthSummary(paths.home);
502
370
  if (!opts.dryRun && opts.restore) {
503
- const { validateMinimumViability, formatValidationError } = await import("./install-validate-PVLZXYLQ.js");
371
+ const { validateMinimumViability, formatValidationError } = await import("./install-validate-H74LUCE2.js");
504
372
  const validation = validateMinimumViability(paths.config);
505
373
  if (!validation.ok) {
506
374
  const invocation = `abtars install --restore ${opts.restore}`;
@@ -515,4 +383,4 @@ export {
515
383
  writeWrapper,
516
384
  install
517
385
  };
518
- //# sourceMappingURL=chunk-XREWVCUO.js.map
386
+ //# sourceMappingURL=chunk-7CHLS36W.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/cli/commands/install.ts"],
4
+ "sourcesContent": ["/**\n * `abtars install [--upgrade]` \u2014 first-time setup.\n *\n * Phase 1 behavior:\n * - No existing ~/.abtars: create dirs, seed config/ from .env.example,\n * create PATH symlinks. Does NOT run onboard (Phase 3).\n * - Existing ~/.abtars with flat layout (pre-158): refuse unless\n * --upgrade, then run migration 003-flat-to-releases (Phase 1c).\n * - Existing ~/.abtars with new layout: refuse unless --force (which\n * re-seeds missing config and reconciles symlinks, no code changes).\n */\n\nimport { mkdir, readFile, stat, symlink, writeFile } from 'node:fs/promises';\nimport { existsSync, readFileSync, readdirSync, copyFileSync, mkdirSync } from 'node:fs';\nimport { hostname, homedir } from 'node:os';\nimport { basename, dirname, join } from 'node:path';\nimport { emptyManifest, packagePaths, readManifest, resolveUserBinDir, writeManifest } from '../deploy-lib-import.js';\n\nexport interface InstallOptions {\n readonly restore?: string;\n readonly force: boolean;\n readonly dryRun: boolean;\n readonly mode?: \"simple\" | \"supervised\";\n}\n\n// CLI wrappers are read from install-manifest.json at runtime.\n// Each is a thin wrapper that invokes `node current/dist/cli/<name>.js \"$@\"`.\n// Regenerated on every install / flat-to-releases migration.\n\nasync function exists(p: string): Promise<boolean> {\n try {\n await stat(p);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * True if `p` exists as any filesystem entry \u2014 regular file, directory,\n * symlink (including dangling). Use this for collision checks in\n * reconcilePathLink, where a dangling symlink still occupies the inode\n * and would cause EEXIST on symlink(). `exists()` above uses stat() which\n * follows symlinks and returns false on dangling ones; that's wrong for\n * collision detection.\n */\nasync function existsAny(p: string): Promise<boolean> {\n try {\n const { lstat } = await import('node:fs/promises');\n await lstat(p);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function isSymlink(p: string): Promise<boolean> {\n try {\n const { lstat } = await import('node:fs/promises');\n const s = await lstat(p);\n return s.isSymbolicLink();\n } catch {\n return false;\n }\n}\n\nasync function createSkeleton(home: string, dryRun: boolean): Promise<void> {\n const { loadManifest } = await import('../install-manifest.js');\n const manifest = loadManifest();\n const dirs = manifest.directories.map(d => join(home, d.path));\n if (dryRun) {\n process.stdout.write(`[dry-run] mkdir -p:\\n ${dirs.join('\\n ')}\\n`);\n return;\n }\n for (const d of manifest.directories) {\n await mkdir(join(home, d.path), { recursive: true, mode: d.mode ? parseInt(d.mode, 8) : undefined });\n }\n}\n\nasync function seedConfig(repoRoot: string, _configDir: string, dryRun: boolean, home: string): Promise<readonly string[]> {\n const { loadManifest } = await import('../install-manifest.js');\n const manifest = loadManifest(repoRoot);\n const seeded: string[] = [];\n for (const seed of manifest.configSeeds) {\n const src = join(repoRoot, seed.source);\n const dst = join(home, seed.dest);\n if (!(await exists(src))) continue;\n if (await exists(dst)) continue;\n if (dryRun) {\n seeded.push(`[dry-run] cp ${src} ${dst}`);\n continue;\n }\n const content = await readFile(src, 'utf-8');\n await mkdir(dirname(dst), { recursive: true });\n await writeFile(dst, content, { mode: seed.mode ? parseInt(seed.mode, 8) : 0o644 });\n seeded.push(basename(dst));\n }\n return seeded;\n}\n\n/**\n * Reconcile a single PATH symlink at ~/.local/bin/<name>.\n * Policy (plan \u00A7\"PATH symlink collision\"):\n * - Missing \u2192 create\n * - Symlink pointing into our own ~/.abtars/bin/ \u2192 overwrite\n * - Anything else \u2192 refuse with message, unless force\n */\nasync function reconcilePathLink(\n binDir: string,\n userBinDir: string,\n name: string,\n force: boolean,\n dryRun: boolean,\n): Promise<{ action: string; message?: string }> {\n const linkPath = join(userBinDir, name);\n const targetPath = join(binDir, name);\n const linkExists = await existsAny(linkPath);\n if (!linkExists) {\n if (dryRun) return { action: `[dry-run] ln -s ${targetPath} ${linkPath}` };\n await symlink(targetPath, linkPath);\n return { action: `created ${linkPath}` };\n }\n if (await isSymlink(linkPath)) {\n const { readlink, unlink } = await import('node:fs/promises');\n const current = await readlink(linkPath);\n // \"We own it\" means: points at THIS install's bin dir, not a fuzzy match\n // on any path containing /.abtars/bin/. A smoke-test install at\n // ABTARS_HOME=~/.cache/ab-smoke-.../ must not clobber the real\n // ~/.abtars symlinks. Compare absolute paths directly.\n const ownsIt = current === targetPath;\n if (ownsIt) {\n if (dryRun) return { action: `[dry-run] overwrite ${linkPath} (we own it)` };\n await unlink(linkPath);\n await symlink(targetPath, linkPath);\n return { action: `updated ${linkPath}` };\n }\n if (force) {\n if (dryRun) return { action: `[dry-run] --force overwrite ${linkPath} (currently -> ${current})` };\n await unlink(linkPath);\n await symlink(targetPath, linkPath);\n return { action: `forced overwrite ${linkPath} (was -> ${current})` };\n }\n return {\n action: 'refused',\n message: `${linkPath} is a symlink to ${current} (not ours). Pass --force to overwrite.`,\n };\n }\n if (force) {\n if (dryRun) return { action: `[dry-run] --force overwrite ${linkPath} (regular file)` };\n const { unlink } = await import('node:fs/promises');\n await unlink(linkPath);\n await symlink(targetPath, linkPath);\n return { action: `forced overwrite ${linkPath} (was regular file)` };\n }\n return {\n action: 'refused',\n message: `${linkPath} exists as a regular file (not our symlink). Pass --force to overwrite.`,\n };\n}\n\nexport async function writeWrapper(binDir: string, name: string, currentLink: string, dryRun: boolean): Promise<void> {\n const bundleFile = name === 'abtars' ? 'abtars-cli.js' : `${name}.js`;\n const target = join(currentLink, 'bundle', bundleFile);\n // Fallback: pre-bundle dist/ layout (tsc build) for installs that haven't migrated yet.\n const distFile = name === 'abtars' ? 'abtars.js' : `${name}.js`;\n const fallback = join(currentLink, 'dist', 'cli', distFile);\n const content = `#!/usr/bin/env bash\nif [ -f \"${target}\" ]; then\n exec node \"${target}\" \"$@\"\nelif [ -f \"${fallback}\" ]; then\n exec node \"${fallback}\" \"$@\"\nelse\n # No local release \u2014 fall through to npm global binary\n GLOBAL_BIN=\"$(npm root -g 2>/dev/null)/abtars/bundle/${bundleFile}\"\n if [ -f \"$GLOBAL_BIN\" ]; then\n exec node \"$GLOBAL_BIN\" \"$@\"\n fi\n echo \"abtars: no release staged. Run 'abtars install' first.\" >&2\n exit 1\nfi\n`;\n const path = join(binDir, name);\n if (dryRun) {\n process.stdout.write(`[dry-run] write wrapper ${path} -> node ${target} (fallback: ${fallback})\\n`);\n return;\n }\n await writeFile(path, content, { mode: 0o755 });\n}\n\nfunction isPathOnPATH(userBinDir: string): boolean {\n const PATH = process.env['PATH'] ?? '';\n return PATH.split(':').some((p) => p === userBinDir);\n}\n\nexport async function install(opts: InstallOptions): Promise<number> {\n const paths = packagePaths('abtars');\n const home = paths.home;\n const userBinDir = resolveUserBinDir();\n const repoRoot = process.cwd();\n\n // Install log (#718)\n const { initInstallLog, logInstall, logInstallHeader } = await import(\"../install-log.js\");\n initInstallLog(home);\n logInstallHeader(\"install\");\n const _origWrite = process.stdout.write.bind(process.stdout);\n process.stdout.write = ((chunk: any, ...args: any[]) => {\n if (typeof chunk === \"string\" && (chunk.startsWith(\"\u2713\") || chunk.startsWith(\"\u26A0\"))) logInstall(chunk.trimEnd());\n return _origWrite(chunk, ...args);\n }) as typeof process.stdout.write;\n\n const homeExists = await exists(home);\n const manifest = homeExists ? await readManifest(paths.manifest) : null;\n\n if (homeExists && manifest && !opts.force && !opts.restore) {\n process.stderr.write(\n `~/.abtars already installed at version ${manifest.version || '(unset)'}.\\nUse 'abtars update' to upgrade, or --force to re-seed missing config.\\n`,\n );\n return 2;\n }\n\n // Create skeleton (idempotent)\n await createSkeleton(home, opts.dryRun);\n process.stdout.write(`\u2713 skeleton at ${home}\\n`);\n\n // Core templates: abmind seeds its own on first boot (#427 ensureInitialized).\n // No longer seeded by abtars install.\n\n // Create kiro-cli agent config \u2014 ACP transport needs ~/.kiro/agents/professor.json\n const kiroAgentsDir = join(homedir(), '.kiro', 'agents');\n const professorJson = join(kiroAgentsDir, 'professor.json');\n if (!opts.dryRun) {\n await mkdir(kiroAgentsDir, { recursive: true });\n if (!(await exists(professorJson))) {\n await writeFile(professorJson, JSON.stringify({\n name: \"professor\",\n description: \"Abtars bridge agent\",\n tools: [\"*\"],\n allowedTools: [\"@builtin\"],\n toolsSettings: { shell: { autoAllowReadonly: true } },\n includeMcpJson: true,\n }, null, 2) + '\\n');\n process.stdout.write(`\u2713 kiro agent: ${professorJson}\\n`);\n }\n } else {\n process.stdout.write(`[dry-run] create ${professorJson}\\n`);\n }\n\n // Generate Ed25519 identity keypair (skip if already exists)\n const identityKey = join(paths.config, 'identity.key');\n const identityPub = join(paths.config, 'identity.pub');\n if (!opts.dryRun && !(await exists(identityKey))) {\n const { generateKeyPairSync } = await import('node:crypto');\n const { privateKey, publicKey } = generateKeyPairSync('ed25519');\n await writeFile(identityKey, privateKey.export({ format: 'der', type: 'pkcs8' }).toString('base64'));\n await writeFile(identityPub, publicKey.export({ format: 'der', type: 'spki' }).toString('base64'));\n const { chmodSync } = await import('node:fs');\n chmodSync(identityKey, 0o600);\n process.stdout.write(`\u2713 identity keypair generated\\n`);\n }\n\n // Generate self-signed Ed25519 TLS certificate (skip if already exists)\n const identityCrt = join(paths.config, 'identity.crt');\n const identityTlsKey = join(paths.config, 'identity.tls.key');\n if (!opts.dryRun && !(await exists(identityCrt))) {\n const { execSync } = await import('node:child_process');\n const { chmodSync } = await import('node:fs');\n const agentName = hostname();\n try {\n execSync(`openssl req -x509 -newkey ed25519 -keyout identity.tls.key -out identity.crt -days 3650 -nodes -subj \"/CN=${agentName}\"`, { cwd: paths.config, stdio: 'ignore' });\n chmodSync(identityTlsKey, 0o600);\n process.stdout.write(`\u2713 TLS certificate generated (Ed25519, 10yr)\\n`);\n } catch (err) {\n process.stderr.write(`\u26A0 TLS cert generation failed (openssl not found?). Agent-api will start without TLS.\\n`);\n }\n }\n\n // Seed config from examples (only missing ones)\n const seeded = await seedConfig(repoRoot, paths.config, opts.dryRun, home);\n if (seeded.length > 0) {\n process.stdout.write(`\u2713 seeded config: ${seeded.join(', ')}\\n`);\n }\n\n // Write wrappers (always overwrite \u2014 they're regenerable thin shims)\n const { loadManifest: loadInstallManifest } = await import('../install-manifest.js');\n const installManifest = loadInstallManifest(repoRoot);\n if (!opts.dryRun) {\n await mkdir(paths.bin, { recursive: true });\n }\n for (const name of installManifest.cliWrappers) {\n await writeWrapper(paths.bin, name, paths.current, opts.dryRun);\n }\n process.stdout.write(`\u2713 wrappers in ${paths.bin}\\n`);\n\n // Reconcile PATH symlinks\n if (!opts.dryRun) await mkdir(userBinDir, { recursive: true });\n const refused: string[] = [];\n for (const name of installManifest.cliWrappers) {\n const r = await reconcilePathLink(paths.bin, userBinDir, name, opts.force, opts.dryRun);\n if (r.action === 'refused') {\n refused.push(r.message ?? name);\n }\n }\n if (refused.length > 0) {\n process.stderr.write(`\\nPATH symlink conflicts:\\n ${refused.join('\\n ')}\\n`);\n return 4;\n }\n process.stdout.write(`\u2713 PATH symlinks in ${userBinDir}\\n`);\n\n // Warn if ~/.local/bin not on PATH\n if (!isPathOnPATH(userBinDir)) {\n process.stderr.write(\n `\\nWarning: ${userBinDir} is not on $PATH. Add to your shell config:\\n export PATH=\"${userBinDir}:$PATH\"\\n`,\n );\n }\n\n // Initialize manifest if brand-new install AND migration didn't write one.\n // (Migration 003 writes a manifest mid-flow with version + migration record;\n // we must not clobber it here.)\n const manifestAfter = await readManifest(paths.manifest);\n if (manifestAfter === null && !opts.dryRun) {\n await writeManifest(paths.manifest, {\n ...emptyManifest('abtars', hostname()),\n version: '',\n preMigrationBackup: null,\n });\n process.stdout.write(`\u2713 manifest initialized at ${paths.manifest}\\n`);\n }\n\n // Write install mode to manifest. Priority:\n // 1. --mode flag (explicit) \u2014 always wins\n // 2. existing manifest installMode \u2014 preserved (don't clobber on --force)\n // 3. default: supervised\n const manifestForMode = await readManifest(paths.manifest);\n const existingMode = manifestForMode?.installMode;\n const mode = opts.mode ?? existingMode ?? \"supervised\";\n if (manifestForMode) {\n await writeManifest(paths.manifest, { ...manifestForMode, installMode: mode });\n }\n process.stdout.write(`\u2713 install mode: ${mode}\\n`);\n\n // Release staging is handled by `abtars update` (auto-detects npm vs git source)\n\n // Restore from backup zip\n if (opts.restore) {\n const { spawnSync } = await import('node:child_process');\n const { existsSync: fileExists } = await import('node:fs');\n const zipPath = opts.restore;\n if (!fileExists(zipPath)) {\n process.stderr.write(`error: backup file not found: ${zipPath}\\n`);\n return 1;\n }\n // Extract to temp dir\n const tmpDir = join(process.env['TMPDIR'] ?? '/tmp', `abtars-restore-${Date.now()}`);\n const unzip = spawnSync('unzip', ['-o', zipPath, '-d', tmpDir], { encoding: 'utf-8' });\n if (unzip.status !== 0) {\n process.stderr.write(`error: unzip failed: ${unzip.stderr}\\n`);\n return 1;\n }\n // Copy abtars files\n const abSrc = join(tmpDir, 'abtars');\n if (fileExists(abSrc)) {\n spawnSync('cp', ['-r', ...readdirSync(abSrc).map(f => join(abSrc, f)), home], { stdio: 'inherit' });\n process.stdout.write(`\u2713 restored abtars config\\n`);\n }\n // Copy abmind files\n const abmindHome = process.env['ABMIND_HOME'] ?? join(dirname(home), '.abmind');\n const abmindSrc = join(tmpDir, 'abmind');\n if (fileExists(abmindSrc)) {\n spawnSync('cp', ['-r', ...readdirSync(abmindSrc).map(f => join(abmindSrc, f)), abmindHome], { stdio: 'inherit' });\n process.stdout.write(`\u2713 restored abmind data\\n`);\n }\n // Cleanup\n spawnSync('rm', ['-rf', tmpDir]);\n process.stdout.write(`\\nRestore complete.\\n`);\n process.stdout.write(`Next: 'abtars update' to build and activate.\\n`);\n return 0;\n }\n\n // --- supervised: load user-scope watchdog (LaunchAgent / systemd user) ---\n if (mode === 'supervised') {\n const { execSync } = await import('node:child_process');\n if (process.platform === 'darwin') {\n const plistSrc = join(home, 'scripts', 'com.abtars.watchdog.plist');\n const plistDst = join(homedir(), 'Library', 'LaunchAgents', 'com.abtars.watchdog.plist');\n if (existsSync(plistSrc)) {\n const content = readFileSync(plistSrc, 'utf-8').replaceAll('{{HOME}}', homedir());\n const { writeFileSync } = await import('node:fs');\n writeFileSync(plistDst, content);\n try { execSync(`launchctl load \"${plistDst}\"`, { stdio: 'ignore' }); } catch { /* already loaded */ }\n process.stdout.write(`\u2713 watchdog LaunchAgent loaded\\n`);\n }\n } else if (process.platform === 'linux') {\n const unitSrc = join(home, 'scripts', 'abtars-watchdog.service');\n const unitDir = join(homedir(), '.config', 'systemd', 'user');\n if (existsSync(unitSrc)) {\n mkdirSync(unitDir, { recursive: true });\n copyFileSync(unitSrc, join(unitDir, 'abtars-watchdog.service'));\n try { execSync('systemctl --user daemon-reload && systemctl --user enable --now abtars-watchdog', { stdio: 'ignore' }); } catch { /* may fail in chroot */ }\n process.stdout.write(`\u2713 watchdog systemd user service enabled\\n`);\n }\n }\n }\n\n process.stdout.write(`\\nInstall complete.\\n`);\n if (!manifestAfter || manifestAfter.version === '') {\n process.stdout.write(`Next: 'abtars update' to build and activate the first release.\\n`);\n } else {\n process.stdout.write(`\\n\u2500\u2500 Next steps \u2500\u2500\\n`);\n process.stdout.write(` 1. Run 'abtars onboard' to configure Telegram token + model provider\\n`);\n process.stdout.write(` 2. (Optional) Install Ollama for memory embeddings: curl -fsSL https://ollama.com/install.sh | sh\\n`);\n process.stdout.write(` 3. Start the bridge: 'abtars restart' or use the watchdog\\n\\n`);\n }\n\n const { printHealthSummary } = await import('./health-check.js');\n printHealthSummary(paths.home);\n\n // #334: Post-install healthcheck \u2014 validate operator channel exists (only on --restore)\n if (!opts.dryRun && opts.restore) {\n const { validateMinimumViability, formatValidationError } = await import('./install-validate.js');\n const validation = validateMinimumViability(paths.config);\n if (!validation.ok) {\n const invocation = `abtars install --restore ${opts.restore}`;\n process.stderr.write(\"\\n\" + formatValidationError(validation, invocation) + \"\\n\");\n return 1;\n }\n }\n\n return 0;\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -1,4 +1,5 @@
1
- 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);
1
+ #!/usr/bin/env node
2
+ import { createRequire as __bundleCreateRequire } from 'node:module'; import { fileURLToPath as __bundleFileURLToPath } from 'node:url'; import { dirname as __bundleDirname } from 'node:path'; const require = __bundleCreateRequire(import.meta.url); const __chunk_filename = __bundleFileURLToPath(import.meta.url); const __chunk_dirname = __bundleDirname(__chunk_filename);
2
3
  var __create = Object.create;
3
4
  var __defProp = Object.defineProperty;
4
5
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -47,4 +48,4 @@ export {
47
48
  __toESM,
48
49
  __toCommonJS
49
50
  };
50
- //# sourceMappingURL=chunk-NWDBD4PA.js.map
51
+ //# sourceMappingURL=chunk-7K2YZTLD.js.map
@@ -1,12 +1,13 @@
1
- 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);
1
+ #!/usr/bin/env node
2
+ import { createRequire as __bundleCreateRequire } from 'node:module'; import { fileURLToPath as __bundleFileURLToPath } from 'node:url'; import { dirname as __bundleDirname } from 'node:path'; const require = __bundleCreateRequire(import.meta.url); const __chunk_filename = __bundleFileURLToPath(import.meta.url); const __chunk_dirname = __bundleDirname(__chunk_filename);
2
3
  import {
3
4
  init_logger,
4
5
  logInfo,
5
6
  logWarn
6
- } from "./chunk-BUUVFUPO.js";
7
+ } from "./chunk-2BY6I4P5.js";
7
8
  import {
8
9
  __esm
9
- } from "./chunk-NWDBD4PA.js";
10
+ } from "./chunk-7K2YZTLD.js";
10
11
 
11
12
  // src/components/env-schema.ts
12
13
  function parseTime(raw, varName) {
@@ -293,4 +294,4 @@ export {
293
294
  _resetEnv,
294
295
  init_env_schema
295
296
  };
296
- //# sourceMappingURL=chunk-JCJS4ZIB.js.map
297
+ //# sourceMappingURL=chunk-AQVOAQQI.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/components/env-schema.ts"],
4
4
  "sourcesContent": ["/**\n * env-schema.ts \u2014 Central env var schema. Single source of truth.\n * All env access goes through getEnv(). No process.env reads elsewhere.\n *\n * Usage:\n * import { getEnv } from \"./env-schema.js\";\n * const env = getEnv();\n * env.bedTime // \"0:30\"\n *\n * Boot:\n * import { initEnv } from \"./env-schema.js\";\n * initEnv(); // call once at boot, before anything reads config\n */\n\nimport { logInfo, logWarn } from \"./logger.js\";\n\n// \u2500\u2500 Schema definition \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\ntype EnvType = \"string\" | \"int\" | \"bool\" | \"time\";\n\ninterface EnvVarDef {\n env: string;\n type: EnvType;\n default?: string;\n required?: boolean;\n description: string;\n}\n\n// All env vars in one place. Add new vars here, nowhere else.\nconst SCHEMA: readonly EnvVarDef[] = [\n // \u2500\u2500 Core \u2500\u2500\n { env: \"ABTARS_HOME\", type: \"string\", description: \"Base directory for runtime data\" },\n { env: \"WORKING_DIR\", type: \"string\", default: \"~/.abtars/workspace\", description: \"Agent working directory (sandbox)\" },\n { env: \"MAIN_CHAT_ID\", type: \"string\", description: \"Primary chat ID for operator notifications\" },\n { env: \"MAIN_CHAT_PROVIDER\", type: \"string\", default: \"telegram\", description: \"Platform for MAIN_CHAT_ID: telegram | discord\" },\n { env: \"LOG_LEVEL\", type: \"string\", default: \"low\", description: \"Log level: off, low, debug\" },\n { env: \"LOG_FORMAT\", type: \"string\", default: \"text\", description: \"Log format: text or json\" },\n\n // \u2500\u2500 Transport \u2500\u2500\n { env: \"AGENT_CLI_PATH\", type: \"string\", description: \"Override path to agent CLI binary\" },\n { env: \"API_KEY\", type: \"string\", description: \"Default API key fallback (prefer per-provider keys)\" },\n { env: \"TMUX_SESSION\", type: \"string\", default: \"kiro\", description: \"Tmux session name\" },\n { env: \"DEFAULT_TRANSPORT\", type: \"string\", default: \"api\", description: \"Default transport type\" },\n { env: \"TRANSPORT_CONFIG\", type: \"string\", default: \"transport.json\", description: \"Transport config filename\" },\n { env: \"MODELS_CONFIG\", type: \"string\", default: \"models.json\", description: \"Models config filename\" },\n\n // \u2500\u2500 Transport timeouts \u2500\u2500\n { env: \"PROMPT_TIMEOUT_SEC\", type: \"int\", default: \"180\", description: \"ACP prompt timeout (seconds)\" },\n { env: \"MODEL_API_TIMEOUT_SEC\", type: \"int\", default: \"120\", description: \"Direct API model timeout (seconds)\" },\n { env: \"WATCHDOG_TOOL_TIMEOUT_SEC\", type: \"int\", default: \"180\", description: \"Watchdog tool call timeout (seconds)\" },\n { env: \"WATCHDOG_SILENT_SEC\", type: \"int\", default: \"300\", description: \"Watchdog silent timeout (seconds)\" },\n { env: \"WATCHDOG_ENDLESS_SEC\", type: \"int\", default: \"600\", description: \"Watchdog endless loop timeout (seconds)\" },\n\n // \u2500\u2500 Telegram \u2500\u2500\n { env: \"TELEGRAM_BOT_TOKEN\", type: \"string\", description: \"Telegram bot token\" },\n { env: \"TELEGRAM_TIMEOUT_SEC\", type: \"int\", default: \"10\", description: \"Telegram API timeout (seconds)\" },\n { env: \"TELEGRAM_FILE_TIMEOUT_SEC\", type: \"int\", default: \"60\", description: \"Telegram file up/download timeout (seconds)\" },\n { env: \"POLL_TIMEOUT_S\", type: \"int\", default: \"30\", description: \"Telegram long-poll timeout (seconds)\" },\n\n // \u2500\u2500 Discord \u2500\u2500\n { env: \"DISCORD_BOT_TOKEN\", type: \"string\", description: \"Discord bot token\" },\n { env: \"DISCORD_APP_ID\", type: \"string\", description: \"Discord application ID\" },\n { env: \"DISCORD_GROUP_MENTIONS\", type: \"string\", default: \"required\", description: \"Group mention mode: required (need @mention) | optional (bot listens to all, decides itself)\" },\n\n // \u2500\u2500 Context window \u2500\u2500\n { env: \"CTX_WARN_PCT\", type: \"int\", default: \"70\", description: \"Context % to warn user\" },\n { env: \"CTX_COMPACT_PCT\", type: \"int\", default: \"80\", description: \"Context % to auto-compact\" },\n { env: \"CTX_AGGRESSIVE_PCT\", type: \"int\", default: \"90\", description: \"Context % for aggressive compaction\" },\n { env: \"CTX_IDLE_COMPACT_PCT\", type: \"int\", default: \"65\", description: \"Context % for idle compaction\" },\n { env: \"CTX_IDLE_COMPACT_MIN\", type: \"int\", default: \"10\", description: \"Minutes idle before floating compaction\" },\n\n // \u2500\u2500 Typing / streaming \u2500\u2500\n { env: \"TYPING_TTL_SEC\", type: \"int\", default: \"300\", description: \"Typing indicator TTL (seconds)\" },\n { env: \"TYPING_SILENT_THRESHOLD_SEC\", type: \"int\", default: \"90\", description: \"Silent threshold before still-working msg (seconds)\" },\n { env: \"STREAM_FLUSH_SEC\", type: \"int\", default: \"3\", description: \"Stream edit flush interval (seconds, 0=disabled)\" },\n\n // \u2500\u2500 Memory \u2500\u2500\n { env: \"ACTIVE_MEMORY\", type: \"bool\", default: \"true\", description: \"Enable ambient recall on every turn\" },\n { env: \"PRIMING_MODEL_TOPICS\", type: \"bool\", default: \"true\", description: \"Use model-generated topics for priming\" },\n\n // \u2500\u2500 ABM-L rendering (abmind, read by abmind directly) \u2500\u2500\n { env: \"ABML_VERSION\", type: \"string\", default: \"plain\", description: \"ABM-L codec: plain | v0 | v1\" },\n { env: \"ABML_MIN_CHARS\", type: \"int\", default: \"100\", description: \"Min chars before ABM-L compression kicks in (v0)\" },\n\n // \u2500\u2500 Three-tier context assembly (#348, abmind) \u2500\u2500\n { env: \"CONTEXT_TIER_ENABLED\", type: \"bool\", default: \"true\", description: \"Enable three-tier context assembly (#348)\" },\n { env: \"CONTEXT_TIER_TAIL\", type: \"int\", default: \"20\", description: \"Last N turns kept verbatim (#348 tail)\" },\n { env: \"CONTEXT_TIER_MIDDLE\", type: \"int\", default: \"50\", description: \"Next M turns rendered as ABM-L (#348 middle)\" },\n { env: \"COMPACTION_LLM_ENABLED\", type: \"bool\", default: \"false\", description: \"LLM refinement for middle-tier rendering (#348 Phase 2)\" },\n\n // \u2500\u2500 Sleep \u2500\u2500\n { env: \"BED_TIME\", type: \"time\", default: \"0:30\", description: \"Daily sleep trigger time (H:MM or HH:MM)\" },\n { env: \"WAKE_TIME\", type: \"time\", default: \"7:00\", description: \"Wake time for platform detection\" },\n { env: \"BED_QUIET_MIN\", type: \"int\", default: \"7\", description: \"Quiet minutes before sleep (rounds up to nearest heartbeat cycle)\" },\n { env: \"HARDWARE_SLEEP_AFTER_DREAMY\", type: \"bool\", default: \"false\", description: \"Enable hardware sleep after Dreamy completes\" },\n { env: \"SLEEP_MODEL\", type: \"string\", description: \"Model override for Dreamy sleep agent\" },\n { env: \"SLEEP_QUALITY\", type: \"string\", description: \"Sleep quality override\" },\n\n // \u2500\u2500 Voice \u2500\u2500\n { env: \"STT_ENABLED\", type: \"bool\", default: \"false\", description: \"Enable speech-to-text\" },\n { env: \"STT_MODEL\", type: \"string\", default: \"whisper-large-v3-turbo\", description: \"STT model name\" },\n { env: \"TTS_ENABLED\", type: \"bool\", default: \"true\", description: \"Enable text-to-speech voice replies\" },\n { env: \"TTS_VOICE\", type: \"string\", default: \"alloy\", description: \"TTS voice name\" },\n\n // \u2500\u2500 Self-healer \u2500\u2500\n { env: \"SELFHEAL_ENABLED\", type: \"bool\", default: \"false\", description: \"Enable self-healer task\" },\n\n // \u2500\u2500 Browser \u2500\u2500\n { env: \"BROWSER_ENGINE\", type: \"string\", default: \"patchright\", description: \"Browser engine: patchright, chromium\" },\n { env: \"BROWSER_HEADED\", type: \"bool\", default: \"false\", description: \"Run browser in headed mode\" },\n { env: \"BROWSER_NO_SANDBOX\", type: \"bool\", default: \"false\", description: \"Disable browser sandbox\" },\n { env: \"BROWSER_CHANNEL\", type: \"string\", description: \"Browser channel (e.g. chrome)\" },\n { env: \"BROWSER_DOCKER\", type: \"bool\", default: \"false\", description: \"Use Docker for browser\" },\n { env: \"BROWSER_IDLE_STOP_MIN\", type: \"int\", default: \"10\", description: \"Minutes idle before stopping browser container\" },\n { env: \"BROWSER_ALLOWED_DOMAINS\", type: \"string\", default: \"\", description: \"Comma-separated allowed domains\" },\n { env: \"BROWSER_SOCKET_PATH\", type: \"string\", default: \"/run/browser/browser.sock\", description: \"Browser IPC socket path\" },\n { env: \"BROWSER_MAX_SESSIONS\", type: \"int\", default: \"3\", description: \"Max concurrent browser sessions\" },\n { env: \"BROWSER_SESSION_TIMEOUT_SEC\", type: \"int\", default: \"300\", description: \"Browser session timeout (seconds)\" },\n { env: \"WEB_SCRAPE_USER_AGENT\", type: \"string\", description: \"User agent for web scraping\" },\n { env: \"WEB_SCRAPE_PLAYWRIGHT_TIMEOUT_SEC\", type: \"int\", default: \"30\", description: \"Playwright page timeout (seconds)\" },\n { env: \"SSRF_CHECK\", type: \"bool\", default: \"true\", description: \"Enable SSRF protection for browser\" },\n { env: \"BROWSING_AGENT\", type: \"string\", description: \"Model override for browsing agent\" },\n\n // \u2500\u2500 Misc \u2500\u2500\n { env: \"DISABLED_CAPABILITIES\", type: \"string\", default: \"\", description: \"Comma-separated capabilities to disable\" },\n { env: \"CODING_MODEL\", type: \"string\", description: \"Model override for coding mode\" },\n { env: \"DASHBOARD_MODULE\", type: \"string\", description: \"Custom dashboard module path\" },\n { env: \"NOTEBOOKLM_ENABLED\", type: \"bool\", default: \"false\", description: \"Enable NotebookLM integration\" },\n { env: \"NOTEBOOKLM_DEFAULT_NOTEBOOK\", type: \"string\", default: \"\", description: \"Default NotebookLM notebook\" },\n { env: \"PERMISSION_TIMEOUT_SEC\", type: \"int\", default: \"60\", description: \"Permission prompt timeout (seconds)\" },\n { env: \"TRUST_MODE\", type: \"bool\", default: \"false\", description: \"Skip permission prompts\" },\n { env: \"SECURITY_MODE\", type: \"string\", default: \"off\", description: \"Security mode: off | guardrails | sandbox\" },\n { env: \"MAX_AGENT_CALL_PER_HOUR\", type: \"int\", required: true, description: \"Agent API rate limit: max requests per caller per hour\" },\n { env: \"MAX_AGENT_CALL_PER_DAY\", type: \"int\", required: true, description: \"Agent API rate limit: max requests per caller per day\" },\n { env: \"TELEGRAM_ENABLED\", type: \"bool\", default: \"\", description: \"Enable Telegram platform (fallback: token presence)\" },\n { env: \"DISCORD_ENABLED\", type: \"bool\", default: \"\", description: \"Enable Discord platform (fallback: token presence)\" },\n { env: \"IRC_ENABLED\", type: \"bool\", default: \"\", description: \"Enable IRC platform (fallback: irc.json presence)\" },\n { env: \"ENABLE_DASHBOARD\", type: \"bool\", default: \"false\", description: \"Enable web dashboard (exposes port)\" },\n { env: \"ENABLE_AGENT_API\", type: \"bool\", default: \"false\", description: \"Enable A2A agent API (exposes port)\" },\n { env: \"ENABLE_ASYNC_DELEGATION\", type: \"bool\", default: \"false\", description: \"Enable async session delegation tools (spawn/check/terminate)\" },\n { env: \"MAX_SESSIONS\", type: \"int\", default: \"10\", description: \"Max concurrent managed sessions per user\" },\n] as const;\n\n// \u2500\u2500 Parsed config type \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** Parsed time value from \"H:MM\" or \"HH:MM\" format. */\nexport interface TimeValue { hour: number; minute: number; raw: string; }\n\nexport interface EnvConfig {\n // Core\n abtarsHome: string;\n workingDir: string;\n mainChatId: string | undefined;\n mainChatProvider: \"telegram\" | \"discord\";\n logLevel: string;\n logFormat: \"text\" | \"json\";\n\n // Transport\n agentCliPath: string | undefined;\n apiKey: string | undefined;\n tmuxSession: string;\n defaultTransport: string;\n transportConfig: string;\n modelsConfig: string;\n\n // Transport timeouts\n promptTimeoutSec: number;\n modelApiTimeoutMs: number;\n watchdogToolTimeoutSec: number;\n watchdogSilentSec: number;\n watchdogEndlessSec: number;\n\n // Telegram\n telegramBotToken: string | undefined;\n telegramTimeoutMs: number;\n telegramFileTimeoutMs: number;\n pollTimeoutS: number;\n\n // Discord\n discordBotToken: string | undefined;\n discordAppId: string | undefined;\n discordGroupMentions: string;\n\n // Context window\n ctxWarnPct: number;\n ctxCompactPct: number;\n ctxAggressivePct: number;\n ctxIdleCompactPct: number;\n ctxIdleCompactMin: number;\n\n // Typing / streaming\n typingTtlMs: number;\n typingSilentThresholdMs: number;\n streamFlushSec: number;\n\n // Memory\n activeMemory: boolean;\n primingModelTopics: boolean;\n\n // Sleep\n bedTime: TimeValue;\n wakeTime: TimeValue;\n bedQuietMin: number;\n hardwareSleepAfterDreamy: boolean;\n sleepModel: string | undefined;\n sleepQuality: string | undefined;\n\n // Voice\n sttEnabled: boolean;\n sttModel: string;\n ttsEnabled: boolean;\n ttsVoice: string;\n\n // Self-healer\n selfhealEnabled: boolean;\n\n // Browser\n browserEngine: string;\n browserHeaded: boolean;\n browserNoSandbox: boolean;\n browserChannel: string | undefined;\n browserDocker: boolean;\n browserIdleStopMin: number;\n browserAllowedDomains: string;\n browserSocketPath: string;\n browserMaxSessions: number;\n browserSessionTimeoutMs: number;\n webScrapeUserAgent: string | undefined;\n webScrapePlaywrightTimeoutMs: number;\n ssrfCheck: boolean;\n browsingAgent: string | undefined;\n\n // Misc\n disabledCapabilities: string;\n codingModel: string | undefined;\n dashboardModule: string | undefined;\n notebooklmEnabled: boolean;\n notebooklmDefaultNotebook: string;\n permissionTimeoutMs: number;\n trustMode: boolean;\n securityMode: string;\n enableDashboard: boolean;\n enableAgentApi: boolean;\n enableAsyncDelegation: boolean;\n maxSessions: number;\n maxAgentCallPerHour: number;\n maxAgentCallPerDay: number;\n\n /** Dynamic API key lookup \u2014 for provider.apiKeyEnv pattern. */\n getApiKey(envName: string): string | undefined;\n}\n\n// \u2500\u2500 Parsing helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction parseTime(raw: string, varName: string): TimeValue {\n const parts = raw.split(\":\");\n const hour = parseInt(parts[0] ?? \"\", 10);\n const minute = parseInt(parts[1] ?? \"0\", 10);\n if (isNaN(hour) || isNaN(minute) || hour < 0 || hour > 23 || minute < 0 || minute > 59) {\n throw new Error(`Invalid ${varName}: \"${raw}\" \u2014 expected H:MM or HH:MM (e.g. \"0:30\", \"14:00\")`);\n }\n return { hour, minute, raw };\n}\n\nfunction parseIntSafe(raw: string, varName: string): number {\n const n = parseInt(raw, 10);\n if (isNaN(n)) throw new Error(`Invalid ${varName}: \"${raw}\" \u2014 expected integer`);\n return n;\n}\n\nfunction parseBool(raw: string): boolean {\n return raw.toLowerCase() === \"true\" || raw === \"1\";\n}\n\n// \u2500\u2500 Singleton \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nlet _env: Readonly<EnvConfig> | null = null;\n\n/** Get the parsed env config. Auto-initializes on first call if needed. */\nexport function getEnv(): Readonly<EnvConfig> {\n if (!_env) initEnv();\n return _env!;\n}\n\n/** Sanitized config dump \u2014 masks API keys/tokens, shows everything else. For /status. */\nexport function envDump(): Record<string, string> {\n const env = getEnv();\n const result: Record<string, string> = {};\n for (const [key, value] of Object.entries(env)) {\n if (typeof value === \"function\") continue;\n const strVal = value == null ? \"(not set)\" : String(value);\n // Mask anything that looks like a secret\n if (/token|key|secret|password/i.test(key) && strVal.length > 4) {\n result[key] = strVal.slice(0, 4) + \"\u2026\" + strVal.slice(-2);\n } else {\n result[key] = strVal;\n }\n }\n return result;\n}\n\n/** Initialize env config from process.env. Call once at boot. */\nexport function initEnv(): Readonly<EnvConfig> {\n const knownVars = new Set(SCHEMA.map(s => s.env));\n const warnings: string[] = [];\n\n // Detect typos: only warn if an unknown var is close (Levenshtein \u2264 3) to a known abtars var.\n // System vars (QT_*, POWERSHELL_*, etc.) are far from any known var \u2192 silently ignored.\n const envKeys = Object.keys(process.env).filter(k => /^[A-Z_]+$/.test(k));\n for (const k of envKeys) {\n if (knownVars.has(k)) continue;\n // Allow *_API_KEY pattern (provider keys referenced dynamically by transport.json)\n if (k.endsWith(\"_API_KEY\") || k.endsWith(\"_API_ID\")) continue;\n // Allow HA_* (Home Assistant, loaded from .env.skills)\n if (k.startsWith(\"HA_\")) continue;\n const suggestion = findClosest(k, knownVars);\n if (suggestion) {\n warnings.push(`Unknown env var ${k} \u2014 did you mean ${suggestion}?`);\n }\n }\n\n function read(envName: string): string | undefined {\n return process.env[envName]?.trim() || undefined;\n }\n\n function readOr(envName: string, fallback: string): string {\n return read(envName) ?? fallback;\n }\n\n const env: EnvConfig = {\n abtarsHome: readOr(\"ABTARS_HOME\", \"\"),\n workingDir: readOr(\"WORKING_DIR\", \".\"),\n mainChatId: read(\"MAIN_CHAT_ID\"),\n mainChatProvider: (read(\"MAIN_CHAT_PROVIDER\") ?? \"telegram\") === \"discord\" ? \"discord\" : \"telegram\",\n logLevel: readOr(\"LOG_LEVEL\", \"low\").toLowerCase(),\n logFormat: readOr(\"LOG_FORMAT\", \"text\") === \"json\" ? \"json\" : \"text\",\n\n agentCliPath: read(\"AGENT_CLI_PATH\"),\n apiKey: read(\"API_KEY\"),\n tmuxSession: readOr(\"TMUX_SESSION\", \"kiro\"),\n defaultTransport: readOr(\"DEFAULT_TRANSPORT\", \"api\"),\n transportConfig: readOr(\"TRANSPORT_CONFIG\", \"transport.json\").replace(\"config/\", \"\"),\n modelsConfig: readOr(\"MODELS_CONFIG\", \"models.json\").replace(\"config/\", \"\"),\n\n promptTimeoutSec: parseIntSafe(readOr(\"PROMPT_TIMEOUT_SEC\", \"180\"), \"PROMPT_TIMEOUT_SEC\"),\n modelApiTimeoutMs: parseIntSafe(readOr(\"MODEL_API_TIMEOUT_SEC\", \"120\"), \"MODEL_API_TIMEOUT_SEC\") * 1000,\n watchdogToolTimeoutSec: parseIntSafe(readOr(\"WATCHDOG_TOOL_TIMEOUT_SEC\", \"180\"), \"WATCHDOG_TOOL_TIMEOUT_SEC\"),\n watchdogSilentSec: parseIntSafe(readOr(\"WATCHDOG_SILENT_SEC\", \"300\"), \"WATCHDOG_SILENT_SEC\"),\n watchdogEndlessSec: parseIntSafe(readOr(\"WATCHDOG_ENDLESS_SEC\", \"600\"), \"WATCHDOG_ENDLESS_SEC\"),\n\n telegramBotToken: read(\"TELEGRAM_BOT_TOKEN\"),\n telegramTimeoutMs: parseIntSafe(readOr(\"TELEGRAM_TIMEOUT_SEC\", \"10\"), \"TELEGRAM_TIMEOUT_SEC\") * 1000,\n telegramFileTimeoutMs: parseIntSafe(readOr(\"TELEGRAM_FILE_TIMEOUT_SEC\", \"60\"), \"TELEGRAM_FILE_TIMEOUT_SEC\") * 1000,\n pollTimeoutS: parseIntSafe(readOr(\"POLL_TIMEOUT_S\", \"30\"), \"POLL_TIMEOUT_S\"),\n\n discordBotToken: read(\"DISCORD_BOT_TOKEN\"),\n discordAppId: read(\"DISCORD_APP_ID\"),\n discordGroupMentions: readOr(\"DISCORD_GROUP_MENTIONS\", \"required\"),\n\n ctxWarnPct: parseIntSafe(readOr(\"CTX_WARN_PCT\", \"70\"), \"CTX_WARN_PCT\"),\n ctxCompactPct: parseIntSafe(readOr(\"CTX_COMPACT_PCT\", \"80\"), \"CTX_COMPACT_PCT\"),\n ctxAggressivePct: parseIntSafe(readOr(\"CTX_AGGRESSIVE_PCT\", \"90\"), \"CTX_AGGRESSIVE_PCT\"),\n ctxIdleCompactPct: parseIntSafe(readOr(\"CTX_IDLE_COMPACT_PCT\", \"65\"), \"CTX_IDLE_COMPACT_PCT\"),\n ctxIdleCompactMin: parseIntSafe(readOr(\"CTX_IDLE_COMPACT_MIN\", \"10\"), \"CTX_IDLE_COMPACT_MIN\"),\n\n typingTtlMs: parseIntSafe(readOr(\"TYPING_TTL_SEC\", \"300\"), \"TYPING_TTL_SEC\") * 1000,\n typingSilentThresholdMs: parseIntSafe(readOr(\"TYPING_SILENT_THRESHOLD_SEC\", \"90\"), \"TYPING_SILENT_THRESHOLD_SEC\") * 1000,\n streamFlushSec: parseIntSafe(readOr(\"STREAM_FLUSH_SEC\", \"3\"), \"STREAM_FLUSH_SEC\"),\n\n activeMemory: parseBool(readOr(\"ACTIVE_MEMORY\", \"true\")),\n primingModelTopics: read(\"PRIMING_MODEL_TOPICS\") !== \"false\",\n\n bedTime: parseTime(readOr(\"BED_TIME\", \"0:30\"), \"BED_TIME\"),\n wakeTime: parseTime(readOr(\"WAKE_TIME\", \"7:00\"), \"WAKE_TIME\"),\n bedQuietMin: parseIntSafe(readOr(\"BED_QUIET_MIN\", \"7\"), \"BED_QUIET_MIN\"),\n hardwareSleepAfterDreamy: parseBool(readOr(\"HARDWARE_SLEEP_AFTER_DREAMY\", \"false\")),\n sleepModel: read(\"SLEEP_MODEL\"),\n sleepQuality: read(\"SLEEP_QUALITY\"),\n\n sttEnabled: parseBool(readOr(\"STT_ENABLED\", \"false\")),\n sttModel: readOr(\"STT_MODEL\", \"whisper-large-v3-turbo\"),\n ttsEnabled: parseBool(readOr(\"TTS_ENABLED\", \"false\")),\n ttsVoice: readOr(\"TTS_VOICE\", \"alloy\"),\n\n selfhealEnabled: parseBool(readOr(\"SELFHEAL_ENABLED\", \"false\")),\n\n browserEngine: readOr(\"BROWSER_ENGINE\", \"patchright\"),\n browserHeaded: parseBool(readOr(\"BROWSER_HEADED\", \"false\")),\n browserNoSandbox: parseBool(readOr(\"BROWSER_NO_SANDBOX\", \"false\")),\n browserChannel: read(\"BROWSER_CHANNEL\"),\n browserDocker: parseBool(readOr(\"BROWSER_DOCKER\", \"false\")),\n browserIdleStopMin: parseIntSafe(readOr(\"BROWSER_IDLE_STOP_MIN\", \"10\"), \"BROWSER_IDLE_STOP_MIN\"),\n browserAllowedDomains: readOr(\"BROWSER_ALLOWED_DOMAINS\", \"\"),\n browserSocketPath: readOr(\"BROWSER_SOCKET_PATH\", \"/run/browser/browser.sock\"),\n browserMaxSessions: parseIntSafe(readOr(\"BROWSER_MAX_SESSIONS\", \"3\"), \"BROWSER_MAX_SESSIONS\"),\n browserSessionTimeoutMs: parseIntSafe(readOr(\"BROWSER_SESSION_TIMEOUT_SEC\", \"300\"), \"BROWSER_SESSION_TIMEOUT_SEC\") * 1000,\n webScrapeUserAgent: read(\"WEB_SCRAPE_USER_AGENT\"),\n webScrapePlaywrightTimeoutMs: parseIntSafe(readOr(\"WEB_SCRAPE_PLAYWRIGHT_TIMEOUT_SEC\", \"30\"), \"WEB_SCRAPE_PLAYWRIGHT_TIMEOUT_SEC\") * 1000,\n ssrfCheck: read(\"SSRF_CHECK\") !== \"0\",\n browsingAgent: read(\"BROWSING_AGENT\"),\n\n disabledCapabilities: readOr(\"DISABLED_CAPABILITIES\", \"\"),\n codingModel: read(\"CODING_MODEL\"),\n dashboardModule: read(\"DASHBOARD_MODULE\"),\n notebooklmEnabled: parseBool(readOr(\"NOTEBOOKLM_ENABLED\", \"false\")),\n notebooklmDefaultNotebook: readOr(\"NOTEBOOKLM_DEFAULT_NOTEBOOK\", \"\"),\n permissionTimeoutMs: parseIntSafe(readOr(\"PERMISSION_TIMEOUT_SEC\", \"60\"), \"PERMISSION_TIMEOUT_SEC\") * 1000,\n trustMode: parseBool(readOr(\"TRUST_MODE\", \"false\")),\n securityMode: readOr(\"SECURITY_MODE\", \"off\"),\n enableDashboard: parseBool(readOr(\"ENABLE_DASHBOARD\", \"false\")),\n enableAgentApi: parseBool(readOr(\"ENABLE_AGENT_API\", \"false\")),\n enableAsyncDelegation: parseBool(readOr(\"ENABLE_ASYNC_DELEGATION\", \"false\")),\n maxSessions: parseIntSafe(readOr(\"MAX_SESSIONS\", \"10\"), \"MAX_SESSIONS\"),\n maxAgentCallPerHour: parseIntSafe(readOr(\"MAX_AGENT_CALL_PER_HOUR\", \"30\"), \"MAX_AGENT_CALL_PER_HOUR\"),\n maxAgentCallPerDay: parseIntSafe(readOr(\"MAX_AGENT_CALL_PER_DAY\", \"100\"), \"MAX_AGENT_CALL_PER_DAY\"),\n\n getApiKey(envName: string): string | undefined {\n return process.env[envName]?.trim() || undefined;\n },\n };\n\n // Count overrides\n let overrideCount = 0;\n for (const def of SCHEMA) {\n if (def.default !== undefined && read(def.env) !== undefined) overrideCount++;\n }\n\n for (const w of warnings) logWarn(\"env\", w);\n logInfo(\"env\", `${SCHEMA.length} vars loaded, ${overrideCount} overridden, ${warnings.length} warnings`);\n\n _env = Object.freeze(env);\n return _env;\n}\n\n/** Reset singleton (for tests only). */\nexport function _resetEnv(): void { _env = null; }\n\n// \u2500\u2500 Typo detection helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** Find closest known var name (Levenshtein distance \u2264 3). */\nfunction findClosest(input: string, known: Set<string>): string | undefined {\n let best: string | undefined;\n let bestDist = 4; // threshold\n for (const k of known) {\n const d = levenshtein(input, k);\n if (d < bestDist) { bestDist = d; best = k; }\n }\n return best;\n}\n\nfunction levenshtein(a: string, b: string): number {\n if (a.length === 0) return b.length;\n if (b.length === 0) return a.length;\n const matrix: number[][] = [];\n for (let i = 0; i <= b.length; i++) matrix[i] = [i];\n for (let j = 0; j <= a.length; j++) matrix[0]![j] = j;\n for (let i = 1; i <= b.length; i++) {\n for (let j = 1; j <= a.length; j++) {\n const cost = b[i - 1] === a[j - 1] ? 0 : 1;\n matrix[i]![j] = Math.min(matrix[i - 1]![j]! + 1, matrix[i]![j - 1]! + 1, matrix[i - 1]![j - 1]! + cost);\n }\n }\n return matrix[b.length]![a.length]!;\n}\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }