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
@@ -1,16 +1,17 @@
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
  addCompletion
4
- } from "./chunk-LSPKJQCI.js";
5
+ } from "./chunk-MV6CJFWR.js";
5
6
  import {
6
7
  getEnv,
7
8
  init_env_schema
8
- } from "./chunk-JCJS4ZIB.js";
9
+ } from "./chunk-AQVOAQQI.js";
9
10
  import {
10
11
  init_logger,
11
12
  logInfo,
12
13
  logWarn
13
- } from "./chunk-BUUVFUPO.js";
14
+ } from "./chunk-2BY6I4P5.js";
14
15
 
15
16
  // src/components/transport/delegation-tools.ts
16
17
  init_logger();
@@ -211,4 +212,4 @@ export {
211
212
  consumePendingInstruction,
212
213
  getDelegationTools
213
214
  };
214
- //# sourceMappingURL=chunk-UHRP745J.js.map
215
+ //# sourceMappingURL=chunk-L7YHV5DL.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/components/transport/delegation-tools.ts"],
4
4
  "sourcesContent": ["/**\n * delegation-tools.ts \u2014 spawn_session, check_session, terminate_session (#570).\n * Gated behind ENABLE_ASYNC_DELEGATION env flag.\n */\n\nimport type { ToolDefinition } from \"./tool-registry.js\";\nimport type { SubagentRuntime, AgentName } from \"../subagent-runtime.js\";\nimport type { SessionManager, SessionType } from \"../session-manager.js\";\nimport { addCompletion } from \"../completion-buffer.js\";\nimport { logInfo, logWarn } from \"../logger.js\";\nimport { getEnv } from \"../env-schema.js\";\n\nconst TAG = \"delegation\";\nconst MAX_BACKGROUND = parseInt(process.env[\"MAX_BACKGROUND_SESSIONS\"] ?? \"3\", 10);\n\nlet _runtime: SubagentRuntime | null = null;\nlet _sessionManager: SessionManager | null = null;\n\nexport function setDelegationDeps(runtime: SubagentRuntime, sessionManager: SessionManager): void {\n _runtime = runtime;\n _sessionManager = sessionManager;\n}\n\n// Track active background sessions: taskId \u2192 metadata\ninterface BackgroundEntry {\n taskId: string;\n sessionId: string;\n goal: string;\n startedAt: number;\n status: \"running\" | \"done\" | \"failed\" | \"terminated\" | \"timeout\";\n result?: string;\n inputTokens: number;\n outputTokens: number;\n pendingInstruction?: string;\n}\n\nconst activeBackgrounds = new Map<string, BackgroundEntry>();\n\nexport function getActiveBackgrounds(): Map<string, BackgroundEntry> {\n return activeBackgrounds;\n}\n\nconst TYPE_MAP: Record<string, { sessionType: SessionType; agent: AgentName }> = {\n code: { sessionType: \"C\", agent: \"coding\" },\n browse: { sessionType: \"B\", agent: \"browsie\" },\n task: { sessionType: \"T\", agent: \"task\" },\n};\n\nexport const spawnSessionTool: ToolDefinition = {\n name: \"spawn_session\",\n description: \"Spawn a background session that works independently. Returns immediately with a session ID. Use check_session to get results later.\",\n parameters: {\n type: \"object\",\n properties: {\n type: { type: \"string\", enum: [\"code\", \"browse\", \"task\"], description: \"Session type\" },\n goal: { type: \"string\", description: \"What the sub-agent should accomplish\" },\n context: { type: \"string\", description: \"Optional context/instructions\" },\n },\n required: [\"type\", \"goal\"],\n },\n async execute(args) {\n if (!_runtime || !_sessionManager) return JSON.stringify({ error: \"Delegation not initialized\" });\n\n const typeInfo = TYPE_MAP[args.type ?? \"task\"];\n if (!typeInfo) return JSON.stringify({ error: `Unknown type: ${args.type}. Use: code, browse, task` });\n\n // Check cap\n const running = [...activeBackgrounds.values()].filter(e => e.status === \"running\");\n if (running.length >= MAX_BACKGROUND) {\n return JSON.stringify({ error: `Max ${MAX_BACKGROUND} concurrent background sessions. Wait for one to finish or terminate it.` });\n }\n\n // Create session via session manager\n const session = _sessionManager.createSubSession(\"master\", \"telegram\", typeInfo.sessionType);\n if (typeof session === \"string\") return JSON.stringify({ error: session });\n\n const goal = args.goal ?? \"No goal specified\";\n const prompt = args.context ? `${args.context}\\n\\nTask: ${goal}` : goal;\n\n // Spawn via SubagentRuntime (fire-and-forget)\n const { taskId } = await _runtime.spawn(typeInfo.agent, prompt, {\n onComplete: (id, result) => {\n const entry = activeBackgrounds.get(id);\n if (entry) {\n entry.status = \"done\";\n entry.result = result.slice(0, 4000);\n addCompletion({\n sessionId: entry.sessionId,\n motherId: session.motherId ?? \"\",\n goal: entry.goal,\n status: \"done\",\n result: entry.result,\n elapsedMs: Date.now() - entry.startedAt,\n inputTokens: entry.inputTokens,\n outputTokens: entry.outputTokens,\n });\n logInfo(TAG, `Background ${id} completed (${Date.now() - entry.startedAt}ms)`);\n }\n },\n onError: (id, err) => {\n const entry = activeBackgrounds.get(id);\n if (entry) {\n entry.status = \"failed\";\n entry.result = err.message.slice(0, 1000);\n addCompletion({\n sessionId: entry.sessionId,\n motherId: session.motherId ?? \"\",\n goal: entry.goal,\n status: \"failed\",\n result: entry.result,\n elapsedMs: Date.now() - entry.startedAt,\n inputTokens: entry.inputTokens,\n outputTokens: entry.outputTokens,\n });\n logWarn(TAG, `Background ${id} failed: ${err.message}`);\n }\n },\n });\n\n activeBackgrounds.set(taskId, {\n taskId,\n sessionId: session.id,\n goal,\n startedAt: Date.now(),\n status: \"running\",\n inputTokens: 0,\n outputTokens: 0,\n });\n\n logInfo(TAG, `Spawned background: taskId=${taskId}, session=${session.id}, goal=\"${goal.slice(0, 60)}\"`);\n return JSON.stringify({ session_id: session.id, task_id: taskId, status: \"running\" });\n },\n};\n\nexport const checkSessionTool: ToolDefinition = {\n name: \"check_session\",\n description: \"Check the status of a background session. Returns status and result if completed.\",\n parameters: {\n type: \"object\",\n properties: {\n task_id: { type: \"string\", description: \"Task ID returned by spawn_session\" },\n },\n required: [\"task_id\"],\n },\n async execute(args) {\n const entry = activeBackgrounds.get(args.task_id ?? \"\");\n if (!entry) return JSON.stringify({ error: `No background session found with task_id: ${args.task_id}` });\n\n const elapsed = Math.round((Date.now() - entry.startedAt) / 1000);\n return JSON.stringify({\n task_id: entry.taskId,\n session_id: entry.sessionId,\n goal: entry.goal,\n status: entry.status,\n elapsed_seconds: elapsed,\n result: entry.result ?? null,\n });\n },\n};\n\nexport const terminateSessionTool: ToolDefinition = {\n name: \"terminate_session\",\n description: \"Terminate a running background session. It finishes its current operation then stops.\",\n parameters: {\n type: \"object\",\n properties: {\n task_id: { type: \"string\", description: \"Task ID to terminate\" },\n },\n required: [\"task_id\"],\n },\n async execute(args) {\n if (!_runtime) return JSON.stringify({ error: \"Delegation not initialized\" });\n\n const entry = activeBackgrounds.get(args.task_id ?? \"\");\n if (!entry) return JSON.stringify({ error: `No background session found with task_id: ${args.task_id}` });\n if (entry.status !== \"running\") return JSON.stringify({ error: `Session already ${entry.status}` });\n\n const interrupted = _runtime.interruptSpawn(entry.taskId);\n entry.status = \"terminated\";\n entry.result = \"(terminated by user)\";\n\n if (entry.sessionId && _sessionManager) {\n const managed = _sessionManager.getSessionById(entry.sessionId);\n if (managed) managed.paused = true;\n }\n\n addCompletion({\n sessionId: entry.sessionId,\n motherId: _sessionManager?.getSessionById(entry.sessionId)?.motherId ?? \"\",\n goal: entry.goal,\n status: \"terminated\",\n result: entry.result,\n elapsedMs: Date.now() - entry.startedAt,\n inputTokens: entry.inputTokens,\n outputTokens: entry.outputTokens,\n });\n\n logInfo(TAG, `Terminated background ${entry.taskId} (interrupted=${interrupted})`);\n return JSON.stringify({ task_id: entry.taskId, status: \"terminated\" });\n },\n};\n\nexport const sendToSessionTool: ToolDefinition = {\n name: \"send_to_session\",\n description: \"Send a follow-up instruction to a running background session. The child receives it on its next turn.\",\n parameters: {\n type: \"object\",\n properties: {\n task_id: { type: \"string\", description: \"Task ID of the running session\" },\n message: { type: \"string\", description: \"Instruction to send\" },\n },\n required: [\"task_id\", \"message\"],\n },\n async execute(args) {\n const entry = activeBackgrounds.get(args.task_id ?? \"\");\n if (!entry) return JSON.stringify({ error: `No background session found with task_id: ${args.task_id}` });\n if (entry.status !== \"running\") return JSON.stringify({ error: `Session is ${entry.status}, cannot send instruction` });\n entry.pendingInstruction = args.message;\n logInfo(TAG, `Instruction queued for ${entry.taskId}: \"${(args.message ?? \"\").slice(0, 60)}\"`);\n return JSON.stringify({ delivered: true, task_id: entry.taskId });\n },\n};\n\n/** Check and consume pending instruction for a task. Used by agent loop. */\nexport function consumePendingInstruction(taskId: string): string | undefined {\n const entry = activeBackgrounds.get(taskId);\n if (!entry?.pendingInstruction) return undefined;\n const msg = entry.pendingInstruction;\n entry.pendingInstruction = undefined;\n return msg;\n}\n\nexport function getDelegationTools(): ToolDefinition[] {\n if (!getEnv().enableAsyncDelegation) return [];\n return [spawnSessionTool, checkSessionTool, terminateSessionTool, sendToSessionTool];\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;AASA;AACA;AAEA,IAAM,MAAM;AACZ,IAAM,iBAAiB,SAAS,QAAQ,IAAI,yBAAyB,KAAK,KAAK,EAAE;AAEjF,IAAI,WAAmC;AACvC,IAAI,kBAAyC;AAEtC,SAAS,kBAAkB,SAA0B,gBAAsC;AAChG,aAAW;AACX,oBAAkB;AACpB;AAeA,IAAM,oBAAoB,oBAAI,IAA6B;AAEpD,SAAS,uBAAqD;AACnE,SAAO;AACT;AAEA,IAAM,WAA2E;AAAA,EAC/E,MAAM,EAAE,aAAa,KAAK,OAAO,SAAS;AAAA,EAC1C,QAAQ,EAAE,aAAa,KAAK,OAAO,UAAU;AAAA,EAC7C,MAAM,EAAE,aAAa,KAAK,OAAO,OAAO;AAC1C;AAEO,IAAM,mBAAmC;AAAA,EAC9C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,YAAY;AAAA,IACV,MAAM;AAAA,IACN,YAAY;AAAA,MACV,MAAM,EAAE,MAAM,UAAU,MAAM,CAAC,QAAQ,UAAU,MAAM,GAAG,aAAa,eAAe;AAAA,MACtF,MAAM,EAAE,MAAM,UAAU,aAAa,uCAAuC;AAAA,MAC5E,SAAS,EAAE,MAAM,UAAU,aAAa,gCAAgC;AAAA,IAC1E;AAAA,IACA,UAAU,CAAC,QAAQ,MAAM;AAAA,EAC3B;AAAA,EACA,MAAM,QAAQ,MAAM;AAClB,QAAI,CAAC,YAAY,CAAC,gBAAiB,QAAO,KAAK,UAAU,EAAE,OAAO,6BAA6B,CAAC;AAEhG,UAAM,WAAW,SAAS,KAAK,QAAQ,MAAM;AAC7C,QAAI,CAAC,SAAU,QAAO,KAAK,UAAU,EAAE,OAAO,iBAAiB,KAAK,IAAI,4BAA4B,CAAC;AAGrG,UAAM,UAAU,CAAC,GAAG,kBAAkB,OAAO,CAAC,EAAE,OAAO,OAAK,EAAE,WAAW,SAAS;AAClF,QAAI,QAAQ,UAAU,gBAAgB;AACpC,aAAO,KAAK,UAAU,EAAE,OAAO,OAAO,cAAc,2EAA2E,CAAC;AAAA,IAClI;AAGA,UAAM,UAAU,gBAAgB,iBAAiB,UAAU,YAAY,SAAS,WAAW;AAC3F,QAAI,OAAO,YAAY,SAAU,QAAO,KAAK,UAAU,EAAE,OAAO,QAAQ,CAAC;AAEzE,UAAM,OAAO,KAAK,QAAQ;AAC1B,UAAM,SAAS,KAAK,UAAU,GAAG,KAAK,OAAO;AAAA;AAAA,QAAa,IAAI,KAAK;AAGnE,UAAM,EAAE,OAAO,IAAI,MAAM,SAAS,MAAM,SAAS,OAAO,QAAQ;AAAA,MAC9D,YAAY,CAAC,IAAI,WAAW;AAC1B,cAAM,QAAQ,kBAAkB,IAAI,EAAE;AACtC,YAAI,OAAO;AACT,gBAAM,SAAS;AACf,gBAAM,SAAS,OAAO,MAAM,GAAG,GAAI;AACnC,wBAAc;AAAA,YACZ,WAAW,MAAM;AAAA,YACjB,UAAU,QAAQ,YAAY;AAAA,YAC9B,MAAM,MAAM;AAAA,YACZ,QAAQ;AAAA,YACR,QAAQ,MAAM;AAAA,YACd,WAAW,KAAK,IAAI,IAAI,MAAM;AAAA,YAC9B,aAAa,MAAM;AAAA,YACnB,cAAc,MAAM;AAAA,UACtB,CAAC;AACD,kBAAQ,KAAK,cAAc,EAAE,eAAe,KAAK,IAAI,IAAI,MAAM,SAAS,KAAK;AAAA,QAC/E;AAAA,MACF;AAAA,MACA,SAAS,CAAC,IAAI,QAAQ;AACpB,cAAM,QAAQ,kBAAkB,IAAI,EAAE;AACtC,YAAI,OAAO;AACT,gBAAM,SAAS;AACf,gBAAM,SAAS,IAAI,QAAQ,MAAM,GAAG,GAAI;AACxC,wBAAc;AAAA,YACZ,WAAW,MAAM;AAAA,YACjB,UAAU,QAAQ,YAAY;AAAA,YAC9B,MAAM,MAAM;AAAA,YACZ,QAAQ;AAAA,YACR,QAAQ,MAAM;AAAA,YACd,WAAW,KAAK,IAAI,IAAI,MAAM;AAAA,YAC9B,aAAa,MAAM;AAAA,YACnB,cAAc,MAAM;AAAA,UACtB,CAAC;AACD,kBAAQ,KAAK,cAAc,EAAE,YAAY,IAAI,OAAO,EAAE;AAAA,QACxD;AAAA,MACF;AAAA,IACF,CAAC;AAED,sBAAkB,IAAI,QAAQ;AAAA,MAC5B;AAAA,MACA,WAAW,QAAQ;AAAA,MACnB;AAAA,MACA,WAAW,KAAK,IAAI;AAAA,MACpB,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,cAAc;AAAA,IAChB,CAAC;AAED,YAAQ,KAAK,8BAA8B,MAAM,aAAa,QAAQ,EAAE,WAAW,KAAK,MAAM,GAAG,EAAE,CAAC,GAAG;AACvG,WAAO,KAAK,UAAU,EAAE,YAAY,QAAQ,IAAI,SAAS,QAAQ,QAAQ,UAAU,CAAC;AAAA,EACtF;AACF;AAEO,IAAM,mBAAmC;AAAA,EAC9C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,YAAY;AAAA,IACV,MAAM;AAAA,IACN,YAAY;AAAA,MACV,SAAS,EAAE,MAAM,UAAU,aAAa,oCAAoC;AAAA,IAC9E;AAAA,IACA,UAAU,CAAC,SAAS;AAAA,EACtB;AAAA,EACA,MAAM,QAAQ,MAAM;AAClB,UAAM,QAAQ,kBAAkB,IAAI,KAAK,WAAW,EAAE;AACtD,QAAI,CAAC,MAAO,QAAO,KAAK,UAAU,EAAE,OAAO,6CAA6C,KAAK,OAAO,GAAG,CAAC;AAExG,UAAM,UAAU,KAAK,OAAO,KAAK,IAAI,IAAI,MAAM,aAAa,GAAI;AAChE,WAAO,KAAK,UAAU;AAAA,MACpB,SAAS,MAAM;AAAA,MACf,YAAY,MAAM;AAAA,MAClB,MAAM,MAAM;AAAA,MACZ,QAAQ,MAAM;AAAA,MACd,iBAAiB;AAAA,MACjB,QAAQ,MAAM,UAAU;AAAA,IAC1B,CAAC;AAAA,EACH;AACF;AAEO,IAAM,uBAAuC;AAAA,EAClD,MAAM;AAAA,EACN,aAAa;AAAA,EACb,YAAY;AAAA,IACV,MAAM;AAAA,IACN,YAAY;AAAA,MACV,SAAS,EAAE,MAAM,UAAU,aAAa,uBAAuB;AAAA,IACjE;AAAA,IACA,UAAU,CAAC,SAAS;AAAA,EACtB;AAAA,EACA,MAAM,QAAQ,MAAM;AAClB,QAAI,CAAC,SAAU,QAAO,KAAK,UAAU,EAAE,OAAO,6BAA6B,CAAC;AAE5E,UAAM,QAAQ,kBAAkB,IAAI,KAAK,WAAW,EAAE;AACtD,QAAI,CAAC,MAAO,QAAO,KAAK,UAAU,EAAE,OAAO,6CAA6C,KAAK,OAAO,GAAG,CAAC;AACxG,QAAI,MAAM,WAAW,UAAW,QAAO,KAAK,UAAU,EAAE,OAAO,mBAAmB,MAAM,MAAM,GAAG,CAAC;AAElG,UAAM,cAAc,SAAS,eAAe,MAAM,MAAM;AACxD,UAAM,SAAS;AACf,UAAM,SAAS;AAEf,QAAI,MAAM,aAAa,iBAAiB;AACtC,YAAM,UAAU,gBAAgB,eAAe,MAAM,SAAS;AAC9D,UAAI,QAAS,SAAQ,SAAS;AAAA,IAChC;AAEA,kBAAc;AAAA,MACZ,WAAW,MAAM;AAAA,MACjB,UAAU,iBAAiB,eAAe,MAAM,SAAS,GAAG,YAAY;AAAA,MACxE,MAAM,MAAM;AAAA,MACZ,QAAQ;AAAA,MACR,QAAQ,MAAM;AAAA,MACd,WAAW,KAAK,IAAI,IAAI,MAAM;AAAA,MAC9B,aAAa,MAAM;AAAA,MACnB,cAAc,MAAM;AAAA,IACtB,CAAC;AAED,YAAQ,KAAK,yBAAyB,MAAM,MAAM,iBAAiB,WAAW,GAAG;AACjF,WAAO,KAAK,UAAU,EAAE,SAAS,MAAM,QAAQ,QAAQ,aAAa,CAAC;AAAA,EACvE;AACF;AAEO,IAAM,oBAAoC;AAAA,EAC/C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,YAAY;AAAA,IACV,MAAM;AAAA,IACN,YAAY;AAAA,MACV,SAAS,EAAE,MAAM,UAAU,aAAa,iCAAiC;AAAA,MACzE,SAAS,EAAE,MAAM,UAAU,aAAa,sBAAsB;AAAA,IAChE;AAAA,IACA,UAAU,CAAC,WAAW,SAAS;AAAA,EACjC;AAAA,EACA,MAAM,QAAQ,MAAM;AAClB,UAAM,QAAQ,kBAAkB,IAAI,KAAK,WAAW,EAAE;AACtD,QAAI,CAAC,MAAO,QAAO,KAAK,UAAU,EAAE,OAAO,6CAA6C,KAAK,OAAO,GAAG,CAAC;AACxG,QAAI,MAAM,WAAW,UAAW,QAAO,KAAK,UAAU,EAAE,OAAO,cAAc,MAAM,MAAM,4BAA4B,CAAC;AACtH,UAAM,qBAAqB,KAAK;AAChC,YAAQ,KAAK,0BAA0B,MAAM,MAAM,OAAO,KAAK,WAAW,IAAI,MAAM,GAAG,EAAE,CAAC,GAAG;AAC7F,WAAO,KAAK,UAAU,EAAE,WAAW,MAAM,SAAS,MAAM,OAAO,CAAC;AAAA,EAClE;AACF;AAGO,SAAS,0BAA0B,QAAoC;AAC5E,QAAM,QAAQ,kBAAkB,IAAI,MAAM;AAC1C,MAAI,CAAC,OAAO,mBAAoB,QAAO;AACvC,QAAM,MAAM,MAAM;AAClB,QAAM,qBAAqB;AAC3B,SAAO;AACT;AAEO,SAAS,qBAAuC;AACrD,MAAI,CAAC,OAAO,EAAE,sBAAuB,QAAO,CAAC;AAC7C,SAAO,CAAC,kBAAkB,kBAAkB,sBAAsB,iBAAiB;AACrF;",
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,16 +1,17 @@
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
  AcpTransport
4
- } from "./chunk-X6TERNVJ.js";
5
+ } from "./chunk-WX7GHGFX.js";
5
6
  import {
6
7
  getEnv,
7
8
  init_env_schema
8
- } from "./chunk-JCJS4ZIB.js";
9
+ } from "./chunk-AQVOAQQI.js";
9
10
  import {
10
11
  init_logger,
11
12
  logInfo,
12
13
  logWarn
13
- } from "./chunk-BUUVFUPO.js";
14
+ } from "./chunk-2BY6I4P5.js";
14
15
 
15
16
  // src/components/agent-registry.ts
16
17
  init_env_schema();
@@ -59,7 +60,7 @@ var SUBAGENT_ACP_ROLE = {
59
60
  task: "task"
60
61
  };
61
62
  async function createSubagentTransport(role, registry, currentModel) {
62
- const { resolveAgent, getEnvFallback, loadTransport } = await import("./transport-config-YLXU33RO.js");
63
+ const { resolveAgent, getEnvFallback, loadTransport } = await import("./transport-config-ANPS2RYT.js");
63
64
  const tc = loadTransport();
64
65
  const agentName = SUBAGENT_TO_AGENT[role];
65
66
  const resolved = tc ? resolveAgent(agentName, tc) : null;
@@ -69,8 +70,8 @@ async function createSubagentTransport(role, registry, currentModel) {
69
70
  return { model: fb.model, provider: fb.provider, providerName: fb.providerName, contextWindow: fb.contextWindow, maxOutput: fb.maxOutput, fallbacks: [] };
70
71
  })();
71
72
  if (agent.provider.transport === "api") {
72
- const { DirectApiTransport } = await import("./direct-api-transport-YR7SXXNN.js");
73
- const { FallbackPolicy } = await import("./fallback-policy-L4QV2PEJ.js");
73
+ const { DirectApiTransport } = await import("./direct-api-transport-EADHM67Z.js");
74
+ const { FallbackPolicy } = await import("./fallback-policy-SR6ED5I3.js");
74
75
  const apiKey = getEnv().getApiKey(agent.provider.apiKeyEnv ?? "API_KEY");
75
76
  const startModel = currentModel ?? agent.model;
76
77
  const candidates = [
@@ -110,7 +111,7 @@ async function createSubagentTransport(role, registry, currentModel) {
110
111
  });
111
112
  }
