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,12 +1,13 @@
1
- import { createRequire as __bundleCreateRequire } from 'node:module'; import { fileURLToPath as __bundleFileURLToPath } from 'node:url'; import { dirname as __bundleDirname } from 'node:path'; const require = __bundleCreateRequire(import.meta.url); const __chunk_filename = __bundleFileURLToPath(import.meta.url); const __chunk_dirname = __bundleDirname(__chunk_filename);
1
+ #!/usr/bin/env node
2
+ import { createRequire as __bundleCreateRequire } from 'node:module'; import { fileURLToPath as __bundleFileURLToPath } from 'node:url'; import { dirname as __bundleDirname } from 'node:path'; const require = __bundleCreateRequire(import.meta.url); const __chunk_filename = __bundleFileURLToPath(import.meta.url); const __chunk_dirname = __bundleDirname(__chunk_filename);
2
3
  import {
3
4
  init_log_and_swallow,
4
5
  logAndSwallow
5
- } from "./chunk-FMWKEPM7.js";
6
+ } from "./chunk-EX2SRTUE.js";
6
7
  import {
7
8
  abtarsHome,
8
9
  init_paths
9
- } from "./chunk-X76UX47U.js";
10
+ } from "./chunk-MJ6PHMOK.js";
10
11
 
11
12
  // src/components/skill-stats.ts
12
13
  init_paths();
@@ -80,4 +81,4 @@ export {
80
81
  _getStats,
81
82
  _reset
82
83
  };
83
- //# sourceMappingURL=chunk-AR6GO6YC.js.map
84
+ //# sourceMappingURL=chunk-ELRAH7VL.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/components/skill-stats.ts"],
4
4
  "sourcesContent": ["/**\n * skill-stats.ts \u2014 in-memory skill usage tracking with debounced disk flush (#613).\n */\n\nimport { existsSync, readFileSync, writeFileSync, mkdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { abtarsHome } from \"../paths.js\";\nimport { logAndSwallow } from \"./log-and-swallow.js\";\n\nconst TAG = \"skill-stats\";\n\nexport interface SkillStat {\n reads: number;\n lastRead: string;\n createdAt?: string;\n createdBy?: string;\n}\n\nconst stats = new Map<string, SkillStat>();\nlet dirty = false;\n\nfunction statsPath(): string { return join(abtarsHome(), \"skills\", \".stats.json\"); }\n\nexport function init(): void {\n try {\n const p = statsPath();\n if (!existsSync(p)) return;\n const data = JSON.parse(readFileSync(p, \"utf-8\")) as Record<string, SkillStat>;\n for (const [k, v] of Object.entries(data)) stats.set(k, v);\n } catch (err) { logAndSwallow(TAG, \"init\", err); }\n}\n\nexport function bumpRead(name: string): void {\n const existing = stats.get(name);\n const now = new Date().toISOString();\n if (existing) {\n existing.reads++;\n existing.lastRead = now;\n } else {\n stats.set(name, { reads: 1, lastRead: now });\n }\n dirty = true;\n}\n\nexport function setProvenance(name: string, createdBy: string): void {\n const existing = stats.get(name);\n const now = new Date().toISOString();\n if (existing) {\n existing.createdAt = now;\n existing.createdBy = createdBy;\n } else {\n stats.set(name, { reads: 0, lastRead: now, createdAt: now, createdBy });\n }\n dirty = true;\n}\n\nexport function flush(): void {\n if (!dirty) return;\n try {\n const dir = join(abtarsHome(), \"skills\");\n if (!existsSync(dir)) mkdirSync(dir, { recursive: true });\n const obj: Record<string, SkillStat> = {};\n for (const [k, v] of stats) obj[k] = v;\n writeFileSync(statsPath(), JSON.stringify(obj, null, 2) + \"\\n\", \"utf-8\");\n dirty = false;\n } catch (err) { logAndSwallow(TAG, \"flush\", err); }\n}\n\n/** Exposed for testing. */\nexport function _getStats(): Map<string, SkillStat> { return stats; }\nexport function _reset(): void { stats.clear(); dirty = false; }\n"],
5
- "mappings": ";;;;;;;;;;;AAMA;AACA;AAHA,SAAS,YAAY,cAAc,eAAe,iBAAiB;AACnE,SAAS,YAAY;AAIrB,IAAM,MAAM;AASZ,IAAM,QAAQ,oBAAI,IAAuB;AACzC,IAAI,QAAQ;AAEZ,SAAS,YAAoB;AAAE,SAAO,KAAK,WAAW,GAAG,UAAU,aAAa;AAAG;AAE5E,SAAS,OAAa;AAC3B,MAAI;AACF,UAAM,IAAI,UAAU;AACpB,QAAI,CAAC,WAAW,CAAC,EAAG;AACpB,UAAM,OAAO,KAAK,MAAM,aAAa,GAAG,OAAO,CAAC;AAChD,eAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,IAAI,EAAG,OAAM,IAAI,GAAG,CAAC;AAAA,EAC3D,SAAS,KAAK;AAAE,kBAAc,KAAK,QAAQ,GAAG;AAAA,EAAG;AACnD;AAEO,SAAS,SAAS,MAAoB;AAC3C,QAAM,WAAW,MAAM,IAAI,IAAI;AAC/B,QAAM,OAAM,oBAAI,KAAK,GAAE,YAAY;AACnC,MAAI,UAAU;AACZ,aAAS;AACT,aAAS,WAAW;AAAA,EACtB,OAAO;AACL,UAAM,IAAI,MAAM,EAAE,OAAO,GAAG,UAAU,IAAI,CAAC;AAAA,EAC7C;AACA,UAAQ;AACV;AAEO,SAAS,cAAc,MAAc,WAAyB;AACnE,QAAM,WAAW,MAAM,IAAI,IAAI;AAC/B,QAAM,OAAM,oBAAI,KAAK,GAAE,YAAY;AACnC,MAAI,UAAU;AACZ,aAAS,YAAY;AACrB,aAAS,YAAY;AAAA,EACvB,OAAO;AACL,UAAM,IAAI,MAAM,EAAE,OAAO,GAAG,UAAU,KAAK,WAAW,KAAK,UAAU,CAAC;AAAA,EACxE;AACA,UAAQ;AACV;AAEO,SAAS,QAAc;AAC5B,MAAI,CAAC,MAAO;AACZ,MAAI;AACF,UAAM,MAAM,KAAK,WAAW,GAAG,QAAQ;AACvC,QAAI,CAAC,WAAW,GAAG,EAAG,WAAU,KAAK,EAAE,WAAW,KAAK,CAAC;AACxD,UAAM,MAAiC,CAAC;AACxC,eAAW,CAAC,GAAG,CAAC,KAAK,MAAO,KAAI,CAAC,IAAI;AACrC,kBAAc,UAAU,GAAG,KAAK,UAAU,KAAK,MAAM,CAAC,IAAI,MAAM,OAAO;AACvE,YAAQ;AAAA,EACV,SAAS,KAAK;AAAE,kBAAc,KAAK,SAAS,GAAG;AAAA,EAAG;AACpD;AAGO,SAAS,YAAoC;AAAE,SAAO;AAAO;AAC7D,SAAS,SAAe;AAAE,QAAM,MAAM;AAAG,UAAQ;AAAO;",
5
+ "mappings": ";;;;;;;;;;;;AAMA;AACA;AAHA,SAAS,YAAY,cAAc,eAAe,iBAAiB;AACnE,SAAS,YAAY;AAIrB,IAAM,MAAM;AASZ,IAAM,QAAQ,oBAAI,IAAuB;AACzC,IAAI,QAAQ;AAEZ,SAAS,YAAoB;AAAE,SAAO,KAAK,WAAW,GAAG,UAAU,aAAa;AAAG;AAE5E,SAAS,OAAa;AAC3B,MAAI;AACF,UAAM,IAAI,UAAU;AACpB,QAAI,CAAC,WAAW,CAAC,EAAG;AACpB,UAAM,OAAO,KAAK,MAAM,aAAa,GAAG,OAAO,CAAC;AAChD,eAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,IAAI,EAAG,OAAM,IAAI,GAAG,CAAC;AAAA,EAC3D,SAAS,KAAK;AAAE,kBAAc,KAAK,QAAQ,GAAG;AAAA,EAAG;AACnD;AAEO,SAAS,SAAS,MAAoB;AAC3C,QAAM,WAAW,MAAM,IAAI,IAAI;AAC/B,QAAM,OAAM,oBAAI,KAAK,GAAE,YAAY;AACnC,MAAI,UAAU;AACZ,aAAS;AACT,aAAS,WAAW;AAAA,EACtB,OAAO;AACL,UAAM,IAAI,MAAM,EAAE,OAAO,GAAG,UAAU,IAAI,CAAC;AAAA,EAC7C;AACA,UAAQ;AACV;AAEO,SAAS,cAAc,MAAc,WAAyB;AACnE,QAAM,WAAW,MAAM,IAAI,IAAI;AAC/B,QAAM,OAAM,oBAAI,KAAK,GAAE,YAAY;AACnC,MAAI,UAAU;AACZ,aAAS,YAAY;AACrB,aAAS,YAAY;AAAA,EACvB,OAAO;AACL,UAAM,IAAI,MAAM,EAAE,OAAO,GAAG,UAAU,KAAK,WAAW,KAAK,UAAU,CAAC;AAAA,EACxE;AACA,UAAQ;AACV;AAEO,SAAS,QAAc;AAC5B,MAAI,CAAC,MAAO;AACZ,MAAI;AACF,UAAM,MAAM,KAAK,WAAW,GAAG,QAAQ;AACvC,QAAI,CAAC,WAAW,GAAG,EAAG,WAAU,KAAK,EAAE,WAAW,KAAK,CAAC;AACxD,UAAM,MAAiC,CAAC;AACxC,eAAW,CAAC,GAAG,CAAC,KAAK,MAAO,KAAI,CAAC,IAAI;AACrC,kBAAc,UAAU,GAAG,KAAK,UAAU,KAAK,MAAM,CAAC,IAAI,MAAM,OAAO;AACvE,YAAQ;AAAA,EACV,SAAS,KAAK;AAAE,kBAAc,KAAK,SAAS,GAAG;AAAA,EAAG;AACpD;AAGO,SAAS,YAAoC;AAAE,SAAO;AAAO;AAC7D,SAAS,SAAe;AAAE,QAAM,MAAM;AAAG,UAAQ;AAAO;",
6
6
  "names": []
7
7
  }
@@ -1,13 +1,14 @@
1
- import { createRequire as __bundleCreateRequire } from 'node:module'; import { fileURLToPath as __bundleFileURLToPath } from 'node:url'; import { dirname as __bundleDirname } from 'node:path'; const require = __bundleCreateRequire(import.meta.url); const __chunk_filename = __bundleFileURLToPath(import.meta.url); const __chunk_dirname = __bundleDirname(__chunk_filename);
1
+ #!/usr/bin/env node
2
+ import { createRequire as __bundleCreateRequire } from 'node:module'; import { fileURLToPath as __bundleFileURLToPath } from 'node:url'; import { dirname as __bundleDirname } from 'node:path'; const require = __bundleCreateRequire(import.meta.url); const __chunk_filename = __bundleFileURLToPath(import.meta.url); const __chunk_dirname = __bundleDirname(__chunk_filename);
2
3
  import {
3
4
  init_logger,
4
5
  logError,
5
6
  logTrace,
6
7
  logWarn
7
- } from "./chunk-BUUVFUPO.js";
8
+ } from "./chunk-2BY6I4P5.js";
8
9
  import {
9
10
  __esm
10
- } from "./chunk-NWDBD4PA.js";
11
+ } from "./chunk-7K2YZTLD.js";
11
12
 
12
13
  // src/components/log-and-swallow.ts
13
14
  function logAndSwallow(tag, context, err, level = "trace") {
@@ -28,4 +29,4 @@ export {
28
29
  logAndSwallow,
29
30
  init_log_and_swallow
30
31
  };
31
- //# sourceMappingURL=chunk-FMWKEPM7.js.map
32
+ //# sourceMappingURL=chunk-EX2SRTUE.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/components/log-and-swallow.ts"],
4
4
  "sourcesContent": ["/**\n * log-and-swallow.ts \u2014 Visible error swallowing.\n * Replaces silent `} catch { }` blocks with a trace-level log.\n */\n\nimport { logTrace, logWarn, logError } from \"./logger.js\";\n\ntype SwallowLevel = \"trace\" | \"warn\" | \"error\";\n\n/** Log a swallowed error and return undefined. Default level: trace. */\nexport function logAndSwallow(tag: string, context: string, err?: unknown, level: SwallowLevel = \"trace\"): undefined {\n const msg = `[swallowed] ${context}${err ? `: ${err instanceof Error ? err.message : String(err)}` : \"\"}`;\n if (level === \"error\") logError(tag, msg);\n else if (level === \"warn\") logWarn(tag, msg);\n else logTrace(tag, msg);\n return undefined;\n}\n"],
5
- "mappings": ";;;;;;;;;;;;AAUO,SAAS,cAAc,KAAa,SAAiB,KAAe,QAAsB,SAAoB;AACnH,QAAM,MAAM,eAAe,OAAO,GAAG,MAAM,KAAK,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC,KAAK,EAAE;AACvG,MAAI,UAAU,QAAS,UAAS,KAAK,GAAG;AAAA,WAC/B,UAAU,OAAQ,SAAQ,KAAK,GAAG;AAAA,MACtC,UAAS,KAAK,GAAG;AACtB,SAAO;AACT;AAhBA;AAAA;AAAA;AAKA;AAAA;AAAA;",
5
+ "mappings": ";;;;;;;;;;;;;AAUO,SAAS,cAAc,KAAa,SAAiB,KAAe,QAAsB,SAAoB;AACnH,QAAM,MAAM,eAAe,OAAO,GAAG,MAAM,KAAK,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC,KAAK,EAAE;AACvG,MAAI,UAAU,QAAS,UAAS,KAAK,GAAG;AAAA,WAC/B,UAAU,OAAQ,SAAQ,KAAK,GAAG;AAAA,MACtC,UAAS,KAAK,GAAG;AACtB,SAAO;AACT;AAhBA;AAAA;AAAA;AAKA;AAAA;AAAA;",
6
6
  "names": []
7
7
  }
@@ -1,13 +1,14 @@
1
- import { createRequire as __bundleCreateRequire } from 'node:module'; import { fileURLToPath as __bundleFileURLToPath } from 'node:url'; import { dirname as __bundleDirname } from 'node:path'; const require = __bundleCreateRequire(import.meta.url); const __chunk_filename = __bundleFileURLToPath(import.meta.url); const __chunk_dirname = __bundleDirname(__chunk_filename);
1
+ #!/usr/bin/env node
2
+ import { createRequire as __bundleCreateRequire } from 'node:module'; import { fileURLToPath as __bundleFileURLToPath } from 'node:url'; import { dirname as __bundleDirname } from 'node:path'; const require = __bundleCreateRequire(import.meta.url); const __chunk_filename = __bundleFileURLToPath(import.meta.url); const __chunk_dirname = __bundleDirname(__chunk_filename);
2
3
  import {
3
4
  init_log_and_swallow,
4
5
  logAndSwallow
5
- } from "./chunk-FMWKEPM7.js";
6
+ } from "./chunk-EX2SRTUE.js";
6
7
  import {
7
8
  init_logger,
8
9
  logInfo,
9
10
  logWarn
10
- } from "./chunk-BUUVFUPO.js";
11
+ } from "./chunk-2BY6I4P5.js";
11
12
 
12
13
  // src/components/subagent-runtime.ts
13
14
  init_log_and_swallow();
@@ -47,7 +48,7 @@ var SubagentRuntime = class {
47
48
  const cached = this.cache.get(agent);
48
49
  if (cached && sessionStrategy === "fresh") {
49
50
  await cached.transport.resetSession?.(cached.sessionKey);
50
- (await import("./tool-registry-MU3OX4UI.js")).resetStoreCounter();
51
+ (await import("./tool-registry-DFCCGZCB.js")).resetStoreCounter();
51
52
  }
52
53
  const { transport, model, sessionKey } = cached ?? await this.createAgent(agent);
53
54
  if (opts?.timeoutMs && transport.setTimeoutOverride) {
@@ -150,7 +151,7 @@ var SubagentRuntime = class {
150
151
  return true;
151
152
  }
152
153
  async createAgent(agent) {
153
- const { createSubagentTransport } = await import("./agent-registry-LT4JNQH6.js");
154
+ const { createSubagentTransport } = await import("./agent-registry-VJMNIQ5W.js");
154
155
  const role = AGENT_TO_ROLE[agent];
155
156
  const mainModel = this._mainTransport && "currentModel" in this._mainTransport ? this._mainTransport.currentModel : void 0;
156
157
  const { transport, model } = await createSubagentTransport(role, this._registry ?? void 0, mainModel);
@@ -160,7 +161,7 @@ var SubagentRuntime = class {
160
161
  const sessionKey = `system:${agent}`;
161
162
  const entry = { transport, model, sessionKey };
162
163
  this.cache.set(agent, entry);
163
- (await import("./tool-registry-MU3OX4UI.js")).resetStoreCounter();
164
+ (await import("./tool-registry-DFCCGZCB.js")).resetStoreCounter();
164
165
  return entry;
165
166
  }
166
167
  };
@@ -181,4 +182,4 @@ var AGENT_TO_ROLE = {
181
182
  export {
182
183
  SubagentRuntime
183
184
  };
184
- //# sourceMappingURL=chunk-JW6RU47G.js.map
185
+ //# sourceMappingURL=chunk-FVQGP5YO.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/components/subagent-runtime.ts"],
4
4
  "sourcesContent": ["/**\n * SubagentRuntime \u2014 unified LLM access for all subagents.\n * Replaces manual createSubagentTransport() calls.\n * Caches transports per agent, handles session lifecycle + fallback.\n */\n\nimport { logAndSwallow } from \"./log-and-swallow.js\";\nimport type { IKiroTransport } from \"./transport/kiro-transport.js\";\nimport { logInfo, logWarn } from \"./logger.js\";\nimport { randomBytes } from \"node:crypto\";\n\nimport type { ModelHealthRegistry } from \"./transport/model-health-registry.js\";\n\nconst TAG = \"runtime\";\n\nexport type AgentName = \"professor\" | \"dreamy\" | \"browsie\" | \"coding\" | \"task\";\n\nexport interface AgentOpts {\n /** Override default session strategy for this call. */\n session?: \"fresh\" | \"reuse\";\n /** Context passed to tool executor (userId, metadata). */\n context?: Record<string, unknown>;\n /** Override model API timeout for this call (ms). */\n timeoutMs?: number;\n /** Override session type (default: derived from agent name). */\n sessionType?: import(\"./session-manager.js\").SessionType;\n}\n\n/** Persistent transport handle for multi-turn callers. */\nexport interface AgentSession {\n sendPrompt(sessionKey: string, prompt: string, image?: { mime: string; base64: string }): Promise<string>;\n destroy(): Promise<void>;\n readonly isReady: boolean;\n /** Underlying transport \u2014 used to set sandboxPolicy for peer sessions (#678). */\n readonly transport?: IKiroTransport;\n}\n\nexport interface SpawnResult {\n taskId: string;\n}\n\nexport interface SpawnOpts {\n onComplete?: (taskId: string, result: string) => void;\n onError?: (taskId: string, error: Error) => void;\n timeoutMs?: number;\n}\n\ninterface CachedAgent {\n transport: IKiroTransport;\n model: string;\n sessionKey: string;\n}\n\nconst DEFAULT_SESSION: Record<AgentName, \"fresh\" | \"reuse\"> = {\n professor: \"reuse\",\n dreamy: \"fresh\",\n browsie: \"fresh\",\n coding: \"reuse\",\n task: \"fresh\",\n};\n\nconst DEFAULT_SPAWN_TIMEOUT_MS = 600_000; // 10 min\n\nexport class SubagentRuntime {\n private readonly cache = new Map<AgentName, CachedAgent>();\n private readonly activeSpawns = new Map<string, { abort: AbortController; startedAt: number }>();\n private _registry: ModelHealthRegistry | null = null;\n private _mainTransport: IKiroTransport | null = null;\n private _sessionManager: import(\"./session-manager.js\").SessionManager | null = null;\n\n /** Set shared model health registry (from boot ctx). */\n setRegistry(registry: ModelHealthRegistry): void { this._registry = registry; }\n\n /** Set main transport reference for currentModel reads. */\n setMainTransport(transport: IKiroTransport): void { this._mainTransport = transport; }\n\n /** Set session manager for auto-spawn sub-session creation (#510). */\n setSessionManager(mgr: import(\"./session-manager.js\").SessionManager): void { this._sessionManager = mgr; }\n\n /** Send a prompt to a named agent and get the response. */\n async complete(agent: AgentName, prompt: string, opts?: AgentOpts): Promise<string> {\n const sessionStrategy = opts?.session ?? DEFAULT_SESSION[agent] ?? \"fresh\";\n const start = Date.now();\n\n const cached = this.cache.get(agent);\n if (cached && sessionStrategy === \"fresh\") {\n await cached.transport.resetSession?.(cached.sessionKey);\n (await import(\"./transport/tool-registry.js\")).resetStoreCounter();\n }\n\n const { transport, model, sessionKey } = cached ?? await this.createAgent(agent);\n\n // Per-call timeout override (e.g. dreamy sleep steps need longer than default)\n if (opts?.timeoutMs && transport.setTimeoutOverride) {\n transport.setTimeoutOverride(opts.timeoutMs);\n }\n\n try {\n const response = await transport.sendPrompt(sessionKey, prompt);\n const elapsed = Date.now() - start;\n logInfo(TAG, `${agent} complete: ${prompt.length}ch \u2192 ${response?.length ?? 0}ch (${elapsed}ms, ${model})`);\n return response ?? \"\";\n } catch (err) {\n logWarn(TAG, `${agent} complete failed: ${err instanceof Error ? err.message : String(err)}`);\n this.cache.delete(agent);\n throw err;\n } finally {\n if (opts?.timeoutMs && transport.setTimeoutOverride) {\n transport.setTimeoutOverride(null);\n }\n }\n }\n\n /** Get a persistent session handle for multi-turn callers. */\n async session(agent: AgentName): Promise<AgentSession> {\n const cached = this.cache.get(agent) ?? await this.createAgent(agent);\n return {\n sendPrompt: (sessionKey: string, prompt: string) => cached.transport.sendPrompt(sessionKey, prompt),\n destroy: async () => {\n try { cached.transport.destroy(); } catch (err) { logAndSwallow(\"subagent_runtime\", \"op\", err); }\n this.cache.delete(agent);\n logInfo(TAG, `${agent} session destroyed`);\n },\n get isReady() { return cached.transport.isReady; },\n get transport() { return cached.transport; },\n };\n }\n\n /** Fire-and-forget: run complete() in background, deliver result via callback. */\n async spawn(agent: AgentName, prompt: string, opts?: SpawnOpts): Promise<SpawnResult> {\n const taskId = randomBytes(4).toString(\"hex\");\n const abort = new AbortController();\n this.activeSpawns.set(taskId, { abort, startedAt: Date.now() });\n\n // Create sub-session for visibility in /session list (#510)\n if (this._sessionManager) {\n const typeMap: Partial<Record<AgentName, import(\"./session-manager.js\").SessionType>> = { browsie: \"B\", coding: \"C\", task: \"T\" };\n const sessionType = typeMap[agent];\n if (sessionType) this._sessionManager.createSubSession(\"master\", \"telegram\", sessionType);\n }\n\n const timeoutMs = opts?.timeoutMs ?? DEFAULT_SPAWN_TIMEOUT_MS;\n const timer = setTimeout(() => abort.abort(), timeoutMs);\n\n // Fire and forget \u2014 don't await\n void (async () => {\n try {\n const result = await this.complete(agent, prompt);\n if (!abort.signal.aborted) opts?.onComplete?.(taskId, result);\n } catch (err) {\n if (!abort.signal.aborted) opts?.onError?.(taskId, err instanceof Error ? err : new Error(String(err)));\n } finally {\n clearTimeout(timer);\n this.activeSpawns.delete(taskId);\n }\n })();\n\n logInfo(TAG, `${agent} spawned: taskId=${taskId}, timeout=${timeoutMs}ms`);\n return { taskId };\n }\n\n /** Shut down all cached transports and abort active spawns. */\n async shutdown(): Promise<void> {\n for (const [id, { abort }] of this.activeSpawns) {\n abort.abort();\n logInfo(TAG, `spawn ${id} aborted`);\n }\n this.activeSpawns.clear();\n\n for (const [name, cached] of this.cache) {\n try { cached.transport.destroy(); } catch (err) { logAndSwallow(\"subagent_runtime\", \"op\", err); }\n logInfo(TAG, `${name} transport closed`);\n }\n this.cache.clear();\n }\n\n /** Active registry: list running background spawns. */\n listActive(): Array<{ taskId: string; startedAt: number }> {\n return [...this.activeSpawns.entries()].map(([taskId, entry]) => ({\n taskId,\n startedAt: (entry as any).startedAt ?? 0,\n }));\n }\n\n /** Interrupt a specific spawn by taskId. Returns true if found. */\n interruptSpawn(taskId: string): boolean {\n const entry = this.activeSpawns.get(taskId);\n if (!entry) return false;\n entry.abort.abort();\n this.activeSpawns.delete(taskId);\n logInfo(TAG, `spawn ${taskId} interrupted`);\n return true;\n }\n\n private async createAgent(agent: AgentName): Promise<CachedAgent> {\n const { createSubagentTransport } = await import(\"./agent-registry.js\");\n const role = AGENT_TO_ROLE[agent];\n const mainModel = this._mainTransport && \"currentModel\" in this._mainTransport\n ? (this._mainTransport as unknown as { currentModel: string }).currentModel\n : undefined;\n const { transport, model } = await createSubagentTransport(role, this._registry ?? undefined, mainModel);\n\n // #524: inject system prompt for browse sessions\n if (agent === \"browsie\" && \"setSystemPrompt\" in transport && typeof (transport as any).setSystemPrompt === \"function\") {\n (transport as any).setSystemPrompt(BROWSE_SYSTEM_PROMPT);\n }\n\n const sessionKey = `system:${agent}`;\n const entry: CachedAgent = { transport, model, sessionKey };\n this.cache.set(agent, entry);\n (await import(\"./transport/tool-registry.js\")).resetStoreCounter();\n return entry;\n }\n}\n\nconst BROWSE_SYSTEM_PROMPT = `You are a web browsing assistant. You have two tools for web access:\n\n1. **browser tool** (navigate, click, fill, extract_text, screenshot) \u2014 use for JS-heavy pages, rendered content, page interaction, login flows, or anything that needs a real browser.\n2. **curl / execute_bash** \u2014 use for simple API calls, raw downloads, fetching headers, or static pages.\n\nPrefer the browser tool when the page likely uses JavaScript rendering or requires interaction. Use curl when a simple HTTP request suffices.`;\n\nconst AGENT_TO_ROLE: Record<AgentName, import(\"./agent-registry.js\").SubagentRole> = {\n professor: \"task\",\n dreamy: \"sleep\",\n browsie: \"browse\",\n coding: \"coding\",\n task: \"task\",\n};\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,10 +1,11 @@
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
  logDebug,
5
6
  logInfo,
6
7
  logWarn
7
- } from "./chunk-BUUVFUPO.js";
8
+ } from "./chunk-2BY6I4P5.js";
8
9
 
9
10
  // src/components/hooks/hook-system.ts
10
11
  init_logger();
@@ -142,4 +143,4 @@ export {
142
143
  getHookSummary,
143
144
  fire
144
145
  };
145
- //# sourceMappingURL=chunk-GRNENTPA.js.map
146
+ //# sourceMappingURL=chunk-G6IXMYIO.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/components/hooks/hook-system.ts"],
4
4
  "sourcesContent": ["/**\n * Hook system \u2014 loads config, fires events to shell-script hooks.\n * Sequential execution, first-block-wins on BeforeMessage, log-and-skip on failure.\n */\n\nimport { spawn } from \"node:child_process\";\nimport { readFileSync, statSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport { logInfo, logWarn, logDebug } from \"../logger.js\";\nimport type { HookConfig, HookEntry, HookEvent, HookInput, HookOutput } from \"./types.js\";\n\nconst TAG = \"hooks\";\nconst DEFAULT_TIMEOUT = 5000;\n\nlet config: HookConfig | null = null;\n\nexport function loadHookConfig(): void {\n const configPath = join(homedir(), \".abtars\", \"config\", \"hooks.json\");\n try {\n const raw = readFileSync(configPath, \"utf-8\");\n const parsed = JSON.parse(raw) as HookConfig;\n if (!parsed.enabled) {\n config = null;\n logDebug(TAG, \"Hooks disabled in config\");\n return;\n }\n // Permission check on hooks dir\n const hooksDir = join(homedir(), \".abtars\", \"hooks\");\n try {\n const st = statSync(hooksDir);\n const mode = st.mode & 0o777;\n if (mode !== 0o700) {\n logWarn(TAG, `Hooks dir ${hooksDir} has mode ${mode.toString(8)}, expected 700 \u2014 hooks disabled`);\n config = null;\n return;\n }\n } catch {\n // Dir doesn't exist \u2014 that's fine, hooks just won't find scripts there\n }\n config = parsed;\n const count = Object.values(parsed.hooks).reduce((n, arr) => n + (arr?.length ?? 0), 0);\n logInfo(TAG, `Loaded ${count} hook(s) from ${configPath}`);\n } catch {\n config = null;\n logDebug(TAG, \"No hooks.json found \u2014 hooks disabled\");\n }\n}\n\nexport function hasHooks(event: HookEvent): boolean {\n return (config?.hooks[event]?.length ?? 0) > 0;\n}\n\nexport function getHookSummary(): Array<{ event: HookEvent; hooks: HookEntry[] }> {\n const events: HookEvent[] = [\"BridgeStart\", \"BeforeMessage\", \"AfterMessage\", \"SessionStart\", \"SessionEnd\", \"AfterPrompt\"];\n return events.map(event => ({ event, hooks: config?.hooks[event] ?? [] }));\n}\n\nexport async function fire(event: HookEvent, input: HookInput): Promise<HookOutput | null> {\n const hooks = config?.hooks[event];\n if (!hooks?.length) return null;\n\n for (const hook of hooks) {\n try {\n const result = await runOne(hook, input);\n if (result?.decision === \"block\" && event === \"BeforeMessage\") {\n logInfo(TAG, `${event}/${hook.name}: BLOCKED \u2014 ${result.reason ?? \"no reason\"}`);\n return result;\n }\n } catch (err) {\n logWarn(TAG, `${event}/${hook.name} failed: ${err instanceof Error ? err.message : String(err)} \u2014 skipping`);\n }\n }\n return null;\n}\n\nfunction runOne(hook: HookEntry, input: HookInput): Promise<HookOutput | null> {\n const timeout = hook.timeout ?? DEFAULT_TIMEOUT;\n return new Promise((resolve) => {\n const child = spawn(hook.command, [], {\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n timeout,\n env: {\n ABTARS_HOME: join(homedir(), \".abtars\"),\n ABMIND_HOME: join(homedir(), \".abmind\"),\n PATH: process.env[\"PATH\"] ?? \"\",\n },\n });\n\n let stdout = \"\";\n let stderr = \"\";\n let stdoutBytes = 0;\n let stderrBytes = 0;\n const MAX_STDOUT = 1_048_576;\n const MAX_STDERR = 65_536;\n child.stdout?.on(\"data\", (d: Buffer) => {\n stdoutBytes += d.length;\n if (stdoutBytes > MAX_STDOUT) { child.kill(\"SIGTERM\"); logWarn(TAG, `${hook.name} stdout exceeded 1MB \u2014 killed`); return; }\n stdout += d.toString();\n });\n child.stderr?.on(\"data\", (d: Buffer) => {\n if (stderrBytes > MAX_STDERR) return;\n stderrBytes += d.length;\n stderr += d.toString();\n });\n\n let killTimer: ReturnType<typeof setTimeout> | null = null;\n const timer = setTimeout(() => {\n child.kill(\"SIGTERM\");\n killTimer = setTimeout(() => { if (!child.killed) child.kill(\"SIGKILL\"); }, 1000);\n }, timeout);\n\n child.on(\"close\", (code) => {\n clearTimeout(timer);\n if (killTimer) clearTimeout(killTimer);\n if (stderr.trim()) logDebug(TAG, `${hook.name} stderr: ${stderr.trim().slice(0, 200)}`);\n if (code !== 0) {\n logDebug(TAG, `${hook.name} exited ${code}`);\n resolve(null);\n return;\n }\n if (!stdout.trim()) { resolve(null); return; }\n try {\n resolve(JSON.parse(stdout.trim()) as HookOutput);\n } catch {\n logDebug(TAG, `${hook.name} non-JSON output: ${stdout.trim().slice(0, 100)}`);\n resolve(null);\n }\n });\n\n child.on(\"error\", (err) => {\n clearTimeout(timer);\n logWarn(TAG, `${hook.name} spawn error: ${err.message}`);\n resolve(null);\n });\n\n child.stdin?.write(JSON.stringify(input));\n child.stdin?.end();\n });\n}\n"],
5
- "mappings": "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",
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
  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
  logError
13
- } from "./chunk-BUUVFUPO.js";
14
+ } from "./chunk-2BY6I4P5.js";
14
15
 
15
16
  // src/capabilities/capability.ts
16
17
  init_env_schema();
@@ -85,4 +86,4 @@ export {
85
86
  createCapabilityApi,
86
87
  discoverCapabilities
87
88
  };
88
- //# sourceMappingURL=chunk-6NR3OHEW.js.map
89
+ //# sourceMappingURL=chunk-H2RZ4NEJ.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/capabilities/capability.ts"],
4
4
  "sourcesContent": ["import { getEnv } from \"../components/env-schema.js\";\nimport { logError } from \"../components/logger.js\";\nimport { logAndSwallow } from \"../components/log-and-swallow.js\";\n\nconst TAG = \"capabilities\";\n/**\n * Capability system \u2014 typed registration API for bridge subsystems.\n *\n * Each capability is a self-contained module that registers commands,\n * heartbeat tasks, and services via a constrained CapabilityApi.\n * The bridge wires registered items into the appropriate subsystems.\n */\n\nimport type { HeartbeatTask } from \"abmind\";\nimport type { Config } from \"../types/config.js\";\nimport type { IMemorySystem } from \"abmind\";\nimport type { IKiroTransport } from \"../components/transport/kiro-transport.js\";\nimport type { SubagentRuntime } from \"../components/subagent-runtime.js\";\nimport type { CommandContext } from \"../components/commands/types.js\";\n\n/** Handler for a slash command registered by a capability. */\nexport type CapabilityCommandHandler = (text: string, ctx: CommandContext) => Promise<boolean>;\n\n/** Service with start/stop lifecycle. */\nexport interface CapabilityService {\n start(): Promise<void>;\n stop(): void;\n}\n\n/** Factory that creates a service instance. */\nexport type CapabilityServiceFactory = () => Promise<CapabilityService>;\n\n/** Read-only API given to each capability during registration. */\nexport interface CapabilityApi {\n readonly config: Config;\n readonly memory: IMemorySystem | null;\n readonly transport: IKiroTransport;\n readonly runtime: SubagentRuntime;\n readonly sessionManager: { getActiveSessionId(userId: string, platform: string): string };\n readonly sendSystemMessage?: (prompt: string) => Promise<void>;\n registerCommand(name: string, handler: CapabilityCommandHandler): void;\n registerHeartbeatTask(task: HeartbeatTask): void;\n registerService(name: string, factory: CapabilityServiceFactory): void;\n}\n\n/** A capability module exports a register function with this signature. */\nexport type CapabilityRegisterFn = (api: CapabilityApi) => void;\n\n/** Collected registrations from all capabilities. */\nexport interface CapabilityRegistry {\n commands: Map<string, CapabilityCommandHandler>;\n heartbeatTasks: HeartbeatTask[];\n services: Map<string, CapabilityServiceFactory>;\n}\n\n/** Create an empty registry. */\nexport function createCapabilityRegistry(): CapabilityRegistry {\n return {\n commands: new Map(),\n heartbeatTasks: [],\n services: new Map(),\n };\n}\n\n/** Create a CapabilityApi that collects registrations into the given registry. */\nexport function createCapabilityApi(\n registry: CapabilityRegistry,\n config: Config,\n memory: IMemorySystem | null,\n transport: IKiroTransport,\n runtime: SubagentRuntime,\n sessionManager?: { getActiveSessionId(userId: string, platform: string): string },\n sendSystemMessage?: (prompt: string) => Promise<void>,\n): CapabilityApi {\n return {\n config,\n memory,\n transport,\n runtime,\n sessionManager: sessionManager ?? { getActiveSessionId: () => \"master:telegram\" },\n sendSystemMessage,\n registerCommand(name, handler) { registry.commands.set(name, handler); },\n registerHeartbeatTask(task) { registry.heartbeatTasks.push(task); },\n registerService(name, factory) { registry.services.set(name, factory); },\n };\n}\n\n/** Discover and register capabilities with capability.json manifests. */\nexport async function discoverCapabilities(\n registry: CapabilityRegistry,\n config: Config,\n memory: IMemorySystem | null,\n transport: IKiroTransport,\n runtime: SubagentRuntime,\n capabilitiesDir: string,\n): Promise<string[]> {\n const { readdirSync, existsSync, readFileSync } = await import(\"node:fs\");\n const { join } = await import(\"node:path\");\n\n const disabled = new Set(\n getEnv().disabledCapabilities.split(\",\").map(s => s.trim()).filter(Boolean),\n );\n\n const loaded: string[] = [];\n let dirs: string[];\n try { dirs = readdirSync(capabilitiesDir, { withFileTypes: true }).filter(d => d.isDirectory()).map(d => d.name); }\n catch (err) { logAndSwallow(TAG, \"readdirSync capabilities\", err); return loaded; }\n\n for (const dir of dirs) {\n const manifestPath = join(capabilitiesDir, dir, \"capability.json\");\n if (!existsSync(manifestPath)) continue; // no manifest = core capability, skip\n\n let manifest: { name: string; description?: string };\n try { manifest = JSON.parse(readFileSync(manifestPath, \"utf-8\")); }\n catch (err) { logAndSwallow(TAG, \"JSON.parse capability manifest\", err); continue; }\n\n if (disabled.has(manifest.name)) continue;\n\n try {\n const mod = await import(join(capabilitiesDir, dir, \"index.js\"));\n const api = createCapabilityApi(registry, config, memory, transport, runtime);\n mod.register(api);\n loaded.push(manifest.name);\n } catch (err) { logError(\"capabilities\", `Failed to load capability \"${manifest.name}\": ${err instanceof Error ? err.message : String(err)}`); }\n }\n\n return loaded;\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;AAAA;AACA;AACA;AAEA,IAAM,MAAM;AAoDL,SAAS,2BAA+C;AAC7D,SAAO;AAAA,IACL,UAAU,oBAAI,IAAI;AAAA,IAClB,gBAAgB,CAAC;AAAA,IACjB,UAAU,oBAAI,IAAI;AAAA,EACpB;AACF;AAGO,SAAS,oBACd,UACA,QACA,QACA,WACA,SACA,gBACA,mBACe;AACf,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,gBAAgB,kBAAkB,EAAE,oBAAoB,MAAM,kBAAkB;AAAA,IAChF;AAAA,IACA,gBAAgB,MAAM,SAAS;AAAE,eAAS,SAAS,IAAI,MAAM,OAAO;AAAA,IAAG;AAAA,IACvE,sBAAsB,MAAM;AAAE,eAAS,eAAe,KAAK,IAAI;AAAA,IAAG;AAAA,IAClE,gBAAgB,MAAM,SAAS;AAAE,eAAS,SAAS,IAAI,MAAM,OAAO;AAAA,IAAG;AAAA,EACzE;AACF;AAGA,eAAsB,qBACpB,UACA,QACA,QACA,WACA,SACA,iBACmB;AACnB,QAAM,EAAE,aAAa,YAAY,aAAa,IAAI,MAAM,OAAO,SAAS;AACxE,QAAM,EAAE,KAAK,IAAI,MAAM,OAAO,WAAW;AAEzC,QAAM,WAAW,IAAI;AAAA,IACnB,OAAO,EAAE,qBAAqB,MAAM,GAAG,EAAE,IAAI,OAAK,EAAE,KAAK,CAAC,EAAE,OAAO,OAAO;AAAA,EAC5E;AAEA,QAAM,SAAmB,CAAC;AAC1B,MAAI;AACJ,MAAI;AAAE,WAAO,YAAY,iBAAiB,EAAE,eAAe,KAAK,CAAC,EAAE,OAAO,OAAK,EAAE,YAAY,CAAC,EAAE,IAAI,OAAK,EAAE,IAAI;AAAA,EAAG,SAC3G,KAAK;AAAE,kBAAc,KAAK,4BAA4B,GAAG;AAAG,WAAO;AAAA,EAAQ;AAElF,aAAW,OAAO,MAAM;AACtB,UAAM,eAAe,KAAK,iBAAiB,KAAK,iBAAiB;AACjE,QAAI,CAAC,WAAW,YAAY,EAAG;AAE/B,QAAI;AACJ,QAAI;AAAE,iBAAW,KAAK,MAAM,aAAa,cAAc,OAAO,CAAC;AAAA,IAAG,SAC3D,KAAK;AAAE,oBAAc,KAAK,kCAAkC,GAAG;AAAG;AAAA,IAAU;AAEnF,QAAI,SAAS,IAAI,SAAS,IAAI,EAAG;AAEjC,QAAI;AACF,YAAM,MAAM,MAAM,OAAO,KAAK,iBAAiB,KAAK,UAAU;AAC9D,YAAM,MAAM,oBAAoB,UAAU,QAAQ,QAAQ,WAAW,OAAO;AAC5E,UAAI,SAAS,GAAG;AAChB,aAAO,KAAK,SAAS,IAAI;AAAA,IAC3B,SAAS,KAAK;AAAE,eAAS,gBAAgB,8BAA8B,SAAS,IAAI,MAAM,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC,EAAE;AAAA,IAAG;AAAA,EACjJ;AAEA,SAAO;AACT;",
5
+ "mappings": ";;;;;;;;;;;;;;;;AAAA;AACA;AACA;AAEA,IAAM,MAAM;AAoDL,SAAS,2BAA+C;AAC7D,SAAO;AAAA,IACL,UAAU,oBAAI,IAAI;AAAA,IAClB,gBAAgB,CAAC;AAAA,IACjB,UAAU,oBAAI,IAAI;AAAA,EACpB;AACF;AAGO,SAAS,oBACd,UACA,QACA,QACA,WACA,SACA,gBACA,mBACe;AACf,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,gBAAgB,kBAAkB,EAAE,oBAAoB,MAAM,kBAAkB;AAAA,IAChF;AAAA,IACA,gBAAgB,MAAM,SAAS;AAAE,eAAS,SAAS,IAAI,MAAM,OAAO;AAAA,IAAG;AAAA,IACvE,sBAAsB,MAAM;AAAE,eAAS,eAAe,KAAK,IAAI;AAAA,IAAG;AAAA,IAClE,gBAAgB,MAAM,SAAS;AAAE,eAAS,SAAS,IAAI,MAAM,OAAO;AAAA,IAAG;AAAA,EACzE;AACF;AAGA,eAAsB,qBACpB,UACA,QACA,QACA,WACA,SACA,iBACmB;AACnB,QAAM,EAAE,aAAa,YAAY,aAAa,IAAI,MAAM,OAAO,SAAS;AACxE,QAAM,EAAE,KAAK,IAAI,MAAM,OAAO,WAAW;AAEzC,QAAM,WAAW,IAAI;AAAA,IACnB,OAAO,EAAE,qBAAqB,MAAM,GAAG,EAAE,IAAI,OAAK,EAAE,KAAK,CAAC,EAAE,OAAO,OAAO;AAAA,EAC5E;AAEA,QAAM,SAAmB,CAAC;AAC1B,MAAI;AACJ,MAAI;AAAE,WAAO,YAAY,iBAAiB,EAAE,eAAe,KAAK,CAAC,EAAE,OAAO,OAAK,EAAE,YAAY,CAAC,EAAE,IAAI,OAAK,EAAE,IAAI;AAAA,EAAG,SAC3G,KAAK;AAAE,kBAAc,KAAK,4BAA4B,GAAG;AAAG,WAAO;AAAA,EAAQ;AAElF,aAAW,OAAO,MAAM;AACtB,UAAM,eAAe,KAAK,iBAAiB,KAAK,iBAAiB;AACjE,QAAI,CAAC,WAAW,YAAY,EAAG;AAE/B,QAAI;AACJ,QAAI;AAAE,iBAAW,KAAK,MAAM,aAAa,cAAc,OAAO,CAAC;AAAA,IAAG,SAC3D,KAAK;AAAE,oBAAc,KAAK,kCAAkC,GAAG;AAAG;AAAA,IAAU;AAEnF,QAAI,SAAS,IAAI,SAAS,IAAI,EAAG;AAEjC,QAAI;AACF,YAAM,MAAM,MAAM,OAAO,KAAK,iBAAiB,KAAK,UAAU;AAC9D,YAAM,MAAM,oBAAoB,UAAU,QAAQ,QAAQ,WAAW,OAAO;AAC5E,UAAI,SAAS,GAAG;AAChB,aAAO,KAAK,SAAS,IAAI;AAAA,IAC3B,SAAS,KAAK;AAAE,eAAS,gBAAgB,8BAA8B,SAAS,IAAI,MAAM,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC,EAAE;AAAA,IAAG;AAAA,EACjJ;AAEA,SAAO;AACT;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,189 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __bundleCreateRequire } from 'node:module'; import { fileURLToPath as __bundleFileURLToPath } from 'node:url'; import { dirname as __bundleDirname } from 'node:path'; const require = __bundleCreateRequire(import.meta.url); const __chunk_filename = __bundleFileURLToPath(import.meta.url); const __chunk_dirname = __bundleDirname(__chunk_filename);
3
+ import {
4
+ AcpTransport
5
+ } from "./chunk-WX7GHGFX.js";
6
+ import {
7
+ getEnv,
8
+ init_env_schema
9
+ } from "./chunk-AQVOAQQI.js";
10
+ import {
11
+ init_logger,
12
+ logInfo,
13
+ logWarn
14
+ } from "./chunk-2BY6I4P5.js";
15
+
16
+ // src/components/agent-registry.ts
17
+ init_env_schema();
18
+ init_logger();
19
+ var AGENT_ROLES = {
20
+ professor: { agent: "professor", model: null, persona: "persona/core/SOUL.md", autoReinit: true, tag: "acp-main", trust: 3 },
21
+ dreamy: { agent: "dreamy", model: null, persona: "persona/prompts/sleep/00-identity.md", autoReinit: false, tag: "acp-sleep", trust: 2 },
22
+ coding: { agent: "coding-agent", model: null, persona: null, autoReinit: true, tag: "acp-coding", trust: 2 },
23
+ browsie: { agent: "browsie", model: null, persona: null, autoReinit: false, tag: "acp-browsie", trust: 1 },
24
+ task: { agent: "professor", model: null, persona: null, autoReinit: false, tag: "acp-task", trust: 2 }
25
+ };
26
+ function resolveModel(role) {
27
+ switch (role) {
28
+ case "dreamy":
29
+ return getEnv().sleepModel;
30
+ case "browsie":
31
+ return getEnv().browsingAgent;
32
+ case "coding":
33
+ return getEnv().codingModel;
34
+ default:
35
+ return void 0;
36
+ }
37
+ }
38
+ function createAgentTransport(role, tc, overrides) {
39
+ const cfg = { ...AGENT_ROLES[role], ...overrides };
40
+ const cliArgs = tc.agentCli === "gemini" ? ["--acp", "-y"] : void 0;
41
+ const model = tc.model ?? resolveModel(role);
42
+ return new AcpTransport(tc.cliPath, tc.workingDir, {
43
+ agent: cfg.agent ?? void 0,
44
+ model,
45
+ autoReinit: cfg.autoReinit,
46
+ tag: cfg.tag,
47
+ cliArgs
48
+ });
49
+ }
50
+ var SUBAGENT_TO_AGENT = {
51
+ sleep: "dreamy",
52
+ browse: "browsie",
53
+ coding: "coding",
54
+ task: "professor"
55
+ };
56
+ var SUBAGENT_ACP_ROLE = {
57
+ sleep: "dreamy",
58
+ browse: "browsie",
59
+ coding: "coding",
60
+ task: "task"
61
+ };
62
+ async function createSubagentTransport(role, registry, currentModel) {
63
+ const { resolveAgent, getEnvFallback, loadTransport } = await import("./transport-config-ANPS2RYT.js");
64
+ const tc = loadTransport();
65
+ const agentName = SUBAGENT_TO_AGENT[role];
66
+ const resolved = tc ? resolveAgent(agentName, tc) : null;
67
+ const profResolved = resolved ?? (tc ? resolveAgent("professor", tc) : null);
68
+ const agent = profResolved ?? (() => {
69
+ const fb = getEnvFallback();
70
+ return { model: fb.model, provider: fb.provider, providerName: fb.providerName, contextWindow: fb.contextWindow, maxOutput: fb.maxOutput, fallbacks: [] };
71
+ })();
72
+ if (agent.provider.transport === "api") {
73
+ const { DirectApiTransport } = await import("./direct-api-transport-SLJ2Z6NX.js");
74
+ const { FallbackPolicy } = await import("./fallback-policy-SR6ED5I3.js");
75
+ const apiKey = getEnv().getApiKey(agent.provider.apiKeyEnv ?? "API_KEY");
76
+ const startModel = currentModel ?? agent.model;
77
+ const candidates = [
78
+ { endpoint: agent.provider.endpoint ?? "http://localhost:11434/v1", apiKey, model: startModel, maxContext: agent.contextWindow }
79
+ ];
80
+ if (agent.model !== startModel && !candidates.some((c) => c.model === agent.model)) {
81
+ candidates.push({ endpoint: agent.provider.endpoint ?? "http://localhost:11434/v1", apiKey, model: agent.model, maxContext: agent.contextWindow });
82
+ }
83
+ const profAgent = tc ? resolveAgent("professor", tc) : null;
84
+ const agentTransport = agent.provider.transport ?? "api";
85
+ if (profAgent && profAgent.model !== startModel && !candidates.some((c) => c.model === profAgent.model)) {
86
+ const profTransport = profAgent.provider.transport ?? "api";
87
+ if (profTransport === agentTransport && profAgent.provider.endpoint) {
88
+ candidates.push({
89
+ endpoint: profAgent.provider.endpoint,
90
+ apiKey: profAgent.provider.apiKeyEnv ? getEnv().getApiKey(profAgent.provider.apiKeyEnv) : apiKey,
91
+ model: profAgent.model,
92
+ maxContext: profAgent.contextWindow
93
+ });
94
+ }
95
+ }
96
+ if (profAgent) {
97
+ for (const fb of profAgent.fallbacks ?? []) {
98
+ if (candidates.some((c) => c.model === fb.model)) continue;
99
+ const fbProvider = tc?.providers[fb.provider];
100
+ const fbEndpoint = fbProvider?.endpoint ?? profAgent.provider.endpoint;
101
+ if (!fbEndpoint) {
102
+ logWarn("subagent", `Skipping fallback ${fb.model} \u2014 no endpoint configured`);
103
+ continue;
104
+ }
105
+ const fbApiKey = fbProvider?.apiKeyEnv ? getEnv().getApiKey(fbProvider.apiKeyEnv) : apiKey;
106
+ candidates.push({ endpoint: fbEndpoint, apiKey: fbApiKey, model: fb.model, maxContext: profAgent.contextWindow });
107
+ }
108
+ for (const chainModel of profAgent.provider.fallbackChain ?? []) {
109
+ if (candidates.some((c) => c.model === chainModel)) continue;
110
+ if (!profAgent.provider.endpoint) {
111
+ logWarn("subagent", `Skipping chain model ${chainModel} \u2014 no endpoint configured`);
112
+ continue;
113
+ }
114
+ candidates.push({ endpoint: profAgent.provider.endpoint, apiKey, model: chainModel, maxContext: profAgent.contextWindow });
115
+ }
116
+ }
117
+ for (const fb of agent.fallbacks) {
118
+ if (candidates.some((c) => c.model === fb.model)) continue;
119
+ const fbProvider = tc?.providers[fb.provider];
120
+ const fbEndpoint = fbProvider?.endpoint ?? agent.provider.endpoint;
121
+ if (!fbEndpoint) {
122
+ logWarn("subagent", `Skipping fallback ${fb.model} \u2014 no endpoint configured`);
123
+ continue;
124
+ }
125
+ const fbApiKey = fbProvider?.apiKeyEnv ? getEnv().getApiKey(fbProvider.apiKeyEnv) : apiKey;
126
+ candidates.push({ endpoint: fbEndpoint, apiKey: fbApiKey, model: fb.model, maxContext: agent.contextWindow });
127
+ }
128
+ const chain2 = agent.provider.fallbackChain ?? [];
129
+ for (const chainModel of chain2) {
130
+ if (!candidates.some((c) => c.model === chainModel)) {
131
+ if (!agent.provider.endpoint) {
132
+ logWarn("subagent", `Skipping chain model ${chainModel} \u2014 no endpoint configured`);
133
+ continue;
134
+ }
135
+ candidates.push({
136
+ endpoint: agent.provider.endpoint,
137
+ apiKey,
138
+ model: chainModel,
139
+ maxContext: agent.contextWindow
140
+ });
141
+ }
142
+ }
143
+ const { ModelHealthRegistry } = await import("./model-health-registry-7ECZFCW4.js");
144
+ const policy = new FallbackPolicy(candidates, registry ?? new ModelHealthRegistry());
145
+ const transport = new DirectApiTransport({
146
+ endpoint: agent.provider.endpoint ?? "http://localhost:11434/v1",
147
+ apiKey,
148
+ model: startModel,
149
+ maxContext: agent.contextWindow,
150
+ maxOutput: agent.maxOutput,
151
+ maxTurns: tc?.maxTurns ?? 50
152
+ }, policy);
153
+ await transport.initialize();
154
+ logInfo("subagent", `${role} transport: DirectAPI ${agent.providerName} (model=${startModel}, ${candidates.length} candidates, shared registry: ${!!registry})`);
155
+ return { transport, model: agent.model };
156
+ }
157
+ const { loadAndValidateConfig } = await import("./config-C6VHRJQ7.js");
158
+ const config = await loadAndValidateConfig();
159
+ const chain = agent.provider.fallbackChain ?? [];
160
+ const modelsToTry = [agent.model, ...chain.filter((m) => m !== agent.model)];
161
+ for (let i = 0; i < modelsToTry.length; i++) {
162
+ const model = modelsToTry[i];
163
+ const transport = createAgentTransport(SUBAGENT_ACP_ROLE[role], {
164
+ cliPath: agent.provider.cli ?? config.transport.agentCliPath,
165
+ workingDir: config.transport.workingDir,
166
+ agentCli: agent.provider.cli ?? "kiro-cli",
167
+ model
168
+ });
169
+ try {
170
+ await transport.initialize();
171
+ if (i > 0) logWarn("subagent", `${role}: configured model failed, fell back to ${model}`);
172
+ logInfo("subagent", `${role} transport: ACP ${agent.providerName} (model=${model}${i > 0 ? ", fallback" : ""})`);
173
+ return { transport, model };
174
+ } catch (err) {
175
+ if (i < modelsToTry.length - 1) {
176
+ logWarn("subagent", `${role}: model ${model} init failed (${err instanceof Error ? err.message : String(err)}), trying ${modelsToTry[i + 1]}`);
177
+ continue;
178
+ }
179
+ throw err;
180
+ }
181
+ }
182
+ throw new Error(`${role}: all models exhausted (tried ${modelsToTry.join(", ")})`);
183
+ }
184
+
185
+ export {
186
+ createAgentTransport,
187
+ createSubagentTransport
188
+ };
189
+ //# sourceMappingURL=chunk-HVKJN3AG.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/components/agent-registry.ts"],
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 // Inherit professor's full fallback chain (fb1\u2192fb2\u2192fb3)\n if (profAgent) {\n for (const fb of profAgent.fallbacks ?? []) {\n if (candidates.some(c => c.model === fb.model)) continue;\n const fbProvider = tc?.providers[fb.provider];\n const fbEndpoint = fbProvider?.endpoint ?? profAgent.provider.endpoint;\n if (!fbEndpoint) { logWarn(\"subagent\", `Skipping fallback ${fb.model} \u2014 no endpoint configured`); continue; }\n const fbApiKey = fbProvider?.apiKeyEnv ? getEnv().getApiKey(fbProvider.apiKeyEnv) : apiKey;\n candidates.push({ endpoint: fbEndpoint, apiKey: fbApiKey, model: fb.model, maxContext: profAgent.contextWindow });\n }\n for (const chainModel of profAgent.provider.fallbackChain ?? []) {\n if (candidates.some(c => c.model === chainModel)) continue;\n if (!profAgent.provider.endpoint) { logWarn(\"subagent\", `Skipping chain model ${chainModel} \u2014 no endpoint configured`); continue; }\n candidates.push({ endpoint: profAgent.provider.endpoint, apiKey, model: chainModel, maxContext: profAgent.contextWindow });\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;\n if (!fbEndpoint) { logWarn(\"subagent\", `Skipping fallback ${fb.model} \u2014 no endpoint configured`); continue; }\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 if (!agent.provider.endpoint) { logWarn(\"subagent\", `Skipping chain model ${chainModel} \u2014 no endpoint configured`); continue; }\n candidates.push({\n endpoint: agent.provider.endpoint,\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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",
6
+ "names": ["chain"]
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/cli/deploy-lib/paths.ts
4
5
  import { homedir } from "node:os";
@@ -286,4 +287,4 @@ export {
286
287
  removePath,
287
288
  safeCopyTree
288
289
  };
289
- //# sourceMappingURL=chunk-265TPOPC.js.map
290
+ //# sourceMappingURL=chunk-HXJRZWKA.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/cli/deploy-lib/paths.ts", "../src/cli/deploy-lib/manifest.ts", "../src/cli/deploy-lib/lock.ts", "../src/cli/deploy-lib/releases.ts", "../src/cli/deploy-lib/cleanup.ts", "../src/cli/deploy-lib/safe-copy.ts"],
4
4
  "sourcesContent": ["/**\n * Runtime directory resolution for deploy-lib consumers.\n *\n * Rules:\n * - abtars runtime root: $ABTARS_HOME ?? ~/.abtars\n * - abmind runtime root: $ABMIND_HOME ?? ~/.abmind\n * - user bin dir: ~/.local/bin (always, XDG convention)\n *\n * All callers use these resolvers \u2014 never hardcode paths. Required by\n * plan #158 v7 (Ag2 round-2 nit): cross-repo manifest reads must respect\n * env-var overrides, not assume default locations.\n */\n\nimport { homedir } from 'node:os';\nimport { join } from 'node:path';\n\nexport type PackageName = 'abtars' | 'abmind';\n\nexport function resolveAbtarsHome(): string {\n return process.env['ABTARS_HOME'] ?? join(homedir(), '.abtars');\n}\n\nexport function resolveAbmindHome(): string {\n return process.env['ABMIND_HOME'] ?? join(homedir(), '.abmind');\n}\n\nexport function resolvePackageHome(pkg: PackageName): string {\n return pkg === 'abtars' ? resolveAbtarsHome() : resolveAbmindHome();\n}\n\nexport function resolveUserBinDir(): string {\n return join(homedir(), '.local', 'bin');\n}\n\nexport interface PackagePaths {\n readonly home: string;\n readonly config: string;\n readonly releases: string;\n readonly current: string;\n readonly nodeModules: string;\n readonly bin: string;\n readonly manifest: string;\n readonly lock: string;\n}\n\nexport function packagePaths(pkg: PackageName): PackagePaths {\n const home = resolvePackageHome(pkg);\n return {\n home,\n config: join(home, 'config'),\n releases: join(home, 'releases'),\n current: join(home, 'current'),\n nodeModules: join(home, 'node_modules'),\n bin: join(home, 'bin'),\n manifest: join(home, 'manifest.json'),\n lock: join(home, '.update.lock'),\n };\n}\n", "/**\n * Runtime manifest: the single source of truth for \"what's installed\".\n *\n * Location: $HOME/manifest.json (per packagePaths().manifest).\n * Read by: `status`, cross-package compatibility checks, doctor.\n * Written by: `install`, `update`, `rollback`, migrations.\n */\n\nimport { readFile, writeFile } from 'node:fs/promises';\n\nexport interface Manifest {\n readonly package: 'abtars' | 'abmind';\n /** Currently active release version (matches releases/<version>/ dirname). */\n readonly version: string;\n /** Git SHA of the source that produced the active release, if known. */\n readonly commit: string | null;\n /** Git branch, if known. */\n readonly branch: string | null;\n /** Hash of package-lock.json at time of last node_modules install. */\n readonly packageLockHash: string | null;\n /** ISO timestamp of when the active release became active. */\n readonly activatedAt: string;\n /** Hostname where install lives (informational). */\n readonly host: string;\n /** Source adapter that produced the current release (local | npm | github). */\n readonly source: 'local' | 'npm' | 'github';\n /** Applied migrations (ordered). */\n readonly migrationsApplied: readonly string[];\n /** Prior releases still retained (newest first). Empty on fresh install. */\n readonly priorReleases: readonly PriorRelease[];\n /** Pre-158 backup location, if this install was migrated from the flat layout. */\n readonly preMigrationBackup: string | null;\n /** Install mode: simple (manual), supervised (launchd/systemd user-scope), or supervised-daemon (system-scope). */\n readonly installMode?: 'simple' | 'supervised' | 'supervised-daemon';\n}\n\nexport interface PriorRelease {\n readonly version: string;\n readonly commit: string | null;\n readonly activatedAt: string;\n readonly packageLockHash: string | null;\n}\n\nexport async function readManifest(path: string): Promise<Manifest | null> {\n try {\n const raw = await readFile(path, 'utf-8');\n return JSON.parse(raw) as Manifest;\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') return null;\n throw err;\n }\n}\n\nexport async function writeManifest(path: string, manifest: Manifest): Promise<void> {\n await writeFile(path, JSON.stringify(manifest, null, 2) + '\\n', 'utf-8');\n}\n\nexport function emptyManifest(pkg: 'abtars' | 'abmind', host: string): Manifest {\n return {\n package: pkg,\n version: '',\n commit: null,\n branch: null,\n packageLockHash: null,\n activatedAt: new Date().toISOString(),\n host,\n source: 'local',\n migrationsApplied: [],\n priorReleases: [],\n preMigrationBackup: null,\n };\n}\n", "/**\n * Update lock: prevents concurrent `install` / `update` / `rollback` runs\n * in the same runtime from colliding.\n *\n * Mechanism: write a JSON pidfile at packagePaths().lock. If file exists and\n * the PID is alive and the mtime is recent (<1h), refuse to proceed. Otherwise\n * take the lock.\n *\n * Stale timeout matches plan: 1 hour (our updates take minutes). Compared to\n * claude-code's 7-day timeout which accommodates laptop sleep during a long\n * install \u2014 not applicable for our short-lived updates.\n */\n\nimport { readFile, unlink, writeFile } from 'node:fs/promises';\nimport { unlinkSync } from 'node:fs';\nimport { hostname } from 'node:os';\n\nconst STALE_MS = 60 * 60 * 1000; // 1 hour\n\nexport interface LockContent {\n readonly pid: number;\n readonly host: string;\n readonly startedAt: string;\n readonly cmd: string;\n}\n\nexport class LockHeldError extends Error {\n constructor(\n public readonly content: LockContent,\n public readonly isStale: boolean,\n ) {\n const staleMsg = isStale ? ' (appears stale \u2014 process may have crashed)' : '';\n super(\n `Lock held by pid ${content.pid} since ${content.startedAt} ` +\n `(cmd: ${content.cmd})${staleMsg}`,\n );\n this.name = 'LockHeldError';\n }\n}\n\nfunction isPidAlive(pid: number): boolean {\n try {\n process.kill(pid, 0);\n return true;\n } catch (err) {\n return (err as NodeJS.ErrnoException).code === 'EPERM';\n }\n}\n\nasync function readLock(path: string): Promise<LockContent | null> {\n try {\n return JSON.parse(await readFile(path, 'utf-8')) as LockContent;\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') return null;\n throw err;\n }\n}\n\n/**\n * Acquire the lock or throw LockHeldError. Returns a release function.\n * Caller must call release() on both success and failure; the returned\n * function is idempotent.\n */\nexport async function acquireLock(path: string, cmd: string): Promise<() => Promise<void>> {\n const existing = await readLock(path);\n if (existing) {\n const alive = isPidAlive(existing.pid);\n const started = Date.parse(existing.startedAt);\n const age = Date.now() - (Number.isFinite(started) ? started : 0);\n const stale = !alive || age > STALE_MS;\n if (!stale) {\n throw new LockHeldError(existing, false);\n }\n // Stale: fall through and take it, but tell the caller so doctor can surface.\n }\n\n const content: LockContent = {\n pid: process.pid,\n host: hostname(),\n startedAt: new Date().toISOString(),\n cmd,\n };\n await writeFile(path, JSON.stringify(content, null, 2) + '\\n', 'utf-8');\n\n let released = false;\n const release = async (): Promise<void> => {\n if (released) return;\n released = true;\n try {\n await unlink(path);\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code !== 'ENOENT') throw err;\n }\n };\n\n // Best-effort cleanup on unexpected exit.\n const exitHandler = (): void => {\n try {\n unlinkSync(path);\n } catch {\n /* ignore \u2014 stale detection handles orphans next run */\n }\n };\n process.once('exit', exitHandler);\n\n return release;\n}\n\nexport async function inspectLock(path: string): Promise<\n | { held: false }\n | { held: true; content: LockContent; stale: boolean }\n> {\n const content = await readLock(path);\n if (!content) return { held: false };\n const alive = isPidAlive(content.pid);\n const started = Date.parse(content.startedAt);\n const age = Date.now() - (Number.isFinite(started) ? started : 0);\n const stale = !alive || age > STALE_MS;\n return { held: true, content, stale };\n}\n", "/**\n * Release management: stage / activate (flip symlink) / prune.\n *\n * Invariants (per plan \u00A7\"Directory layout\"):\n * - releases/<version>/dist/ holds only compiled code, no node_modules\n * - node_modules/ lives at the package home root, shared across releases\n * - current is a symlink to releases/<version>/\n * - Retention = 3 (plan \u00A7\"Key invariants\"); oldest pruned on activate\n *\n * Activation is atomic via rename(2): write current.new \u2192 rename to current.\n * This replaces the existing symlink in one syscall; readers never see a\n * broken state.\n */\n\nimport { createHash } from 'node:crypto';\nimport { readFile, readdir, rename, rm, stat, symlink, unlink } from 'node:fs/promises';\nimport { basename, dirname, join } from 'node:path';\n\nconst RETENTION = 3;\n\nexport interface StagedRelease {\n readonly version: string;\n readonly stagedPath: string;\n readonly commit: string | null;\n readonly packageLockHash: string | null;\n readonly source: 'local' | 'npm' | 'github';\n}\n\n/**\n * List release versions in a releases/ dir, newest-activation-first as\n * reported by the caller (this function sorts lexicographically; callers\n * with a preferred order should rely on manifest priorReleases).\n */\nexport async function listReleases(releasesDir: string): Promise<string[]> {\n try {\n const entries = await readdir(releasesDir, { withFileTypes: true });\n return entries.filter((e) => e.isDirectory()).map((e) => e.name).sort();\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') return [];\n throw err;\n }\n}\n\n/**\n * Resolve the currently active release version from the `current` symlink.\n * Returns null if the symlink is missing or dangling.\n */\nexport async function readCurrent(currentLink: string): Promise<string | null> {\n try {\n const s = await stat(currentLink);\n if (!s.isDirectory()) return null;\n const { readlink } = await import('node:fs/promises');\n const target = await readlink(currentLink);\n // Target is like \"releases/vX.Y.Z\" or absolute path ending in vX.Y.Z.\n return basename(target);\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') return null;\n throw err;\n }\n}\n\n/**\n * Atomically flip the `current` symlink to point at releases/<version>/.\n * Link target is relative (so moves of the package home don't break it).\n */\nexport async function activate(currentLink: string, version: string): Promise<void> {\n const tmp = `${currentLink}.new`;\n // Relative symlink target: \"releases/<version>\"\n const target = join('releases', version);\n // Clear any leftover tmp from a crashed prior run.\n try {\n await unlink(tmp);\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code !== 'ENOENT') throw err;\n }\n await symlink(target, tmp);\n await rename(tmp, currentLink);\n}\n\n/**\n * Prune old releases, keeping the `keep` newest (by activation order provided\n * by caller, most-recent-first). Never removes the currently-active release\n * even if it falls outside the window.\n */\nexport async function pruneReleases(\n releasesDir: string,\n activatedOrder: readonly string[],\n currentVersion: string,\n keep: number = RETENTION,\n): Promise<string[]> {\n const retained = new Set<string>([currentVersion]);\n for (const v of activatedOrder.slice(0, keep)) retained.add(v);\n const all = await listReleases(releasesDir);\n const pruned: string[] = [];\n for (const version of all) {\n if (retained.has(version)) continue;\n await rm(join(releasesDir, version), { recursive: true, force: true });\n pruned.push(version);\n }\n return pruned;\n}\n\nexport async function hashFile(path: string): Promise<string | null> {\n try {\n const buf = await readFile(path);\n return createHash('sha256').update(buf).digest('hex');\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') return null;\n throw err;\n }\n}\n\n/**\n * Validate that `releases/<version>/` exists and has a dist/ subdir. Used by\n * rollback to refuse flipping to a pruned or partial release.\n */\nexport async function releaseExists(releasesDir: string, version: string): Promise<boolean> {\n try {\n const s = await stat(join(releasesDir, version, 'dist'));\n return s.isDirectory();\n } catch {\n return false;\n }\n}\n\nexport { RETENTION };\n// dirname import preserves tree-shake correctness with downstream tooling\nexport const _dirname = dirname;\n", "/**\n * Safety-guarded destructive ops for `reset` / `uninstall`.\n *\n * Cleanup utilities for deploy operations.\n * Key primitive: isUnsafeRemovalTarget() rejects catastrophic paths ('/',\n * '~', empty, etc.) BEFORE any caller invokes rm. Caller must always check.\n */\n\nimport { rm } from 'node:fs/promises';\nimport { homedir } from 'node:os';\nimport { resolve } from 'node:path';\n\n/**\n * True if the path is something we refuse to remove, regardless of flags.\n *\n * Rejects:\n * - empty / whitespace-only strings\n * - '/', '\\\\', or any path that resolves to root\n * - '~' (home), home dir itself, or parents of home\n * - Anything not under the user's home dir (defense-in-depth against\n * config pointing at /etc/... by mistake)\n *\n * Callers SHOULD still confirm with the user before removing even \"safe\"\n * paths; this function is a hard floor, not a substitute for confirmation.\n */\nexport function isUnsafeRemovalTarget(path: string): boolean {\n const trimmed = path.trim();\n if (trimmed === '') return true;\n if (trimmed === '~' || trimmed === '/' || trimmed === '\\\\') return true;\n const abs = resolve(trimmed);\n if (abs === '/' || abs === '') return true;\n const home = homedir();\n if (abs === home) return true;\n // Must be under home (defense in depth).\n const homeWithSep = home.endsWith('/') ? home : home + '/';\n if (!abs.startsWith(homeWithSep)) return true;\n return false;\n}\n\nexport interface RemovePlan {\n readonly path: string;\n readonly willRemove: boolean;\n readonly reason: string;\n}\n\n/**\n * Plan a remove without executing. Used by --dry-run flows in reset/uninstall.\n */\nexport function planRemoval(path: string): RemovePlan {\n if (isUnsafeRemovalTarget(path)) {\n return { path, willRemove: false, reason: 'refused: unsafe target' };\n }\n return { path, willRemove: true, reason: 'would remove recursively' };\n}\n\n/**\n * Remove a path after validating safety. Throws if the target is unsafe.\n * Returns true if the path was removed, false if it didn't exist.\n */\nexport async function removePath(path: string, opts: { dryRun?: boolean } = {}): Promise<boolean> {\n if (isUnsafeRemovalTarget(path)) {\n throw new Error(`Refused to remove unsafe target: ${path}`);\n }\n if (opts.dryRun) return true;\n try {\n await rm(path, { recursive: true });\n return true;\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') return false;\n throw err;\n }\n}\n", "/**\n * Safe recursive copy that skips non-regular-file entries Node's cp()\n * refuses to handle (EINVAL on sockets). Real runtime roots can contain\n * UNIX sockets (browser.sock, memory.sock, etc.) which are ephemeral IPC\n * endpoints \u2014 not data we want or can back up.\n *\n * Skipped: sockets, FIFOs, block devices, character devices.\n * Copied: regular files, directories, symlinks.\n */\n\nimport { cp, lstat } from 'node:fs/promises';\n\nexport interface SafeCopyOptions {\n readonly preserveTimestamps?: boolean;\n /** Overwrite existing entries at the destination. Default: false. */\n readonly force?: boolean;\n}\n\nasync function shouldCopy(src: string): Promise<boolean> {\n try {\n const s = await lstat(src);\n if (s.isSocket() || s.isFIFO() || s.isBlockDevice() || s.isCharacterDevice()) {\n return false;\n }\n return true;\n } catch {\n // Let the subsequent cp call surface the real error if any.\n return true;\n }\n}\n\nexport async function safeCopyTree(src: string, dst: string, opts: SafeCopyOptions = {}): Promise<void> {\n await cp(src, dst, {\n recursive: true,\n preserveTimestamps: opts.preserveTimestamps === true,\n force: opts.force === true,\n filter: shouldCopy,\n });\n}\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": ["readFile", "writeFile", "readFile", "unlink", "join", "rm", "homedir"]
7
7
  }