abtars 0.2.1-alpha.9 → 0.2.2

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 (309) hide show
  1. package/CHANGELOG.md +64 -0
  2. package/README.md +93 -34
  3. package/bundle/{_registry.generated-ADOYFJJ4.js → _registry.generated-KYX63MGY.js} +19 -16
  4. package/bundle/{_registry.generated-ADOYFJJ4.js.map → _registry.generated-KYX63MGY.js.map} +1 -1
  5. package/bundle/abtars-browser.js +5 -6
  6. package/bundle/abtars-browser.js.map +2 -2
  7. package/bundle/abtars-cli.js +205 -179
  8. package/bundle/abtars-cli.js.map +4 -4
  9. package/bundle/abtars-restart.js +4 -4
  10. package/bundle/abtars-rss.js +25 -81
  11. package/bundle/abtars-rss.js.map +2 -2
  12. package/bundle/abtars-task.js +4 -5
  13. package/bundle/abtars-task.js.map +2 -2
  14. package/bundle/abtars-todo.js +133 -0
  15. package/bundle/abtars-todo.js.map +7 -0
  16. package/bundle/abtars.js +305 -182
  17. package/bundle/abtars.js.map +3 -3
  18. package/bundle/action-gate-DYV2XQBP.js +191 -0
  19. package/bundle/action-gate-DYV2XQBP.js.map +7 -0
  20. package/bundle/{agent-api-rate-limit-C25WGSFF.js → agent-api-rate-limit-R2OFAQ3N.js} +4 -4
  21. package/bundle/{agent-registry-SYUFNSVB.js → agent-registry-5VL5KI6U.js} +8 -8
  22. package/bundle/agent-registry-PIS5XJHX.js +19 -0
  23. package/bundle/{bridge-lock-transport-HO545SBK.js → bridge-lock-transport-N6OGDOSE.js} +5 -5
  24. package/bundle/{browse-delivery-VTLEAVYA.js → browse-delivery-DXGMDMXA.js} +8 -7
  25. package/bundle/{browser-REIXOJ6S.js → browser-QMYGSP5W.js} +11 -10
  26. package/bundle/{capability-ILW3D5HS.js → capability-733TLH4W.js} +6 -6
  27. package/bundle/chunk-3IPMKYYH.js +672 -0
  28. package/bundle/chunk-3IPMKYYH.js.map +7 -0
  29. package/bundle/{chunk-PZE3J7ER.js → chunk-3OXQWII3.js} +2 -2
  30. package/bundle/{chunk-X5FBUA53.js → chunk-4WKWPU6U.js} +137 -30
  31. package/bundle/chunk-4WKWPU6U.js.map +7 -0
  32. package/bundle/{chunk-4KJ76TTE.js → chunk-4XW7YA3K.js} +3 -3
  33. package/bundle/{chunk-A5OJYQNU.js → chunk-5WFIAUQC.js} +49 -22
  34. package/bundle/chunk-5WFIAUQC.js.map +7 -0
  35. package/bundle/{chunk-ZVDVNSXK.js → chunk-7WFE2JI5.js} +7 -7
  36. package/bundle/{chunk-R36WIOYX.js → chunk-B52YRWR6.js} +34 -6
  37. package/bundle/chunk-B52YRWR6.js.map +7 -0
  38. package/bundle/{chunk-Q62SXS73.js → chunk-BBDKU4EH.js} +9 -9
  39. package/bundle/chunk-BBTQKKDO.js +258 -0
  40. package/bundle/chunk-BBTQKKDO.js.map +7 -0
  41. package/bundle/{chunk-EX2SRTUE.js → chunk-CYSGXNBY.js} +2 -2
  42. package/bundle/{chunk-LYEAHE5V.js → chunk-DCY7DGMT.js} +2 -2
  43. package/bundle/chunk-DGS7J4P6.js +13 -0
  44. package/bundle/chunk-DGS7J4P6.js.map +7 -0
  45. package/bundle/{chunk-LDKSCXGL.js → chunk-DHPFI7OF.js} +8 -6
  46. package/bundle/{chunk-LDKSCXGL.js.map → chunk-DHPFI7OF.js.map} +1 -1
  47. package/bundle/{chunk-G6IXMYIO.js → chunk-DO4INSXE.js} +2 -2
  48. package/bundle/{chunk-VA5WKN3Z.js → chunk-EGA6JQVV.js} +4 -4
  49. package/bundle/chunk-EKHNWFEQ.js +85 -0
  50. package/bundle/chunk-EKHNWFEQ.js.map +7 -0
  51. package/bundle/{chunk-URAQLQ2U.js → chunk-F3HMZFIL.js} +4 -4
  52. package/bundle/{chunk-OOKLEC6V.js → chunk-FY3QUO2L.js} +7 -7
  53. package/bundle/{chunk-2BY6I4P5.js → chunk-GUTRAMK3.js} +2 -2
  54. package/bundle/chunk-GXKJKYU4.js +1089 -0
  55. package/bundle/chunk-GXKJKYU4.js.map +7 -0
  56. package/bundle/{chunk-GPL57SRN.js → chunk-H7RX7UCR.js} +3 -3
  57. package/bundle/{chunk-BYDUMHXT.js → chunk-HAF2AFBW.js} +2 -2
  58. package/bundle/chunk-HAS5NEK7.js +189 -0
  59. package/bundle/chunk-HAS5NEK7.js.map +7 -0
  60. package/bundle/chunk-HB54S5OY.js +4036 -0
  61. package/bundle/chunk-HB54S5OY.js.map +7 -0
  62. package/bundle/{chunk-OZ4IZFV4.js → chunk-HJQZP5CK.js} +9 -9
  63. package/bundle/{chunk-OZ4IZFV4.js.map → chunk-HJQZP5CK.js.map} +2 -2
  64. package/bundle/{chunk-HEHD3GG5.js → chunk-ITB2K6LI.js} +6 -13
  65. package/bundle/{chunk-HEHD3GG5.js.map → chunk-ITB2K6LI.js.map} +3 -3
  66. package/bundle/{chunk-KSEIWT4T.js → chunk-JFKOPNKL.js} +10 -10
  67. package/bundle/chunk-JFKOPNKL.js.map +7 -0
  68. package/bundle/{chunk-KFENC7BM.js → chunk-L33WNMCP.js} +2 -2
  69. package/bundle/{chunk-JRG4EFMP.js → chunk-LBMETTUP.js} +3 -3
  70. package/bundle/{chunk-TYVI3ZWA.js → chunk-LJAG2URA.js} +10 -7
  71. package/bundle/chunk-LJAG2URA.js.map +7 -0
  72. package/bundle/{chunk-KWBGYWDO.js → chunk-N24ROESF.js} +15 -17
  73. package/bundle/chunk-N24ROESF.js.map +7 -0
  74. package/bundle/{chunk-P2BZSLJJ.js → chunk-N7UG4FID.js} +448 -129
  75. package/bundle/chunk-N7UG4FID.js.map +7 -0
  76. package/bundle/chunk-NIYVCGBC.js +330 -0
  77. package/bundle/chunk-NIYVCGBC.js.map +7 -0
  78. package/bundle/{chunk-TOUZC6NR.js → chunk-OKMN6J4Z.js} +3 -3
  79. package/bundle/{chunk-RV54J75Q.js → chunk-PKHYCNTT.js} +13 -12
  80. package/bundle/chunk-PKHYCNTT.js.map +7 -0
  81. package/bundle/{chunk-XZSYMCLF.js → chunk-PUDGA4RR.js} +7 -7
  82. package/bundle/{chunk-CELR236Q.js → chunk-Q7CH5DA3.js} +2 -2
  83. package/bundle/chunk-QSC6QZ44.js +183 -0
  84. package/bundle/chunk-QSC6QZ44.js.map +7 -0
  85. package/bundle/chunk-RITEGAW6.js +138 -0
  86. package/bundle/chunk-RITEGAW6.js.map +7 -0
  87. package/bundle/{chunk-UDZIZB5F.js → chunk-RTL7HO3N.js} +3 -3
  88. package/bundle/{chunk-ITG6XGBS.js → chunk-SA44ITVX.js} +10 -10
  89. package/bundle/{chunk-3MO2MDXJ.js → chunk-SA6YEFNG.js} +3 -3
  90. package/bundle/{chunk-4BUOO6WI.js → chunk-SMZQDMSZ.js} +31 -11
  91. package/bundle/chunk-SMZQDMSZ.js.map +7 -0
  92. package/bundle/{chunk-GBBTK6H2.js → chunk-SRFEIZQT.js} +4 -4
  93. package/bundle/{chunk-ELRAH7VL.js → chunk-VXUVKC66.js} +3 -3
  94. package/bundle/chunk-VY2BUO6L.js +4035 -0
  95. package/bundle/chunk-VY2BUO6L.js.map +7 -0
  96. package/bundle/chunk-W6ELWLAR.js +143 -0
  97. package/bundle/chunk-W6ELWLAR.js.map +7 -0
  98. package/bundle/{chunk-RSWUPUNA.js → chunk-WMWI3SJ7.js} +30 -6
  99. package/bundle/chunk-WMWI3SJ7.js.map +7 -0
  100. package/bundle/{chunk-MJ6PHMOK.js → chunk-WW5F2DCO.js} +11 -2
  101. package/bundle/chunk-WW5F2DCO.js.map +7 -0
  102. package/bundle/chunk-Y2XBDQP3.js +4055 -0
  103. package/bundle/chunk-Y2XBDQP3.js.map +7 -0
  104. package/bundle/chunk-YMGX6HNP.js +131 -0
  105. package/bundle/chunk-YMGX6HNP.js.map +7 -0
  106. package/bundle/chunk-YWZPKBO6.js +22 -0
  107. package/bundle/chunk-YWZPKBO6.js.map +7 -0
  108. package/bundle/chunk-ZAA7B5BN.js +22 -0
  109. package/bundle/chunk-ZAA7B5BN.js.map +7 -0
  110. package/bundle/{commands-WUGPBPHI.js → commands-IGRSOSK6.js} +15 -14
  111. package/bundle/commands-LAWVNQTO.js +34 -0
  112. package/bundle/commands-RBWY7YXB.js +34 -0
  113. package/bundle/commands-XFZNMZN6.js +34 -0
  114. package/bundle/{config-DQIGDX4W.js → config-NDEYF4AQ.js} +7 -7
  115. package/bundle/{daemon-NPKYZ3CJ.js → daemon-WOQXCKNL.js} +4 -4
  116. package/bundle/{delegation-tools-6FICZQ5G.js → delegation-tools-Z5OM3TXS.js} +5 -5
  117. package/bundle/{deploy-lib-import-SBKXDD3F.js → deploy-lib-import-6VJTYXEG.js} +2 -2
  118. package/bundle/{deps-HN6CEXA4.js → deps-65V7XXG4.js} +4 -4
  119. package/bundle/{direct-api-transport-TRV45NO6.js → direct-api-transport-OZICXTWQ.js} +43 -15
  120. package/bundle/direct-api-transport-OZICXTWQ.js.map +7 -0
  121. package/bundle/direct-api-transport-QIWA5ES2.js +889 -0
  122. package/bundle/direct-api-transport-QIWA5ES2.js.map +7 -0
  123. package/bundle/{discord-adapter-WA2MFRK3.js → discord-adapter-JFIIVG34.js} +27 -24
  124. package/bundle/discord-adapter-JFIIVG34.js.map +7 -0
  125. package/bundle/discord-adapter-U3FA5OTY.js +589 -0
  126. package/bundle/discord-adapter-U3FA5OTY.js.map +7 -0
  127. package/bundle/discord-adapter-W6L5KJ6T.js +589 -0
  128. package/bundle/discord-adapter-W6L5KJ6T.js.map +7 -0
  129. package/bundle/discord-adapter-WWM6ROTW.js +589 -0
  130. package/bundle/discord-adapter-WWM6ROTW.js.map +7 -0
  131. package/bundle/{dns-wakeup-RYOCQ6GR.js → dns-wakeup-N46RPU5E.js} +3 -3
  132. package/bundle/{doctor-R54GZPKL.js → doctor-PIPSGI3H.js} +18 -7
  133. package/bundle/{doctor-R54GZPKL.js.map → doctor-PIPSGI3H.js.map} +2 -2
  134. package/bundle/{ensure-invariants-BJIEOSJ2.js → ensure-invariants-3NOBCYWS.js} +4 -4
  135. package/bundle/{env-schema-XCPAJ6IZ.js → env-schema-T43X43BU.js} +4 -4
  136. package/bundle/{hook-system-POI5VRIX.js → hook-system-ZCVOFFRD.js} +4 -4
  137. package/bundle/hotskills-DTROJY6G.js +17 -0
  138. package/bundle/{install-SH4UVUXQ.js → install-I3CXVW52.js} +3 -3
  139. package/bundle/{install-manifest-QRWID3KZ.js → install-manifest-KBYD7SAY.js} +3 -3
  140. package/bundle/{irc-adapter-AIEP6OX6.js → irc-adapter-HXO5D4SW.js} +3 -3
  141. package/bundle/{irc-config-6VY67UPQ.js → irc-config-XN5VW2V4.js} +5 -5
  142. package/bundle/kanban-board-6Q5E5GEB.js +31 -0
  143. package/bundle/kanban-board-I52RHNHQ.js +31 -0
  144. package/bundle/{lazy-require-UFYFFX2R.js → lazy-require-R3JYCV5M.js} +4 -4
  145. package/bundle/{media-utils-MOE36VWY.js → media-utils-W7XW3SVV.js} +4 -4
  146. package/bundle/{message-pipeline-2MBT44FO.js → message-pipeline-4CTBJ6K2.js} +17 -14
  147. package/bundle/message-pipeline-4KL7OWUH.js +38 -0
  148. package/bundle/message-pipeline-GFKSHRFU.js +38 -0
  149. package/bundle/message-pipeline-TGI2WJJM.js +38 -0
  150. package/bundle/meta.json +3181 -2356
  151. package/bundle/{notification-U6F5ZBSG.js → notification-ULESRDHB.js} +7 -6
  152. package/bundle/{openrouter-credits-7XXO6QGQ.js → openrouter-credits-PLIKRY5D.js} +4 -4
  153. package/bundle/{paths-ZJYIDND2.js → paths-QQM74XYT.js} +4 -2
  154. package/bundle/{peer-client-T44VI7NB.js → peer-client-D2F5QWRV.js} +8 -8
  155. package/bundle/{peer-config-D5A4454H.js → peer-config-5SUIBJLG.js} +5 -5
  156. package/bundle/{phase-transport-FEZ4SIJJ.js → phase-transport-INFD6ELA.js} +10 -10
  157. package/bundle/phase-transport-KXFZ5BVF.js +23 -0
  158. package/bundle/{restore-MFSW3EBL.js → restore-Z6MF54HS.js} +4 -4
  159. package/bundle/{restore-MFSW3EBL.js.map → restore-Z6MF54HS.js.map} +2 -2
  160. package/bundle/{update-check-O5MS6B3L.js → rollback-5RXXLUD6.js} +5 -7
  161. package/bundle/{self-healer-utils-7NFH22VJ.js → self-healer-utils-WPKOVXJD.js} +4 -4
  162. package/bundle/{skill-stats-IPVKMWN3.js → skill-stats-NHNH47QW.js} +5 -5
  163. package/bundle/{sleep-BPWX3FCN.js → sleep-ENFZFUJJ.js} +8 -8
  164. package/bundle/sleep-ENFZFUJJ.js.map +7 -0
  165. package/bundle/{soul-bundle-BRIUDEQ2.js → soul-bundle-QTPWDJB2.js} +7 -7
  166. package/bundle/soul-bundle-QTPWDJB2.js.map +7 -0
  167. package/bundle/{soul-loader-GBXJ7EBH.js → soul-loader-LCPTN4PK.js} +8 -8
  168. package/bundle/soul-loader-LCPTN4PK.js.map +7 -0
  169. package/bundle/{sse-parser-anthropic-H42TTLBD.js → sse-parser-anthropic-PYDJM3UC.js} +4 -4
  170. package/bundle/{sse-parser-responses-WG2LY2ML.js → sse-parser-responses-FYT7A5WT.js} +4 -4
  171. package/bundle/{ssrf-guard-E2KBBC5E.js → ssrf-guard-R4P5OCTO.js} +4 -4
  172. package/bundle/{start-CBVKNEAT.js → start-4DNURGIY.js} +1 -1
  173. package/bundle/{stt-CF3CPFDC.js → stt-YN77NND6.js} +5 -5
  174. package/bundle/stt-YN77NND6.js.map +7 -0
  175. package/bundle/{subagent-runtime-4MTYUBIZ.js → subagent-runtime-5AYOXOU2.js} +5 -5
  176. package/bundle/subagent-runtime-5AYOXOU2.js.map +7 -0
  177. package/bundle/subagent-runtime-VKTX6Q2M.js +13 -0
  178. package/bundle/subagent-runtime-VKTX6Q2M.js.map +7 -0
  179. package/bundle/system-event-buffer-OEPPNUGK.js +17 -0
  180. package/bundle/system-event-buffer-OEPPNUGK.js.map +7 -0
  181. package/bundle/{system-message-TALP6GP2.js → system-message-BRU267FW.js} +3 -3
  182. package/bundle/{system-status-GLYXXDE3.js → system-status-7K2QTH3J.js} +58 -51
  183. package/bundle/system-status-7K2QTH3J.js.map +7 -0
  184. package/bundle/{hotskills-6ECHLXTJ.js → task-failure-buffer-DPM5MWZ5.js} +8 -7
  185. package/bundle/task-failure-buffer-DPM5MWZ5.js.map +7 -0
  186. package/bundle/{task-store-LC7ZMS72.js → task-store-VCBHAB43.js} +5 -5
  187. package/bundle/task-store-VCBHAB43.js.map +7 -0
  188. package/bundle/{telegram-adapter-BJJYXN7J.js → telegram-adapter-4KI4CJPG.js} +51 -33
  189. package/bundle/telegram-adapter-4KI4CJPG.js.map +7 -0
  190. package/bundle/telegram-adapter-76B4JRJJ.js +1080 -0
  191. package/bundle/telegram-adapter-76B4JRJJ.js.map +7 -0
  192. package/bundle/telegram-adapter-VZA74EMT.js +1080 -0
  193. package/bundle/telegram-adapter-VZA74EMT.js.map +7 -0
  194. package/bundle/telegram-adapter-ZO2CLU22.js +1080 -0
  195. package/bundle/telegram-adapter-ZO2CLU22.js.map +7 -0
  196. package/bundle/{tool-registry-T7XLTI2Q.js → tool-registry-CG7GIS64.js} +13 -9
  197. package/bundle/tool-registry-CG7GIS64.js.map +7 -0
  198. package/bundle/tool-registry-TGNU5AMG.js +43 -0
  199. package/bundle/tool-registry-TGNU5AMG.js.map +7 -0
  200. package/bundle/{tool-sandbox-OZMXJZLQ.js → tool-sandbox-TLAL55QP.js} +5 -5
  201. package/bundle/tool-sandbox-TLAL55QP.js.map +7 -0
  202. package/bundle/{transport-config-G5NKQXPJ.js → transport-config-JIKHB7GT.js} +8 -8
  203. package/bundle/transport-config-JIKHB7GT.js.map +7 -0
  204. package/bundle/update-check-AJMIBQGQ.js +81 -0
  205. package/bundle/update-check-AJMIBQGQ.js.map +7 -0
  206. package/bundle/{user-registry-NUVNEHJU.js → user-registry-PEFDZ5AV.js} +5 -5
  207. package/bundle/user-registry-PEFDZ5AV.js.map +7 -0
  208. package/core/skills/tools/gmail/SKILL.md +5 -14
  209. package/core/skills/tools/rss/SKILL.md +51 -0
  210. package/install-manifest.json +8 -2
  211. package/package.json +4 -2
  212. package/scripts/abtars-daemon.service +3 -0
  213. package/scripts/abtars@.service +3 -0
  214. package/scripts/build-and-deploy.sh +68 -0
  215. package/scripts/doctor.sh +38 -0
  216. package/scripts/emergency-deploy.sh +95 -0
  217. package/scripts/watchdog.sh +51 -5
  218. package/bundle/chunk-4BUOO6WI.js.map +0 -7
  219. package/bundle/chunk-A5OJYQNU.js.map +0 -7
  220. package/bundle/chunk-JX3ZZU3O.js +0 -82
  221. package/bundle/chunk-JX3ZZU3O.js.map +0 -7
  222. package/bundle/chunk-KJOCXWJ5.js +0 -131
  223. package/bundle/chunk-KJOCXWJ5.js.map +0 -7
  224. package/bundle/chunk-KSEIWT4T.js.map +0 -7
  225. package/bundle/chunk-KWBGYWDO.js.map +0 -7
  226. package/bundle/chunk-MJ6PHMOK.js.map +0 -7
  227. package/bundle/chunk-P2BZSLJJ.js.map +0 -7
  228. package/bundle/chunk-R36WIOYX.js.map +0 -7
  229. package/bundle/chunk-RE3F3CFW.js +0 -300
  230. package/bundle/chunk-RE3F3CFW.js.map +0 -7
  231. package/bundle/chunk-RSWUPUNA.js.map +0 -7
  232. package/bundle/chunk-RV54J75Q.js.map +0 -7
  233. package/bundle/chunk-TYVI3ZWA.js.map +0 -7
  234. package/bundle/chunk-X5FBUA53.js.map +0 -7
  235. package/bundle/direct-api-transport-TRV45NO6.js.map +0 -7
  236. package/bundle/discord-adapter-WA2MFRK3.js.map +0 -7
  237. package/bundle/system-status-GLYXXDE3.js.map +0 -7
  238. package/bundle/telegram-adapter-BJJYXN7J.js.map +0 -7
  239. /package/bundle/{agent-api-rate-limit-C25WGSFF.js.map → agent-api-rate-limit-R2OFAQ3N.js.map} +0 -0
  240. /package/bundle/{agent-registry-SYUFNSVB.js.map → agent-registry-5VL5KI6U.js.map} +0 -0
  241. /package/bundle/{bridge-lock-transport-HO545SBK.js.map → agent-registry-PIS5XJHX.js.map} +0 -0
  242. /package/bundle/{browse-delivery-VTLEAVYA.js.map → bridge-lock-transport-N6OGDOSE.js.map} +0 -0
  243. /package/bundle/{browser-REIXOJ6S.js.map → browse-delivery-DXGMDMXA.js.map} +0 -0
  244. /package/bundle/{capability-ILW3D5HS.js.map → browser-QMYGSP5W.js.map} +0 -0
  245. /package/bundle/{commands-WUGPBPHI.js.map → capability-733TLH4W.js.map} +0 -0
  246. /package/bundle/{chunk-PZE3J7ER.js.map → chunk-3OXQWII3.js.map} +0 -0
  247. /package/bundle/{chunk-4KJ76TTE.js.map → chunk-4XW7YA3K.js.map} +0 -0
  248. /package/bundle/{chunk-ZVDVNSXK.js.map → chunk-7WFE2JI5.js.map} +0 -0
  249. /package/bundle/{chunk-Q62SXS73.js.map → chunk-BBDKU4EH.js.map} +0 -0
  250. /package/bundle/{chunk-EX2SRTUE.js.map → chunk-CYSGXNBY.js.map} +0 -0
  251. /package/bundle/{chunk-LYEAHE5V.js.map → chunk-DCY7DGMT.js.map} +0 -0
  252. /package/bundle/{chunk-G6IXMYIO.js.map → chunk-DO4INSXE.js.map} +0 -0
  253. /package/bundle/{chunk-VA5WKN3Z.js.map → chunk-EGA6JQVV.js.map} +0 -0
  254. /package/bundle/{chunk-URAQLQ2U.js.map → chunk-F3HMZFIL.js.map} +0 -0
  255. /package/bundle/{chunk-OOKLEC6V.js.map → chunk-FY3QUO2L.js.map} +0 -0
  256. /package/bundle/{chunk-2BY6I4P5.js.map → chunk-GUTRAMK3.js.map} +0 -0
  257. /package/bundle/{chunk-GPL57SRN.js.map → chunk-H7RX7UCR.js.map} +0 -0
  258. /package/bundle/{chunk-BYDUMHXT.js.map → chunk-HAF2AFBW.js.map} +0 -0
  259. /package/bundle/{chunk-KFENC7BM.js.map → chunk-L33WNMCP.js.map} +0 -0
  260. /package/bundle/{chunk-JRG4EFMP.js.map → chunk-LBMETTUP.js.map} +0 -0
  261. /package/bundle/{chunk-TOUZC6NR.js.map → chunk-OKMN6J4Z.js.map} +0 -0
  262. /package/bundle/{chunk-XZSYMCLF.js.map → chunk-PUDGA4RR.js.map} +0 -0
  263. /package/bundle/{chunk-CELR236Q.js.map → chunk-Q7CH5DA3.js.map} +0 -0
  264. /package/bundle/{chunk-UDZIZB5F.js.map → chunk-RTL7HO3N.js.map} +0 -0
  265. /package/bundle/{chunk-ITG6XGBS.js.map → chunk-SA44ITVX.js.map} +0 -0
  266. /package/bundle/{chunk-3MO2MDXJ.js.map → chunk-SA6YEFNG.js.map} +0 -0
  267. /package/bundle/{chunk-GBBTK6H2.js.map → chunk-SRFEIZQT.js.map} +0 -0
  268. /package/bundle/{chunk-ELRAH7VL.js.map → chunk-VXUVKC66.js.map} +0 -0
  269. /package/bundle/{config-DQIGDX4W.js.map → commands-IGRSOSK6.js.map} +0 -0
  270. /package/bundle/{delegation-tools-6FICZQ5G.js.map → commands-LAWVNQTO.js.map} +0 -0
  271. /package/bundle/{deploy-lib-import-SBKXDD3F.js.map → commands-RBWY7YXB.js.map} +0 -0
  272. /package/bundle/{env-schema-XCPAJ6IZ.js.map → commands-XFZNMZN6.js.map} +0 -0
  273. /package/bundle/{hook-system-POI5VRIX.js.map → config-NDEYF4AQ.js.map} +0 -0
  274. /package/bundle/{daemon-NPKYZ3CJ.js.map → daemon-WOQXCKNL.js.map} +0 -0
  275. /package/bundle/{hotskills-6ECHLXTJ.js.map → delegation-tools-Z5OM3TXS.js.map} +0 -0
  276. /package/bundle/{install-SH4UVUXQ.js.map → deploy-lib-import-6VJTYXEG.js.map} +0 -0
  277. /package/bundle/{deps-HN6CEXA4.js.map → deps-65V7XXG4.js.map} +0 -0
  278. /package/bundle/{dns-wakeup-RYOCQ6GR.js.map → dns-wakeup-N46RPU5E.js.map} +0 -0
  279. /package/bundle/{ensure-invariants-BJIEOSJ2.js.map → ensure-invariants-3NOBCYWS.js.map} +0 -0
  280. /package/bundle/{lazy-require-UFYFFX2R.js.map → env-schema-T43X43BU.js.map} +0 -0
  281. /package/bundle/{message-pipeline-2MBT44FO.js.map → hook-system-ZCVOFFRD.js.map} +0 -0
  282. /package/bundle/{notification-U6F5ZBSG.js.map → hotskills-DTROJY6G.js.map} +0 -0
  283. /package/bundle/{paths-ZJYIDND2.js.map → install-I3CXVW52.js.map} +0 -0
  284. /package/bundle/{install-manifest-QRWID3KZ.js.map → install-manifest-KBYD7SAY.js.map} +0 -0
  285. /package/bundle/{irc-adapter-AIEP6OX6.js.map → irc-adapter-HXO5D4SW.js.map} +0 -0
  286. /package/bundle/{irc-config-6VY67UPQ.js.map → irc-config-XN5VW2V4.js.map} +0 -0
  287. /package/bundle/{peer-config-D5A4454H.js.map → kanban-board-6Q5E5GEB.js.map} +0 -0
  288. /package/bundle/{phase-transport-FEZ4SIJJ.js.map → kanban-board-I52RHNHQ.js.map} +0 -0
  289. /package/bundle/{skill-stats-IPVKMWN3.js.map → lazy-require-R3JYCV5M.js.map} +0 -0
  290. /package/bundle/{media-utils-MOE36VWY.js.map → media-utils-W7XW3SVV.js.map} +0 -0
  291. /package/bundle/{sleep-BPWX3FCN.js.map → message-pipeline-4CTBJ6K2.js.map} +0 -0
  292. /package/bundle/{soul-bundle-BRIUDEQ2.js.map → message-pipeline-4KL7OWUH.js.map} +0 -0
  293. /package/bundle/{soul-loader-GBXJ7EBH.js.map → message-pipeline-GFKSHRFU.js.map} +0 -0
  294. /package/bundle/{stt-CF3CPFDC.js.map → message-pipeline-TGI2WJJM.js.map} +0 -0
  295. /package/bundle/{subagent-runtime-4MTYUBIZ.js.map → notification-ULESRDHB.js.map} +0 -0
  296. /package/bundle/{openrouter-credits-7XXO6QGQ.js.map → openrouter-credits-PLIKRY5D.js.map} +0 -0
  297. /package/bundle/{task-store-LC7ZMS72.js.map → paths-QQM74XYT.js.map} +0 -0
  298. /package/bundle/{peer-client-T44VI7NB.js.map → peer-client-D2F5QWRV.js.map} +0 -0
  299. /package/bundle/{tool-registry-T7XLTI2Q.js.map → peer-config-5SUIBJLG.js.map} +0 -0
  300. /package/bundle/{tool-sandbox-OZMXJZLQ.js.map → phase-transport-INFD6ELA.js.map} +0 -0
  301. /package/bundle/{transport-config-G5NKQXPJ.js.map → phase-transport-KXFZ5BVF.js.map} +0 -0
  302. /package/bundle/{update-check-O5MS6B3L.js.map → rollback-5RXXLUD6.js.map} +0 -0
  303. /package/bundle/{self-healer-utils-7NFH22VJ.js.map → self-healer-utils-WPKOVXJD.js.map} +0 -0
  304. /package/bundle/{user-registry-NUVNEHJU.js.map → skill-stats-NHNH47QW.js.map} +0 -0
  305. /package/bundle/{sse-parser-anthropic-H42TTLBD.js.map → sse-parser-anthropic-PYDJM3UC.js.map} +0 -0
  306. /package/bundle/{sse-parser-responses-WG2LY2ML.js.map → sse-parser-responses-FYT7A5WT.js.map} +0 -0
  307. /package/bundle/{ssrf-guard-E2KBBC5E.js.map → ssrf-guard-R4P5OCTO.js.map} +0 -0
  308. /package/bundle/{start-CBVKNEAT.js.map → start-4DNURGIY.js.map} +0 -0
  309. /package/bundle/{system-message-TALP6GP2.js.map → system-message-BRU267FW.js.map} +0 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,64 @@