112
113
  }
113
- const { ModelHealthRegistry } = await import("./model-health-registry-35LQNVQR.js");
114
+ const { ModelHealthRegistry } = await import("./model-health-registry-LDC76RPP.js");
114
115
  const policy = new FallbackPolicy(candidates, registry ?? new ModelHealthRegistry());
115
116
  const transport = new DirectApiTransport({
116
117
  endpoint: agent.provider.endpoint ?? "http://localhost:11434/v1",
@@ -124,7 +125,7 @@ async function createSubagentTransport(role, registry, currentModel) {
124
125
  logInfo("subagent", `${role} transport: DirectAPI ${agent.providerName} (model=${startModel}, ${candidates.length} candidates, shared registry: ${!!registry})`);
125
126
  return { transport, model: agent.model };
126
127
  }
127
- const { loadAndValidateConfig } = await import("./config-RGSDAPZN.js");
128
+ const { loadAndValidateConfig } = await import("./config-C6VHRJQ7.js");
128
129
  const config = await loadAndValidateConfig();
129
130
  const chain = agent.provider.fallbackChain ?? [];
130
131
  const modelsToTry = [agent.model, ...chain.filter((m) => m !== agent.model)];
@@ -156,4 +157,4 @@ export {
156
157
  createAgentTransport,
157
158
  createSubagentTransport
158
159
  };
159
- //# sourceMappingURL=chunk-BSSBCSCL.js.map
160
+ //# sourceMappingURL=chunk-LD5BMLHG.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/components/agent-registry.ts"],
4
4
  "sourcesContent": ["import { getEnv } from \"./env-schema.js\";\n/**\n * agent-registry.ts \u2014 Centralized agent role configuration.\n * Single factory for all agent transports. Transport-agnostic.\n */\n\nimport { AcpTransport } from \"./transport/acp-transport.js\";\nimport { logInfo, logWarn } from \"./logger.js\";\nimport type { IKiroTransport } from \"./transport/kiro-transport.js\";\n\nexport type AgentRole = \"professor\" | \"dreamy\" | \"browsie\" | \"coding\" | \"task\";\n\nexport interface AgentRoleConfig {\n agent: string | null;\n model: string | null;\n persona: string | null;\n autoReinit: boolean;\n tag: string;\n trust: number;\n}\n\nconst AGENT_ROLES: Record<AgentRole, AgentRoleConfig> = {\n professor: { agent: \"professor\", model: null, persona: \"persona/core/SOUL.md\", autoReinit: true, tag: \"acp-main\", trust: 3 },\n dreamy: { agent: \"dreamy\", model: null, persona: \"persona/prompts/sleep/00-identity.md\", autoReinit: false, tag: \"acp-sleep\", trust: 2 },\n coding: { agent: \"coding-agent\", model: null, persona: null, autoReinit: true, tag: \"acp-coding\", trust: 2 },\n browsie: { agent: \"browsie\", model: null, persona: null, autoReinit: false, tag: \"acp-browsie\", trust: 1 },\n task: { agent: \"professor\", model: null, persona: null, autoReinit: false, tag: \"acp-task\", trust: 2 },\n};\n\nfunction resolveModel(role: AgentRole): string | undefined {\n switch (role) {\n case \"dreamy\": return getEnv().sleepModel;\n case \"browsie\": return getEnv().browsingAgent;\n case \"coding\": return getEnv().codingModel;\n default: return undefined;\n }\n}\n\nexport interface TransportConfig {\n cliPath: string;\n workingDir: string;\n agentCli?: string;\n model?: string;\n}\n\nexport function createAgentTransport(\n role: AgentRole,\n tc: TransportConfig,\n overrides?: Partial<AgentRoleConfig>,\n): AcpTransport {\n const cfg = { ...AGENT_ROLES[role], ...overrides };\n const cliArgs = tc.agentCli === \"gemini\" ? [\"--acp\", \"-y\"] : undefined;\n const model = tc.model ?? resolveModel(role);\n\n return new AcpTransport(tc.cliPath, tc.workingDir, {\n agent: cfg.agent ?? undefined,\n model,\n autoReinit: cfg.autoReinit,\n tag: cfg.tag,\n cliArgs,\n });\n}\n\nexport type SubagentRole = \"sleep\" | \"browse\" | \"coding\" | \"task\";\n\nconst SUBAGENT_TO_AGENT: Record<SubagentRole, string> = {\n sleep: \"dreamy\",\n browse: \"browsie\",\n coding: \"coding\",\n task: \"professor\",\n};\n\nconst SUBAGENT_ACP_ROLE: Record<SubagentRole, AgentRole> = {\n sleep: \"dreamy\",\n browse: \"browsie\",\n coding: \"coding\",\n task: \"task\",\n};\n\n/** Unified transport factory for all subagents. Reads from transport.json + models.json. */\n/** @internal Used only by SubagentRuntime. Do not call directly. */\nexport async function createSubagentTransport(role: SubagentRole, registry?: import(\"./transport/model-health-registry.js\").ModelHealthRegistry, currentModel?: string): Promise<{ transport: IKiroTransport; model: string }> {\n const { resolveAgent, getEnvFallback, loadTransport } = await import(\"./transport-config.js\");\n const tc = loadTransport();\n const agentName = SUBAGENT_TO_AGENT[role];\n const resolved = tc ? resolveAgent(agentName, tc) : null;\n\n // Fallback: use professor's config. If that also fails, use .env defaults.\n const profResolved = resolved ?? (tc ? resolveAgent(\"professor\", tc) : null);\n const agent = profResolved ?? (() => {\n const fb = getEnvFallback();\n return { model: fb.model, provider: fb.provider, providerName: fb.providerName, contextWindow: fb.contextWindow, maxOutput: fb.maxOutput, fallbacks: [] };\n })();\n\n if (agent.provider.transport === \"api\") {\n const { DirectApiTransport } = await import(\"./transport/direct-api-transport.js\");\n const { FallbackPolicy } = await import(\"./transport/fallback-policy.js\");\n const apiKey = getEnv().getApiKey(agent.provider.apiKeyEnv ?? \"API_KEY\");\n\n // Use main transport's active model if available, else static config\n const startModel = currentModel ?? agent.model;\n\n // Build per-agent candidate list\n const candidates: Array<{ model: string; endpoint: string; apiKey?: string; maxContext: number }> = [\n { endpoint: agent.provider.endpoint ?? \"http://localhost:11434/v1\", apiKey, model: startModel, maxContext: agent.contextWindow },\n ];\n\n // Add static config model if different from startModel\n if (agent.model !== startModel && !candidates.some(c => c.model === agent.model)) {\n candidates.push({ endpoint: agent.provider.endpoint ?? \"http://localhost:11434/v1\", apiKey, model: agent.model, maxContext: agent.contextWindow });\n }\n\n // Add professor's model as fallback if different and transport-compatible\n const profAgent = tc ? resolveAgent(\"professor\", tc) : null;\n const agentTransport = agent.provider.transport ?? \"api\";\n if (profAgent && profAgent.model !== startModel && !candidates.some(c => c.model === profAgent.model)) {\n const profTransport = profAgent.provider.transport ?? \"api\";\n if (profTransport === agentTransport && profAgent.provider.endpoint) {\n candidates.push({\n endpoint: profAgent.provider.endpoint,\n apiKey: profAgent.provider.apiKeyEnv ? getEnv().getApiKey(profAgent.provider.apiKeyEnv) : apiKey,\n model: profAgent.model,\n maxContext: profAgent.contextWindow,\n });\n }\n }\n\n // Append agent-level cross-provider fallbacks\n for (const fb of agent.fallbacks) {\n if (candidates.some(c => c.model === fb.model)) continue;\n const fbProvider = tc?.providers[fb.provider];\n const fbEndpoint = fbProvider?.endpoint ?? agent.provider.endpoint ?? \"http://localhost:11434/v1\";\n const fbApiKey = fbProvider?.apiKeyEnv ? getEnv().getApiKey(fbProvider.apiKeyEnv) : apiKey;\n candidates.push({ endpoint: fbEndpoint, apiKey: fbApiKey, model: fb.model, maxContext: agent.contextWindow });\n }\n\n // Append fallbackChain entries as last-resort candidates\n const chain = agent.provider.fallbackChain ?? [];\n for (const chainModel of chain) {\n if (!candidates.some(c => c.model === chainModel)) {\n candidates.push({\n endpoint: agent.provider.endpoint ?? \"http://localhost:11434/v1\",\n apiKey, model: chainModel, maxContext: agent.contextWindow,\n });\n }\n }\n\n // Use shared registry if provided, otherwise create isolated one\n const { ModelHealthRegistry } = await import(\"./transport/model-health-registry.js\");\n const policy = new FallbackPolicy(candidates, registry ?? new ModelHealthRegistry());\n\n const transport = new DirectApiTransport({\n endpoint: agent.provider.endpoint ?? \"http://localhost:11434/v1\",\n apiKey, model: startModel,\n maxContext: agent.contextWindow, maxOutput: agent.maxOutput,\n maxTurns: tc?.maxTurns ?? 50,\n }, policy);\n await transport.initialize();\n logInfo(\"subagent\", `${role} transport: DirectAPI ${agent.providerName} (model=${startModel}, ${candidates.length} candidates, shared registry: ${!!registry})`);\n return { transport, model: agent.model };\n }\n\n // ACP path \u2014 try configured model, then fallbackChain on failure\n const { loadAndValidateConfig } = await import(\"./config.js\");\n const config = await loadAndValidateConfig();\n const chain = agent.provider.fallbackChain ?? [];\n const modelsToTry = [agent.model, ...chain.filter(m => m !== agent.model)];\n\n for (let i = 0; i < modelsToTry.length; i++) {\n const model = modelsToTry[i]!;\n const transport = createAgentTransport(SUBAGENT_ACP_ROLE[role], {\n cliPath: agent.provider.cli ?? config.transport.agentCliPath,\n workingDir: config.transport.workingDir,\n agentCli: agent.provider.cli ?? \"kiro-cli\",\n model,\n });\n try {\n await transport.initialize();\n if (i > 0) logWarn(\"subagent\", `${role}: configured model failed, fell back to ${model}`);\n logInfo(\"subagent\", `${role} transport: ACP ${agent.providerName} (model=${model}${i > 0 ? \", fallback\" : \"\"})`);\n return { transport, model };\n } catch (err) {\n if (i < modelsToTry.length - 1) {\n logWarn(\"subagent\", `${role}: model ${model} init failed (${err instanceof Error ? err.message : String(err)}), trying ${modelsToTry[i + 1]}`);\n continue;\n }\n throw err;\n }\n }\n throw new Error(`${role}: all models exhausted (tried ${modelsToTry.join(\", \")})`);\n}\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": ["chain"]
7
7
  }
@@ -1,11 +1,12 @@
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
  logWarn
5
- } from "./chunk-BUUVFUPO.js";
6
+ } from "./chunk-2BY6I4P5.js";
6
7
  import {
7
8
  __esm
8
- } from "./chunk-NWDBD4PA.js";
9
+ } from "./chunk-7K2YZTLD.js";
9
10
 
10
11
  // src/components/config-validator.ts
11
12
  function getPath(obj, path) {
@@ -64,4 +65,4 @@ export {
64
65
  PEERS_SCHEMA,
65
66
  init_config_validator
66
67
  };
67
- //# sourceMappingURL=chunk-2UPU3OW6.js.map
68
+ //# sourceMappingURL=chunk-LYEAHE5V.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/components/config-validator.ts"],
4
4
  "sourcesContent": ["/**\n * config-validator.ts \u2014 lightweight shape validation for JSON config files (#434).\n * No external deps. Logs warnings, never throws. Boot continues with best-effort.\n */\n\nimport { logWarn } from \"./logger.js\";\n\nconst TAG = \"config\";\n\ntype FieldType = \"string\" | \"number\" | \"boolean\" | \"object\" | \"array\";\n\nexport interface FieldSpec {\n path: string;\n type: FieldType;\n required?: boolean;\n}\n\nfunction getPath(obj: unknown, path: string): unknown {\n let current: unknown = obj;\n for (const key of path.split(\".\")) {\n if (current == null || typeof current !== \"object\") return undefined;\n current = (current as Record<string, unknown>)[key];\n }\n return current;\n}\n\nfunction checkType(val: unknown, expected: FieldType): boolean {\n if (expected === \"array\") return Array.isArray(val);\n if (expected === \"object\") return val !== null && typeof val === \"object\" && !Array.isArray(val);\n return typeof val === expected;\n}\n\nexport function validateShape(config: unknown, specs: FieldSpec[], filename: string): string[] {\n const errors: string[] = [];\n for (const spec of specs) {\n const val = getPath(config, spec.path);\n if (val === undefined || val === null) {\n if (spec.required) errors.push(`${spec.path} is required`);\n } else if (!checkType(val, spec.type)) {\n errors.push(`${spec.path} must be ${spec.type}, got ${Array.isArray(val) ? \"array\" : typeof val}`);\n }\n }\n if (errors.length > 0) {\n for (const e of errors) logWarn(TAG, `${filename}: ${e}`);\n }\n return errors;\n}\n\n// \u2500\u2500 Schema specs for each config file \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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\nexport const TRANSPORT_SCHEMA: FieldSpec[] = [\n { path: \"agents\", type: \"object\", required: true },\n { path: \"providers\", type: \"object\", required: true },\n];\n\nexport const MODELS_SCHEMA: FieldSpec[] = [\n // models.json is a Record<string, ModelEntry> \u2014 just check it's an object\n];\n\nexport const IRC_SCHEMA: FieldSpec[] = [\n { path: \"servers\", type: \"array\", required: true },\n];\n\nexport const PEERS_SCHEMA: FieldSpec[] = [\n { path: \"self\", type: \"object\", required: true },\n { path: \"self.name\", type: \"string\", required: true },\n { path: \"peers\", type: \"object\", required: true },\n];\n\nexport const USERS_SCHEMA: FieldSpec[] = [\n { path: \"users\", type: \"array\", required: true },\n];\n"],
5
- "mappings": ";;;;;;;;;;AAiBA,SAAS,QAAQ,KAAc,MAAuB;AACpD,MAAI,UAAmB;AACvB,aAAW,OAAO,KAAK,MAAM,GAAG,GAAG;AACjC,QAAI,WAAW,QAAQ,OAAO,YAAY,SAAU,QAAO;AAC3D,cAAW,QAAoC,GAAG;AAAA,EACpD;AACA,SAAO;AACT;AAEA,SAAS,UAAU,KAAc,UAA8B;AAC7D,MAAI,aAAa,QAAS,QAAO,MAAM,QAAQ,GAAG;AAClD,MAAI,aAAa,SAAU,QAAO,QAAQ,QAAQ,OAAO,QAAQ,YAAY,CAAC,MAAM,QAAQ,GAAG;AAC/F,SAAO,OAAO,QAAQ;AACxB;AAEO,SAAS,cAAc,QAAiB,OAAoB,UAA4B;AAC7F,QAAM,SAAmB,CAAC;AAC1B,aAAW,QAAQ,OAAO;AACxB,UAAM,MAAM,QAAQ,QAAQ,KAAK,IAAI;AACrC,QAAI,QAAQ,UAAa,QAAQ,MAAM;AACrC,UAAI,KAAK,SAAU,QAAO,KAAK,GAAG,KAAK,IAAI,cAAc;AAAA,IAC3D,WAAW,CAAC,UAAU,KAAK,KAAK,IAAI,GAAG;AACrC,aAAO,KAAK,GAAG,KAAK,IAAI,YAAY,KAAK,IAAI,SAAS,MAAM,QAAQ,GAAG,IAAI,UAAU,OAAO,GAAG,EAAE;AAAA,IACnG;AAAA,EACF;AACA,MAAI,OAAO,SAAS,GAAG;AACrB,eAAW,KAAK,OAAQ,SAAQ,KAAK,GAAG,QAAQ,KAAK,CAAC,EAAE;AAAA,EAC1D;AACA,SAAO;AACT;AA9CA,IAOM,KA2CO,kBASA,YAIA;AA/Db;AAAA;AAAA;AAKA;AAEA,IAAM,MAAM;AA2CL,IAAM,mBAAgC;AAAA,MAC3C,EAAE,MAAM,UAAU,MAAM,UAAU,UAAU,KAAK;AAAA,MACjD,EAAE,MAAM,aAAa,MAAM,UAAU,UAAU,KAAK;AAAA,IACtD;AAMO,IAAM,aAA0B;AAAA,MACrC,EAAE,MAAM,WAAW,MAAM,SAAS,UAAU,KAAK;AAAA,IACnD;AAEO,IAAM,eAA4B;AAAA,MACvC,EAAE,MAAM,QAAQ,MAAM,UAAU,UAAU,KAAK;AAAA,MAC/C,EAAE,MAAM,aAAa,MAAM,UAAU,UAAU,KAAK;AAAA,MACpD,EAAE,MAAM,SAAS,MAAM,UAAU,UAAU,KAAK;AAAA,IAClD;AAAA;AAAA;",
5
+ "mappings": ";;;;;;;;;;;AAiBA,SAAS,QAAQ,KAAc,MAAuB;AACpD,MAAI,UAAmB;AACvB,aAAW,OAAO,KAAK,MAAM,GAAG,GAAG;AACjC,QAAI,WAAW,QAAQ,OAAO,YAAY,SAAU,QAAO;AAC3D,cAAW,QAAoC,GAAG;AAAA,EACpD;AACA,SAAO;AACT;AAEA,SAAS,UAAU,KAAc,UAA8B;AAC7D,MAAI,aAAa,QAAS,QAAO,MAAM,QAAQ,GAAG;AAClD,MAAI,aAAa,SAAU,QAAO,QAAQ,QAAQ,OAAO,QAAQ,YAAY,CAAC,MAAM,QAAQ,GAAG;AAC/F,SAAO,OAAO,QAAQ;AACxB;AAEO,SAAS,cAAc,QAAiB,OAAoB,UAA4B;AAC7F,QAAM,SAAmB,CAAC;AAC1B,aAAW,QAAQ,OAAO;AACxB,UAAM,MAAM,QAAQ,QAAQ,KAAK,IAAI;AACrC,QAAI,QAAQ,UAAa,QAAQ,MAAM;AACrC,UAAI,KAAK,SAAU,QAAO,KAAK,GAAG,KAAK,IAAI,cAAc;AAAA,IAC3D,WAAW,CAAC,UAAU,KAAK,KAAK,IAAI,GAAG;AACrC,aAAO,KAAK,GAAG,KAAK,IAAI,YAAY,KAAK,IAAI,SAAS,MAAM,QAAQ,GAAG,IAAI,UAAU,OAAO,GAAG,EAAE;AAAA,IACnG;AAAA,EACF;AACA,MAAI,OAAO,SAAS,GAAG;AACrB,eAAW,KAAK,OAAQ,SAAQ,KAAK,GAAG,QAAQ,KAAK,CAAC,EAAE;AAAA,EAC1D;AACA,SAAO;AACT;AA9CA,IAOM,KA2CO,kBASA,YAIA;AA/Db;AAAA;AAAA;AAKA;AAEA,IAAM,MAAM;AA2CL,IAAM,mBAAgC;AAAA,MAC3C,EAAE,MAAM,UAAU,MAAM,UAAU,UAAU,KAAK;AAAA,MACjD,EAAE,MAAM,aAAa,MAAM,UAAU,UAAU,KAAK;AAAA,IACtD;AAMO,IAAM,aAA0B;AAAA,MACrC,EAAE,MAAM,WAAW,MAAM,SAAS,UAAU,KAAK;AAAA,IACnD;AAEO,IAAM,eAA4B;AAAA,MACvC,EAAE,MAAM,QAAQ,MAAM,UAAU,UAAU,KAAK;AAAA,MAC/C,EAAE,MAAM,aAAa,MAAM,UAAU,UAAU,KAAK;AAAA,MACpD,EAAE,MAAM,SAAS,MAAM,UAAU,UAAU,KAAK;AAAA,IAClD;AAAA;AAAA;",
6
6
  "names": []
7
7
  }
@@ -1,22 +1,23 @@
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_log_and_swallow,
4
5
  logAndSwallow
5
- } from "./chunk-FMWKEPM7.js";
6
+ } from "./chunk-EX2SRTUE.js";
6
7
  import {
7
8
  getEnv,
8
9
  init_env_schema
9
- } from "./chunk-JCJS4ZIB.js";
10
+ } from "./chunk-AQVOAQQI.js";
10
11
  import {
11
12
  init_logger,
12
13
  logDebug,
13
14
  logInfo,
14
15
  logWarn
15
- } from "./chunk-BUUVFUPO.js";
16
+ } from "./chunk-2BY6I4P5.js";
16
17
  import {
17
18
  abtarsHome,
18
19
  init_paths
19
- } from "./chunk-X76UX47U.js";
20
+ } from "./chunk-MJ6PHMOK.js";
20
21
 
21
22
  // src/capabilities/browser/browser-manager.ts
22
23
  init_log_and_swallow();
@@ -360,7 +361,7 @@ var BrowserTool = class {
360
361
  if (getEnv().ssrfCheck) {
361
362
  try {
362
363
  const { hostname } = new URL(url);
363
- const { isPrivateHost } = await import("./ssrf-guard-FZCBYIVW.js");
364
+ const { isPrivateHost } = await import("./ssrf-guard-E2KBBC5E.js");
364
365
  if (await isPrivateHost(hostname)) {
365
366
  return { success: false, error: `Blocked: "${hostname}" resolves to a private/internal IP address` };
366
367
  }
@@ -755,4 +756,4 @@ export {
755
756
  BrowserIpcServer,
756
757
  DomainAllowlist
757
758
  };
758
- //# sourceMappingURL=chunk-3B7BBE4F.js.map
759
+ //# sourceMappingURL=chunk-MCGEXAG5.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/capabilities/browser/browser-manager.ts", "../src/capabilities/browser/browser-tool.ts", "../src/components/content-extractor.ts", "../src/capabilities/browser/browser-ipc-server.ts", "../src/capabilities/browser/domain-allowlist.ts"],
4
4
  "sourcesContent": ["import { logAndSwallow } from \"../../components/log-and-swallow.js\";\nimport { logInfo, logWarn } from \"../../components/logger.js\";\nimport { getEnv } from \"../../components/env-schema.js\";\nimport { chromium } from \"patchright\";\nimport type { Browser, BrowserContext, Page } from \"patchright\";\nimport { execFileSync } from \"node:child_process\";\nimport type { BrowserSession } from \"../../types/browser.js\";\n\nconst TAG = \"browser_mgr\";\n\n// ---------------------------------------------------------------------------\n// Environment variable parsing\n\nfunction readPositiveInt(key: string, fallback: number): number {\n const raw = process.env[key];\n if (!raw) return fallback;\n const n = Number(raw);\n return Number.isFinite(n) && Number.isInteger(n) && n > 0 ? n : fallback;\n}\n// ---------------------------------------------------------------------------\n\n\nconst DEFAULTS = {\n BROWSER_SESSION_TIMEOUT_MS: 300_000,\n BROWSER_MAX_SESSIONS: 3,\n WEB_SCRAPE_USER_AGENT: \"Mozilla/5.0 (compatible; Abtars/1.0)\",\n} as const;\n\nexport type BrowserEngine = \"patchright\";\n\nexport interface BrowserConfig {\n sessionTimeoutMs: number;\n maxSessions: number;\n userAgent: string;\n engine: BrowserEngine;\n}\n\n/**\n * Read and validate browser-related env vars, returning resolved config.\n * Invalid values trigger a console.warn and fall back to defaults.\n * Exported for testability (Property 16).\n */\nexport function parseBrowserConfig(): BrowserConfig {\n const sessionTimeoutMs = readPositiveInt(\n \"BROWSER_SESSION_TIMEOUT_MS\",\n DEFAULTS.BROWSER_SESSION_TIMEOUT_MS,\n );\n const maxSessions = readPositiveInt(\n \"BROWSER_MAX_SESSIONS\",\n DEFAULTS.BROWSER_MAX_SESSIONS,\n );\n // Intentional: raw process.env \u2014 tests mutate this at runtime, getEnv() cache won't reflect changes\n const userAgent = process.env[\"WEB_SCRAPE_USER_AGENT\"]?.trim() || DEFAULTS.WEB_SCRAPE_USER_AGENT;\n\n const engine = \"patchright\" as BrowserEngine;\n\n return { sessionTimeoutMs, maxSessions, userAgent, engine };\n}\n\n// ---------------------------------------------------------------------------\n// BrowserManager singleton\n// ---------------------------------------------------------------------------\n\nexport class BrowserManager {\n private static _instance: BrowserManager | null = null;\n\n private _browser: Browser | null = null;\n private _launching: Promise<Browser> | null = null;\n private readonly _sessions = new Map<string, BrowserSession>();\n private _idleTimer: ReturnType<typeof setInterval> | null = null;\n private readonly _config: BrowserConfig;\n private _lastActivityAt = 0;\n private readonly _containerIdleStopMs: number;\n\n constructor(config?: BrowserConfig) {\n this._config = config ?? parseBrowserConfig();\n this._containerIdleStopMs = getEnv().browserIdleStopMin * 60_000;\n this._startIdleCheck();\n }\n\n /** Get (or create) the singleton instance. */\n static getInstance(): BrowserManager {\n if (!BrowserManager._instance) {\n BrowserManager._instance = new BrowserManager();\n }\n return BrowserManager._instance;\n }\n\n /** Reset singleton \u2014 primarily for testing. */\n static resetInstance(): void {\n BrowserManager._instance = null;\n }\n\n // -------------------------------------------------------------------------\n // Browser lifecycle\n // -------------------------------------------------------------------------\n\n /** Lazily launch or return the existing browser instance. */\n private async _ensureBrowser(): Promise<Browser> {\n if (this._browser?.isConnected()) return this._browser;\n\n // Avoid duplicate launches if multiple callers race.\n if (this._launching) return this._launching;\n\n this._launching = this._launchPatchright().then((browser) => {\n this._browser = browser;\n this._launching = null;\n browser.on(\"disconnected\", () => {\n this._browser = null;\n this._sessions.clear();\n });\n return browser;\n }).catch((err) => {\n this._launching = null;\n throw err;\n });\n\n return this._launching;\n }\n\n private async _launchPatchright(): Promise<Browser> {\n const headed = getEnv().browserHeaded;\n const args = headed ? [] : [\"--headless=new\"];\n if (getEnv().browserNoSandbox) args.push(\"--no-sandbox\");\n return chromium.launch({\n headless: !headed,\n channel: getEnv().browserChannel,\n args,\n });\n }\n\n // -------------------------------------------------------------------------\n // Named sessions\n // -------------------------------------------------------------------------\n\n /**\n * Get or create a named browser session.\n * Reusing an existing session updates `lastActivityAt`.\n */\n async getSession(sessionId: string): Promise<BrowserSession> {\n const existing = this._sessions.get(sessionId);\n if (existing) {\n existing.lastActivityAt = Date.now();\n return existing;\n }\n\n // Enforce max sessions.\n if (this._sessions.size >= this._config.maxSessions) {\n const activeIds = [...this._sessions.keys()].join(\", \");\n throw new Error(\n `Maximum concurrent sessions (${this._config.maxSessions}) reached. ` +\n `Close an existing session first. Active sessions: ${activeIds}`,\n );\n }\n\n const browser = await this._ensureBrowser();\n const context = await browser.newContext({\n userAgent: this._config.userAgent,\n });\n const page = await context.newPage();\n const now = Date.now();\n\n const session: BrowserSession = {\n sessionId,\n context,\n page,\n createdAt: now,\n lastActivityAt: now,\n };\n\n this._sessions.set(sessionId, session);\n this._lastActivityAt = now;\n return session;\n }\n\n /** Close a named session and release its resources. */\n async closeSession(sessionId: string): Promise<void> {\n const session = this._sessions.get(sessionId);\n if (!session) return;\n\n this._sessions.delete(sessionId);\n try {\n await session.context.close();\n } catch (err) {\n logAndSwallow(TAG, \"closeSession context.close\", err);\n }\n }\n\n // -------------------------------------------------------------------------\n // One-off contexts (ingestion scrapes)\n // -------------------------------------------------------------------------\n\n /** Create a disposable context + page for ingestion. No session tracking. */\n async createOneOffContext(): Promise<{ context: BrowserContext; page: Page }> {\n const browser = await this._ensureBrowser();\n const context = await browser.newContext({\n userAgent: this._config.userAgent,\n });\n const page = await context.newPage();\n return { context, page };\n }\n\n /** Close a one-off context after use. */\n async closeContext(context: BrowserContext): Promise<void> {\n try {\n await context.close();\n } catch (err) {\n logAndSwallow(TAG, \"closeContext\", err);\n }\n }\n\n // -------------------------------------------------------------------------\n // Shutdown & cleanup\n // -------------------------------------------------------------------------\n\n /** Shut down everything: all sessions, the browser, cleanup timers. */\n async shutdown(): Promise<void> {\n this._stopIdleCheck();\n\n // Close all named sessions.\n const closePromises = [...this._sessions.keys()].map((id) =>\n this.closeSession(id),\n );\n await Promise.all(closePromises);\n\n // Close the browser itself.\n if (this._browser) {\n try {\n await this._browser.close();\n } catch (err) {\n logAndSwallow(TAG, \"browser.close shutdown\", err);\n }\n this._browser = null;\n }\n }\n\n // -------------------------------------------------------------------------\n // Idle-check interval\n // -------------------------------------------------------------------------\n\n private _startIdleCheck(): void {\n // Check every 30 seconds for idle sessions.\n this._idleTimer = setInterval(() => {\n void this._sweepIdleSessions();\n }, 30_000);\n\n // Don't prevent Node from exiting.\n if (this._idleTimer && typeof this._idleTimer === \"object\" && \"unref\" in this._idleTimer) {\n this._idleTimer.unref();\n }\n }\n\n private _stopIdleCheck(): void {\n if (this._idleTimer) {\n clearInterval(this._idleTimer);\n this._idleTimer = null;\n }\n }\n\n private async _sweepIdleSessions(): Promise<void> {\n const now = Date.now();\n const expired: string[] = [];\n\n for (const [id, session] of this._sessions) {\n if (now - session.lastActivityAt > this._config.sessionTimeoutMs) {\n expired.push(id);\n }\n }\n\n for (const id of expired) {\n logWarn(\"browser\", `Closing idle session \"${id}\".`);\n await this.closeSession(id);\n }\n\n // Stop container if no sessions and idle long enough\n if (this._sessions.size === 0 && this._browser && this._lastActivityAt > 0 && now - this._lastActivityAt > this._containerIdleStopMs) {\n logInfo(\"browser\", `No sessions for ${Math.round((now - this._lastActivityAt) / 60_000)}min \u2014 stopping container.`);\n await this.shutdown();\n this._stopContainer();\n }\n }\n\n private _stopContainer(): void {\n try {\n execFileSync(\"docker\", [\"stop\", \"abtars-browser\"], { stdio: \"pipe\", timeout: 10_000 });\n } catch (err) { logAndSwallow(\"browser_manager\", \"op\", err); }\n }\n\n // -------------------------------------------------------------------------\n // Accessors\n // -------------------------------------------------------------------------\n\n /** Number of active named sessions. */\n get activeSessionCount(): number {\n return this._sessions.size;\n }\n\n /** Exposed for testing \u2014 the resolved config. */\n get config(): BrowserConfig {\n return this._config;\n }\n}\n", "import { logDebug } from \"../../components/logger.js\";\nimport { logAndSwallow } from \"../../components/log-and-swallow.js\";\nimport { getEnv } from \"../../components/env-schema.js\";\n\nconst TAG = \"browser_tool\";\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\nimport { readFileSync } from \"node:fs\";\nimport type { BrowserAction, BrowserToolResult, PageElement } from \"../../types/browser.js\";\nimport type { BrowserManager } from \"./browser-manager.js\";\nimport type { DomainAllowlist } from \"./domain-allowlist.js\";\nimport { extractTextFromPage } from \"../../components/content-extractor.js\";\n\nconst LOG_PREFIX = \"[browser-tool]\";\n\n/** Max characters returned by extract_text before truncation. */\nconst TEXT_TRUNCATION_LIMIT = 4000;\n\n/** Max interactive elements returned by get_page_info. */\nconst MAX_PAGE_ELEMENTS = 50;\n\n/** Read navigation timeout from env, default 30 000 ms. */\nfunction getNavigationTimeout(): number {\n const raw = String(getEnv().webScrapePlaywrightTimeoutMs);\n if (raw === undefined || raw === \"\") return 30_000;\n const n = Number(raw);\n if (!Number.isFinite(n) || n <= 0) return 30_000;\n return n;\n}\n\n/**\n * Implements the seven browser actions (navigate, click, fill, extract_text,\n * screenshot, get_page_info, close_session). Pure action dispatch \u2014 receives\n * parsed args, calls BrowserManager + Playwright APIs, returns structured JSON.\n */\nexport class BrowserTool {\n private readonly _browserManager: BrowserManager;\n private readonly _domainAllowlist: DomainAllowlist;\n\n constructor(browserManager: BrowserManager, domainAllowlist: DomainAllowlist) {\n this._browserManager = browserManager;\n this._domainAllowlist = domainAllowlist;\n }\n\n /** Execute a browser action and return a JSON-serializable result. */\n async execute(action: BrowserAction): Promise<BrowserToolResult> {\n try {\n switch (action.action) {\n case \"navigate\":\n return await this._handleNavigate(action);\n case \"click\":\n return await this._handleClick(action);\n case \"fill\":\n return await this._handleFill(action);\n case \"extract_text\":\n return await this._handleExtractText(action);\n case \"screenshot\":\n return await this._handleScreenshot(action);\n case \"get_page_info\":\n return await this._handleGetPageInfo(action);\n case \"close_session\":\n return await this._handleCloseSession(action);\n case \"set_cookie\":\n return await this._handleSetCookie(action);\n default:\n return { success: false, error: `Unknown action: ${String((action as BrowserAction).action)}` };\n }\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n return { success: false, error: message };\n }\n }\n\n // -------------------------------------------------------------------------\n // navigate\n // -------------------------------------------------------------------------\n\n private async _handleNavigate(action: BrowserAction): Promise<BrowserToolResult> {\n const url = action.url;\n if (!url) {\n return { success: false, error: \"navigate action requires a url\" };\n }\n\n // Domain allowlist check\n if (!this._domainAllowlist.isAllowed(url)) {\n let hostname: string;\n try {\n hostname = new URL(url).hostname;\n } catch (err) {\n logAndSwallow(TAG, \"parse URL hostname\", err);\n hostname = url;\n }\n return {\n success: false,\n error: `Domain \"${hostname}\" is not in the allowed list. Allowed patterns: ${this._domainAllowlist.patterns.join(\", \")}`,\n };\n }\n\n // SSRF protection: reject private/internal IPs\n if (getEnv().ssrfCheck) {\n try {\n const { hostname } = new URL(url);\n const { isPrivateHost } = await import(\"./ssrf-guard.js\");\n if (await isPrivateHost(hostname)) {\n return { success: false, error: `Blocked: \"${hostname}\" resolves to a private/internal IP address` };\n }\n } catch (err) {\n logAndSwallow(TAG, \"SSRF check\", err);\n return { success: false, error: \"Invalid URL\" };\n }\n }\n\n const session = await this._browserManager.getSession(action.sessionId);\n const timeout = getNavigationTimeout();\n\n logDebug(\"browser\", `${LOG_PREFIX} navigate session=\"${action.sessionId}\" url=\"${url}\"`);\n\n try {\n const response = await session.page.goto(url, {\n waitUntil: \"domcontentloaded\",\n timeout,\n });\n\n const title = await session.page.title();\n const finalUrl = session.page.url();\n const status = response?.status();\n\n return { success: true, title, url: finalUrl, status };\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n return { success: false, error: `Navigation failed for ${url}: ${message}` };\n }\n }\n\n // -------------------------------------------------------------------------\n // click\n // -------------------------------------------------------------------------\n\n private async _handleClick(action: BrowserAction): Promise<BrowserToolResult> {\n const selector = action.selector;\n if (!selector) {\n return { success: false, error: \"click action requires a selector\" };\n }\n\n const session = await this._browserManager.getSession(action.sessionId);\n\n logDebug(\"browser\", `${LOG_PREFIX} click session=\"${action.sessionId}\" selector=\"${selector}\"`);\n\n try {\n // Use Promise.race to detect if click triggers navigation\n const navigationPromise = session.page\n .waitForNavigation({ waitUntil: \"domcontentloaded\", timeout: 5000 })\n .catch(err => { logAndSwallow(TAG, \"waitForNavigation click\", err); return null; });\n\n await session.page.click(selector);\n\n const navResult = await navigationPromise;\n\n if (navResult) {\n const title = await session.page.title();\n const url = session.page.url();\n return { success: true, navigated: true, title, url };\n }\n\n return { success: true, navigated: false };\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n if (message.includes(\"waiting for selector\") || message.includes(\"No element\")) {\n return { success: false, error: `Selector not found: \"${selector}\"` };\n }\n return { success: false, error: `Click failed for selector \"${selector}\": ${message}` };\n }\n }\n\n // -------------------------------------------------------------------------\n // fill\n // -------------------------------------------------------------------------\n\n private async _handleFill(action: BrowserAction): Promise<BrowserToolResult> {\n const selector = action.selector;\n const value = action.value;\n if (!selector) {\n return { success: false, error: \"fill action requires a selector\" };\n }\n if (value === undefined) {\n return { success: false, error: \"fill action requires a value\" };\n }\n\n const session = await this._browserManager.getSession(action.sessionId);\n\n // Check if the target is a password field to mask in logs\n let isPassword = false;\n try {\n isPassword = await session.page.evaluate(\n `(sel) => { const el = document.querySelector(sel); return el instanceof HTMLInputElement && el.type === \"password\"; }`,\n selector,\n ) as boolean;\n } catch (err) {\n logAndSwallow(TAG, \"evaluate isPassword\", err);\n }\n\n const logValue = isPassword ? \"***\" : value;\n logDebug(\"browser\",\n `${LOG_PREFIX} fill session=\"${action.sessionId}\" selector=\"${selector}\" value=\"${logValue}\"`,\n );\n\n try {\n await session.page.fill(selector, value);\n return { success: true };\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n if (message.includes(\"waiting for selector\") || message.includes(\"No element\")) {\n return { success: false, error: `Selector not found: \"${selector}\"` };\n }\n return { success: false, error: `Fill failed for selector \"${selector}\": ${message}` };\n }\n }\n\n // -------------------------------------------------------------------------\n // extract_text\n // -------------------------------------------------------------------------\n\n private async _handleExtractText(action: BrowserAction): Promise<BrowserToolResult> {\n const session = await this._browserManager.getSession(action.sessionId);\n\n logDebug(\"browser\",\n `${LOG_PREFIX} extract_text session=\"${action.sessionId}\" selector=\"${action.selector ?? \"(full page)\"}\"`,\n );\n\n try {\n const text = await extractTextFromPage(session.page, action.selector ?? undefined);\n\n if (!text || text.trim().length === 0) {\n return { success: false, error: \"No text content found on the page\" };\n }\n\n const truncated = text.length > TEXT_TRUNCATION_LIMIT;\n const resultText = truncated ? text.slice(0, TEXT_TRUNCATION_LIMIT) : text;\n\n return { success: true, text: resultText, truncated };\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n if (message.includes(\"waiting for selector\") || message.includes(\"No element\")) {\n return { success: false, error: `Selector not found: \"${action.selector}\"` };\n }\n return { success: false, error: `Text extraction failed: ${message}` };\n }\n }\n\n // -------------------------------------------------------------------------\n // screenshot\n // -------------------------------------------------------------------------\n\n private async _handleScreenshot(action: BrowserAction): Promise<BrowserToolResult> {\n const session = await this._browserManager.getSession(action.sessionId);\n\n const tmpFile = path.join(\n os.tmpdir(),\n `abtars-screenshot-${Date.now()}.png`,\n );\n\n logDebug(\"browser\",\n `${LOG_PREFIX} screenshot session=\"${action.sessionId}\" fullPage=${action.fullPage ?? false} path=\"${tmpFile}\"`,\n );\n\n await session.page.screenshot({\n fullPage: action.fullPage ?? false,\n path: tmpFile,\n });\n\n return { success: true, filePath: tmpFile };\n }\n\n // -------------------------------------------------------------------------\n // get_page_info\n // -------------------------------------------------------------------------\n\n private async _handleGetPageInfo(action: BrowserAction): Promise<BrowserToolResult> {\n const session = await this._browserManager.getSession(action.sessionId);\n\n logDebug(\"browser\", `${LOG_PREFIX} get_page_info session=\"${action.sessionId}\"`);\n\n const title = await session.page.title();\n const url = session.page.url();\n\n const elements = await session.page.evaluate(`(maxElements) => {\n const selectors = \"a, button, input, select, textarea, [role='button'], [role='link']\";\n const nodes = document.querySelectorAll(selectors);\n const results = [];\n\n for (let i = 0; i < nodes.length && results.length < maxElements; i++) {\n const el = nodes[i];\n if (!el || !(el instanceof HTMLElement)) continue;\n\n const style = window.getComputedStyle(el);\n if (style.display === \"none\" || style.visibility === \"hidden\") continue;\n\n let selector = el.tagName.toLowerCase();\n if (el.id) {\n selector = \"#\" + el.id;\n } else if (el.className && typeof el.className === \"string\" && el.className.trim()) {\n const cls = el.className.trim().split(/\\\\s+/).slice(0, 2).join(\".\");\n selector = el.tagName.toLowerCase() + \".\" + cls;\n } else {\n const parent = el.parentElement;\n if (parent) {\n const siblings = parent.querySelectorAll(\":scope > \" + el.tagName.toLowerCase());\n if (siblings.length > 1) {\n const idx = Array.from(siblings).indexOf(el) + 1;\n selector = el.tagName.toLowerCase() + \":nth-of-type(\" + idx + \")\";\n }\n }\n }\n\n const entry = { tag: el.tagName.toLowerCase(), selector };\n const text = (el.textContent || \"\").trim().slice(0, 100);\n if (text) entry.text = text;\n\n if (el instanceof HTMLInputElement || el instanceof HTMLSelectElement || el instanceof HTMLTextAreaElement) {\n if (el instanceof HTMLInputElement && el.type) entry.type = el.type;\n if (el.name) entry.name = el.name;\n if (el instanceof HTMLInputElement && el.placeholder) entry.placeholder = el.placeholder;\n if (el instanceof HTMLTextAreaElement && el.placeholder) entry.placeholder = el.placeholder;\n }\n\n if (el instanceof HTMLAnchorElement && el.href) {\n entry.href = el.href;\n }\n\n results.push(entry);\n }\n\n return results;\n }`, MAX_PAGE_ELEMENTS) as PageElement[];\n\n return {\n success: true,\n url,\n title,\n elements,\n };\n }\n\n // -------------------------------------------------------------------------\n // close_session\n // -------------------------------------------------------------------------\n\n private async _handleCloseSession(action: BrowserAction): Promise<BrowserToolResult> {\n logDebug(\"browser\", `${LOG_PREFIX} close_session session=\"${action.sessionId}\"`);\n await this._browserManager.closeSession(action.sessionId);\n return { success: true };\n }\n\n // -------------------------------------------------------------------------\n // set_cookie\n // -------------------------------------------------------------------------\n\n private async _handleSetCookie(action: BrowserAction): Promise<BrowserToolResult> {\n const file = action.cookieFile;\n if (!file) return { success: false, error: \"set_cookie requires --cookie-file\" };\n\n // Only allow files under /run/browser/cookies (mounted read-only)\n const COOKIES_DIR = \"/run/browser/cookies\";\n const resolved = path.resolve(file);\n if (!resolved.startsWith(COOKIES_DIR)) {\n return { success: false, error: `cookie file must be under ${COOKIES_DIR}` };\n }\n\n const raw = readFileSync(resolved, \"utf-8\");\n const json = JSON.parse(raw) as Record<string, string>;\n\n const session = await this._browserManager.getSession(action.sessionId);\n const url = action.url ?? session.page.url();\n let domain: string;\n try { domain = new URL(url).hostname; } catch (err) { logAndSwallow(TAG, \"parse cookie domain\", err); domain = \"\"; }\n\n const cookies = Object.entries(json).map(([name, value]) => ({\n name, value: String(value), domain, path: \"/\",\n }));\n\n await session.context.addCookies(cookies);\n logDebug(\"browser\", `${LOG_PREFIX} set_cookie session=\"${action.sessionId}\" loaded ${cookies.length} cookies for ${domain}`);\n return { success: true, text: `Loaded ${cookies.length} cookies for ${domain}` };\n }}\n", "import type { Page } from \"patchright\";\n\n/**\n * Strips non-content HTML elements and returns clean plain text.\n * Shared by both the agent tool's extract_text action and the ingestion WebScraper.\n *\n * Uses regex-based approach for raw HTML strings (no DOM available in Node.js).\n * Uses page.evaluate() for live Playwright pages (DOM APIs available in browser).\n */\n\n/** Tags whose entire content (including children) should be removed. */\nconst STRIPPED_TAGS = [\"script\", \"style\", \"nav\", \"footer\", \"header\", \"aside\"];\n\n/** Build a regex that matches an opening tag through its closing tag (non-greedy, case-insensitive). */\nfunction buildTagStripRegex(tag: string): RegExp {\n return new RegExp(`<${tag}[^>]*>[\\\\s\\\\S]*?<\\\\/${tag}>`, \"gi\");\n}\n\n/** Regex to match elements with role=\"navigation\" or role=\"banner\". */\nconst ROLE_STRIP_REGEX =\n /<[a-z][a-z0-9]*\\s[^>]*?\\brole\\s*=\\s*[\"'](navigation|banner)[\"'][^>]*>[\\s\\S]*?<\\/[a-z][a-z0-9]*>/gi;\n\n/** Regex to match any remaining HTML tag. */\nconst HTML_TAG_REGEX = /<[^>]+>/g;\n\n/** Common HTML entities to decode. */\nconst ENTITY_MAP: Record<string, string> = {\n \"&amp;\": \"&\",\n \"&lt;\": \"<\",\n \"&gt;\": \">\",\n \"&quot;\": '\"',\n \"&#39;\": \"'\",\n \"&nbsp;\": \" \",\n};\n\nconst ENTITY_REGEX = /&amp;|&lt;|&gt;|&quot;|&#39;|&nbsp;/g;\n\n/**\n * Parse raw HTML string and return clean text.\n * Removes non-content elements, strips tags, decodes entities, collapses whitespace.\n * Returns empty string on empty/whitespace-only input.\n */\nexport function extractTextFromHtml(html: string): string {\n if (!html || !html.trim()) return \"\";\n\n let text = html;\n\n // 1. Remove stripped tag elements and their content\n for (const tag of STRIPPED_TAGS) {\n text = text.replace(buildTagStripRegex(tag), \"\");\n }\n\n // 2. Remove elements with role=\"navigation\" or role=\"banner\"\n text = text.replace(ROLE_STRIP_REGEX, \"\");\n\n // 3. Strip all remaining HTML tags\n text = text.replace(HTML_TAG_REGEX, \" \");\n\n // 4. Decode common HTML entities\n text = text.replace(ENTITY_REGEX, (match) => ENTITY_MAP[match] ?? match);\n\n // 5. Collapse consecutive whitespace into single spaces/newlines\n // First normalize newlines, then collapse blank lines, then collapse spaces\n text = text.replace(/\\r\\n/g, \"\\n\");\n text = text.replace(/[ \\t]+/g, \" \");\n text = text.replace(/\\n[ ]+/g, \"\\n\");\n text = text.replace(/[ ]+\\n/g, \"\\n\");\n text = text.replace(/\\n{2,}/g, \"\\n\");\n\n return text.trim();\n}\n\n/**\n * JavaScript source executed inside the browser context via page.evaluate().\n * Uses DOM APIs (document, HTMLElement, etc.) which are only available at runtime.\n * Accepts a single argument: the CSS selector string or null for full-page extraction.\n */\nconst BROWSER_EXTRACT_FN = `\n(sel) => {\n const TAGS = [\"script\", \"style\", \"nav\", \"footer\", \"header\", \"aside\"];\n const ROLES = [\"navigation\", \"banner\"];\n\n const root = sel ? document.querySelector(sel) : document.body;\n if (!root) return \"\";\n\n const clone = root.cloneNode(true);\n\n for (const tag of TAGS) {\n for (const el of clone.querySelectorAll(tag)) el.remove();\n }\n for (const role of ROLES) {\n for (const el of clone.querySelectorAll('[role=\"' + role + '\"]')) el.remove();\n }\n\n let text = clone.textContent || \"\";\n text = text.replace(/\\\\u00a0/g, \" \");\n text = text.replace(/[ \\\\t]+/g, \" \");\n text = text.replace(/\\\\n[ ]+/g, \"\\\\n\");\n text = text.replace(/[ ]+\\\\n/g, \"\\\\n\");\n text = text.replace(/\\\\n{2,}/g, \"\\\\n\");\n return text.trim();\n}\n`;\n\n/**\n * Extract clean text from a live Playwright Page (runs in browser context).\n * Optionally scoped to a CSS selector. Returns empty string on failure.\n */\nexport async function extractTextFromPage(\n page: Page,\n selector?: string,\n): Promise<string> {\n const text = await page.evaluate<string, string | null>(\n new Function(\"sel\", `return (${BROWSER_EXTRACT_FN})(sel)`) as (sel: string | null) => string,\n selector ?? null,\n );\n\n return text ?? \"\";\n}\n", "import { logDebug } from \"../../components/logger.js\";\nimport { logAndSwallow } from \"../../components/log-and-swallow.js\";\nimport * as net from \"node:net\";\n\nconst TAG = \"browser_ipc\";\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { BrowserAction, BrowserToolResult } from \"../../types/browser.js\";\nimport type { BrowserTool } from \"./browser-tool.js\";\nimport { abtarsHome } from \"../../paths.js\";\n\nconst LOG_PREFIX = \"[browser-ipc]\";\n\n/** Default socket path: ~/.abtars/browser.sock */\nexport function getDefaultSocketPath(): string {\n return path.join(abtarsHome(), \"browser-socket\", \"browser.sock\");\n}\n\n/**\n * Unix domain socket server that routes BrowserAction requests\n * to a BrowserTool instance, enabling session persistence across\n * CLI invocations.\n *\n * Protocol: client connects \u2192 sends one JSON line \u2192 receives one JSON line \u2192 connection closes.\n */\nexport class BrowserIpcServer {\n private _server: net.Server | null = null;\n private readonly _tool: BrowserTool;\n private readonly _socketPath: string;\n\n constructor(tool: BrowserTool, socketPath?: string) {\n this._tool = tool;\n this._socketPath = socketPath ?? getDefaultSocketPath();\n }\n\n get socketPath(): string {\n return this._socketPath;\n }\n\n get isListening(): boolean {\n return this._server?.listening ?? false;\n }\n\n /** Start listening. Removes stale socket file if present. */\n async start(): Promise<void> {\n // Ensure parent directory exists.\n const dir = path.dirname(this._socketPath);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n\n // Remove stale socket file from a previous run.\n this._removeSocketFile();\n\n return new Promise<void>((resolve, reject) => {\n const server = net.createServer({ allowHalfOpen: true }, (conn) => {\n this._handleConnection(conn);\n });\n\n server.on(\"error\", (err) => {\n console.error(`${LOG_PREFIX} Server error: ${err.message}`);\n reject(err);\n });\n\n server.listen(this._socketPath, () => {\n this._server = server;\n logDebug(\"browser\", `${LOG_PREFIX} Listening on ${this._socketPath}`);\n resolve();\n });\n });\n }\n\n /** Stop the server and remove the socket file. */\n async shutdown(): Promise<void> {\n return new Promise<void>((resolve) => {\n if (!this._server) {\n this._removeSocketFile();\n resolve();\n return;\n }\n\n this._server.close(() => {\n this._server = null;\n this._removeSocketFile();\n logDebug(\"browser\", `${LOG_PREFIX} Shut down`);\n resolve();\n });\n });\n }\n\n // \u2500\u2500 Connection handler \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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 private _handleConnection(conn: net.Socket): void {\n let data = \"\";\n\n conn.on(\"data\", (chunk) => {\n data += chunk.toString();\n });\n\n conn.on(\"end\", () => {\n void this._processRequest(data, conn);\n });\n\n conn.on(\"error\", (err) => {\n console.error(`${LOG_PREFIX} Connection error: ${err.message}`);\n });\n }\n\n private async _processRequest(\n raw: string,\n conn: net.Socket,\n ): Promise<void> {\n let result: BrowserToolResult;\n\n try {\n const action = JSON.parse(raw.trim()) as BrowserAction;\n result = await this._tool.execute(action);\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n result = { success: false, error: `IPC parse/execute error: ${message}` };\n }\n\n conn.end(JSON.stringify(result) + \"\\n\");\n }\n\n // \u2500\u2500 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\n private _removeSocketFile(): void {\n try {\n if (fs.existsSync(this._socketPath)) {\n fs.unlinkSync(this._socketPath);\n }\n } catch (err) {\n logAndSwallow(TAG, \"unlink socket\", err);\n }\n }\n}\n", "import { getEnv } from \"../../components/env-schema.js\";\nimport { logAndSwallow } from \"../../components/log-and-swallow.js\";\n\nconst TAG = \"domain_allowlist\";\n/**\n * Validates URLs against a configurable allowlist of domain patterns.\n * Prevents the agent from navigating to arbitrary domains.\n *\n * Pattern matching:\n * - `*.example.com` \u2192 matches any subdomain of example.com\n * - `example.com` \u2192 exact match only\n * - Empty list \u2192 open mode (all domains allowed)\n */\nexport class DomainAllowlist {\n private readonly _patterns: string[];\n\n constructor(patterns: string[]) {\n this._patterns = patterns\n .map((p) => p.trim().toLowerCase())\n .filter((p) => p.length > 0);\n }\n\n /** Check if a URL's hostname matches the allowlist. Returns true if allowed. */\n isAllowed(url: string): boolean {\n if (this._patterns.length === 0) return true;\n\n let hostname: string;\n try {\n hostname = new URL(url).hostname.toLowerCase();\n } catch (err) {\n logAndSwallow(TAG, \"parse URL\", err);\n return false;\n }\n\n return this._patterns.some((pattern) => {\n if (pattern.startsWith(\"*.\")) {\n const suffix = pattern.slice(2); // e.g. \"example.com\"\n return hostname === suffix || hostname.endsWith(`.${suffix}`);\n }\n return hostname === pattern;\n });\n }\n\n /** Get the list of configured patterns (for error messages). */\n get patterns(): string[] {\n return [...this._patterns];\n }\n\n /** True if no patterns configured (open mode). */\n get isOpenMode(): boolean {\n return this._patterns.length === 0;\n }\n\n /** Create a DomainAllowlist from the BROWSER_ALLOWED_DOMAINS env var. */\n static fromEnv(): DomainAllowlist {\n const raw = getEnv().browserAllowedDomains;\n const patterns = raw.split(\",\").map((s) => s.trim()).filter((s) => s.length > 0);\n return new DomainAllowlist(patterns);\n }\n}\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": ["TAG", "path", "TAG", "LOG_PREFIX", "resolve", "TAG"]
7
7
  }
@@ -1,7 +1,8 @@
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
  __esm
4
- } from "./chunk-NWDBD4PA.js";
5
+ } from "./chunk-7K2YZTLD.js";
5
6
 
6
7
  // src/paths.ts
7
8
  import { resolve, join, relative } from "node:path";
@@ -44,4 +45,4 @@ export {
44
45
  reportsDir,
45
46
  init_paths
46
47
  };
47
- //# sourceMappingURL=chunk-X76UX47U.js.map
48
+ //# sourceMappingURL=chunk-MJ6PHMOK.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/paths.ts"],
4
4
  "sourcesContent": ["import { resolve, join, relative } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport { mkdirSync } from \"node:fs\";\n\n/** Base directory for all Abtars runtime data. Override with ABTARS_HOME env var. */\nexport function abtarsHome(): string {\n return process.env.ABTARS_HOME ?? resolve(homedir(), \".abtars\");\n}\n\n// \u2500\u2500 Lazy directory creation \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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 lazyRootsCache: string[] | null = null;\n\n/** Set allowed lazy roots (called once at boot from manifest). */\nexport function setLazyRoots(roots: string[]): void { lazyRootsCache = roots; }\n\n/**\n * Create a directory under abtarsHome if it doesn't exist.\n * If lazyRoots are configured, warns on undeclared paths.\n */\nexport function ensureDir(absPath: string): void {\n const home = abtarsHome();\n const rel = relative(home, absPath);\n if (lazyRootsCache && !rel.startsWith(\"..\") && rel !== \"\") {\n const allowed = lazyRootsCache.some(root => rel === root || rel.startsWith(root + \"/\"));\n if (!allowed) {\n // Check if it's an eager dir (those are always allowed)\n const isEager = [\"config\", \"logs\", \"scripts\", \"bin\", \"releases\"].some(d => rel === d || rel.startsWith(d + \"/\"));\n if (!isEager) {\n // eslint-disable-next-line no-console\n console.warn(`[manifest] ensureDir: \"${rel}\" is not under a declared lazyRoot or eager directory`);\n }\n }\n }\n mkdirSync(absPath, { recursive: true });\n}\n\n/**\n * Canonical path for user-facing reports, grouped by category.\n * Example: reportsDir(\"tasks\") \u2192 ~/.abtars/reports/tasks/\n *\n * Callers are responsible for mkdirSync(dir, { recursive: true }).\n * All abtars-produced reports should live under this tree so they're\n * discoverable by the send-report skill and the future consolidation work.\n */\nexport function reportsDir(category: string): string {\n return join(abtarsHome(), \"reports\", category);\n}\n"],
5
- "mappings": ";;;;;;AAAA,SAAS,SAAS,MAAM,gBAAgB;AACxC,SAAS,eAAe;AACxB,SAAS,iBAAiB;AAGnB,SAAS,aAAqB;AACnC,SAAO,QAAQ,IAAI,eAAe,QAAQ,QAAQ,GAAG,SAAS;AAChE;AAOO,SAAS,aAAa,OAAuB;AAAE,mBAAiB;AAAO;AAMvE,SAAS,UAAU,SAAuB;AAC/C,QAAM,OAAO,WAAW;AACxB,QAAM,MAAM,SAAS,MAAM,OAAO;AAClC,MAAI,kBAAkB,CAAC,IAAI,WAAW,IAAI,KAAK,QAAQ,IAAI;AACzD,UAAM,UAAU,eAAe,KAAK,UAAQ,QAAQ,QAAQ,IAAI,WAAW,OAAO,GAAG,CAAC;AACtF,QAAI,CAAC,SAAS;AAEZ,YAAM,UAAU,CAAC,UAAU,QAAQ,WAAW,OAAO,UAAU,EAAE,KAAK,OAAK,QAAQ,KAAK,IAAI,WAAW,IAAI,GAAG,CAAC;AAC/G,UAAI,CAAC,SAAS;AAEZ,gBAAQ,KAAK,0BAA0B,GAAG,uDAAuD;AAAA,MACnG;AAAA,IACF;AAAA,EACF;AACA,YAAU,SAAS,EAAE,WAAW,KAAK,CAAC;AACxC;AAUO,SAAS,WAAW,UAA0B;AACnD,SAAO,KAAK,WAAW,GAAG,WAAW,QAAQ;AAC/C;AA/CA,IAWI;AAXJ;AAAA;AAWA,IAAI,iBAAkC;AAAA;AAAA;",
5
+ "mappings": ";;;;;;;AAAA,SAAS,SAAS,MAAM,gBAAgB;AACxC,SAAS,eAAe;AACxB,SAAS,iBAAiB;AAGnB,SAAS,aAAqB;AACnC,SAAO,QAAQ,IAAI,eAAe,QAAQ,QAAQ,GAAG,SAAS;AAChE;AAOO,SAAS,aAAa,OAAuB;AAAE,mBAAiB;AAAO;AAMvE,SAAS,UAAU,SAAuB;AAC/C,QAAM,OAAO,WAAW;AACxB,QAAM,MAAM,SAAS,MAAM,OAAO;AAClC,MAAI,kBAAkB,CAAC,IAAI,WAAW,IAAI,KAAK,QAAQ,IAAI;AACzD,UAAM,UAAU,eAAe,KAAK,UAAQ,QAAQ,QAAQ,IAAI,WAAW,OAAO,GAAG,CAAC;AACtF,QAAI,CAAC,SAAS;AAEZ,YAAM,UAAU,CAAC,UAAU,QAAQ,WAAW,OAAO,UAAU,EAAE,KAAK,OAAK,QAAQ,KAAK,IAAI,WAAW,IAAI,GAAG,CAAC;AAC/G,UAAI,CAAC,SAAS;AAEZ,gBAAQ,KAAK,0BAA0B,GAAG,uDAAuD;AAAA,MACnG;AAAA,IACF;AAAA,EACF;AACA,YAAU,SAAS,EAAE,WAAW,KAAK,CAAC;AACxC;AAUO,SAAS,WAAW,UAA0B;AACnD,SAAO,KAAK,WAAW,GAAG,WAAW,QAAQ;AAC/C;AA/CA,IAWI;AAXJ;AAAA;AAWA,IAAI,iBAAkC;AAAA;AAAA;",
6
6
  "names": []
7
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
 
3
4
  // src/components/completion-buffer.ts
4
5
  var buffer = /* @__PURE__ */ new Map();
@@ -21,4 +22,4 @@ export {
21
22
  drainCompletions,
22
23
  hasCompletions
23
24
  };
24
- //# sourceMappingURL=chunk-LSPKJQCI.js.map
25
+ //# sourceMappingURL=chunk-MV6CJFWR.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/components/completion-buffer.ts"],
4
4
  "sourcesContent": ["/**\n * completion-buffer.ts \u2014 Stores results from background sessions (#570).\n * Parent sessions check this buffer before each prompt to inject auto-notify.\n */\n\nexport interface CompletionEntry {\n sessionId: string;\n motherId: string;\n goal: string;\n status: \"done\" | \"failed\" | \"terminated\" | \"timeout\";\n result: string;\n elapsedMs: number;\n inputTokens: number;\n outputTokens: number;\n}\n\nconst buffer = new Map<string, CompletionEntry[]>(); // key = motherId\n\nexport function addCompletion(entry: CompletionEntry): void {\n const list = buffer.get(entry.motherId) ?? [];\n list.push(entry);\n buffer.set(entry.motherId, list);\n}\n\n/** Drain all completions for a parent session (consumed once on next prompt). */\nexport function drainCompletions(motherId: string): CompletionEntry[] {\n const entries = buffer.get(motherId) ?? [];\n buffer.delete(motherId);\n return entries;\n}\n\n/** Check if there are pending completions for a parent. */\nexport function hasCompletions(motherId: string): boolean {\n return (buffer.get(motherId)?.length ?? 0) > 0;\n}\n"],
5
- "mappings": ";;;AAgBA,IAAM,SAAS,oBAAI,IAA+B;AAE3C,SAAS,cAAc,OAA8B;AAC1D,QAAM,OAAO,OAAO,IAAI,MAAM,QAAQ,KAAK,CAAC;AAC5C,OAAK,KAAK,KAAK;AACf,SAAO,IAAI,MAAM,UAAU,IAAI;AACjC;AAGO,SAAS,iBAAiB,UAAqC;AACpE,QAAM,UAAU,OAAO,IAAI,QAAQ,KAAK,CAAC;AACzC,SAAO,OAAO,QAAQ;AACtB,SAAO;AACT;AAGO,SAAS,eAAe,UAA2B;AACxD,UAAQ,OAAO,IAAI,QAAQ,GAAG,UAAU,KAAK;AAC/C;",
5
+ "mappings": ";;;;AAgBA,IAAM,SAAS,oBAAI,IAA+B;AAE3C,SAAS,cAAc,OAA8B;AAC1D,QAAM,OAAO,OAAO,IAAI,MAAM,QAAQ,KAAK,CAAC;AAC5C,OAAK,KAAK,KAAK;AACf,SAAO,IAAI,MAAM,UAAU,IAAI;AACjC;AAGO,SAAS,iBAAiB,UAAqC;AACpE,QAAM,UAAU,OAAO,IAAI,QAAQ,KAAK,CAAC;AACzC,SAAO,OAAO,QAAQ;AACtB,SAAO;AACT;AAGO,SAAS,eAAe,UAA2B;AACxD,UAAQ,OAAO,IAAI,QAAQ,GAAG,UAAU,KAAK;AAC/C;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __bundleCreateRequire } from 'node:module'; import { fileURLToPath as __bundleFileURLToPath } from 'node:url'; import { dirname as __bundleDirname } from 'node:path'; const require = __bundleCreateRequire(import.meta.url); const __chunk_filename = __bundleFileURLToPath(import.meta.url); const __chunk_dirname = __bundleDirname(__chunk_filename);
3
+
4
+ // src/utils/local-time.ts
5
+ var pad = (n) => String(n).padStart(2, "0");
6
+ function localISO(d = /* @__PURE__ */ new Date()) {
7
+ return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}T${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`;
8
+ }
9
+ function localTime(d = /* @__PURE__ */ new Date()) {
10
+ return `${pad(d.getHours())}:${pad(d.getMinutes())}`;
11
+ }
12
+
13
+ export {
14
+ localISO,
15
+ localTime
16
+ };
17
+ //# sourceMappingURL=chunk-MZWMYN4O.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/utils/local-time.ts"],
4
4
  "sourcesContent": ["/** Local time formatting \u2014 system timezone, no UTC. */\n\nconst pad = (n: number): string => String(n).padStart(2, \"0\");\n\n/** YYYY-MM-DDTHH:MM:SS (local) \u2014 drop-in replacement for toISOString() */\nexport function localISO(d: Date = new Date()): string {\n return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}T${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`;\n}\n\n/** YYYY-MM-DD HH:MM (local) */\nexport function localDateTime(d: Date = new Date()): string {\n return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}`;\n}\n\n/** HH:MM (local) */\nexport function localTime(d: Date = new Date()): string {\n return `${pad(d.getHours())}:${pad(d.getMinutes())}`;\n}\n\n/** YYYY-MM-DD (local) */\nexport function localDate(d: Date = new Date()): string {\n return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}`;\n}\n\n/** YYYY-MM (local) */\nexport function localMonth(d: Date = new Date()): string {\n return `${d.getFullYear()}-${pad(d.getMonth() + 1)}`;\n}\n"],
