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.
- package/CHANGELOG.md +64 -0
- package/README.md +93 -34
- package/bundle/{_registry.generated-ADOYFJJ4.js → _registry.generated-KYX63MGY.js} +19 -16
- package/bundle/{_registry.generated-ADOYFJJ4.js.map → _registry.generated-KYX63MGY.js.map} +1 -1
- package/bundle/abtars-browser.js +5 -6
- package/bundle/abtars-browser.js.map +2 -2
- package/bundle/abtars-cli.js +205 -179
- package/bundle/abtars-cli.js.map +4 -4
- package/bundle/abtars-restart.js +4 -4
- package/bundle/abtars-rss.js +25 -81
- package/bundle/abtars-rss.js.map +2 -2
- package/bundle/abtars-task.js +4 -5
- package/bundle/abtars-task.js.map +2 -2
- package/bundle/abtars-todo.js +133 -0
- package/bundle/abtars-todo.js.map +7 -0
- package/bundle/abtars.js +305 -182
- package/bundle/abtars.js.map +3 -3
- package/bundle/action-gate-DYV2XQBP.js +191 -0
- package/bundle/action-gate-DYV2XQBP.js.map +7 -0
- package/bundle/{agent-api-rate-limit-C25WGSFF.js → agent-api-rate-limit-R2OFAQ3N.js} +4 -4
- package/bundle/{agent-registry-SYUFNSVB.js → agent-registry-5VL5KI6U.js} +8 -8
- package/bundle/agent-registry-PIS5XJHX.js +19 -0
- package/bundle/{bridge-lock-transport-HO545SBK.js → bridge-lock-transport-N6OGDOSE.js} +5 -5
- package/bundle/{browse-delivery-VTLEAVYA.js → browse-delivery-DXGMDMXA.js} +8 -7
- package/bundle/{browser-REIXOJ6S.js → browser-QMYGSP5W.js} +11 -10
- package/bundle/{capability-ILW3D5HS.js → capability-733TLH4W.js} +6 -6
- package/bundle/chunk-3IPMKYYH.js +672 -0
- package/bundle/chunk-3IPMKYYH.js.map +7 -0
- package/bundle/{chunk-PZE3J7ER.js → chunk-3OXQWII3.js} +2 -2
- package/bundle/{chunk-X5FBUA53.js → chunk-4WKWPU6U.js} +137 -30
- package/bundle/chunk-4WKWPU6U.js.map +7 -0
- package/bundle/{chunk-4KJ76TTE.js → chunk-4XW7YA3K.js} +3 -3
- package/bundle/{chunk-A5OJYQNU.js → chunk-5WFIAUQC.js} +49 -22
- package/bundle/chunk-5WFIAUQC.js.map +7 -0
- package/bundle/{chunk-ZVDVNSXK.js → chunk-7WFE2JI5.js} +7 -7
- package/bundle/{chunk-R36WIOYX.js → chunk-B52YRWR6.js} +34 -6
- package/bundle/chunk-B52YRWR6.js.map +7 -0
- package/bundle/{chunk-Q62SXS73.js → chunk-BBDKU4EH.js} +9 -9
- package/bundle/chunk-BBTQKKDO.js +258 -0
- package/bundle/chunk-BBTQKKDO.js.map +7 -0
- package/bundle/{chunk-EX2SRTUE.js → chunk-CYSGXNBY.js} +2 -2
- package/bundle/{chunk-LYEAHE5V.js → chunk-DCY7DGMT.js} +2 -2
- package/bundle/chunk-DGS7J4P6.js +13 -0
- package/bundle/chunk-DGS7J4P6.js.map +7 -0
- package/bundle/{chunk-LDKSCXGL.js → chunk-DHPFI7OF.js} +8 -6
- package/bundle/{chunk-LDKSCXGL.js.map → chunk-DHPFI7OF.js.map} +1 -1
- package/bundle/{chunk-G6IXMYIO.js → chunk-DO4INSXE.js} +2 -2
- package/bundle/{chunk-VA5WKN3Z.js → chunk-EGA6JQVV.js} +4 -4
- package/bundle/chunk-EKHNWFEQ.js +85 -0
- package/bundle/chunk-EKHNWFEQ.js.map +7 -0
- package/bundle/{chunk-URAQLQ2U.js → chunk-F3HMZFIL.js} +4 -4
- package/bundle/{chunk-OOKLEC6V.js → chunk-FY3QUO2L.js} +7 -7
- package/bundle/{chunk-2BY6I4P5.js → chunk-GUTRAMK3.js} +2 -2
- package/bundle/chunk-GXKJKYU4.js +1089 -0
- package/bundle/chunk-GXKJKYU4.js.map +7 -0
- package/bundle/{chunk-GPL57SRN.js → chunk-H7RX7UCR.js} +3 -3
- package/bundle/{chunk-BYDUMHXT.js → chunk-HAF2AFBW.js} +2 -2
- package/bundle/chunk-HAS5NEK7.js +189 -0
- package/bundle/chunk-HAS5NEK7.js.map +7 -0
- package/bundle/chunk-HB54S5OY.js +4036 -0
- package/bundle/chunk-HB54S5OY.js.map +7 -0
- package/bundle/{chunk-OZ4IZFV4.js → chunk-HJQZP5CK.js} +9 -9
- package/bundle/{chunk-OZ4IZFV4.js.map → chunk-HJQZP5CK.js.map} +2 -2
- package/bundle/{chunk-HEHD3GG5.js → chunk-ITB2K6LI.js} +6 -13
- package/bundle/{chunk-HEHD3GG5.js.map → chunk-ITB2K6LI.js.map} +3 -3
- package/bundle/{chunk-KSEIWT4T.js → chunk-JFKOPNKL.js} +10 -10
- package/bundle/chunk-JFKOPNKL.js.map +7 -0
- package/bundle/{chunk-KFENC7BM.js → chunk-L33WNMCP.js} +2 -2
- package/bundle/{chunk-JRG4EFMP.js → chunk-LBMETTUP.js} +3 -3
- package/bundle/{chunk-TYVI3ZWA.js → chunk-LJAG2URA.js} +10 -7
- package/bundle/chunk-LJAG2URA.js.map +7 -0
- package/bundle/{chunk-KWBGYWDO.js → chunk-N24ROESF.js} +15 -17
- package/bundle/chunk-N24ROESF.js.map +7 -0
- package/bundle/{chunk-P2BZSLJJ.js → chunk-N7UG4FID.js} +448 -129
- package/bundle/chunk-N7UG4FID.js.map +7 -0
- package/bundle/chunk-NIYVCGBC.js +330 -0
- package/bundle/chunk-NIYVCGBC.js.map +7 -0
- package/bundle/{chunk-TOUZC6NR.js → chunk-OKMN6J4Z.js} +3 -3
- package/bundle/{chunk-RV54J75Q.js → chunk-PKHYCNTT.js} +13 -12
- package/bundle/chunk-PKHYCNTT.js.map +7 -0
- package/bundle/{chunk-XZSYMCLF.js → chunk-PUDGA4RR.js} +7 -7
- package/bundle/{chunk-CELR236Q.js → chunk-Q7CH5DA3.js} +2 -2
- package/bundle/chunk-QSC6QZ44.js +183 -0
- package/bundle/chunk-QSC6QZ44.js.map +7 -0
- package/bundle/chunk-RITEGAW6.js +138 -0
- package/bundle/chunk-RITEGAW6.js.map +7 -0
- package/bundle/{chunk-UDZIZB5F.js → chunk-RTL7HO3N.js} +3 -3
- package/bundle/{chunk-ITG6XGBS.js → chunk-SA44ITVX.js} +10 -10
- package/bundle/{chunk-3MO2MDXJ.js → chunk-SA6YEFNG.js} +3 -3
- package/bundle/{chunk-4BUOO6WI.js → chunk-SMZQDMSZ.js} +31 -11
- package/bundle/chunk-SMZQDMSZ.js.map +7 -0
- package/bundle/{chunk-GBBTK6H2.js → chunk-SRFEIZQT.js} +4 -4
- package/bundle/{chunk-ELRAH7VL.js → chunk-VXUVKC66.js} +3 -3
- package/bundle/chunk-VY2BUO6L.js +4035 -0
- package/bundle/chunk-VY2BUO6L.js.map +7 -0
- package/bundle/chunk-W6ELWLAR.js +143 -0
- package/bundle/chunk-W6ELWLAR.js.map +7 -0
- package/bundle/{chunk-RSWUPUNA.js → chunk-WMWI3SJ7.js} +30 -6
- package/bundle/chunk-WMWI3SJ7.js.map +7 -0
- package/bundle/{chunk-MJ6PHMOK.js → chunk-WW5F2DCO.js} +11 -2
- package/bundle/chunk-WW5F2DCO.js.map +7 -0
- package/bundle/chunk-Y2XBDQP3.js +4055 -0
- package/bundle/chunk-Y2XBDQP3.js.map +7 -0
- package/bundle/chunk-YMGX6HNP.js +131 -0
- package/bundle/chunk-YMGX6HNP.js.map +7 -0
- package/bundle/chunk-YWZPKBO6.js +22 -0
- package/bundle/chunk-YWZPKBO6.js.map +7 -0
- package/bundle/chunk-ZAA7B5BN.js +22 -0
- package/bundle/chunk-ZAA7B5BN.js.map +7 -0
- package/bundle/{commands-WUGPBPHI.js → commands-IGRSOSK6.js} +15 -14
- package/bundle/commands-LAWVNQTO.js +34 -0
- package/bundle/commands-RBWY7YXB.js +34 -0
- package/bundle/commands-XFZNMZN6.js +34 -0
- package/bundle/{config-DQIGDX4W.js → config-NDEYF4AQ.js} +7 -7
- package/bundle/{daemon-NPKYZ3CJ.js → daemon-WOQXCKNL.js} +4 -4
- package/bundle/{delegation-tools-6FICZQ5G.js → delegation-tools-Z5OM3TXS.js} +5 -5
- package/bundle/{deploy-lib-import-SBKXDD3F.js → deploy-lib-import-6VJTYXEG.js} +2 -2
- package/bundle/{deps-HN6CEXA4.js → deps-65V7XXG4.js} +4 -4
- package/bundle/{direct-api-transport-TRV45NO6.js → direct-api-transport-OZICXTWQ.js} +43 -15
- package/bundle/direct-api-transport-OZICXTWQ.js.map +7 -0
- package/bundle/direct-api-transport-QIWA5ES2.js +889 -0
- package/bundle/direct-api-transport-QIWA5ES2.js.map +7 -0
- package/bundle/{discord-adapter-WA2MFRK3.js → discord-adapter-JFIIVG34.js} +27 -24
- package/bundle/discord-adapter-JFIIVG34.js.map +7 -0
- package/bundle/discord-adapter-U3FA5OTY.js +589 -0
- package/bundle/discord-adapter-U3FA5OTY.js.map +7 -0
- package/bundle/discord-adapter-W6L5KJ6T.js +589 -0
- package/bundle/discord-adapter-W6L5KJ6T.js.map +7 -0
- package/bundle/discord-adapter-WWM6ROTW.js +589 -0
- package/bundle/discord-adapter-WWM6ROTW.js.map +7 -0
- package/bundle/{dns-wakeup-RYOCQ6GR.js → dns-wakeup-N46RPU5E.js} +3 -3
- package/bundle/{doctor-R54GZPKL.js → doctor-PIPSGI3H.js} +18 -7
- package/bundle/{doctor-R54GZPKL.js.map → doctor-PIPSGI3H.js.map} +2 -2
- package/bundle/{ensure-invariants-BJIEOSJ2.js → ensure-invariants-3NOBCYWS.js} +4 -4
- package/bundle/{env-schema-XCPAJ6IZ.js → env-schema-T43X43BU.js} +4 -4
- package/bundle/{hook-system-POI5VRIX.js → hook-system-ZCVOFFRD.js} +4 -4
- package/bundle/hotskills-DTROJY6G.js +17 -0
- package/bundle/{install-SH4UVUXQ.js → install-I3CXVW52.js} +3 -3
- package/bundle/{install-manifest-QRWID3KZ.js → install-manifest-KBYD7SAY.js} +3 -3
- package/bundle/{irc-adapter-AIEP6OX6.js → irc-adapter-HXO5D4SW.js} +3 -3
- package/bundle/{irc-config-6VY67UPQ.js → irc-config-XN5VW2V4.js} +5 -5
- package/bundle/kanban-board-6Q5E5GEB.js +31 -0
- package/bundle/kanban-board-I52RHNHQ.js +31 -0
- package/bundle/{lazy-require-UFYFFX2R.js → lazy-require-R3JYCV5M.js} +4 -4
- package/bundle/{media-utils-MOE36VWY.js → media-utils-W7XW3SVV.js} +4 -4
- package/bundle/{message-pipeline-2MBT44FO.js → message-pipeline-4CTBJ6K2.js} +17 -14
- package/bundle/message-pipeline-4KL7OWUH.js +38 -0
- package/bundle/message-pipeline-GFKSHRFU.js +38 -0
- package/bundle/message-pipeline-TGI2WJJM.js +38 -0
- package/bundle/meta.json +3181 -2356
- package/bundle/{notification-U6F5ZBSG.js → notification-ULESRDHB.js} +7 -6
- package/bundle/{openrouter-credits-7XXO6QGQ.js → openrouter-credits-PLIKRY5D.js} +4 -4
- package/bundle/{paths-ZJYIDND2.js → paths-QQM74XYT.js} +4 -2
- package/bundle/{peer-client-T44VI7NB.js → peer-client-D2F5QWRV.js} +8 -8
- package/bundle/{peer-config-D5A4454H.js → peer-config-5SUIBJLG.js} +5 -5
- package/bundle/{phase-transport-FEZ4SIJJ.js → phase-transport-INFD6ELA.js} +10 -10
- package/bundle/phase-transport-KXFZ5BVF.js +23 -0
- package/bundle/{restore-MFSW3EBL.js → restore-Z6MF54HS.js} +4 -4
- package/bundle/{restore-MFSW3EBL.js.map → restore-Z6MF54HS.js.map} +2 -2
- package/bundle/{update-check-O5MS6B3L.js → rollback-5RXXLUD6.js} +5 -7
- package/bundle/{self-healer-utils-7NFH22VJ.js → self-healer-utils-WPKOVXJD.js} +4 -4
- package/bundle/{skill-stats-IPVKMWN3.js → skill-stats-NHNH47QW.js} +5 -5
- package/bundle/{sleep-BPWX3FCN.js → sleep-ENFZFUJJ.js} +8 -8
- package/bundle/sleep-ENFZFUJJ.js.map +7 -0
- package/bundle/{soul-bundle-BRIUDEQ2.js → soul-bundle-QTPWDJB2.js} +7 -7
- package/bundle/soul-bundle-QTPWDJB2.js.map +7 -0
- package/bundle/{soul-loader-GBXJ7EBH.js → soul-loader-LCPTN4PK.js} +8 -8
- package/bundle/soul-loader-LCPTN4PK.js.map +7 -0
- package/bundle/{sse-parser-anthropic-H42TTLBD.js → sse-parser-anthropic-PYDJM3UC.js} +4 -4
- package/bundle/{sse-parser-responses-WG2LY2ML.js → sse-parser-responses-FYT7A5WT.js} +4 -4
- package/bundle/{ssrf-guard-E2KBBC5E.js → ssrf-guard-R4P5OCTO.js} +4 -4
- package/bundle/{start-CBVKNEAT.js → start-4DNURGIY.js} +1 -1
- package/bundle/{stt-CF3CPFDC.js → stt-YN77NND6.js} +5 -5
- package/bundle/stt-YN77NND6.js.map +7 -0
- package/bundle/{subagent-runtime-4MTYUBIZ.js → subagent-runtime-5AYOXOU2.js} +5 -5
- package/bundle/subagent-runtime-5AYOXOU2.js.map +7 -0
- package/bundle/subagent-runtime-VKTX6Q2M.js +13 -0
- package/bundle/subagent-runtime-VKTX6Q2M.js.map +7 -0
- package/bundle/system-event-buffer-OEPPNUGK.js +17 -0
- package/bundle/system-event-buffer-OEPPNUGK.js.map +7 -0
- package/bundle/{system-message-TALP6GP2.js → system-message-BRU267FW.js} +3 -3
- package/bundle/{system-status-GLYXXDE3.js → system-status-7K2QTH3J.js} +58 -51
- package/bundle/system-status-7K2QTH3J.js.map +7 -0
- package/bundle/{hotskills-6ECHLXTJ.js → task-failure-buffer-DPM5MWZ5.js} +8 -7
- package/bundle/task-failure-buffer-DPM5MWZ5.js.map +7 -0
- package/bundle/{task-store-LC7ZMS72.js → task-store-VCBHAB43.js} +5 -5
- package/bundle/task-store-VCBHAB43.js.map +7 -0
- package/bundle/{telegram-adapter-BJJYXN7J.js → telegram-adapter-4KI4CJPG.js} +51 -33
- package/bundle/telegram-adapter-4KI4CJPG.js.map +7 -0
- package/bundle/telegram-adapter-76B4JRJJ.js +1080 -0
- package/bundle/telegram-adapter-76B4JRJJ.js.map +7 -0
- package/bundle/telegram-adapter-VZA74EMT.js +1080 -0
- package/bundle/telegram-adapter-VZA74EMT.js.map +7 -0
- package/bundle/telegram-adapter-ZO2CLU22.js +1080 -0
- package/bundle/telegram-adapter-ZO2CLU22.js.map +7 -0
- package/bundle/{tool-registry-T7XLTI2Q.js → tool-registry-CG7GIS64.js} +13 -9
- package/bundle/tool-registry-CG7GIS64.js.map +7 -0
- package/bundle/tool-registry-TGNU5AMG.js +43 -0
- package/bundle/tool-registry-TGNU5AMG.js.map +7 -0
- package/bundle/{tool-sandbox-OZMXJZLQ.js → tool-sandbox-TLAL55QP.js} +5 -5
- package/bundle/tool-sandbox-TLAL55QP.js.map +7 -0
- package/bundle/{transport-config-G5NKQXPJ.js → transport-config-JIKHB7GT.js} +8 -8
- package/bundle/transport-config-JIKHB7GT.js.map +7 -0
- package/bundle/update-check-AJMIBQGQ.js +81 -0
- package/bundle/update-check-AJMIBQGQ.js.map +7 -0
- package/bundle/{user-registry-NUVNEHJU.js → user-registry-PEFDZ5AV.js} +5 -5
- package/bundle/user-registry-PEFDZ5AV.js.map +7 -0
- package/core/skills/tools/gmail/SKILL.md +5 -14
- package/core/skills/tools/rss/SKILL.md +51 -0
- package/install-manifest.json +8 -2
- package/package.json +4 -2
- package/scripts/abtars-daemon.service +3 -0
- package/scripts/abtars@.service +3 -0
- package/scripts/build-and-deploy.sh +68 -0
- package/scripts/doctor.sh +38 -0
- package/scripts/emergency-deploy.sh +95 -0
- package/scripts/watchdog.sh +51 -5
- package/bundle/chunk-4BUOO6WI.js.map +0 -7
- package/bundle/chunk-A5OJYQNU.js.map +0 -7
- package/bundle/chunk-JX3ZZU3O.js +0 -82
- package/bundle/chunk-JX3ZZU3O.js.map +0 -7
- package/bundle/chunk-KJOCXWJ5.js +0 -131
- package/bundle/chunk-KJOCXWJ5.js.map +0 -7
- package/bundle/chunk-KSEIWT4T.js.map +0 -7
- package/bundle/chunk-KWBGYWDO.js.map +0 -7
- package/bundle/chunk-MJ6PHMOK.js.map +0 -7
- package/bundle/chunk-P2BZSLJJ.js.map +0 -7
- package/bundle/chunk-R36WIOYX.js.map +0 -7
- package/bundle/chunk-RE3F3CFW.js +0 -300
- package/bundle/chunk-RE3F3CFW.js.map +0 -7
- package/bundle/chunk-RSWUPUNA.js.map +0 -7
- package/bundle/chunk-RV54J75Q.js.map +0 -7
- package/bundle/chunk-TYVI3ZWA.js.map +0 -7
- package/bundle/chunk-X5FBUA53.js.map +0 -7
- package/bundle/direct-api-transport-TRV45NO6.js.map +0 -7
- package/bundle/discord-adapter-WA2MFRK3.js.map +0 -7
- package/bundle/system-status-GLYXXDE3.js.map +0 -7
- package/bundle/telegram-adapter-BJJYXN7J.js.map +0 -7
- /package/bundle/{agent-api-rate-limit-C25WGSFF.js.map → agent-api-rate-limit-R2OFAQ3N.js.map} +0 -0
- /package/bundle/{agent-registry-SYUFNSVB.js.map → agent-registry-5VL5KI6U.js.map} +0 -0
- /package/bundle/{bridge-lock-transport-HO545SBK.js.map → agent-registry-PIS5XJHX.js.map} +0 -0
- /package/bundle/{browse-delivery-VTLEAVYA.js.map → bridge-lock-transport-N6OGDOSE.js.map} +0 -0
- /package/bundle/{browser-REIXOJ6S.js.map → browse-delivery-DXGMDMXA.js.map} +0 -0
- /package/bundle/{capability-ILW3D5HS.js.map → browser-QMYGSP5W.js.map} +0 -0
- /package/bundle/{commands-WUGPBPHI.js.map → capability-733TLH4W.js.map} +0 -0
- /package/bundle/{chunk-PZE3J7ER.js.map → chunk-3OXQWII3.js.map} +0 -0
- /package/bundle/{chunk-4KJ76TTE.js.map → chunk-4XW7YA3K.js.map} +0 -0
- /package/bundle/{chunk-ZVDVNSXK.js.map → chunk-7WFE2JI5.js.map} +0 -0
- /package/bundle/{chunk-Q62SXS73.js.map → chunk-BBDKU4EH.js.map} +0 -0
- /package/bundle/{chunk-EX2SRTUE.js.map → chunk-CYSGXNBY.js.map} +0 -0
- /package/bundle/{chunk-LYEAHE5V.js.map → chunk-DCY7DGMT.js.map} +0 -0
- /package/bundle/{chunk-G6IXMYIO.js.map → chunk-DO4INSXE.js.map} +0 -0
- /package/bundle/{chunk-VA5WKN3Z.js.map → chunk-EGA6JQVV.js.map} +0 -0
- /package/bundle/{chunk-URAQLQ2U.js.map → chunk-F3HMZFIL.js.map} +0 -0
- /package/bundle/{chunk-OOKLEC6V.js.map → chunk-FY3QUO2L.js.map} +0 -0
- /package/bundle/{chunk-2BY6I4P5.js.map → chunk-GUTRAMK3.js.map} +0 -0
- /package/bundle/{chunk-GPL57SRN.js.map → chunk-H7RX7UCR.js.map} +0 -0
- /package/bundle/{chunk-BYDUMHXT.js.map → chunk-HAF2AFBW.js.map} +0 -0
- /package/bundle/{chunk-KFENC7BM.js.map → chunk-L33WNMCP.js.map} +0 -0
- /package/bundle/{chunk-JRG4EFMP.js.map → chunk-LBMETTUP.js.map} +0 -0
- /package/bundle/{chunk-TOUZC6NR.js.map → chunk-OKMN6J4Z.js.map} +0 -0
- /package/bundle/{chunk-XZSYMCLF.js.map → chunk-PUDGA4RR.js.map} +0 -0
- /package/bundle/{chunk-CELR236Q.js.map → chunk-Q7CH5DA3.js.map} +0 -0
- /package/bundle/{chunk-UDZIZB5F.js.map → chunk-RTL7HO3N.js.map} +0 -0
- /package/bundle/{chunk-ITG6XGBS.js.map → chunk-SA44ITVX.js.map} +0 -0
- /package/bundle/{chunk-3MO2MDXJ.js.map → chunk-SA6YEFNG.js.map} +0 -0
- /package/bundle/{chunk-GBBTK6H2.js.map → chunk-SRFEIZQT.js.map} +0 -0
- /package/bundle/{chunk-ELRAH7VL.js.map → chunk-VXUVKC66.js.map} +0 -0
- /package/bundle/{config-DQIGDX4W.js.map → commands-IGRSOSK6.js.map} +0 -0
- /package/bundle/{delegation-tools-6FICZQ5G.js.map → commands-LAWVNQTO.js.map} +0 -0
- /package/bundle/{deploy-lib-import-SBKXDD3F.js.map → commands-RBWY7YXB.js.map} +0 -0
- /package/bundle/{env-schema-XCPAJ6IZ.js.map → commands-XFZNMZN6.js.map} +0 -0
- /package/bundle/{hook-system-POI5VRIX.js.map → config-NDEYF4AQ.js.map} +0 -0
- /package/bundle/{daemon-NPKYZ3CJ.js.map → daemon-WOQXCKNL.js.map} +0 -0
- /package/bundle/{hotskills-6ECHLXTJ.js.map → delegation-tools-Z5OM3TXS.js.map} +0 -0
- /package/bundle/{install-SH4UVUXQ.js.map → deploy-lib-import-6VJTYXEG.js.map} +0 -0
- /package/bundle/{deps-HN6CEXA4.js.map → deps-65V7XXG4.js.map} +0 -0
- /package/bundle/{dns-wakeup-RYOCQ6GR.js.map → dns-wakeup-N46RPU5E.js.map} +0 -0
- /package/bundle/{ensure-invariants-BJIEOSJ2.js.map → ensure-invariants-3NOBCYWS.js.map} +0 -0
- /package/bundle/{lazy-require-UFYFFX2R.js.map → env-schema-T43X43BU.js.map} +0 -0
- /package/bundle/{message-pipeline-2MBT44FO.js.map → hook-system-ZCVOFFRD.js.map} +0 -0
- /package/bundle/{notification-U6F5ZBSG.js.map → hotskills-DTROJY6G.js.map} +0 -0
- /package/bundle/{paths-ZJYIDND2.js.map → install-I3CXVW52.js.map} +0 -0
- /package/bundle/{install-manifest-QRWID3KZ.js.map → install-manifest-KBYD7SAY.js.map} +0 -0
- /package/bundle/{irc-adapter-AIEP6OX6.js.map → irc-adapter-HXO5D4SW.js.map} +0 -0
- /package/bundle/{irc-config-6VY67UPQ.js.map → irc-config-XN5VW2V4.js.map} +0 -0
- /package/bundle/{peer-config-D5A4454H.js.map → kanban-board-6Q5E5GEB.js.map} +0 -0
- /package/bundle/{phase-transport-FEZ4SIJJ.js.map → kanban-board-I52RHNHQ.js.map} +0 -0
- /package/bundle/{skill-stats-IPVKMWN3.js.map → lazy-require-R3JYCV5M.js.map} +0 -0
- /package/bundle/{media-utils-MOE36VWY.js.map → media-utils-W7XW3SVV.js.map} +0 -0
- /package/bundle/{sleep-BPWX3FCN.js.map → message-pipeline-4CTBJ6K2.js.map} +0 -0
- /package/bundle/{soul-bundle-BRIUDEQ2.js.map → message-pipeline-4KL7OWUH.js.map} +0 -0
- /package/bundle/{soul-loader-GBXJ7EBH.js.map → message-pipeline-GFKSHRFU.js.map} +0 -0
- /package/bundle/{stt-CF3CPFDC.js.map → message-pipeline-TGI2WJJM.js.map} +0 -0
- /package/bundle/{subagent-runtime-4MTYUBIZ.js.map → notification-ULESRDHB.js.map} +0 -0
- /package/bundle/{openrouter-credits-7XXO6QGQ.js.map → openrouter-credits-PLIKRY5D.js.map} +0 -0
- /package/bundle/{task-store-LC7ZMS72.js.map → paths-QQM74XYT.js.map} +0 -0
- /package/bundle/{peer-client-T44VI7NB.js.map → peer-client-D2F5QWRV.js.map} +0 -0
- /package/bundle/{tool-registry-T7XLTI2Q.js.map → peer-config-5SUIBJLG.js.map} +0 -0
- /package/bundle/{tool-sandbox-OZMXJZLQ.js.map → phase-transport-INFD6ELA.js.map} +0 -0
- /package/bundle/{transport-config-G5NKQXPJ.js.map → phase-transport-KXFZ5BVF.js.map} +0 -0
- /package/bundle/{update-check-O5MS6B3L.js.map → rollback-5RXXLUD6.js.map} +0 -0
- /package/bundle/{self-healer-utils-7NFH22VJ.js.map → self-healer-utils-WPKOVXJD.js.map} +0 -0
- /package/bundle/{user-registry-NUVNEHJU.js.map → skill-stats-NHNH47QW.js.map} +0 -0
- /package/bundle/{sse-parser-anthropic-H42TTLBD.js.map → sse-parser-anthropic-PYDJM3UC.js.map} +0 -0
- /package/bundle/{sse-parser-responses-WG2LY2ML.js.map → sse-parser-responses-FYT7A5WT.js.map} +0 -0
- /package/bundle/{ssrf-guard-E2KBBC5E.js.map → ssrf-guard-R4P5OCTO.js.map} +0 -0
- /package/bundle/{start-CBVKNEAT.js.map → start-4DNURGIY.js.map} +0 -0
- /package/bundle/{system-message-TALP6GP2.js.map → system-message-BRU267FW.js.map} +0 -0
|
@@ -6,18 +6,19 @@ var BOT_COMMANDS = [
|
|
|
6
6
|
{ name: "reset", description: "Fresh session + exit coding" },
|
|
7
7
|
{ name: "session", description: "Session management" },
|
|
8
8
|
{ name: "compact", description: "Compact context window" },
|
|
9
|
-
{ name: "status", description: "
|
|
9
|
+
{ name: "status", description: "Operational health (PID, platforms, context)" },
|
|
10
|
+
{ name: "software", description: "Version, deploy info, rollback" },
|
|
11
|
+
{ name: "model", description: "Model configuration & switching" },
|
|
10
12
|
{ name: "doctor", description: "Deep healthcheck (probes all subsystems)" },
|
|
11
13
|
{ name: "mcp", description: "MCP server status" },
|
|
12
14
|
{ name: "hooks", description: "List configured hooks" },
|
|
13
15
|
{ name: "stop", description: "Stop current response" },
|
|
14
16
|
{ name: "wait", description: "Inject message mid-run (non-interrupting)" },
|
|
15
|
-
{ name: "
|
|
16
|
-
{ name: "change", description: "Switch model/provider" },
|
|
17
|
+
{ name: "update", description: "Pull & deploy latest code" },
|
|
17
18
|
{ name: "emergency", description: "Activate paid hailMary model" },
|
|
18
19
|
{ name: "heartbeat", description: "Heartbeat diagnostics" },
|
|
19
20
|
{ name: "memory", description: "Memory stats" },
|
|
20
|
-
{ name: "skills", description: "List skills" },
|
|
21
|
+
{ name: "skills", description: "List active skills" },
|
|
21
22
|
{ name: "skill", description: "Reload skills catalog" },
|
|
22
23
|
{ name: "tasks", description: "Scheduled tasks" },
|
|
23
24
|
{ name: "facts", description: "Core knowledge" },
|
|
@@ -25,6 +26,8 @@ var BOT_COMMANDS = [
|
|
|
25
26
|
{ name: "restart", description: "Restart bridge" },
|
|
26
27
|
{ name: "wakeup", description: "Wake Mac from sleep" },
|
|
27
28
|
{ name: "sleep", description: "Sleep status / resume / now" },
|
|
29
|
+
{ name: "whoami", description: "Your user info & clearance" },
|
|
30
|
+
{ name: "reasoning", description: "Reasoning effort & thinking display" },
|
|
28
31
|
{ name: "help", description: "Show all commands" }
|
|
29
32
|
];
|
|
30
33
|
|
|
@@ -219,11 +222,36 @@ var EMOJI_SCORES = {
|
|
|
219
222
|
function emojiToScore(emoji) {
|
|
220
223
|
return EMOJI_SCORES[emoji] ?? 1;
|
|
221
224
|
}
|
|
225
|
+
var EMOJI_TAGS = {
|
|
226
|
+
"\u2764\uFE0F": "love",
|
|
227
|
+
"\u2764": "love",
|
|
228
|
+
"\u{1F525}": "excitement",
|
|
229
|
+
"\u{1F389}": "joy",
|
|
230
|
+
"\u{1F44F}": "pride",
|
|
231
|
+
"\u{1F44D}": "gratitude",
|
|
232
|
+
"\u{1F602}": "humor",
|
|
233
|
+
"\u{1F929}": "excitement",
|
|
234
|
+
"\u{1F4AF}": "conviction",
|
|
235
|
+
"\u26A1": "determination",
|
|
236
|
+
"\u{1F60A}": "joy",
|
|
237
|
+
"\u{1F64F}": "gratitude",
|
|
238
|
+
"\u{1F914}": "curiosity",
|
|
239
|
+
"\u{1F62E}": "surprise",
|
|
240
|
+
"\u{1F44E}": "frustration",
|
|
241
|
+
"\u{1F622}": "grief",
|
|
242
|
+
"\u{1F621}": "anger",
|
|
243
|
+
"\u{1F92E}": "anger",
|
|
244
|
+
"\u{1F4A9}": "frustration"
|
|
245
|
+
};
|
|
246
|
+
function emojiToTag(emoji) {
|
|
247
|
+
return EMOJI_TAGS[emoji] ?? "gratitude";
|
|
248
|
+
}
|
|
222
249
|
|
|
223
250
|
export {
|
|
224
251
|
BOT_COMMANDS,
|
|
225
252
|
SecurityGate,
|
|
226
253
|
ResponseFormatter,
|
|
227
|
-
emojiToScore
|
|
254
|
+
emojiToScore,
|
|
255
|
+
emojiToTag
|
|
228
256
|
};
|
|
229
|
-
//# sourceMappingURL=chunk-
|
|
257
|
+
//# sourceMappingURL=chunk-B52YRWR6.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/components/command-registry.ts", "../src/components/security-gate.ts", "../src/components/response-formatter.ts", "../src/utils/emoji-score.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * command-registry.ts \u2014 Shared bot command definitions for all platforms.\n * Both Telegram (setMyCommands) and Discord (application commands) import from here.\n */\n\nexport interface BotCommand {\n readonly name: string;\n readonly description: string;\n}\n\n/** All registered bot commands. Discord requires: name \u226432 chars lowercase, description \u2264100 chars. */\nexport const BOT_COMMANDS: readonly BotCommand[] = [\n { name: \"reset\", description: \"Fresh session + exit coding\" },\n { name: \"session\", description: \"Session management\" },\n { name: \"compact\", description: \"Compact context window\" },\n { name: \"status\", description: \"Operational health (PID, platforms, context)\" },\n { name: \"software\", description: \"Version, deploy info, rollback\" },\n { name: \"model\", description: \"Model configuration & switching\" },\n { name: \"doctor\", description: \"Deep healthcheck (probes all subsystems)\" },\n { name: \"mcp\", description: \"MCP server status\" },\n { name: \"hooks\", description: \"List configured hooks\" },\n { name: \"stop\", description: \"Stop current response\" },\n { name: \"wait\", description: \"Inject message mid-run (non-interrupting)\" },\n { name: \"update\", description: \"Pull & deploy latest code\" },\n { name: \"emergency\", description: \"Activate paid hailMary model\" },\n { name: \"heartbeat\", description: \"Heartbeat diagnostics\" },\n { name: \"memory\", description: \"Memory stats\" },\n { name: \"skills\", description: \"List active skills\" },\n { name: \"skill\", description: \"Reload skills catalog\" },\n { name: \"tasks\", description: \"Scheduled tasks\" },\n { name: \"facts\", description: \"Core knowledge\" },\n { name: \"nlm\", description: \"Knowledge base\" },\n { name: \"restart\", description: \"Restart bridge\" },\n { name: \"wakeup\", description: \"Wake Mac from sleep\" },\n { name: \"sleep\", description: \"Sleep status / resume / now\" },\n { name: \"whoami\", description: \"Your user info & clearance\" },\n { name: \"reasoning\", description: \"Reasoning effort & thinking display\" },\n { name: \"help\", description: \"Show all commands\" },\n];\n", "/**\n * Fail-closed security gate that authorizes messages against the user registry.\n * Unauthorized messages are silently dropped \u2014 no response, no side effects.\n * Per-user channel gating via UserEntry.allowedChats.\n */\nimport type { UserEntry, UserRegistry } from \"./user-registry.js\";\n\nexport interface AuthResult {\n authorized: boolean;\n user?: UserEntry;\n}\n\nexport class SecurityGate {\n private readonly registry: UserRegistry;\n\n constructor(registry: UserRegistry) {\n if (registry.users.length === 0) {\n throw new Error(\"SecurityGate requires at least one user in registry\");\n }\n this.registry = registry;\n }\n\n /** Authorize a platform user. Checks allowedChats if set. */\n authorize(platformUserId: string, platform: string, channelId?: string): AuthResult {\n const key = `${platform}:${platformUserId}`;\n const user = this.registry.byPlatformId.get(key);\n if (!user) return { authorized: false };\n if (!this.chatAllowed(user, channelId)) return { authorized: false };\n return { authorized: true, user };\n }\n\n /** Authorize by platform user ID string (tries both platforms). */\n authorizeById(userId: string, channelId?: string): boolean {\n const tg = this.registry.byPlatformId.get(`telegram:${userId}`);\n const dc = this.registry.byPlatformId.get(`discord:${userId}`);\n const user = tg ?? dc;\n if (!user) return false;\n return this.chatAllowed(user, channelId);\n }\n\n private chatAllowed(user: UserEntry, channelId?: string): boolean {\n if (!user.allowedChats || user.allowedChats.length === 0) return true;\n if (!channelId) return true;\n return user.allowedChats.includes(channelId);\n }\n}\n", "import type { Platform } from \"../types/index.js\";\n\nconst TELEGRAM_MAX_LENGTH = 4096;\nconst DISCORD_MAX_LENGTH = 2000;\n\n/** Characters that must be escaped in Telegram MarkdownV2. */\nconst MARKDOWN_V2_ESCAPE = /([_*\\[\\]()~`>#+\\-=|{}.!\\\\])/g;\n\n/**\n * Collects streaming ACP response chunks and formats them\n * for Telegram delivery (chunking, Markdown conversion).\n */\nexport class ResponseFormatter {\n private buffers = new Map<string, string[]>();\n\n /** Accumulate a chunk for a session. */\n collectChunk(sessionId: string, chunk: string): void {\n const existing = this.buffers.get(sessionId);\n if (existing) {\n existing.push(chunk);\n } else {\n this.buffers.set(sessionId, [chunk]);\n }\n }\n\n /** Flush accumulated chunks for a session, returning Telegram-ready messages. */\n flush(sessionId: string): string[] {\n const chunks = this.buffers.get(sessionId);\n this.buffers.delete(sessionId);\n if (!chunks || chunks.length === 0) return [];\n const full = chunks.join(\"\");\n return this.chunkText(full);\n }\n\n /** Split text into chunks that fit Telegram's 4096-char limit. */\n chunkText(text: string): string[] {\n if (text.length <= TELEGRAM_MAX_LENGTH) {\n return [text];\n }\n\n const result: string[] = [];\n let remaining = text;\n\n while (remaining.length > 0) {\n if (remaining.length <= TELEGRAM_MAX_LENGTH) {\n result.push(remaining);\n break;\n }\n\n // Try to split at paragraph boundary\n let splitAt = remaining.lastIndexOf(\"\\n\\n\", TELEGRAM_MAX_LENGTH);\n if (splitAt <= 0) {\n // Try single newline\n splitAt = remaining.lastIndexOf(\"\\n\", TELEGRAM_MAX_LENGTH);\n }\n if (splitAt <= 0) {\n // Try space\n splitAt = remaining.lastIndexOf(\" \", TELEGRAM_MAX_LENGTH);\n }\n if (splitAt <= 0) {\n // Hard split\n splitAt = TELEGRAM_MAX_LENGTH;\n }\n\n result.push(remaining.slice(0, splitAt));\n remaining = remaining.slice(splitAt).trimStart();\n }\n\n return result;\n }\n\n /** Escape text for Telegram MarkdownV2 parse mode. */\n toTelegramMarkdown(markdown: string): string {\n // Preserve code blocks \u2014 don't escape inside them\n const parts = markdown.split(/(```[\\s\\S]*?```|`[^`]+`)/);\n return parts\n .map((part, i) => {\n // Odd indices are code blocks/inline code \u2014 leave as-is\n if (i % 2 === 1) return part;\n return part.replace(MARKDOWN_V2_ESCAPE, \"\\\\$1\");\n })\n .join(\"\");\n }\n\n /** Split text into chunks for Discord's 2000-char limit.\n * Respects paragraph and code block boundaries \u2014 never splits inside a fenced code block. */\n chunkTextForDiscord(text: string): string[] {\n if (text.length <= DISCORD_MAX_LENGTH) {\n return [text];\n }\n\n const result: string[] = [];\n let remaining = text;\n\n while (remaining.length > 0) {\n if (remaining.length <= DISCORD_MAX_LENGTH) {\n result.push(remaining);\n break;\n }\n\n // Check if there's an open code block in the window we're about to cut\n const window = remaining.slice(0, DISCORD_MAX_LENGTH);\n const fenceMatches = window.match(/```/g);\n const hasOpenCodeBlock = fenceMatches != null && fenceMatches.length % 2 !== 0;\n\n if (hasOpenCodeBlock) {\n // Find the start of the open code block (last unmatched ```)\n const lastFenceIdx = window.lastIndexOf(\"```\");\n // Try to split before the code block at a paragraph boundary\n let splitAt = remaining.lastIndexOf(\"\\n\\n\", lastFenceIdx);\n if (splitAt <= 0) {\n splitAt = remaining.lastIndexOf(\"\\n\", lastFenceIdx);\n }\n if (splitAt <= 0) {\n // Can't avoid splitting inside the code block \u2014 close and reopen\n splitAt = remaining.lastIndexOf(\"\\n\", DISCORD_MAX_LENGTH - 4); // leave room for closing ```\n if (splitAt <= 0) {\n splitAt = DISCORD_MAX_LENGTH - 4;\n }\n // Find the code fence language specifier for reopening\n const fenceStart = remaining.lastIndexOf(\"```\", splitAt);\n const fenceLine = remaining.slice(fenceStart, remaining.indexOf(\"\\n\", fenceStart));\n result.push(remaining.slice(0, splitAt) + \"\\n```\");\n remaining = fenceLine + \"\\n\" + remaining.slice(splitAt).trimStart();\n continue;\n }\n result.push(remaining.slice(0, splitAt));\n remaining = remaining.slice(splitAt).trimStart();\n continue;\n }\n\n // No open code block \u2014 split normally at paragraph/line boundaries\n let splitAt = remaining.lastIndexOf(\"\\n\\n\", DISCORD_MAX_LENGTH);\n if (splitAt <= 0) {\n splitAt = remaining.lastIndexOf(\"\\n\", DISCORD_MAX_LENGTH);\n }\n if (splitAt <= 0) {\n splitAt = remaining.lastIndexOf(\" \", DISCORD_MAX_LENGTH);\n }\n if (splitAt <= 0) {\n splitAt = DISCORD_MAX_LENGTH;\n }\n\n result.push(remaining.slice(0, splitAt));\n remaining = remaining.slice(splitAt).trimStart();\n }\n\n return result;\n }\n\n /** Split text for the appropriate platform. */\n chunkForPlatform(text: string, platform: Platform): string[] {\n if (platform === \"discord\") {\n return this.chunkTextForDiscord(text);\n }\n return this.chunkText(text);\n }\n\n /** Convert standard Markdown to Discord-compatible Markdown (mostly passthrough). */\n toDiscordMarkdown(text: string): string {\n return text;\n }\n\n /** Format a tool status update for the user. */\n formatToolStatus(toolName: string, status: \"start\" | \"done\" | \"error\"): string {\n switch (status) {\n case \"start\":\n return `\uD83D\uDD27 ${toolName}...`;\n case \"done\":\n return `\u2705 ${toolName}`;\n case \"error\":\n return `\u274C ${toolName} failed`;\n }\n }\n}\n", "/** Inline emoji-to-score map (avoids hard dep on abmind for adapters). */\nconst EMOJI_SCORES: Record<string, number> = {\n \"\u2764\uFE0F\": 4, \"\uD83D\uDD25\": 4, \"\uD83C\uDF89\": 3, \"\uD83D\uDC4F\": 4, \"\u2764\": 4,\n \"\uD83D\uDC4D\": 3, \"\uD83D\uDE02\": 3, \"\uD83E\uDD29\": 4, \"\uD83D\uDCAF\": 3, \"\u26A1\": 3,\n \"\uD83D\uDE0A\": 2, \"\uD83D\uDE4F\": 2, \"\uD83E\uDD14\": 1, \"\uD83D\uDE2E\": 1,\n \"\uD83D\uDC4E\": -3, \"\uD83D\uDE22\": -3, \"\uD83D\uDE21\": -4, \"\uD83E\uDD2E\": -4, \"\uD83D\uDCA9\": -5,\n};\n\nexport function emojiToScore(emoji: string): number {\n return EMOJI_SCORES[emoji] ?? 1;\n}\n\nconst EMOJI_TAGS: Record<string, string> = {\n \"\u2764\uFE0F\": \"love\", \"\u2764\": \"love\", \"\uD83D\uDD25\": \"excitement\", \"\uD83C\uDF89\": \"joy\",\n \"\uD83D\uDC4F\": \"pride\", \"\uD83D\uDC4D\": \"gratitude\", \"\uD83D\uDE02\": \"humor\", \"\uD83E\uDD29\": \"excitement\",\n \"\uD83D\uDCAF\": \"conviction\", \"\u26A1\": \"determination\", \"\uD83D\uDE0A\": \"joy\", \"\uD83D\uDE4F\": \"gratitude\",\n \"\uD83E\uDD14\": \"curiosity\", \"\uD83D\uDE2E\": \"surprise\",\n \"\uD83D\uDC4E\": \"frustration\", \"\uD83D\uDE22\": \"grief\", \"\uD83D\uDE21\": \"anger\", \"\uD83E\uDD2E\": \"anger\", \"\uD83D\uDCA9\": \"frustration\",\n};\n\nexport function emojiToTag(emoji: string): string {\n return EMOJI_TAGS[emoji] ?? \"gratitude\";\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["splitAt"]
|
|
7
|
+
}
|
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
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
|
-
import {
|
|
4
|
-
loadUsers
|
|
5
|
-
} from "./chunk-GBBTK6H2.js";
|
|
6
3
|
import {
|
|
7
4
|
readEnv
|
|
8
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-HAF2AFBW.js";
|
|
6
|
+
import {
|
|
7
|
+
loadUsers
|
|
8
|
+
} from "./chunk-SRFEIZQT.js";
|
|
9
9
|
import {
|
|
10
10
|
getEnv,
|
|
11
11
|
init_env_schema
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-3OXQWII3.js";
|
|
13
13
|
import {
|
|
14
14
|
init_logger,
|
|
15
15
|
logError,
|
|
16
16
|
logWarn
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-GUTRAMK3.js";
|
|
18
18
|
import {
|
|
19
19
|
init_paths
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-WW5F2DCO.js";
|
|
21
21
|
|
|
22
22
|
// src/components/config.ts
|
|
23
23
|
import { access, stat, constants } from "node:fs/promises";
|
|
@@ -86,7 +86,7 @@ async function validateCliPath(cliPath) {
|
|
|
86
86
|
}
|
|
87
87
|
}
|
|
88
88
|
async function loadAndValidateConfig() {
|
|
89
|
-
const { loadTransport, validateAtStartup } = await import("./transport-config-
|
|
89
|
+
const { loadTransport, validateAtStartup } = await import("./transport-config-JIKHB7GT.js");
|
|
90
90
|
const tc = loadTransport();
|
|
91
91
|
if (tc) {
|
|
92
92
|
validateAtStartup();
|
|
@@ -221,4 +221,4 @@ export {
|
|
|
221
221
|
isValidSnowflake,
|
|
222
222
|
loadAndValidateConfig
|
|
223
223
|
};
|
|
224
|
-
//# sourceMappingURL=chunk-
|
|
224
|
+
//# sourceMappingURL=chunk-BBDKU4EH.js.map
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createRequire as __bundleCreateRequire } from 'node:module'; import { fileURLToPath as __bundleFileURLToPath } from 'node:url'; import { dirname as __bundleDirname } from 'node:path'; const require = __bundleCreateRequire(import.meta.url); const __chunk_filename = __bundleFileURLToPath(import.meta.url); const __chunk_dirname = __bundleDirname(__chunk_filename);
|
|
3
|
+
|
|
4
|
+
// src/components/command-registry.ts
|
|
5
|
+
var BOT_COMMANDS = [
|
|
6
|
+
{ name: "reset", description: "Fresh session + exit coding" },
|
|
7
|
+
{ name: "session", description: "Session management" },
|
|
8
|
+
{ name: "compact", description: "Compact context window" },
|
|
9
|
+
{ name: "status", description: "Operational health (PID, platforms, context)" },
|
|
10
|
+
{ name: "software", description: "Version, deploy info, rollback" },
|
|
11
|
+
{ name: "model", description: "Model configuration & switching" },
|
|
12
|
+
{ name: "doctor", description: "Deep healthcheck (probes all subsystems)" },
|
|
13
|
+
{ name: "mcp", description: "MCP server status" },
|
|
14
|
+
{ name: "hooks", description: "List configured hooks" },
|
|
15
|
+
{ name: "stop", description: "Stop current response" },
|
|
16
|
+
{ name: "wait", description: "Inject message mid-run (non-interrupting)" },
|
|
17
|
+
{ name: "update", description: "Pull & deploy latest code" },
|
|
18
|
+
{ name: "emergency", description: "Activate paid hailMary model" },
|
|
19
|
+
{ name: "heartbeat", description: "Heartbeat diagnostics" },
|
|
20
|
+
{ name: "memory", description: "Memory stats" },
|
|
21
|
+
{ name: "skills", description: "List active skills" },
|
|
22
|
+
{ name: "skill", description: "Reload skills catalog" },
|
|
23
|
+
{ name: "tasks", description: "Scheduled tasks" },
|
|
24
|
+
{ name: "facts", description: "Core knowledge" },
|
|
25
|
+
{ name: "nlm", description: "Knowledge base" },
|
|
26
|
+
{ name: "restart", description: "Restart bridge" },
|
|
27
|
+
{ name: "wakeup", description: "Wake Mac from sleep" },
|
|
28
|
+
{ name: "sleep", description: "Sleep status / resume / now" },
|
|
29
|
+
{ name: "whoami", description: "Your user info & clearance" },
|
|
30
|
+
{ name: "reasoning", description: "Reasoning effort & thinking display" },
|
|
31
|
+
{ name: "kanban", description: "Kanban board" },
|
|
32
|
+
{ name: "help", description: "Show all commands" }
|
|
33
|
+
];
|
|
34
|
+
|
|
35
|
+
// src/components/security-gate.ts
|
|
36
|
+
var SecurityGate = class {
|
|
37
|
+
registry;
|
|
38
|
+
constructor(registry) {
|
|
39
|
+
if (registry.users.length === 0) {
|
|
40
|
+
throw new Error("SecurityGate requires at least one user in registry");
|
|
41
|
+
}
|
|
42
|
+
this.registry = registry;
|
|
43
|
+
}
|
|
44
|
+
/** Authorize a platform user. Checks allowedChats if set. */
|
|
45
|
+
authorize(platformUserId, platform, channelId) {
|
|
46
|
+
const key = `${platform}:${platformUserId}`;
|
|
47
|
+
const user = this.registry.byPlatformId.get(key);
|
|
48
|
+
if (!user) return { authorized: false };
|
|
49
|
+
if (!this.chatAllowed(user, channelId)) return { authorized: false };
|
|
50
|
+
return { authorized: true, user };
|
|
51
|
+
}
|
|
52
|
+
/** Authorize by platform user ID string (tries both platforms). */
|
|
53
|
+
authorizeById(userId, channelId) {
|
|
54
|
+
const tg = this.registry.byPlatformId.get(`telegram:${userId}`);
|
|
55
|
+
const dc = this.registry.byPlatformId.get(`discord:${userId}`);
|
|
56
|
+
const user = tg ?? dc;
|
|
57
|
+
if (!user) return false;
|
|
58
|
+
return this.chatAllowed(user, channelId);
|
|
59
|
+
}
|
|
60
|
+
chatAllowed(user, channelId) {
|
|
61
|
+
if (!user.allowedChats || user.allowedChats.length === 0) return true;
|
|
62
|
+
if (!channelId) return true;
|
|
63
|
+
return user.allowedChats.includes(channelId);
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
// src/components/response-formatter.ts
|
|
68
|
+
var TELEGRAM_MAX_LENGTH = 4096;
|
|
69
|
+
var DISCORD_MAX_LENGTH = 2e3;
|
|
70
|
+
var MARKDOWN_V2_ESCAPE = /([_*\[\]()~`>#+\-=|{}.!\\])/g;
|
|
71
|
+
var ResponseFormatter = class {
|
|
72
|
+
buffers = /* @__PURE__ */ new Map();
|
|
73
|
+
/** Accumulate a chunk for a session. */
|
|
74
|
+
collectChunk(sessionId, chunk) {
|
|
75
|
+
const existing = this.buffers.get(sessionId);
|
|
76
|
+
if (existing) {
|
|
77
|
+
existing.push(chunk);
|
|
78
|
+
} else {
|
|
79
|
+
this.buffers.set(sessionId, [chunk]);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/** Flush accumulated chunks for a session, returning Telegram-ready messages. */
|
|
83
|
+
flush(sessionId) {
|
|
84
|
+
const chunks = this.buffers.get(sessionId);
|
|
85
|
+
this.buffers.delete(sessionId);
|
|
86
|
+
if (!chunks || chunks.length === 0) return [];
|
|
87
|
+
const full = chunks.join("");
|
|
88
|
+
return this.chunkText(full);
|
|
89
|
+
}
|
|
90
|
+
/** Split text into chunks that fit Telegram's 4096-char limit. */
|
|
91
|
+
chunkText(text) {
|
|
92
|
+
if (text.length <= TELEGRAM_MAX_LENGTH) {
|
|
93
|
+
return [text];
|
|
94
|
+
}
|
|
95
|
+
const result = [];
|
|
96
|
+
let remaining = text;
|
|
97
|
+
while (remaining.length > 0) {
|
|
98
|
+
if (remaining.length <= TELEGRAM_MAX_LENGTH) {
|
|
99
|
+
result.push(remaining);
|
|
100
|
+
break;
|
|
101
|
+
}
|
|
102
|
+
let splitAt = remaining.lastIndexOf("\n\n", TELEGRAM_MAX_LENGTH);
|
|
103
|
+
if (splitAt <= 0) {
|
|
104
|
+
splitAt = remaining.lastIndexOf("\n", TELEGRAM_MAX_LENGTH);
|
|
105
|
+
}
|
|
106
|
+
if (splitAt <= 0) {
|
|
107
|
+
splitAt = remaining.lastIndexOf(" ", TELEGRAM_MAX_LENGTH);
|
|
108
|
+
}
|
|
109
|
+
if (splitAt <= 0) {
|
|
110
|
+
splitAt = TELEGRAM_MAX_LENGTH;
|
|
111
|
+
}
|
|
112
|
+
result.push(remaining.slice(0, splitAt));
|
|
113
|
+
remaining = remaining.slice(splitAt).trimStart();
|
|
114
|
+
}
|
|
115
|
+
return result;
|
|
116
|
+
}
|
|
117
|
+
/** Escape text for Telegram MarkdownV2 parse mode. */
|
|
118
|
+
toTelegramMarkdown(markdown) {
|
|
119
|
+
const parts = markdown.split(/(```[\s\S]*?```|`[^`]+`)/);
|
|
120
|
+
return parts.map((part, i) => {
|
|
121
|
+
if (i % 2 === 1) return part;
|
|
122
|
+
return part.replace(MARKDOWN_V2_ESCAPE, "\\$1");
|
|
123
|
+
}).join("");
|
|
124
|
+
}
|
|
125
|
+
/** Split text into chunks for Discord's 2000-char limit.
|
|
126
|
+
* Respects paragraph and code block boundaries — never splits inside a fenced code block. */
|
|
127
|
+
chunkTextForDiscord(text) {
|
|
128
|
+
if (text.length <= DISCORD_MAX_LENGTH) {
|
|
129
|
+
return [text];
|
|
130
|
+
}
|
|
131
|
+
const result = [];
|
|
132
|
+
let remaining = text;
|
|
133
|
+
while (remaining.length > 0) {
|
|
134
|
+
if (remaining.length <= DISCORD_MAX_LENGTH) {
|
|
135
|
+
result.push(remaining);
|
|
136
|
+
break;
|
|
137
|
+
}
|
|
138
|
+
const window = remaining.slice(0, DISCORD_MAX_LENGTH);
|
|
139
|
+
const fenceMatches = window.match(/```/g);
|
|
140
|
+
const hasOpenCodeBlock = fenceMatches != null && fenceMatches.length % 2 !== 0;
|
|
141
|
+
if (hasOpenCodeBlock) {
|
|
142
|
+
const lastFenceIdx = window.lastIndexOf("```");
|
|
143
|
+
let splitAt2 = remaining.lastIndexOf("\n\n", lastFenceIdx);
|
|
144
|
+
if (splitAt2 <= 0) {
|
|
145
|
+
splitAt2 = remaining.lastIndexOf("\n", lastFenceIdx);
|
|
146
|
+
}
|
|
147
|
+
if (splitAt2 <= 0) {
|
|
148
|
+
splitAt2 = remaining.lastIndexOf("\n", DISCORD_MAX_LENGTH - 4);
|
|
149
|
+
if (splitAt2 <= 0) {
|
|
150
|
+
splitAt2 = DISCORD_MAX_LENGTH - 4;
|
|
151
|
+
}
|
|
152
|
+
const fenceStart = remaining.lastIndexOf("```", splitAt2);
|
|
153
|
+
const fenceLine = remaining.slice(fenceStart, remaining.indexOf("\n", fenceStart));
|
|
154
|
+
result.push(remaining.slice(0, splitAt2) + "\n```");
|
|
155
|
+
remaining = fenceLine + "\n" + remaining.slice(splitAt2).trimStart();
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
result.push(remaining.slice(0, splitAt2));
|
|
159
|
+
remaining = remaining.slice(splitAt2).trimStart();
|
|
160
|
+
continue;
|
|
161
|
+
}
|
|
162
|
+
let splitAt = remaining.lastIndexOf("\n\n", DISCORD_MAX_LENGTH);
|
|
163
|
+
if (splitAt <= 0) {
|
|
164
|
+
splitAt = remaining.lastIndexOf("\n", DISCORD_MAX_LENGTH);
|
|
165
|
+
}
|
|
166
|
+
if (splitAt <= 0) {
|
|
167
|
+
splitAt = remaining.lastIndexOf(" ", DISCORD_MAX_LENGTH);
|
|
168
|
+
}
|
|
169
|
+
if (splitAt <= 0) {
|
|
170
|
+
splitAt = DISCORD_MAX_LENGTH;
|
|
171
|
+
}
|
|
172
|
+
result.push(remaining.slice(0, splitAt));
|
|
173
|
+
remaining = remaining.slice(splitAt).trimStart();
|
|
174
|
+
}
|
|
175
|
+
return result;
|
|
176
|
+
}
|
|
177
|
+
/** Split text for the appropriate platform. */
|
|
178
|
+
chunkForPlatform(text, platform) {
|
|
179
|
+
if (platform === "discord") {
|
|
180
|
+
return this.chunkTextForDiscord(text);
|
|
181
|
+
}
|
|
182
|
+
return this.chunkText(text);
|
|
183
|
+
}
|
|
184
|
+
/** Convert standard Markdown to Discord-compatible Markdown (mostly passthrough). */
|
|
185
|
+
toDiscordMarkdown(text) {
|
|
186
|
+
return text;
|
|
187
|
+
}
|
|
188
|
+
/** Format a tool status update for the user. */
|
|
189
|
+
formatToolStatus(toolName, status) {
|
|
190
|
+
switch (status) {
|
|
191
|
+
case "start":
|
|
192
|
+
return `\u{1F527} ${toolName}...`;
|
|
193
|
+
case "done":
|
|
194
|
+
return `\u2705 ${toolName}`;
|
|
195
|
+
case "error":
|
|
196
|
+
return `\u274C ${toolName} failed`;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
};
|
|
200
|
+
|
|
201
|
+
// src/utils/emoji-score.ts
|
|
202
|
+
var EMOJI_SCORES = {
|
|
203
|
+
"\u2764\uFE0F": 4,
|
|
204
|
+
"\u{1F525}": 4,
|
|
205
|
+
"\u{1F389}": 3,
|
|
206
|
+
"\u{1F44F}": 4,
|
|
207
|
+
"\u2764": 4,
|
|
208
|
+
"\u{1F44D}": 3,
|
|
209
|
+
"\u{1F602}": 3,
|
|
210
|
+
"\u{1F929}": 4,
|
|
211
|
+
"\u{1F4AF}": 3,
|
|
212
|
+
"\u26A1": 3,
|
|
213
|
+
"\u{1F60A}": 2,
|
|
214
|
+
"\u{1F64F}": 2,
|
|
215
|
+
"\u{1F914}": 1,
|
|
216
|
+
"\u{1F62E}": 1,
|
|
217
|
+
"\u{1F44E}": -3,
|
|
218
|
+
"\u{1F622}": -3,
|
|
219
|
+
"\u{1F621}": -4,
|
|
220
|
+
"\u{1F92E}": -4,
|
|
221
|
+
"\u{1F4A9}": -5
|
|
222
|
+
};
|
|
223
|
+
function emojiToScore(emoji) {
|
|
224
|
+
return EMOJI_SCORES[emoji] ?? 1;
|
|
225
|
+
}
|
|
226
|
+
var EMOJI_TAGS = {
|
|
227
|
+
"\u2764\uFE0F": "love",
|
|
228
|
+
"\u2764": "love",
|
|
229
|
+
"\u{1F525}": "excitement",
|
|
230
|
+
"\u{1F389}": "joy",
|
|
231
|
+
"\u{1F44F}": "pride",
|
|
232
|
+
"\u{1F44D}": "gratitude",
|
|
233
|
+
"\u{1F602}": "humor",
|
|
234
|
+
"\u{1F929}": "excitement",
|
|
235
|
+
"\u{1F4AF}": "conviction",
|
|
236
|
+
"\u26A1": "determination",
|
|
237
|
+
"\u{1F60A}": "joy",
|
|
238
|
+
"\u{1F64F}": "gratitude",
|
|
239
|
+
"\u{1F914}": "curiosity",
|
|
240
|
+
"\u{1F62E}": "surprise",
|
|
241
|
+
"\u{1F44E}": "frustration",
|
|
242
|
+
"\u{1F622}": "grief",
|
|
243
|
+
"\u{1F621}": "anger",
|
|
244
|
+
"\u{1F92E}": "anger",
|
|
245
|
+
"\u{1F4A9}": "frustration"
|
|
246
|
+
};
|
|
247
|
+
function emojiToTag(emoji) {
|
|
248
|
+
return EMOJI_TAGS[emoji] ?? "gratitude";
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
export {
|
|
252
|
+
BOT_COMMANDS,
|
|
253
|
+
SecurityGate,
|
|
254
|
+
ResponseFormatter,
|
|
255
|
+
emojiToScore,
|
|
256
|
+
emojiToTag
|
|
257
|
+
};
|
|
258
|
+
//# sourceMappingURL=chunk-BBTQKKDO.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/components/command-registry.ts", "../src/components/security-gate.ts", "../src/components/response-formatter.ts", "../src/utils/emoji-score.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * command-registry.ts \u2014 Shared bot command definitions for all platforms.\n * Both Telegram (setMyCommands) and Discord (application commands) import from here.\n */\n\nexport interface BotCommand {\n readonly name: string;\n readonly description: string;\n}\n\n/** All registered bot commands. Discord requires: name \u226432 chars lowercase, description \u2264100 chars. */\nexport const BOT_COMMANDS: readonly BotCommand[] = [\n { name: \"reset\", description: \"Fresh session + exit coding\" },\n { name: \"session\", description: \"Session management\" },\n { name: \"compact\", description: \"Compact context window\" },\n { name: \"status\", description: \"Operational health (PID, platforms, context)\" },\n { name: \"software\", description: \"Version, deploy info, rollback\" },\n { name: \"model\", description: \"Model configuration & switching\" },\n { name: \"doctor\", description: \"Deep healthcheck (probes all subsystems)\" },\n { name: \"mcp\", description: \"MCP server status\" },\n { name: \"hooks\", description: \"List configured hooks\" },\n { name: \"stop\", description: \"Stop current response\" },\n { name: \"wait\", description: \"Inject message mid-run (non-interrupting)\" },\n { name: \"update\", description: \"Pull & deploy latest code\" },\n { name: \"emergency\", description: \"Activate paid hailMary model\" },\n { name: \"heartbeat\", description: \"Heartbeat diagnostics\" },\n { name: \"memory\", description: \"Memory stats\" },\n { name: \"skills\", description: \"List active skills\" },\n { name: \"skill\", description: \"Reload skills catalog\" },\n { name: \"tasks\", description: \"Scheduled tasks\" },\n { name: \"facts\", description: \"Core knowledge\" },\n { name: \"nlm\", description: \"Knowledge base\" },\n { name: \"restart\", description: \"Restart bridge\" },\n { name: \"wakeup\", description: \"Wake Mac from sleep\" },\n { name: \"sleep\", description: \"Sleep status / resume / now\" },\n { name: \"whoami\", description: \"Your user info & clearance\" },\n { name: \"reasoning\", description: \"Reasoning effort & thinking display\" },\n { name: \"kanban\", description: \"Kanban board\" },\n { name: \"help\", description: \"Show all commands\" },\n];\n", "/**\n * Fail-closed security gate that authorizes messages against the user registry.\n * Unauthorized messages are silently dropped \u2014 no response, no side effects.\n * Per-user channel gating via UserEntry.allowedChats.\n */\nimport type { UserEntry, UserRegistry } from \"./user-registry.js\";\n\nexport interface AuthResult {\n authorized: boolean;\n user?: UserEntry;\n}\n\nexport class SecurityGate {\n private readonly registry: UserRegistry;\n\n constructor(registry: UserRegistry) {\n if (registry.users.length === 0) {\n throw new Error(\"SecurityGate requires at least one user in registry\");\n }\n this.registry = registry;\n }\n\n /** Authorize a platform user. Checks allowedChats if set. */\n authorize(platformUserId: string, platform: string, channelId?: string): AuthResult {\n const key = `${platform}:${platformUserId}`;\n const user = this.registry.byPlatformId.get(key);\n if (!user) return { authorized: false };\n if (!this.chatAllowed(user, channelId)) return { authorized: false };\n return { authorized: true, user };\n }\n\n /** Authorize by platform user ID string (tries both platforms). */\n authorizeById(userId: string, channelId?: string): boolean {\n const tg = this.registry.byPlatformId.get(`telegram:${userId}`);\n const dc = this.registry.byPlatformId.get(`discord:${userId}`);\n const user = tg ?? dc;\n if (!user) return false;\n return this.chatAllowed(user, channelId);\n }\n\n private chatAllowed(user: UserEntry, channelId?: string): boolean {\n if (!user.allowedChats || user.allowedChats.length === 0) return true;\n if (!channelId) return true;\n return user.allowedChats.includes(channelId);\n }\n}\n", "import type { Platform } from \"../types/index.js\";\n\nconst TELEGRAM_MAX_LENGTH = 4096;\nconst DISCORD_MAX_LENGTH = 2000;\n\n/** Characters that must be escaped in Telegram MarkdownV2. */\nconst MARKDOWN_V2_ESCAPE = /([_*\\[\\]()~`>#+\\-=|{}.!\\\\])/g;\n\n/**\n * Collects streaming ACP response chunks and formats them\n * for Telegram delivery (chunking, Markdown conversion).\n */\nexport class ResponseFormatter {\n private buffers = new Map<string, string[]>();\n\n /** Accumulate a chunk for a session. */\n collectChunk(sessionId: string, chunk: string): void {\n const existing = this.buffers.get(sessionId);\n if (existing) {\n existing.push(chunk);\n } else {\n this.buffers.set(sessionId, [chunk]);\n }\n }\n\n /** Flush accumulated chunks for a session, returning Telegram-ready messages. */\n flush(sessionId: string): string[] {\n const chunks = this.buffers.get(sessionId);\n this.buffers.delete(sessionId);\n if (!chunks || chunks.length === 0) return [];\n const full = chunks.join(\"\");\n return this.chunkText(full);\n }\n\n /** Split text into chunks that fit Telegram's 4096-char limit. */\n chunkText(text: string): string[] {\n if (text.length <= TELEGRAM_MAX_LENGTH) {\n return [text];\n }\n\n const result: string[] = [];\n let remaining = text;\n\n while (remaining.length > 0) {\n if (remaining.length <= TELEGRAM_MAX_LENGTH) {\n result.push(remaining);\n break;\n }\n\n // Try to split at paragraph boundary\n let splitAt = remaining.lastIndexOf(\"\\n\\n\", TELEGRAM_MAX_LENGTH);\n if (splitAt <= 0) {\n // Try single newline\n splitAt = remaining.lastIndexOf(\"\\n\", TELEGRAM_MAX_LENGTH);\n }\n if (splitAt <= 0) {\n // Try space\n splitAt = remaining.lastIndexOf(\" \", TELEGRAM_MAX_LENGTH);\n }\n if (splitAt <= 0) {\n // Hard split\n splitAt = TELEGRAM_MAX_LENGTH;\n }\n\n result.push(remaining.slice(0, splitAt));\n remaining = remaining.slice(splitAt).trimStart();\n }\n\n return result;\n }\n\n /** Escape text for Telegram MarkdownV2 parse mode. */\n toTelegramMarkdown(markdown: string): string {\n // Preserve code blocks \u2014 don't escape inside them\n const parts = markdown.split(/(```[\\s\\S]*?```|`[^`]+`)/);\n return parts\n .map((part, i) => {\n // Odd indices are code blocks/inline code \u2014 leave as-is\n if (i % 2 === 1) return part;\n return part.replace(MARKDOWN_V2_ESCAPE, \"\\\\$1\");\n })\n .join(\"\");\n }\n\n /** Split text into chunks for Discord's 2000-char limit.\n * Respects paragraph and code block boundaries \u2014 never splits inside a fenced code block. */\n chunkTextForDiscord(text: string): string[] {\n if (text.length <= DISCORD_MAX_LENGTH) {\n return [text];\n }\n\n const result: string[] = [];\n let remaining = text;\n\n while (remaining.length > 0) {\n if (remaining.length <= DISCORD_MAX_LENGTH) {\n result.push(remaining);\n break;\n }\n\n // Check if there's an open code block in the window we're about to cut\n const window = remaining.slice(0, DISCORD_MAX_LENGTH);\n const fenceMatches = window.match(/```/g);\n const hasOpenCodeBlock = fenceMatches != null && fenceMatches.length % 2 !== 0;\n\n if (hasOpenCodeBlock) {\n // Find the start of the open code block (last unmatched ```)\n const lastFenceIdx = window.lastIndexOf(\"```\");\n // Try to split before the code block at a paragraph boundary\n let splitAt = remaining.lastIndexOf(\"\\n\\n\", lastFenceIdx);\n if (splitAt <= 0) {\n splitAt = remaining.lastIndexOf(\"\\n\", lastFenceIdx);\n }\n if (splitAt <= 0) {\n // Can't avoid splitting inside the code block \u2014 close and reopen\n splitAt = remaining.lastIndexOf(\"\\n\", DISCORD_MAX_LENGTH - 4); // leave room for closing ```\n if (splitAt <= 0) {\n splitAt = DISCORD_MAX_LENGTH - 4;\n }\n // Find the code fence language specifier for reopening\n const fenceStart = remaining.lastIndexOf(\"```\", splitAt);\n const fenceLine = remaining.slice(fenceStart, remaining.indexOf(\"\\n\", fenceStart));\n result.push(remaining.slice(0, splitAt) + \"\\n```\");\n remaining = fenceLine + \"\\n\" + remaining.slice(splitAt).trimStart();\n continue;\n }\n result.push(remaining.slice(0, splitAt));\n remaining = remaining.slice(splitAt).trimStart();\n continue;\n }\n\n // No open code block \u2014 split normally at paragraph/line boundaries\n let splitAt = remaining.lastIndexOf(\"\\n\\n\", DISCORD_MAX_LENGTH);\n if (splitAt <= 0) {\n splitAt = remaining.lastIndexOf(\"\\n\", DISCORD_MAX_LENGTH);\n }\n if (splitAt <= 0) {\n splitAt = remaining.lastIndexOf(\" \", DISCORD_MAX_LENGTH);\n }\n if (splitAt <= 0) {\n splitAt = DISCORD_MAX_LENGTH;\n }\n\n result.push(remaining.slice(0, splitAt));\n remaining = remaining.slice(splitAt).trimStart();\n }\n\n return result;\n }\n\n /** Split text for the appropriate platform. */\n chunkForPlatform(text: string, platform: Platform): string[] {\n if (platform === \"discord\") {\n return this.chunkTextForDiscord(text);\n }\n return this.chunkText(text);\n }\n\n /** Convert standard Markdown to Discord-compatible Markdown (mostly passthrough). */\n toDiscordMarkdown(text: string): string {\n return text;\n }\n\n /** Format a tool status update for the user. */\n formatToolStatus(toolName: string, status: \"start\" | \"done\" | \"error\"): string {\n switch (status) {\n case \"start\":\n return `\uD83D\uDD27 ${toolName}...`;\n case \"done\":\n return `\u2705 ${toolName}`;\n case \"error\":\n return `\u274C ${toolName} failed`;\n }\n }\n}\n", "/** Inline emoji-to-score map (avoids hard dep on abmind for adapters). */\nconst EMOJI_SCORES: Record<string, number> = {\n \"\u2764\uFE0F\": 4, \"\uD83D\uDD25\": 4, \"\uD83C\uDF89\": 3, \"\uD83D\uDC4F\": 4, \"\u2764\": 4,\n \"\uD83D\uDC4D\": 3, \"\uD83D\uDE02\": 3, \"\uD83E\uDD29\": 4, \"\uD83D\uDCAF\": 3, \"\u26A1\": 3,\n \"\uD83D\uDE0A\": 2, \"\uD83D\uDE4F\": 2, \"\uD83E\uDD14\": 1, \"\uD83D\uDE2E\": 1,\n \"\uD83D\uDC4E\": -3, \"\uD83D\uDE22\": -3, \"\uD83D\uDE21\": -4, \"\uD83E\uDD2E\": -4, \"\uD83D\uDCA9\": -5,\n};\n\nexport function emojiToScore(emoji: string): number {\n return EMOJI_SCORES[emoji] ?? 1;\n}\n\nconst EMOJI_TAGS: Record<string, string> = {\n \"\u2764\uFE0F\": \"love\", \"\u2764\": \"love\", \"\uD83D\uDD25\": \"excitement\", \"\uD83C\uDF89\": \"joy\",\n \"\uD83D\uDC4F\": \"pride\", \"\uD83D\uDC4D\": \"gratitude\", \"\uD83D\uDE02\": \"humor\", \"\uD83E\uDD29\": \"excitement\",\n \"\uD83D\uDCAF\": \"conviction\", \"\u26A1\": \"determination\", \"\uD83D\uDE0A\": \"joy\", \"\uD83D\uDE4F\": \"gratitude\",\n \"\uD83E\uDD14\": \"curiosity\", \"\uD83D\uDE2E\": \"surprise\",\n \"\uD83D\uDC4E\": \"frustration\", \"\uD83D\uDE22\": \"grief\", \"\uD83D\uDE21\": \"anger\", \"\uD83E\uDD2E\": \"anger\", \"\uD83D\uDCA9\": \"frustration\",\n};\n\nexport function emojiToTag(emoji: string): string {\n return EMOJI_TAGS[emoji] ?? \"gratitude\";\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["splitAt"]
|
|
7
|
+
}
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
logError,
|
|
6
6
|
logTrace,
|
|
7
7
|
logWarn
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-GUTRAMK3.js";
|
|
9
9
|
import {
|
|
10
10
|
__esm
|
|
11
11
|
} from "./chunk-7K2YZTLD.js";
|
|
@@ -29,4 +29,4 @@ export {
|
|
|
29
29
|
logAndSwallow,
|
|
30
30
|
init_log_and_swallow
|
|
31
31
|
};
|
|
32
|
-
//# sourceMappingURL=chunk-
|
|
32
|
+
//# sourceMappingURL=chunk-CYSGXNBY.js.map
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import {
|
|
4
4
|
init_logger,
|
|
5
5
|
logWarn
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-GUTRAMK3.js";
|
|
7
7
|
import {
|
|
8
8
|
__esm
|
|
9
9
|
} from "./chunk-7K2YZTLD.js";
|
|
@@ -65,4 +65,4 @@ export {
|
|
|
65
65
|
PEERS_SCHEMA,
|
|
66
66
|
init_config_validator
|
|
67
67
|
};
|
|
68
|
-
//# sourceMappingURL=chunk-
|
|
68
|
+
//# sourceMappingURL=chunk-DCY7DGMT.js.map
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createRequire as __bundleCreateRequire } from 'node:module'; import { fileURLToPath as __bundleFileURLToPath } from 'node:url'; import { dirname as __bundleDirname } from 'node:path'; const require = __bundleCreateRequire(import.meta.url); const __chunk_filename = __bundleFileURLToPath(import.meta.url); const __chunk_dirname = __bundleDirname(__chunk_filename);
|
|
3
|
+
|
|
4
|
+
// src/utils/date.ts
|
|
5
|
+
function localDate() {
|
|
6
|
+
const d = /* @__PURE__ */ new Date();
|
|
7
|
+
return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, "0")}-${String(d.getDate()).padStart(2, "0")}`;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export {
|
|
11
|
+
localDate
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=chunk-DGS7J4P6.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/utils/date.ts"],
|
|
4
|
+
"sourcesContent": ["/** Local date as YYYY-MM-DD (not UTC). */\nexport function localDate(): string {\n const d = new Date();\n return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, \"0\")}-${String(d.getDate()).padStart(2, \"0\")}`;\n}\n"],
|
|
5
|
+
"mappings": ";;;;AACO,SAAS,YAAoB;AAClC,QAAM,IAAI,oBAAI,KAAK;AACnB,SAAO,GAAG,EAAE,YAAY,CAAC,IAAI,OAAO,EAAE,SAAS,IAAI,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,OAAO,EAAE,QAAQ,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC;AAChH;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -2,22 +2,24 @@
|
|
|
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
|
appendReminder,
|
|
5
|
-
localDate,
|
|
6
5
|
require_main
|
|
7
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-ITB2K6LI.js";
|
|
8
7
|
import {
|
|
9
8
|
init_log_and_swallow,
|
|
10
9
|
logAndSwallow
|
|
11
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-CYSGXNBY.js";
|
|
12
11
|
import {
|
|
13
12
|
init_logger,
|
|
14
13
|
logInfo,
|
|
15
14
|
logWarn
|
|
16
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-GUTRAMK3.js";
|
|
16
|
+
import {
|
|
17
|
+
localDate
|
|
18
|
+
} from "./chunk-DGS7J4P6.js";
|
|
17
19
|
import {
|
|
18
20
|
abtarsHome,
|
|
19
21
|
init_paths
|
|
20
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-WW5F2DCO.js";
|
|
21
23
|
import {
|
|
22
24
|
__toESM
|
|
23
25
|
} from "./chunk-7K2YZTLD.js";
|
|
@@ -204,4 +206,4 @@ export {
|
|
|
204
206
|
deliverBrowseResult,
|
|
205
207
|
checkBrowseTasks
|
|
206
208
|
};
|
|
207
|
-
//# sourceMappingURL=chunk-
|
|
209
|
+
//# sourceMappingURL=chunk-DHPFI7OF.js.map
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/capabilities/browser/browse-delivery.ts", "../src/capabilities/browser/abtars-browse.ts"],
|
|
4
4
|
"sourcesContent": ["/**\n * Browse task delivery \u2014 write report + notify user via reminder.\n * Called from runtime.spawn() onComplete/onError callbacks.\n */\n\nimport { writeFileSync, mkdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { abtarsHome } from \"../../paths.js\";\nimport { logInfo, logWarn } from \"../../components/logger.js\";\nimport { localDate } from \"../../utils/date.js\";\nimport { appendReminder } from \"../../components/tasks/task-checker.js\";\nimport { readPendingBrowse, writePendingBrowse } from \"./abtars-browse.js\";\nimport type { PendingBrowseEntry } from \"./abtars-browse.js\";\n\nconst TAG = \"browse-delivery\";\n\nconst subagentsDir = (): string => join(abtarsHome(), \"subagents\");\n\n/** Deliver result for a browse task. Called by runtime.spawn() callback. */\nexport function deliverBrowseResult(entry: PendingBrowseEntry, result: string): void {\n const dir = subagentsDir();\n mkdirSync(dir, { recursive: true });\n const date = localDate();\n const reportPath = join(dir, `browse_${entry.taskId}_${date}.md`);\n writeFileSync(reportPath, result || \"(no output captured)\", \"utf-8\");\n\n const taskLabel = entry.task.length > 200 ? entry.task.slice(0, 200) + \"\u2026\" : entry.task;\n const msg = `\uD83C\uDF10 Browse task complete: ${taskLabel}\\nReport: ${reportPath}`;\n appendReminder({ chatId: entry.chatId, message: msg, createdAt: Date.now(), threadId: entry.threadId });\n logInfo(TAG, `\uD83C\uDF10 Browse \"${taskLabel}\" finished \u2014 ${reportPath}`);\n}\n\n/** Safety net: check for stale pending entries (runtime handles timeouts, this catches orphans). */\nexport function checkBrowseTasks(): void {\n const entries = readPendingBrowse();\n if (entries.length === 0) return;\n\n const now = Date.now();\n const remaining: PendingBrowseEntry[] = [];\n\n for (const entry of entries) {\n const elapsed = now - entry.startedAt;\n if (elapsed > entry.timeoutMs + 60_000) {\n // Stale entry \u2014 runtime should have cleaned up, remove orphan\n const taskLabel = entry.task.length > 200 ? entry.task.slice(0, 200) + \"\u2026\" : entry.task;\n logWarn(TAG, `Removing stale browse entry: ${taskLabel} (${Math.round(elapsed / 1000)}s old)`);\n } else {\n remaining.push(entry);\n }\n }\n\n if (remaining.length !== entries.length) writePendingBrowse(remaining);\n}\n", "#!/usr/bin/env node\n/**\n * abtars-browse \u2014 spawn a browser subagent for autonomous web tasks.\n *\n * Usage:\n * abtars-browse --task \"check X notifications\" --chat-id 7773842843\n * abtars-browse --task \"post on FB\" --chat-id 123 --timeout 600\n * abtars-browse --task \"research topic\" --chat-id 123 --dry-run\n *\n * Returns immediately. The subagent runs detached and results are delivered\n * via pending_reminders.json \u2192 bridge picks up \u2192 sends to chat.\n */\nimport { readFileSync, writeFileSync, existsSync, mkdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { abtarsHome } from \"../../paths.js\";\nimport { logAndSwallow } from \"../../components/log-and-swallow.js\";\n\nconst TAG = \"browse\";\nimport { randomBytes } from \"node:crypto\";\nimport { config as loadDotenv } from \"dotenv\";\nimport { localDate } from \"../../utils/date.js\";\n\n// --- Types ---\n\nexport interface BrowseArgs {\n task?: string;\n chatId?: string;\n threadId?: string;\n timeout?: string;\n engine?: string;\n dryRun: boolean;\n}\n\nexport interface PendingBrowseEntry {\n taskId: string;\n task: string;\n chatId: number;\n threadId?: number;\n pid: number;\n startedAt: number;\n timeoutMs: number;\n logFile: string;\n}\n\n// --- Arg parsing ---\n\nexport function parseArgs(argv: string[]): BrowseArgs {\n const args = argv.slice(2);\n const parsed: BrowseArgs = { dryRun: false };\n for (let i = 0; i < args.length; i++) {\n switch (args[i]) {\n case \"--task\": parsed.task = args[++i] ?? \"\"; break;\n case \"--chat-id\": parsed.chatId = args[++i] ?? \"\"; break;\n case \"--thread-id\": parsed.threadId = args[++i] ?? \"\"; break;\n case \"--timeout\": parsed.timeout = args[++i] ?? \"\"; break;\n case \"--engine\": parsed.engine = args[++i] ?? \"\"; break;\n case \"--dry-run\": parsed.dryRun = true; break;\n }\n }\n return parsed;\n}\n\nexport function validateArgs(args: BrowseArgs): { ok: true; task: string; chatId: number; threadId?: number; timeoutMs: number } | { ok: false; error: string } {\n if (!args.task) return { ok: false, error: \"--task is required\" };\n if (!args.chatId) return { ok: false, error: \"--chat-id is required\" };\n const chatId = parseInt(args.chatId, 10);\n if (!Number.isFinite(chatId)) return { ok: false, error: \"invalid --chat-id\" };\n const threadId = args.threadId ? parseInt(args.threadId, 10) : undefined;\n const timeoutMs = args.timeout ? parseInt(args.timeout, 10) * 1000 : 5 * 60 * 1000;\n if (!Number.isFinite(timeoutMs)) return { ok: false, error: \"invalid --timeout\" };\n const task = args.task.length > 2000 ? args.task.slice(0, 2000) + \"\u2026\" : args.task;\n return { ok: true, task, chatId, threadId, timeoutMs };\n}\n\n// --- Prompt loading ---\n\nexport function loadBrowsePrompt(task: string, _chatId: number, taskId?: string): string {\n const path = join(abtarsHome(), \"prompts\", \"browsing_prompt.md\");\n\n if (!existsSync(path)) {\n throw new Error(`browsing_prompt.md not found at ${path}`);\n }\n const template = readFileSync(path, \"utf-8\");\n\n const date = localDate();\n const reportFile = `browse_${taskId ?? \"unknown\"}_${date}.md`;\n\n const vars: Record<string, string> = {\n TASK: task,\n TASK_ID: taskId ?? \"unknown\",\n DATE: date,\n REPORT_FILE: reportFile,\n };\n\n let result = template;\n for (const [key, value] of Object.entries(vars)) {\n result = result.replaceAll(`\\${${key}}`, value);\n }\n return result;\n}\n\n// --- Pending browse file ---\n\nconst pendingPath = (): string => join(abtarsHome(), \"workspace\", \"browse\", \"pending_browse.json\");\n\nexport function readPendingBrowse(): PendingBrowseEntry[] {\n const p = pendingPath();\n if (!existsSync(p)) return [];\n try { return JSON.parse(readFileSync(p, \"utf-8\")) as PendingBrowseEntry[]; }\n catch (err) { logAndSwallow(TAG, \"readPendingBrowse\", err); return []; }\n}\n\nexport function writePendingBrowse(entries: PendingBrowseEntry[]): void {\n const dir = join(abtarsHome(), \"workspace\", \"browse\");\n mkdirSync(dir, { recursive: true });\n writeFileSync(pendingPath(), JSON.stringify(entries, null, 2), \"utf-8\");\n}\n\n// --- Main ---\n\nexport async function main(argv: string[] = process.argv): Promise<void> {\n if (argv.includes(\"--help\")) {\n console.log(`abtars-browse \u2014 delegate a browser task to the Browsie agent.\n\nUsage:\n abtars-browse --task \"check X notifications\" --chat-id ID\n abtars-browse --task \"research topic\" --chat-id ID --timeout 600\n abtars-browse --task \"research topic\" --chat-id ID --dry-run`);\n process.exit(0);\n }\n\n loadDotenv({ path: join(abtarsHome(), \".env\") });\n const raw = parseArgs(argv);\n const validation = validateArgs(raw);\n\n if (!validation.ok) {\n console.log(JSON.stringify({ ok: false, error: validation.error }));\n process.exit(1);\n }\n\n const { task, chatId, threadId, timeoutMs } = validation;\n const taskId = randomBytes(3).toString(\"hex\");\n\n // Dry-run: print prompt and exit\n if (raw.dryRun) {\n const prompt = loadBrowsePrompt(task, chatId, taskId);\n process.stdout.write(prompt + \"\\n\");\n return;\n }\n\n mkdirSync(join(abtarsHome(), \"subagents\"), { recursive: true });\n\n const prompt = loadBrowsePrompt(task, chatId, taskId);\n\n // Send spawn request to bridge via IPC\n const spawnSocket = join(abtarsHome(), \"browser-socket\", \"browse-spawn.sock\");\n const net = await import(\"node:net\");\n const result = await new Promise<{ ok: boolean; taskId?: string; error?: string }>((resolve, reject) => {\n const conn = net.createConnection(spawnSocket);\n conn.on(\"connect\", () => {\n conn.write(JSON.stringify({ taskId, task, prompt, chatId, threadId, timeoutMs }) + \"\\n\");\n });\n let buf = \"\";\n conn.on(\"data\", (chunk) => {\n buf += chunk.toString();\n const nl = buf.indexOf(\"\\n\");\n if (nl === -1) return;\n conn.end();\n try { resolve(JSON.parse(buf.slice(0, nl))); } catch (e) { reject(e); }\n });\n conn.on(\"error\", reject);\n conn.setTimeout(10_000, () => { conn.destroy(); reject(new Error(\"IPC timeout\")); });\n });\n\n console.log(JSON.stringify(result));\n}\n\nconst isDirectRun = process.argv[1]?.endsWith(\"abtars-browse.ts\") ||\n process.argv[1]?.endsWith(\"abtars-browse.js\");\nif (isDirectRun) main();\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["writeFileSync", "mkdirSync", "join", "loadDotenv", "prompt", "TAG", "join", "mkdirSync", "writeFileSync"]
|
|
7
7
|
}
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
logDebug,
|
|
6
6
|
logInfo,
|
|
7
7
|
logWarn
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-GUTRAMK3.js";
|
|
9
9
|
|
|
10
10
|
// src/components/hooks/hook-system.ts
|
|
11
11
|
init_logger();
|
|
@@ -143,4 +143,4 @@ export {
|
|
|
143
143
|
getHookSummary,
|
|
144
144
|
fire
|
|
145
145
|
};
|
|
146
|
-
//# sourceMappingURL=chunk-
|
|
146
|
+
//# sourceMappingURL=chunk-DO4INSXE.js.map
|