abtars 0.2.1-alpha.8 → 0.2.1

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 (257) hide show
  1. package/README.md +98 -42
  2. package/bundle/{_registry.generated-ADOYFJJ4.js → _registry.generated-FNJOX7VV.js} +19 -16
  3. package/bundle/{_registry.generated-ADOYFJJ4.js.map → _registry.generated-FNJOX7VV.js.map} +1 -1
  4. package/bundle/abtars-browser.js +5 -6
  5. package/bundle/abtars-browser.js.map +2 -2
  6. package/bundle/abtars-cli.js +339 -271
  7. package/bundle/abtars-cli.js.map +4 -4
  8. package/bundle/abtars-restart.js +4 -4
  9. package/bundle/abtars-rss.js +25 -81
  10. package/bundle/abtars-rss.js.map +2 -2
  11. package/bundle/abtars-task.js +4 -5
  12. package/bundle/abtars-task.js.map +2 -2
  13. package/bundle/abtars-todo.js +133 -0
  14. package/bundle/abtars-todo.js.map +7 -0
  15. package/bundle/abtars.js +239 -155
  16. package/bundle/abtars.js.map +3 -3
  17. package/bundle/action-gate-DYV2XQBP.js +191 -0
  18. package/bundle/action-gate-DYV2XQBP.js.map +7 -0
  19. package/bundle/{agent-api-rate-limit-C25WGSFF.js → agent-api-rate-limit-R2OFAQ3N.js} +4 -4
  20. package/bundle/{agent-registry-SYUFNSVB.js → agent-registry-S2MNHQYQ.js} +8 -8
  21. package/bundle/{bridge-lock-transport-HO545SBK.js → bridge-lock-transport-N6OGDOSE.js} +5 -5
  22. package/bundle/{browse-delivery-VTLEAVYA.js → browse-delivery-DXGMDMXA.js} +8 -7
  23. package/bundle/{browser-REIXOJ6S.js → browser-QMYGSP5W.js} +11 -10
  24. package/bundle/{capability-ILW3D5HS.js → capability-733TLH4W.js} +6 -6
  25. package/bundle/{chunk-ZVDVNSXK.js → chunk-2SWKJX64.js} +7 -7
  26. package/bundle/{chunk-PZE3J7ER.js → chunk-3OXQWII3.js} +2 -2
  27. package/bundle/{chunk-R36WIOYX.js → chunk-3X6VGRL6.js} +33 -6
  28. package/bundle/chunk-3X6VGRL6.js.map +7 -0
  29. package/bundle/{chunk-4KJ76TTE.js → chunk-4XW7YA3K.js} +3 -3
  30. package/bundle/{chunk-Q62SXS73.js → chunk-BBDKU4EH.js} +9 -9
  31. package/bundle/{chunk-EX2SRTUE.js → chunk-CYSGXNBY.js} +2 -2
  32. package/bundle/{chunk-LYEAHE5V.js → chunk-DCY7DGMT.js} +2 -2
  33. package/bundle/chunk-DGS7J4P6.js +13 -0
  34. package/bundle/chunk-DGS7J4P6.js.map +7 -0
  35. package/bundle/{chunk-LDKSCXGL.js → chunk-DHPFI7OF.js} +8 -6
  36. package/bundle/{chunk-LDKSCXGL.js.map → chunk-DHPFI7OF.js.map} +1 -1
  37. package/bundle/{chunk-G6IXMYIO.js → chunk-DO4INSXE.js} +2 -2
  38. package/bundle/{chunk-VA5WKN3Z.js → chunk-EGA6JQVV.js} +4 -4
  39. package/bundle/chunk-EKHNWFEQ.js +85 -0
  40. package/bundle/chunk-EKHNWFEQ.js.map +7 -0
  41. package/bundle/{chunk-URAQLQ2U.js → chunk-F3HMZFIL.js} +4 -4
  42. package/bundle/{chunk-OOKLEC6V.js → chunk-FY3QUO2L.js} +7 -7
  43. package/bundle/{chunk-2BY6I4P5.js → chunk-GUTRAMK3.js} +2 -2
  44. package/bundle/{chunk-GPL57SRN.js → chunk-H7RX7UCR.js} +3 -3
  45. package/bundle/{chunk-BYDUMHXT.js → chunk-HAF2AFBW.js} +2 -2
  46. package/bundle/{chunk-A5OJYQNU.js → chunk-HCYENZAB.js} +49 -22
  47. package/bundle/chunk-HCYENZAB.js.map +7 -0
  48. package/bundle/{chunk-OZ4IZFV4.js → chunk-HJQZP5CK.js} +9 -9
  49. package/bundle/{chunk-OZ4IZFV4.js.map → chunk-HJQZP5CK.js.map} +2 -2
  50. package/bundle/{chunk-HEHD3GG5.js → chunk-ITB2K6LI.js} +6 -13
  51. package/bundle/{chunk-HEHD3GG5.js.map → chunk-ITB2K6LI.js.map} +3 -3
  52. package/bundle/{chunk-KSEIWT4T.js → chunk-JFKOPNKL.js} +10 -10
  53. package/bundle/chunk-JFKOPNKL.js.map +7 -0
  54. package/bundle/{chunk-4BUOO6WI.js → chunk-KL5QRHHK.js} +31 -11
  55. package/bundle/chunk-KL5QRHHK.js.map +7 -0
  56. package/bundle/{chunk-KFENC7BM.js → chunk-L33WNMCP.js} +2 -2
  57. package/bundle/{chunk-JRG4EFMP.js → chunk-LBMETTUP.js} +3 -3
  58. package/bundle/{chunk-TYVI3ZWA.js → chunk-LJAG2URA.js} +10 -7
  59. package/bundle/chunk-LJAG2URA.js.map +7 -0
  60. package/bundle/{chunk-RV54J75Q.js → chunk-MHK4UPM6.js} +13 -12
  61. package/bundle/chunk-MHK4UPM6.js.map +7 -0
  62. package/bundle/chunk-NIYVCGBC.js +330 -0
  63. package/bundle/chunk-NIYVCGBC.js.map +7 -0
  64. package/bundle/{chunk-P2BZSLJJ.js → chunk-OGZXYN6E.js} +392 -125
  65. package/bundle/chunk-OGZXYN6E.js.map +7 -0
  66. package/bundle/{chunk-TOUZC6NR.js → chunk-OKMN6J4Z.js} +3 -3
  67. package/bundle/{chunk-CELR236Q.js → chunk-Q7CH5DA3.js} +2 -2
  68. package/bundle/{chunk-XZSYMCLF.js → chunk-QIAFGDRL.js} +7 -7
  69. package/bundle/chunk-RITEGAW6.js +138 -0
  70. package/bundle/chunk-RITEGAW6.js.map +7 -0
  71. package/bundle/{chunk-UDZIZB5F.js → chunk-RTL7HO3N.js} +3 -3
  72. package/bundle/{chunk-ITG6XGBS.js → chunk-SA44ITVX.js} +10 -10
  73. package/bundle/{chunk-3MO2MDXJ.js → chunk-SA6YEFNG.js} +3 -3
  74. package/bundle/{chunk-GBBTK6H2.js → chunk-SRFEIZQT.js} +4 -4
  75. package/bundle/{chunk-ELRAH7VL.js → chunk-VXUVKC66.js} +3 -3
  76. package/bundle/{chunk-X5FBUA53.js → chunk-WLAVZSVZ.js} +69 -30
  77. package/bundle/chunk-WLAVZSVZ.js.map +7 -0
  78. package/bundle/{chunk-RSWUPUNA.js → chunk-WMWI3SJ7.js} +30 -6
  79. package/bundle/chunk-WMWI3SJ7.js.map +7 -0
  80. package/bundle/{chunk-MJ6PHMOK.js → chunk-WW5F2DCO.js} +11 -2
  81. package/bundle/chunk-WW5F2DCO.js.map +7 -0
  82. package/bundle/chunk-YWZPKBO6.js +22 -0
  83. package/bundle/chunk-YWZPKBO6.js.map +7 -0
  84. package/bundle/{chunk-KWBGYWDO.js → chunk-Z4SWEFIY.js} +12 -14
  85. package/bundle/chunk-Z4SWEFIY.js.map +7 -0
  86. package/bundle/chunk-ZAA7B5BN.js +22 -0
  87. package/bundle/chunk-ZAA7B5BN.js.map +7 -0
  88. package/bundle/{commands-WUGPBPHI.js → commands-AXW7L2MZ.js} +15 -14
  89. package/bundle/{config-DQIGDX4W.js → config-NDEYF4AQ.js} +7 -7
  90. package/bundle/{daemon-NPKYZ3CJ.js → daemon-WOQXCKNL.js} +4 -4
  91. package/bundle/{delegation-tools-6FICZQ5G.js → delegation-tools-Z5OM3TXS.js} +5 -5
  92. package/bundle/{deploy-lib-import-SBKXDD3F.js → deploy-lib-import-6VJTYXEG.js} +2 -2
  93. package/bundle/{deps-HN6CEXA4.js → deps-65V7XXG4.js} +4 -4
  94. package/bundle/{direct-api-transport-TRV45NO6.js → direct-api-transport-LSAUIP5S.js} +27 -15
  95. package/bundle/direct-api-transport-LSAUIP5S.js.map +7 -0
  96. package/bundle/{discord-adapter-WA2MFRK3.js → discord-adapter-LNWTIOUK.js} +27 -24
  97. package/bundle/discord-adapter-LNWTIOUK.js.map +7 -0
  98. package/bundle/{dns-wakeup-RYOCQ6GR.js → dns-wakeup-N46RPU5E.js} +3 -3
  99. package/bundle/{doctor-R54GZPKL.js → doctor-PIPSGI3H.js} +18 -7
  100. package/bundle/{doctor-R54GZPKL.js.map → doctor-PIPSGI3H.js.map} +2 -2
  101. package/bundle/{ensure-invariants-BJIEOSJ2.js → ensure-invariants-3NOBCYWS.js} +4 -4
  102. package/bundle/{env-schema-XCPAJ6IZ.js → env-schema-T43X43BU.js} +4 -4
  103. package/bundle/{hook-system-POI5VRIX.js → hook-system-ZCVOFFRD.js} +4 -4
  104. package/bundle/hotskills-DTROJY6G.js +17 -0
  105. package/bundle/{install-GEXWJYJC.js → install-FZT43PTH.js} +3 -3
  106. package/bundle/{install-manifest-QRWID3KZ.js → install-manifest-KBYD7SAY.js} +3 -3
  107. package/bundle/{irc-adapter-AIEP6OX6.js → irc-adapter-HXO5D4SW.js} +3 -3
  108. package/bundle/{irc-config-6VY67UPQ.js → irc-config-XN5VW2V4.js} +5 -5
  109. package/bundle/{lazy-require-UFYFFX2R.js → lazy-require-R3JYCV5M.js} +4 -4
  110. package/bundle/{media-utils-MOE36VWY.js → media-utils-W7XW3SVV.js} +4 -4
  111. package/bundle/{message-pipeline-2MBT44FO.js → message-pipeline-QX272U5X.js} +17 -14
  112. package/bundle/meta.json +2965 -2294
  113. package/bundle/{notification-U6F5ZBSG.js → notification-ULESRDHB.js} +7 -6
  114. package/bundle/{openrouter-credits-7XXO6QGQ.js → openrouter-credits-PLIKRY5D.js} +4 -4
  115. package/bundle/{paths-ZJYIDND2.js → paths-QQM74XYT.js} +4 -2
  116. package/bundle/{peer-client-T44VI7NB.js → peer-client-D2F5QWRV.js} +8 -8
  117. package/bundle/{peer-config-D5A4454H.js → peer-config-5SUIBJLG.js} +5 -5
  118. package/bundle/{phase-transport-FEZ4SIJJ.js → phase-transport-BSGROTHY.js} +10 -10
  119. package/bundle/restore-Z6MF54HS.js +151 -0
  120. package/bundle/restore-Z6MF54HS.js.map +7 -0
  121. package/bundle/{install-SH4UVUXQ.js → rollback-5RXXLUD6.js} +5 -7
  122. package/bundle/{self-healer-utils-7NFH22VJ.js → self-healer-utils-WPKOVXJD.js} +4 -4
  123. package/bundle/{skill-stats-IPVKMWN3.js → skill-stats-NHNH47QW.js} +5 -5
  124. package/bundle/{sleep-BPWX3FCN.js → sleep-K7EXAFGW.js} +8 -8
  125. package/bundle/{soul-bundle-BRIUDEQ2.js → soul-bundle-QTPWDJB2.js} +7 -7
  126. package/bundle/{soul-loader-GBXJ7EBH.js → soul-loader-LCPTN4PK.js} +8 -8
  127. package/bundle/{sse-parser-anthropic-H42TTLBD.js → sse-parser-anthropic-PYDJM3UC.js} +4 -4
  128. package/bundle/{sse-parser-responses-WG2LY2ML.js → sse-parser-responses-FYT7A5WT.js} +4 -4
  129. package/bundle/{ssrf-guard-E2KBBC5E.js → ssrf-guard-R4P5OCTO.js} +4 -4
  130. package/bundle/{start-CBVKNEAT.js → start-4DNURGIY.js} +1 -1
  131. package/bundle/{stt-CF3CPFDC.js → stt-YN77NND6.js} +5 -5
  132. package/bundle/{subagent-runtime-4MTYUBIZ.js → subagent-runtime-FQAT3564.js} +5 -5
  133. package/bundle/system-event-buffer-OEPPNUGK.js +17 -0
  134. package/bundle/system-event-buffer-OEPPNUGK.js.map +7 -0
  135. package/bundle/{system-message-TALP6GP2.js → system-message-BRU267FW.js} +3 -3
  136. package/bundle/{system-status-GLYXXDE3.js → system-status-7K2QTH3J.js} +58 -51
  137. package/bundle/system-status-7K2QTH3J.js.map +7 -0
  138. package/bundle/{hotskills-6ECHLXTJ.js → task-failure-buffer-DPM5MWZ5.js} +8 -7
  139. package/bundle/{task-store-LC7ZMS72.js → task-store-VCBHAB43.js} +5 -5
  140. package/bundle/{telegram-adapter-BJJYXN7J.js → telegram-adapter-LXLSG4SK.js} +51 -33
  141. package/bundle/telegram-adapter-LXLSG4SK.js.map +7 -0
  142. package/bundle/{tool-registry-T7XLTI2Q.js → tool-registry-5PXNSYOI.js} +12 -9
  143. package/bundle/{tool-sandbox-OZMXJZLQ.js → tool-sandbox-TLAL55QP.js} +5 -5
  144. package/bundle/{transport-config-G5NKQXPJ.js → transport-config-JIKHB7GT.js} +8 -8
  145. package/bundle/update-check-AJMIBQGQ.js +81 -0
  146. package/bundle/update-check-AJMIBQGQ.js.map +7 -0
  147. package/bundle/{user-registry-NUVNEHJU.js → user-registry-PEFDZ5AV.js} +5 -5
  148. package/core/skills/tools/rss/SKILL.md +51 -0
  149. package/install-manifest.json +4 -2
  150. package/package.json +4 -4
  151. package/scripts/build-and-deploy.sh +28 -0
  152. package/scripts/daily-backup.sh +1 -79
  153. package/scripts/doctor.sh +38 -0
  154. package/scripts/emergency-deploy.sh +95 -0
  155. package/scripts/watchdog.sh +51 -5
  156. package/bundle/chunk-4BUOO6WI.js.map +0 -7
  157. package/bundle/chunk-A5OJYQNU.js.map +0 -7
  158. package/bundle/chunk-JX3ZZU3O.js +0 -82
  159. package/bundle/chunk-JX3ZZU3O.js.map +0 -7
  160. package/bundle/chunk-KJOCXWJ5.js +0 -131
  161. package/bundle/chunk-KJOCXWJ5.js.map +0 -7
  162. package/bundle/chunk-KSEIWT4T.js.map +0 -7
  163. package/bundle/chunk-KWBGYWDO.js.map +0 -7
  164. package/bundle/chunk-MJ6PHMOK.js.map +0 -7
  165. package/bundle/chunk-P2BZSLJJ.js.map +0 -7
  166. package/bundle/chunk-R36WIOYX.js.map +0 -7
  167. package/bundle/chunk-RE3F3CFW.js +0 -300
  168. package/bundle/chunk-RE3F3CFW.js.map +0 -7
  169. package/bundle/chunk-RJJWPMUZ.js +0 -411
  170. package/bundle/chunk-RJJWPMUZ.js.map +0 -7
  171. package/bundle/chunk-RSWUPUNA.js.map +0 -7
  172. package/bundle/chunk-RV54J75Q.js.map +0 -7
  173. package/bundle/chunk-RVERPUHT.js +0 -289
  174. package/bundle/chunk-RVERPUHT.js.map +0 -7
  175. package/bundle/chunk-TYVI3ZWA.js.map +0 -7
  176. package/bundle/chunk-X5FBUA53.js.map +0 -7
  177. package/bundle/deploy-lib-import-HCMZCKZD.js +0 -50
  178. package/bundle/direct-api-transport-TRV45NO6.js.map +0 -7
  179. package/bundle/discord-adapter-WA2MFRK3.js.map +0 -7
  180. package/bundle/restore-ROJF22R2.js +0 -47
  181. package/bundle/restore-ROJF22R2.js.map +0 -7
  182. package/bundle/system-status-GLYXXDE3.js.map +0 -7
  183. package/bundle/telegram-adapter-BJJYXN7J.js.map +0 -7
  184. package/bundle/update-check-O5MS6B3L.js +0 -13
  185. package/bundle/user-registry-NUVNEHJU.js.map +0 -7
  186. /package/bundle/{agent-api-rate-limit-C25WGSFF.js.map → agent-api-rate-limit-R2OFAQ3N.js.map} +0 -0
  187. /package/bundle/{agent-registry-SYUFNSVB.js.map → agent-registry-S2MNHQYQ.js.map} +0 -0
  188. /package/bundle/{bridge-lock-transport-HO545SBK.js.map → bridge-lock-transport-N6OGDOSE.js.map} +0 -0
  189. /package/bundle/{browse-delivery-VTLEAVYA.js.map → browse-delivery-DXGMDMXA.js.map} +0 -0
  190. /package/bundle/{browser-REIXOJ6S.js.map → browser-QMYGSP5W.js.map} +0 -0
  191. /package/bundle/{capability-ILW3D5HS.js.map → capability-733TLH4W.js.map} +0 -0
  192. /package/bundle/{chunk-ZVDVNSXK.js.map → chunk-2SWKJX64.js.map} +0 -0
  193. /package/bundle/{chunk-PZE3J7ER.js.map → chunk-3OXQWII3.js.map} +0 -0
  194. /package/bundle/{chunk-4KJ76TTE.js.map → chunk-4XW7YA3K.js.map} +0 -0
  195. /package/bundle/{chunk-Q62SXS73.js.map → chunk-BBDKU4EH.js.map} +0 -0
  196. /package/bundle/{chunk-EX2SRTUE.js.map → chunk-CYSGXNBY.js.map} +0 -0
  197. /package/bundle/{chunk-LYEAHE5V.js.map → chunk-DCY7DGMT.js.map} +0 -0
  198. /package/bundle/{chunk-G6IXMYIO.js.map → chunk-DO4INSXE.js.map} +0 -0
  199. /package/bundle/{chunk-VA5WKN3Z.js.map → chunk-EGA6JQVV.js.map} +0 -0
  200. /package/bundle/{chunk-URAQLQ2U.js.map → chunk-F3HMZFIL.js.map} +0 -0
  201. /package/bundle/{chunk-OOKLEC6V.js.map → chunk-FY3QUO2L.js.map} +0 -0
  202. /package/bundle/{chunk-2BY6I4P5.js.map → chunk-GUTRAMK3.js.map} +0 -0
  203. /package/bundle/{chunk-GPL57SRN.js.map → chunk-H7RX7UCR.js.map} +0 -0
  204. /package/bundle/{chunk-BYDUMHXT.js.map → chunk-HAF2AFBW.js.map} +0 -0
  205. /package/bundle/{chunk-KFENC7BM.js.map → chunk-L33WNMCP.js.map} +0 -0
  206. /package/bundle/{chunk-JRG4EFMP.js.map → chunk-LBMETTUP.js.map} +0 -0
  207. /package/bundle/{chunk-TOUZC6NR.js.map → chunk-OKMN6J4Z.js.map} +0 -0
  208. /package/bundle/{chunk-CELR236Q.js.map → chunk-Q7CH5DA3.js.map} +0 -0
  209. /package/bundle/{chunk-XZSYMCLF.js.map → chunk-QIAFGDRL.js.map} +0 -0
  210. /package/bundle/{chunk-UDZIZB5F.js.map → chunk-RTL7HO3N.js.map} +0 -0
  211. /package/bundle/{chunk-ITG6XGBS.js.map → chunk-SA44ITVX.js.map} +0 -0
  212. /package/bundle/{chunk-3MO2MDXJ.js.map → chunk-SA6YEFNG.js.map} +0 -0
  213. /package/bundle/{chunk-GBBTK6H2.js.map → chunk-SRFEIZQT.js.map} +0 -0
  214. /package/bundle/{chunk-ELRAH7VL.js.map → chunk-VXUVKC66.js.map} +0 -0
  215. /package/bundle/{commands-WUGPBPHI.js.map → commands-AXW7L2MZ.js.map} +0 -0
  216. /package/bundle/{config-DQIGDX4W.js.map → config-NDEYF4AQ.js.map} +0 -0
  217. /package/bundle/{daemon-NPKYZ3CJ.js.map → daemon-WOQXCKNL.js.map} +0 -0
  218. /package/bundle/{delegation-tools-6FICZQ5G.js.map → delegation-tools-Z5OM3TXS.js.map} +0 -0
  219. /package/bundle/{deploy-lib-import-HCMZCKZD.js.map → deploy-lib-import-6VJTYXEG.js.map} +0 -0
  220. /package/bundle/{deps-HN6CEXA4.js.map → deps-65V7XXG4.js.map} +0 -0
  221. /package/bundle/{dns-wakeup-RYOCQ6GR.js.map → dns-wakeup-N46RPU5E.js.map} +0 -0
  222. /package/bundle/{ensure-invariants-BJIEOSJ2.js.map → ensure-invariants-3NOBCYWS.js.map} +0 -0
  223. /package/bundle/{deploy-lib-import-SBKXDD3F.js.map → env-schema-T43X43BU.js.map} +0 -0
  224. /package/bundle/{env-schema-XCPAJ6IZ.js.map → hook-system-ZCVOFFRD.js.map} +0 -0
  225. /package/bundle/{hook-system-POI5VRIX.js.map → hotskills-DTROJY6G.js.map} +0 -0
  226. /package/bundle/{hotskills-6ECHLXTJ.js.map → install-FZT43PTH.js.map} +0 -0
  227. /package/bundle/{install-manifest-QRWID3KZ.js.map → install-manifest-KBYD7SAY.js.map} +0 -0
  228. /package/bundle/{irc-adapter-AIEP6OX6.js.map → irc-adapter-HXO5D4SW.js.map} +0 -0
  229. /package/bundle/{irc-config-6VY67UPQ.js.map → irc-config-XN5VW2V4.js.map} +0 -0
  230. /package/bundle/{install-GEXWJYJC.js.map → lazy-require-R3JYCV5M.js.map} +0 -0
  231. /package/bundle/{media-utils-MOE36VWY.js.map → media-utils-W7XW3SVV.js.map} +0 -0
  232. /package/bundle/{install-SH4UVUXQ.js.map → message-pipeline-QX272U5X.js.map} +0 -0
  233. /package/bundle/{lazy-require-UFYFFX2R.js.map → notification-ULESRDHB.js.map} +0 -0
  234. /package/bundle/{openrouter-credits-7XXO6QGQ.js.map → openrouter-credits-PLIKRY5D.js.map} +0 -0
  235. /package/bundle/{message-pipeline-2MBT44FO.js.map → paths-QQM74XYT.js.map} +0 -0
  236. /package/bundle/{peer-client-T44VI7NB.js.map → peer-client-D2F5QWRV.js.map} +0 -0
  237. /package/bundle/{notification-U6F5ZBSG.js.map → peer-config-5SUIBJLG.js.map} +0 -0
  238. /package/bundle/{paths-ZJYIDND2.js.map → phase-transport-BSGROTHY.js.map} +0 -0
  239. /package/bundle/{peer-config-D5A4454H.js.map → rollback-5RXXLUD6.js.map} +0 -0
  240. /package/bundle/{self-healer-utils-7NFH22VJ.js.map → self-healer-utils-WPKOVXJD.js.map} +0 -0
  241. /package/bundle/{phase-transport-FEZ4SIJJ.js.map → skill-stats-NHNH47QW.js.map} +0 -0
  242. /package/bundle/{skill-stats-IPVKMWN3.js.map → sleep-K7EXAFGW.js.map} +0 -0
  243. /package/bundle/{sleep-BPWX3FCN.js.map → soul-bundle-QTPWDJB2.js.map} +0 -0
  244. /package/bundle/{soul-bundle-BRIUDEQ2.js.map → soul-loader-LCPTN4PK.js.map} +0 -0
  245. /package/bundle/{sse-parser-anthropic-H42TTLBD.js.map → sse-parser-anthropic-PYDJM3UC.js.map} +0 -0
  246. /package/bundle/{sse-parser-responses-WG2LY2ML.js.map → sse-parser-responses-FYT7A5WT.js.map} +0 -0
  247. /package/bundle/{ssrf-guard-E2KBBC5E.js.map → ssrf-guard-R4P5OCTO.js.map} +0 -0
  248. /package/bundle/{start-CBVKNEAT.js.map → start-4DNURGIY.js.map} +0 -0
  249. /package/bundle/{soul-loader-GBXJ7EBH.js.map → stt-YN77NND6.js.map} +0 -0
  250. /package/bundle/{stt-CF3CPFDC.js.map → subagent-runtime-FQAT3564.js.map} +0 -0
  251. /package/bundle/{system-message-TALP6GP2.js.map → system-message-BRU267FW.js.map} +0 -0
  252. /package/bundle/{subagent-runtime-4MTYUBIZ.js.map → task-failure-buffer-DPM5MWZ5.js.map} +0 -0
  253. /package/bundle/{task-store-LC7ZMS72.js.map → task-store-VCBHAB43.js.map} +0 -0
  254. /package/bundle/{tool-registry-T7XLTI2Q.js.map → tool-registry-5PXNSYOI.js.map} +0 -0
  255. /package/bundle/{tool-sandbox-OZMXJZLQ.js.map → tool-sandbox-TLAL55QP.js.map} +0 -0
  256. /package/bundle/{transport-config-G5NKQXPJ.js.map → transport-config-JIKHB7GT.js.map} +0 -0
  257. /package/bundle/{update-check-O5MS6B3L.js.map → user-registry-PEFDZ5AV.js.map} +0 -0