5
- "mappings": ";;;AAEA,IAAM,MAAM,CAAC,MAAsB,OAAO,CAAC,EAAE,SAAS,GAAG,GAAG;AAGrD,SAAS,SAAS,IAAU,oBAAI,KAAK,GAAW;AACrD,SAAO,GAAG,EAAE,YAAY,CAAC,IAAI,IAAI,EAAE,SAAS,IAAI,CAAC,CAAC,IAAI,IAAI,EAAE,QAAQ,CAAC,CAAC,IAAI,IAAI,EAAE,SAAS,CAAC,CAAC,IAAI,IAAI,EAAE,WAAW,CAAC,CAAC,IAAI,IAAI,EAAE,WAAW,CAAC,CAAC;AAC3I;AAQO,SAAS,UAAU,IAAU,oBAAI,KAAK,GAAW;AACtD,SAAO,GAAG,IAAI,EAAE,SAAS,CAAC,CAAC,IAAI,IAAI,EAAE,WAAW,CAAC,CAAC;AACpD;",
5
+ "mappings": ";;;;AAEA,IAAM,MAAM,CAAC,MAAsB,OAAO,CAAC,EAAE,SAAS,GAAG,GAAG;AAGrD,SAAS,SAAS,IAAU,oBAAI,KAAK,GAAW;AACrD,SAAO,GAAG,EAAE,YAAY,CAAC,IAAI,IAAI,EAAE,SAAS,IAAI,CAAC,CAAC,IAAI,IAAI,EAAE,QAAQ,CAAC,CAAC,IAAI,IAAI,EAAE,SAAS,CAAC,CAAC,IAAI,IAAI,EAAE,WAAW,CAAC,CAAC,IAAI,IAAI,EAAE,WAAW,CAAC,CAAC;AAC3I;AAQO,SAAS,UAAU,IAAU,oBAAI,KAAK,GAAW;AACtD,SAAO,GAAG,IAAI,EAAE,SAAS,CAAC,CAAC,IAAI,IAAI,EAAE,WAAW,CAAC,CAAC;AACpD;",
6
6
  "names": []
7
7
  }
@@ -1,8 +1,9 @@
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
  __commonJS,
4
5
  __require
5
- } from "./chunk-NWDBD4PA.js";
6
+ } from "./chunk-7K2YZTLD.js";
6
7
 
7
8
  // node_modules/ws/lib/constants.js
8
9
  var require_constants = __commonJS({
@@ -3656,4 +3657,4 @@ export {
3656
3657
  require_websocket_server,
3657
3658
  require_ws
3658
3659
  };
3659
- //# sourceMappingURL=chunk-HX7Y7EYP.js.map
3660
+ //# sourceMappingURL=chunk-NIRYBWUW.js.map