1
+ # Changelog
2
+
3
+ All notable changes to abTARS. Follows [Keep a Changelog](https://keepachangelog.com/).
4
+
5
+ ## [0.1.0] — 2026-05-31
6
+
7
+ First public release.
8
+
9
+ ### Core
10
+ - **Multi-platform** — Telegram, Discord, IRC with unified message pipeline
11
+ - **Multi-provider** — ollama, OpenRouter, Kiro CLI, Gemini CLI, Codex
12
+ - **Model management** — fallback chains, health tracking, hot-swap via `/model`
13
+ - **Session system** — Main, Browse, Code, Task sessions with concurrent support
14
+ - **Context window** — compaction, ABM-L compression, multi-tier assembly
15
+ - **Streaming** — SSE streaming for DirectAPI transport
16
+
17
+ ### Memory (via abmind)
18
+ - In-process memory integration (optional — bridge boots without it)
19
+ - 4-layer recall injected per-turn (active memory)
20
+ - Sleep maintenance (Dreamy subagent, 12-step overnight pipeline)
21
+ - Credential vault — AES-256-GCM encrypted secrets at rest
22
+
23
+ ### Security
24
+ - **Tool sandbox** — per-session policy enforcement (checkTool/checkPath)
25
+ - **A2A peer restrictions** — 3-layer defense (whitelist, injection scan, system prompt)
26
+ - **Rate limiter** — per-caller sliding window (MAX_AGENT_CALL_PER_HOUR/DAY)
27
+ - **Path traversal protection** — symlink resolution, blacklist enforcement
28
+ - **Secret auto-migration** — keys in .env.skills auto-moved to secret/
29
+ - **Log redaction** — class≥2 secrets never appear in logs
30
+
31
+ ### Lifecycle
32
+ - `abtars install` — supervised/supervised-daemon modes, systemd/launchd
33
+ - `abtars update` — staged deploy, <2s downtime
34
+ - `abtars start/stop/restart` — port-based stale process kill (#686)
35
+ - `abtars doctor` — FTS integrity probe, filesystem checks, auto-repair
36
+ - `abtars onboard` — interactive setup wizard
37
+ - `abtars logs/config/status/backup/rollback` — operational commands
38
+ - 4-layer watchdog — in-proc heartbeat, bash watchdog, OS supervisor, circuit breaker
39
+
40
+ ### Platforms
41
+ - **Telegram** — polling, inline keyboards, model picker, TTS, image handling
42
+ - **Discord** — polling, mention filter, chunking, multi-guild
43
+ - **IRC** — multi-channel, retry with backoff, hot-reload config
44
+
45
+ ### Features
46
+ - **Skills** — hot-reload from `~/.abtars/skills/`, self-authoring, usage tracking
47
+ - **Scheduled tasks** — cron-style with retry, gate scripts, notifications
48
+ - **Browser agent** — delegated web browsing via IPC subprocess
49
+ - **Peer-to-peer** — A2A protocol, TLS 1.3, JWT auth, digital signatures
50
+ - **Self-healer** — log watcher, auto-fix rules, circuit breaker, notification throttling
51
+ - **Dashboard** — web UI for status monitoring
52
+ - **MCP integration** — tool server support
53
+ - **Hooks** — extensible lifecycle hooks system
54
+
55
+ ### CLI
56
+ - `abtars install/uninstall/update/rollback/backup`
57
+ - `abtars start/stop/restart/status`
58
+ - `abtars doctor/onboard/passwd`
59
+ - `abtars logs/config`
60
+
61
+ ### Documentation
62
+ - Full wiki (29 pages): install, models, commands, sessions, skills, peers, security, resilience
63
+ - "How to Add a New Service" guide
64
+ - CLI reference
package/README.md CHANGED
@@ -1,29 +1,36 @@
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
@@ -37,37 +44,84 @@ abtars onboard
37
44
  sudo $(which abtars) daemon install
38
45
  ```
39
46
 
40
- Full installation guide: **[docs/wiki/install.md](docs/wiki/install.md)**
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)**
41
48
 
42
- ## Documentation
49
+ ## Features
43
50
 
44
- Docs live in the repo at **[docs/wiki/](docs/wiki/)** — always up to date with the code.
51
+ ### Memory (abmind)
45
52
 
46
- - [Installation](docs/wiki/install.md)
47
- - [Configuration](docs/wiki/commands.md)
48
- - [Commands](docs/wiki/cli.md)
49
- - [Memory System (abmind)](https://github.com/aksika/abmind)
50
- - [Skills & Extensions](docs/wiki/skills.md)
51
- - [Deployment & Supervision](docs/wiki/supervision.md)
53
+ Standalone package — works with abTARS, Kiro CLI, Gemini CLI, Claude Code, Codex, Hermes, or any MCP client.
54
+
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
62
+
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
52
78
 
53
- > **Note:** The [aksika.github.io](https://aksika.github.io/abtars/) site may be outdated. Always refer to the docs in this repo.
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
54
89
 
55
90
  ## Supported Transports
56
91
 
57
- | Transport | Provider |
58
- |-----------|----------|
59
- | ACP | kiro-cli, gemini-cli, Codex, Claude Code |
60
- | Direct API | OpenRouter, ollama, any OpenAI-compatible endpoint |
61
- | 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 |
62
97
 
63
98
  ## Requirements
64
99
 
65
100
  - Node.js 22+
66
- - A Telegram bot token
67
- - 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
68
103
 
69
104
  Optional: ollama + `nomic-embed-text` for memory embeddings.
70
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
+
71
125
  ## Development
72
126
 
73
127
  ```bash
@@ -76,6 +130,11 @@ cd abtars && npm install && npm run build
76
130
  npm test
77
131
  ```
78
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
+
79
138
  ## License
80
139
 
81
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-N24ROESF.js";
10
+ import {
11
+ hotskills_exports,
12
+ init_hotskills
13
+ } from "./chunk-NIYVCGBC.js";
14
+ import "./chunk-ITB2K6LI.js";
15
+ import "./chunk-HAF2AFBW.js";
14
16
  import "./chunk-JAJ3DUQ2.js";
15
- import "./chunk-BYDUMHXT.js";
16
- import "./chunk-UDZIZB5F.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-KYX63MGY.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
  }