package/README.md CHANGED
@@ -1,76 +1,127 @@
1
1
  # abTARS
2
2
 
3
- A personal AI agent that runs on your machine, talks to you via Telegram/Discord/IRC, and remembers everything. Use frontier models through existing subscriptions — no per-token billing.
3
+ **Autonomous AI agent with persistent memory, self-healing, and peer-to-peer communication. Your hardware, your rules.**
4
4
 
5
- ## What it does
5
+ abTARS runs 24/7 on your machine — talks to you via Telegram/Discord/IRC, remembers everything across sessions, executes scheduled tasks, and recovers from failures without intervention. Use frontier models through existing CLI subscriptions at zero marginal cost.
6
6
 
7
- - **Always-on agent** — runs 24/7, responds on Telegram/Discord, executes tasks on schedule
8
- - **Persistent memory** — remembers conversations, learns preferences, extracts facts overnight
9
- - **Multi-model** — Claude, Gemini, OpenRouter (40+ models), ollama (local). Switch by changing config
10
- - **Self-healing** — 4-layer watchdog, auto model fallback, survives crashes and network drops
11
- - **Extensible** — skills system, MCP integration, agent-to-agent communication
7
+ ## Why abTARS
8
+
9
+ - 🧠 **Memory that curates itself** — multi-layer recall (5 search stages + reranking), nightly sleep maintenance, emotion tracking, contradiction detection, Memory Darwinism
10
+ - 🛡️ **Self-hosted, defense-in-depth** — classified memory (4 tiers, encrypted at rest), role-based access, injection scanning, secrets vault
11
+ - 🔄 **Runs months unattended** — 5-layer supervision, leaky-bucket model fallback, self-healing agent, standby-aware recovery
12
+ - 🤝 **Agent-to-agent** — P2P communication with Ed25519 signatures, mDNS wake-up, IRC coordination channels
13
+ - 💰 **Zero idle cost** — no LLM calls at rest, CLI subscription parasitism, budget sleep tiers
14
+
15
+ → **[Why abTARS vs OpenClaw & Hermes](https://aksika.github.io/abtars/why)**
16
+
17
+ ## Architecture
12
18
 
13
19
  ```
14
- You (Telegram/Discord/IRC)
20
+ You (Telegram / Discord / IRC / API client)
15
21
 
16
22
 
17
- abTARS (agent brain)
18
- ├── Memory (abmindpersistent, searchable, encrypted)
19
- ├── Personality (customizable identity + learned behavior)
20
- ├── Tools (browse, recall, store, bash, MCP servers)
21
- ├── Skills (hot-reloadable, self-authoring)
23
+ abTARS (bridge)
24
+ ├── abmind (memoryin-process, multi-layer recall, encrypted)
25
+ ├── Skills (core + self-authored during sleep + downloadable)
26
+ ├── Tools (browse, bash, MCP, peer_ask)
27
+ ├── Tasks (cron scheduler + retry + DoD checks)
28
+ ├── Agent Swarm (async background sessions)
22
29
 
23
- ├── kiro-cli → Claude (AWS subscription)
24
- ├── gemini-cli → Gemini
25
- ├── Codex / Claude Code OpenAI / Anthropic
26
- └── Direct API ollama, OpenRouter, any OpenAI-compatible
30
+ ├── kiro-cli → Claude, DeepSeek, MiniMax, Qwen (free tier)
31
+ ├── gemini-cli → Gemini 2.5
32
+ ├── Direct API → ollama, OpenRouter, any OpenAI-compatible
33
+ └── Peers other abTARS instances via /v1/chat/completions
27
34
  ```
28
35
 
29
36
  ## Quick Start
30
37
 
31
38
  ```bash
32
- npm install -g abtars
33
- abtars init
39
+ npm install -g abtars@alpha abmind@alpha
40
+ abmind install
41
+ abtars install
42
+ abtars update
43
+ abtars onboard
44
+ sudo $(which abtars) daemon install
34
45
  ```
35
46
 
36
- The init wizard walks you through:
37
- 1. Telegram bot token (from [@BotFather](https://t.me/BotFather))
38
- 2. Model provider (kiro-cli, gemini-cli, ollama, or OpenRouter)
39
- 3. Your user ID
47
+ After install, configure `~/.abtars/config/.env` with your Telegram bot token and at least one model provider. Full guide: **[docs/wiki/install.md](docs/wiki/install.md)**
40
48
 
41
- Then start:
49
+ ## Features
42
50
 
43
- ```bash
44
- abtars start
45
- ```
51
+ ### Memory (abmind)
46
52
 
47
- ## Documentation
53
+ Standalone package — works with abTARS, Kiro CLI, Gemini CLI, Claude Code, Codex, Hermes, or any MCP client.
48
54
 
49
- Full docs, configuration reference, and guides: **[Wiki](https://github.com/aksika/abtars/wiki)**
55
+ - Multi-layer recall: 5 search stages (porter FTS5 → trigram → binary signatures → vector embeddings → entity graph) + 7 post-processing layers (cross-stage penalty, context boost, emotion boost, spacing boost, quality boost, MMR reranking, interference detection)
56
+ - Agglutinative language support (Hungarian, Finnish, Turkish) — QWERTZ fallback, substring windows
57
+ - 25 emotion types with per-memory scoring, emotional arcs per topic
58
+ - 12-step nightly sleep: extract, consolidate, prune, detect contradictions, fix translations
59
+ - NATO-inspired classification: confidentiality × trust × integrity × credibility
60
+ - AES-256-GCM encrypted secrets vault with auto-redaction from history
61
+ - Memory Darwinism — unused memories fade, recalled memories strengthen
50
62
 
51
- - [Installation](https://github.com/aksika/abtars/wiki/Installation)
52
- - [Configuration](https://github.com/aksika/abtars/wiki/Configuration)
53
- - [Commands](https://github.com/aksika/abtars/wiki/Commands)
54
- - [Memory System (abmind)](https://github.com/aksika/abmind)
55
- - [Skills & Extensions](https://github.com/aksika/abtars/wiki/Skills)
56
- - [Deployment & Watchdog](https://github.com/aksika/abtars/wiki/Deployment)
63
+ ### Reliability
64
+
65
+ - **L1** Heartbeat — standby detection, bridge.lock, task dispatch
66
+ - **L2** In-process watchdog — detects stuck event loops
67
+ - **L3** External watchdog — catches dead PIDs, stale heartbeats. Circuit breaker prevents restart storms
68
+ - **L4** OS supervisor — launchd (macOS) / systemd (Linux) restarts the watchdog itself
69
+ - **L5** Preventive daily restart — eliminates memory leaks
70
+ - **Model health** — leaky-bucket per model, progressive penalties, arbitrarily long fallback chains
71
+ - **Self-healing agent** — diagnoses failed tasks, attempts repair, suspends after 3 failures
72
+
73
+ ### Agent Swarm
74
+
75
+ Main agent spawns independent background sessions (own context, own tool loop). Results auto-inject into the parent's next prompt. Up to 3 concurrent. `/wait` injects instructions into running sessions.
76
+
77
+ ### Peer-to-Peer
78
+
79
+ Multiple abTARS instances communicate via OpenAI-compatible `/v1/chat/completions` endpoint. Bearer auth per peer, Ed25519 signatures, mDNS wake-up for firewalled peers, hop-limit loop prevention.
80
+
81
+ ### Security
82
+
83
+ - Platform-level access: only registered chatId/userId can reach the agent
84
+ - Role-based: master/user/guest — commands, tools, memory all gated
85
+ - Secrets vault: AES-256-GCM, scrypt-derived key, auto-encrypt on ingest
86
+ - Injection scanner on all inbound messages
87
+ - SSRF guard on browser agent
88
+ - Credential redaction in all logs and exports
57
89
 
58
90
  ## Supported Transports
59
91
 
60
- | Transport | Provider |
61
- |-----------|----------|
62
- | ACP | kiro-cli, gemini-cli, Codex, Claude Code |
63
- | Direct API | OpenRouter, ollama, any OpenAI-compatible endpoint |
64
- | Hooks | abmind hooks (standalone CLI agents) |
92
+ | Transport | Providers |
93
+ |-----------|-----------|
94
+ | ACP (recommended) | kiro-cli, gemini-cli |
95
+ | Direct API | ollama, OpenRouter, any OpenAI-compatible endpoint |
96
+ | Hooks (standalone) | abmind lifecycle hooks on any CLI agent |
65
97
 
66
98
  ## Requirements
67
99
 
68
100
  - Node.js 22+
69
- - A Telegram bot token
70
- - At least one model provider (kiro-cli, gemini-cli, ollama, OpenRouter, Codex, or Claude Code)
101
+ - A Telegram bot token (Discord/IRC optional)
102
+ - At least one model provider
71
103
 
72
104
  Optional: ollama + `nomic-embed-text` for memory embeddings.
73
105
 
106
+ ## Documentation
107
+
108
+ - [Installation](docs/wiki/install.md)
109
+ - [Configuration](docs/wiki/commands.md)
110
+ - [CLI Reference](docs/wiki/cli.md)
111
+ - [Memory System (abmind)](https://github.com/aksika/abmind)
112
+ - [Skills & Extensions](docs/wiki/skills.md)
113
+ - [Deployment & Supervision](docs/wiki/supervision.md)
114
+
115
+ Full docs: **[aksika.github.io/abtars](https://aksika.github.io/abtars/)**
116
+
117
+ ## Numbers
118
+
119
+ - 1794 tests (abtars 1016 + abmind 778)
120
+ - 5 agent types (professor, dreamy, browsie, coding, cron)
121
+ - 5-layer supervision stack
122
+ - 3 platform adapters + OpenAI-compatible API
123
+ - 12-step nightly memory maintenance
124
+
74
125
  ## Development
75
126
 
76
127
  ```bash
@@ -79,6 +130,11 @@ cd abtars && npm install && npm run build
79
130
  npm test
80
131
  ```
81
132
 
133
+ ## Community
134
+
135
+ - **Discord:** [Join](https://discord.gg/pj2qbWJT8)
136
+ - **GitHub:** [aksika/abtars](https://github.com/aksika/abtars) · [aksika/abmind](https://github.com/aksika/abmind)
137
+
82
138
  ## License
83
139
 
84
140
  Apache-2.0
@@ -2,29 +2,32 @@
2
2
  import { createRequire as __bundleCreateRequire } from 'node:module'; import { fileURLToPath as __bundleFileURLToPath } from 'node:url'; import { dirname as __bundleDirname } from 'node:path'; const require = __bundleCreateRequire(import.meta.url); const __chunk_filename = __bundleFileURLToPath(import.meta.url); const __chunk_dirname = __bundleDirname(__chunk_filename);
3
3
  import {
4
4
  browser_exports
5
- } from "./chunk-KJOCXWJ5.js";
6
- import "./chunk-LDKSCXGL.js";
7
- import {
8
- hotskills_exports
9
- } from "./chunk-RE3F3CFW.js";
5
+ } from "./chunk-RITEGAW6.js";
6
+ import "./chunk-DHPFI7OF.js";
10
7
  import {
11
8
  sleep_exports
12
- } from "./chunk-KWBGYWDO.js";
13
- import "./chunk-HEHD3GG5.js";
9
+ } from "./chunk-Z4SWEFIY.js";
10
+ import {
11
+ hotskills_exports,
12
+ init_hotskills
13
+ } from "./chunk-NIYVCGBC.js";
14
+ import "./chunk-ITB2K6LI.js";
14
15
  import "./chunk-JAJ3DUQ2.js";
15
- import "./chunk-BYDUMHXT.js";
16
- import "./chunk-UDZIZB5F.js";
16
+ import "./chunk-HAF2AFBW.js";
17
+ import "./chunk-RTL7HO3N.js";
17
18
  import "./chunk-TBLYGCPQ.js";
18
- import "./chunk-GPL57SRN.js";
19
+ import "./chunk-H7RX7UCR.js";
19
20
  import "./chunk-MZWMYN4O.js";
20
- import "./chunk-KSEIWT4T.js";
21
- import "./chunk-EX2SRTUE.js";
22
- import "./chunk-PZE3J7ER.js";
23
- import "./chunk-2BY6I4P5.js";
24
- import "./chunk-MJ6PHMOK.js";
21
+ import "./chunk-JFKOPNKL.js";
22
+ import "./chunk-3OXQWII3.js";
23
+ import "./chunk-CYSGXNBY.js";
24
+ import "./chunk-GUTRAMK3.js";
25
+ import "./chunk-DGS7J4P6.js";
26
+ import "./chunk-WW5F2DCO.js";
25
27
  import "./chunk-7K2YZTLD.js";
26
28
 
27
29
  // src/capabilities/_registry.generated.ts
30
+ init_hotskills();
28
31
  var capabilities = [
29
32
  { name: "browser", module: browser_exports },
30
33
  { name: "hotskills", module: hotskills_exports },
@@ -33,4 +36,4 @@ var capabilities = [
33
36
  export {
34
37
  capabilities
35
38
  };
36
- //# sourceMappingURL=_registry.generated-ADOYFJJ4.js.map
39
+ //# sourceMappingURL=_registry.generated-FNJOX7VV.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/capabilities/_registry.generated.ts"],
4
4
  "sourcesContent": ["// AUTO-GENERATED by esbuild.config.js \u2014 do not edit\n// Static capability registry for bundled builds\n\nimport * as cap0 from \"./browser/index.js\";\nimport * as cap1 from \"./hotskills/index.js\";\nimport * as cap2 from \"./sleep/index.js\";\n\nexport const capabilities = [\n { name: \"browser\", module: cap0 },\n { name: \"hotskills\", module: cap1 },\n { name: \"sleep\", module: cap2 },\n];\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAOO,IAAM,eAAe;AAAA,EAC1B,EAAE,MAAM,WAAW,QAAQ,gBAAK;AAAA,EAChC,EAAE,MAAM,aAAa,QAAQ,kBAAK;AAAA,EAClC,EAAE,MAAM,SAAS,QAAQ,cAAK;AAChC;",
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA;AAGO,IAAM,eAAe;AAAA,EAC1B,EAAE,MAAM,WAAW,QAAQ,gBAAK;AAAA,EAChC,EAAE,MAAM,aAAa,QAAQ,kBAAK;AAAA,EAClC,EAAE,MAAM,SAAS,QAAQ,cAAK;AAChC;",
6
6
  "names": []
7
7
  }
@@ -1,4 +1,3 @@
1
- #!/usr/bin/env node
2
1
  #!/usr/bin/env node
3
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);
4
3
  import {
@@ -6,11 +5,11 @@ import {
6
5
  BrowserTool,
7
6
  DomainAllowlist,
8
7
  getDefaultSocketPath
9
- } from "./chunk-KSEIWT4T.js";
10
- import "./chunk-EX2SRTUE.js";
11
- import "./chunk-PZE3J7ER.js";
12
- import "./chunk-2BY6I4P5.js";
13
- import "./chunk-MJ6PHMOK.js";
8
+ } from "./chunk-JFKOPNKL.js";
9
+ import "./chunk-3OXQWII3.js";
10
+ import "./chunk-CYSGXNBY.js";
11
+ import "./chunk-GUTRAMK3.js";
12
+ import "./chunk-WW5F2DCO.js";
14
13
  import "./chunk-7K2YZTLD.js";
15
14
 
16
15
  // src/cli/abtars-browser.ts
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/cli/abtars-browser.ts"],
4
- "sourcesContent": ["#!/usr/bin/env node\n/**\n * abtars-browser \u2014 standalone CLI for agent-initiated browser control.\n *\n * Gives the LLM agent direct control over a headless Chromium browser.\n * Follows the same pattern as abmind recall and abmind store.\n *\n * Usage:\n * abtars-browser --action navigate --url \"https://example.com\" --session-id default\n * abtars-browser --action fill --selector \"#email\" --value \"user@example.com\" --session-id auth\n * abtars-browser --action click --selector \"text=Sign In\" --session-id auth\n * abtars-browser --action extract_text --session-id auth\n * abtars-browser --action screenshot --full-page --session-id auth\n * abtars-browser --action get_page_info --session-id auth\n * abtars-browser --action close_session --session-id auth\n *\n * Output (success):\n * { \"success\": true, \"title\": \"Example\", \"url\": \"https://example.com\", \"status\": 200 }\n *\n * Output (error):\n * { \"success\": false, \"error\": \"navigate action requires --url\" }\n */\n\nimport * as net from \"node:net\";\nimport * as fs from \"node:fs\";\nimport type { BrowserAction, BrowserActionType, BrowserToolResult } from \"../types/browser.js\";\nimport { BrowserManager } from \"../capabilities/browser/browser-manager.js\";\nimport { BrowserTool } from \"../capabilities/browser/browser-tool.js\";\nimport { DomainAllowlist } from \"../capabilities/browser/domain-allowlist.js\";\nimport { getDefaultSocketPath } from \"../capabilities/browser/browser-ipc-server.js\";\n\n/** The 7 valid browser action types. */\nconst VALID_ACTIONS: ReadonlySet<string> = new Set<BrowserActionType>([\n \"navigate\",\n \"click\",\n \"fill\",\n \"extract_text\",\n \"screenshot\",\n \"get_page_info\",\n \"close_session\",\n \"set_cookie\",\n]);\n\nexport type RawBrowserArgs = {\n action?: string;\n url?: string;\n selector?: string;\n value?: string;\n sessionId: string;\n fullPage: boolean;\n cookieFile?: string;\n engine?: string;\n};\n\n/**\n * Parse raw CLI argv into a RawBrowserArgs object.\n * Exported for unit testing.\n */\nexport function parseArgs(argv: string[]): RawBrowserArgs {\n const args = argv.slice(2);\n const parsed: RawBrowserArgs = { sessionId: \"default\", fullPage: false };\n\n for (let i = 0; i < args.length; i++) {\n switch (args[i]) {\n case \"--action\": parsed.action = args[++i] ?? \"\"; break;\n case \"--url\": parsed.url = args[++i] ?? \"\"; break;\n case \"--selector\": parsed.selector = args[++i] ?? \"\"; break;\n case \"--value\": parsed.value = args[++i] ?? \"\"; break;\n case \"--session-id\": parsed.sessionId = args[++i] ?? \"default\"; break;\n case \"--full-page\": parsed.fullPage = true; break;\n case \"--cookie-file\": parsed.cookieFile = args[++i] ?? \"\"; break;\n case \"--engine\": parsed.engine = args[++i] ?? \"\"; break;\n }\n }\n\n return parsed;\n}\n\n/**\n * Validate raw CLI arguments and return either a parsed BrowserAction or an error string.\n * Exported for unit testing.\n */\nexport function validateArgs(\n raw: RawBrowserArgs,\n): { ok: true; action: BrowserAction; raw: RawBrowserArgs } | { ok: false; error: string } {\n // Validate action is one of the 7 valid types\n if (!raw.action) {\n return { ok: false, error: \"--action is required\" };\n }\n if (!VALID_ACTIONS.has(raw.action)) {\n return {\n ok: false,\n error: `Invalid action \"${raw.action}\". Valid actions: ${[...VALID_ACTIONS].join(\", \")}`,\n };\n }\n\n const actionType = raw.action as BrowserActionType;\n\n // Validate required params per action\n switch (actionType) {\n case \"navigate\":\n if (!raw.url) return { ok: false, error: \"navigate action requires --url\" };\n break;\n case \"click\":\n if (!raw.selector) return { ok: false, error: \"click action requires --selector\" };\n break;\n case \"fill\":\n if (!raw.selector) return { ok: false, error: \"fill action requires --selector\" };\n if (raw.value === undefined) return { ok: false, error: \"fill action requires --value\" };\n break;\n case \"set_cookie\":\n if (!raw.cookieFile) return { ok: false, error: \"set_cookie action requires --cookie-file\" };\n break;\n // extract_text, screenshot, get_page_info, close_session have no extra required params\n }\n\n return {\n ok: true,\n raw,\n action: {\n action: actionType,\n sessionId: raw.sessionId,\n url: raw.url,\n selector: raw.selector,\n value: raw.value,\n fullPage: raw.fullPage,\n cookieFile: raw.cookieFile,\n },\n };\n}\n\n// --- CLI entry point (only runs when executed directly) ---\n\n/**\n * Try executing the action via the main process IPC socket.\n * Returns null if socket unavailable (caller should fall back to ephemeral).\n */\nexport function executeViaIpc(\n action: BrowserAction,\n socketPath?: string,\n): Promise<BrowserToolResult | null> {\n const sock = socketPath ?? getDefaultSocketPath();\n\n if (!fs.existsSync(sock)) return Promise.resolve(null);\n\n return new Promise<BrowserToolResult | null>((resolve) => {\n const conn = net.createConnection(sock, () => {\n conn.end(JSON.stringify(action) + \"\\n\");\n });\n\n let data = \"\";\n conn.on(\"data\", (chunk) => { data += chunk.toString(); });\n\n conn.on(\"end\", () => {\n try {\n resolve(JSON.parse(data.trim()) as BrowserToolResult);\n } catch {\n resolve(null);\n }\n });\n\n conn.on(\"error\", () => resolve(null));\n\n // Don't hang forever if main process is stuck.\n conn.setTimeout(60_000, () => {\n conn.destroy();\n resolve(null);\n });\n });\n}\n\nasync function main() {\n const raw = parseArgs(process.argv);\n const validation = validateArgs(raw);\n\n if (!validation.ok) {\n console.log(JSON.stringify({ success: false, error: validation.error }));\n process.exit(1);\n }\n\n // Try IPC to main process first (sessions persist across calls).\n const ipcResult = await executeViaIpc(validation.action);\n if (ipcResult !== null) {\n console.log(JSON.stringify(ipcResult));\n return;\n }\n\n // Fallback: ephemeral browser (no session persistence).\n if (validation.raw.engine) process.env[\"BROWSER_ENGINE\"] = validation.raw.engine;\n else if (!process.env[\"BROWSER_ENGINE\"]) process.env[\"BROWSER_ENGINE\"] = \"patchright\";\n const browserManager = new BrowserManager();\n const allowlist = DomainAllowlist.fromEnv();\n const tool = new BrowserTool(browserManager, allowlist);\n\n try {\n const result = await tool.execute(validation.action);\n console.log(JSON.stringify(result));\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n console.log(JSON.stringify({ success: false, error: message }));\n } finally {\n await browserManager.shutdown();\n }\n}\n\n// Only run when executed as a script, not when imported for testing\nconst isDirectRun =\n process.argv[1]?.endsWith(\"abtars-browser.ts\") ||\n process.argv[1]?.endsWith(\"abtars-browser.js\");\nif (isDirectRun) {\n main();\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * abtars-browser \u2014 standalone CLI for agent-initiated browser control.\n *\n * Gives the LLM agent direct control over a headless Chromium browser.\n * Follows the same pattern as abmind recall and abmind store.\n *\n * Usage:\n * abtars-browser --action navigate --url \"https://example.com\" --session-id default\n * abtars-browser --action fill --selector \"#email\" --value \"user@example.com\" --session-id auth\n * abtars-browser --action click --selector \"text=Sign In\" --session-id auth\n * abtars-browser --action extract_text --session-id auth\n * abtars-browser --action screenshot --full-page --session-id auth\n * abtars-browser --action get_page_info --session-id auth\n * abtars-browser --action close_session --session-id auth\n *\n * Output (success):\n * { \"success\": true, \"title\": \"Example\", \"url\": \"https://example.com\", \"status\": 200 }\n *\n * Output (error):\n * { \"success\": false, \"error\": \"navigate action requires --url\" }\n */\n\nimport * as net from \"node:net\";\nimport * as fs from \"node:fs\";\nimport type { BrowserAction, BrowserActionType, BrowserToolResult } from \"../types/browser.js\";\nimport { BrowserManager } from \"../capabilities/browser/browser-manager.js\";\nimport { BrowserTool } from \"../capabilities/browser/browser-tool.js\";\nimport { DomainAllowlist } from \"../capabilities/browser/domain-allowlist.js\";\nimport { getDefaultSocketPath } from \"../capabilities/browser/browser-ipc-server.js\";\n\n/** The 7 valid browser action types. */\nconst VALID_ACTIONS: ReadonlySet<string> = new Set<BrowserActionType>([\n \"navigate\",\n \"click\",\n \"fill\",\n \"extract_text\",\n \"screenshot\",\n \"get_page_info\",\n \"close_session\",\n \"set_cookie\",\n]);\n\nexport type RawBrowserArgs = {\n action?: string;\n url?: string;\n selector?: string;\n value?: string;\n sessionId: string;\n fullPage: boolean;\n cookieFile?: string;\n engine?: string;\n};\n\n/**\n * Parse raw CLI argv into a RawBrowserArgs object.\n * Exported for unit testing.\n */\nexport function parseArgs(argv: string[]): RawBrowserArgs {\n const args = argv.slice(2);\n const parsed: RawBrowserArgs = { sessionId: \"default\", fullPage: false };\n\n for (let i = 0; i < args.length; i++) {\n switch (args[i]) {\n case \"--action\": parsed.action = args[++i] ?? \"\"; break;\n case \"--url\": parsed.url = args[++i] ?? \"\"; break;\n case \"--selector\": parsed.selector = args[++i] ?? \"\"; break;\n case \"--value\": parsed.value = args[++i] ?? \"\"; break;\n case \"--session-id\": parsed.sessionId = args[++i] ?? \"default\"; break;\n case \"--full-page\": parsed.fullPage = true; break;\n case \"--cookie-file\": parsed.cookieFile = args[++i] ?? \"\"; break;\n case \"--engine\": parsed.engine = args[++i] ?? \"\"; break;\n }\n }\n\n return parsed;\n}\n\n/**\n * Validate raw CLI arguments and return either a parsed BrowserAction or an error string.\n * Exported for unit testing.\n */\nexport function validateArgs(\n raw: RawBrowserArgs,\n): { ok: true; action: BrowserAction; raw: RawBrowserArgs } | { ok: false; error: string } {\n // Validate action is one of the 7 valid types\n if (!raw.action) {\n return { ok: false, error: \"--action is required\" };\n }\n if (!VALID_ACTIONS.has(raw.action)) {\n return {\n ok: false,\n error: `Invalid action \"${raw.action}\". Valid actions: ${[...VALID_ACTIONS].join(\", \")}`,\n };\n }\n\n const actionType = raw.action as BrowserActionType;\n\n // Validate required params per action\n switch (actionType) {\n case \"navigate\":\n if (!raw.url) return { ok: false, error: \"navigate action requires --url\" };\n break;\n case \"click\":\n if (!raw.selector) return { ok: false, error: \"click action requires --selector\" };\n break;\n case \"fill\":\n if (!raw.selector) return { ok: false, error: \"fill action requires --selector\" };\n if (raw.value === undefined) return { ok: false, error: \"fill action requires --value\" };\n break;\n case \"set_cookie\":\n if (!raw.cookieFile) return { ok: false, error: \"set_cookie action requires --cookie-file\" };\n break;\n // extract_text, screenshot, get_page_info, close_session have no extra required params\n }\n\n return {\n ok: true,\n raw,\n action: {\n action: actionType,\n sessionId: raw.sessionId,\n url: raw.url,\n selector: raw.selector,\n value: raw.value,\n fullPage: raw.fullPage,\n cookieFile: raw.cookieFile,\n },\n };\n}\n\n// --- CLI entry point (only runs when executed directly) ---\n\n/**\n * Try executing the action via the main process IPC socket.\n * Returns null if socket unavailable (caller should fall back to ephemeral).\n */\nexport function executeViaIpc(\n action: BrowserAction,\n socketPath?: string,\n): Promise<BrowserToolResult | null> {\n const sock = socketPath ?? getDefaultSocketPath();\n\n if (!fs.existsSync(sock)) return Promise.resolve(null);\n\n return new Promise<BrowserToolResult | null>((resolve) => {\n const conn = net.createConnection(sock, () => {\n conn.end(JSON.stringify(action) + \"\\n\");\n });\n\n let data = \"\";\n conn.on(\"data\", (chunk) => { data += chunk.toString(); });\n\n conn.on(\"end\", () => {\n try {\n resolve(JSON.parse(data.trim()) as BrowserToolResult);\n } catch {\n resolve(null);\n }\n });\n\n conn.on(\"error\", () => resolve(null));\n\n // Don't hang forever if main process is stuck.\n conn.setTimeout(60_000, () => {\n conn.destroy();\n resolve(null);\n });\n });\n}\n\nasync function main() {\n const raw = parseArgs(process.argv);\n const validation = validateArgs(raw);\n\n if (!validation.ok) {\n console.log(JSON.stringify({ success: false, error: validation.error }));\n process.exit(1);\n }\n\n // Try IPC to main process first (sessions persist across calls).\n const ipcResult = await executeViaIpc(validation.action);\n if (ipcResult !== null) {\n console.log(JSON.stringify(ipcResult));\n return;\n }\n\n // Fallback: ephemeral browser (no session persistence).\n if (validation.raw.engine) process.env[\"BROWSER_ENGINE\"] = validation.raw.engine;\n else if (!process.env[\"BROWSER_ENGINE\"]) process.env[\"BROWSER_ENGINE\"] = \"patchright\";\n const browserManager = new BrowserManager();\n const allowlist = DomainAllowlist.fromEnv();\n const tool = new BrowserTool(browserManager, allowlist);\n\n try {\n const result = await tool.execute(validation.action);\n console.log(JSON.stringify(result));\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n console.log(JSON.stringify({ success: false, error: message }));\n } finally {\n await browserManager.shutdown();\n }\n}\n\n// Only run when executed as a script, not when imported for testing\nconst isDirectRun =\n process.argv[1]?.endsWith(\"abtars-browser.ts\") ||\n process.argv[1]?.endsWith(\"abtars-browser.js\");\nif (isDirectRun) {\n main();\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }