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
package/bundle/abtars-restart.js
CHANGED
|
@@ -2,10 +2,10 @@
|
|
|
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
|
restart
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
7
|
-
import "./chunk-
|
|
8
|
-
import "./chunk-
|
|
5
|
+
} from "./chunk-F3HMZFIL.js";
|
|
6
|
+
import "./chunk-CYSGXNBY.js";
|
|
7
|
+
import "./chunk-GUTRAMK3.js";
|
|
8
|
+
import "./chunk-WW5F2DCO.js";
|
|
9
9
|
import "./chunk-7K2YZTLD.js";
|
|
10
10
|
export {
|
|
11
11
|
restart
|
package/bundle/abtars-rss.js
CHANGED
|
@@ -1,34 +1,11 @@
|
|
|
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
|
|
|
5
4
|
// src/cli/abtars-rss.ts
|
|
6
|
-
import { readFileSync, writeFileSync, mkdirSync
|
|
7
|
-
import { join } from "node:path";
|
|
5
|
+
import { readFileSync, writeFileSync, mkdirSync } from "node:fs";
|
|
6
|
+
import { join, basename } from "node:path";
|
|
8
7
|
import { homedir } from "node:os";
|
|
9
|
-
var
|
|
10
|
-
var FEEDS_FILE = join(FINANCE_DIR, "feeds.json");
|
|
11
|
-
var WATCHLIST_FILE = join(FINANCE_DIR, "stock_watchlist.md");
|
|
12
|
-
var DEFAULT_FEEDS = [
|
|
13
|
-
{
|
|
14
|
-
url: "https://news.google.com/rss/search?q=%22artificial+intelligence%22+AND+(%22earnings%22+OR+%22guidance%22+OR+%22stock%22+OR+%22funding%22)&hl=en-US&gl=US&ceid=US:en",
|
|
15
|
-
name: "Google News AI Finance"
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
url: "https://www.cnbc.com/id/19854910/device/rss/rss.html",
|
|
19
|
-
name: "CNBC Technology"
|
|
20
|
-
},
|
|
21
|
-
{
|
|
22
|
-
url: "https://www.cnbc.com/id/15839069/device/rss/rss.html",
|
|
23
|
-
name: "CNBC Investing"
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
url: "https://efts.sec.gov/LATEST/search-index?q=%22artificial+intelligence%22+OR+%22GPU%22+OR+%22machine+learning%22&forms=8-K&dateRange=custom&category=form-type",
|
|
27
|
-
name: "SEC EDGAR 8-K AI",
|
|
28
|
-
keywords: ["artificial intelligence", "AI", "GPU", "machine learning"]
|
|
29
|
-
}
|
|
30
|
-
];
|
|
31
|
-
var UA = "AgentBridge-RSS/1.0";
|
|
8
|
+
var UA = "abtars-rss/1.0";
|
|
32
9
|
function tag(xml, name) {
|
|
33
10
|
const m = xml.match(new RegExp(`<${name}[^>]*>(?:<!\\[CDATA\\[)?([\\s\\S]*?)(?:\\]\\]>)?</${name}>`, "i"));
|
|
34
11
|
return m?.[1]?.trim() ?? "";
|
|
@@ -39,35 +16,20 @@ function attrHref(xml) {
|
|
|
39
16
|
}
|
|
40
17
|
function parseXmlFeed(xml, source) {
|
|
41
18
|
const items = [];
|
|
42
|
-
const
|
|
43
|
-
for (const m of rssItems) {
|
|
19
|
+
for (const m of xml.matchAll(/<item>([\s\S]*?)<\/item>/gi)) {
|
|
44
20
|
const c = m[1] ?? "";
|
|
45
|
-
items.push({
|
|
46
|
-
title: tag(c, "title"),
|
|
47
|
-
link: tag(c, "link") || attrHref(c),
|
|
48
|
-
summary: tag(c, "description").replace(/<[^>]+>/g, "").slice(0, 300),
|
|
49
|
-
date: tag(c, "pubDate"),
|
|
50
|
-
source
|
|
51
|
-
});
|
|
21
|
+
items.push({ title: tag(c, "title"), link: tag(c, "link") || attrHref(c), summary: tag(c, "description").replace(/<[^>]+>/g, "").slice(0, 300), date: tag(c, "pubDate"), source });
|
|
52
22
|
}
|
|
53
|
-
const
|
|
54
|
-
for (const m of atomEntries) {
|
|
23
|
+
for (const m of xml.matchAll(/<entry>([\s\S]*?)<\/entry>/gi)) {
|
|
55
24
|
const c = m[1] ?? "";
|
|
56
|
-
items.push({
|
|
57
|
-
title: tag(c, "title"),
|
|
58
|
-
link: attrHref(c) || tag(c, "link"),
|
|
59
|
-
summary: (tag(c, "summary") || tag(c, "content")).replace(/<[^>]+>/g, "").slice(0, 300),
|
|
60
|
-
date: tag(c, "updated") || tag(c, "published"),
|
|
61
|
-
source
|
|
62
|
-
});
|
|
25
|
+
items.push({ title: tag(c, "title"), link: attrHref(c) || tag(c, "link"), summary: (tag(c, "summary") || tag(c, "content")).replace(/<[^>]+>/g, "").slice(0, 300), date: tag(c, "updated") || tag(c, "published"), source });
|
|
63
26
|
}
|
|
64
27
|
return items;
|
|
65
28
|
}
|
|
66
29
|
function parseEdgarJson(json, source) {
|
|
67
30
|
try {
|
|
68
31
|
const data = JSON.parse(json);
|
|
69
|
-
|
|
70
|
-
return hits.map((h) => ({
|
|
32
|
+
return (data.hits?.hits ?? []).map((h) => ({
|
|
71
33
|
title: h._source?.display_names?.join(", ") + " \u2014 " + h._source?.form_type,
|
|
72
34
|
link: `https://www.sec.gov/Archives/edgar/data/${h._source?.entity_id}/${h._source?.file_num}`,
|
|
73
35
|
summary: (h._source?.file_description ?? "").slice(0, 300),
|
|
@@ -83,18 +45,6 @@ async function fetchFeed(url) {
|
|
|
83
45
|
if (!res.ok) throw new Error(`${res.status} ${res.statusText}`);
|
|
84
46
|
return res.text();
|
|
85
47
|
}
|
|
86
|
-
function parseActiveTickers() {
|
|
87
|
-
if (!existsSync(WATCHLIST_FILE)) return [];
|
|
88
|
-
const content = readFileSync(WATCHLIST_FILE, "utf-8");
|
|
89
|
-
const section = content.match(/## Active\n([\s\S]*?)(?=\n## |$)/);
|
|
90
|
-
if (!section?.[1]) return [];
|
|
91
|
-
const tickers = [];
|
|
92
|
-
for (const line of section[1].split("\n")) {
|
|
93
|
-
const m = line.match(/^- (\w+)/);
|
|
94
|
-
if (m?.[1]) tickers.push(m[1]);
|
|
95
|
-
}
|
|
96
|
-
return tickers;
|
|
97
|
-
}
|
|
98
48
|
function filterByAge(items, hours) {
|
|
99
49
|
const cutoff = Date.now() - hours * 60 * 60 * 1e3;
|
|
100
50
|
return items.filter((item) => {
|
|
@@ -112,32 +62,23 @@ function filterByKeywords(items, keywords) {
|
|
|
112
62
|
});
|
|
113
63
|
}
|
|
114
64
|
async function main() {
|
|
115
|
-
const
|
|
116
|
-
|
|
117
|
-
if (!
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
}
|
|
121
|
-
const feeds = JSON.parse(readFileSync(FEEDS_FILE, "utf-8"));
|
|
122
|
-
const tickers = parseActiveTickers();
|
|
123
|
-
for (const t of tickers) {
|
|
124
|
-
feeds.push({
|
|
125
|
-
url: `https://seekingalpha.com/api/sa/combined/${t}.xml`,
|
|
126
|
-
name: `SeekingAlpha:${t}`
|
|
127
|
-
});
|
|
65
|
+
const args = process.argv.slice(2);
|
|
66
|
+
const feedsIdx = args.indexOf("--feeds");
|
|
67
|
+
if (feedsIdx === -1 || !args[feedsIdx + 1]) {
|
|
68
|
+
console.error("Usage: abtars-rss --feeds <path.json> [--hours N]");
|
|
69
|
+
process.exit(1);
|
|
128
70
|
}
|
|
129
|
-
|
|
71
|
+
const feedsPath = args[feedsIdx + 1];
|
|
72
|
+
const hours = parseInt(args.find((_, i, a) => a[i - 1] === "--hours") ?? "24", 10);
|
|
73
|
+
const feeds = JSON.parse(readFileSync(feedsPath, "utf-8"));
|
|
74
|
+
const outDir = join(process.env["ABTARS_HOME"] ?? join(homedir(), ".abtars"), "workspace", "rss");
|
|
75
|
+
console.error(`Fetching ${feeds.length} feeds...`);
|
|
130
76
|
const allItems = [];
|
|
131
77
|
for (const feed of feeds) {
|
|
132
78
|
try {
|
|
133
79
|
console.error(` ${feed.name}...`);
|
|
134
80
|
const body = await fetchFeed(feed.url);
|
|
135
|
-
let items;
|
|
136
|
-
if (body.trimStart().startsWith("{")) {
|
|
137
|
-
items = parseEdgarJson(body, feed.name);
|
|
138
|
-
} else {
|
|
139
|
-
items = parseXmlFeed(body, feed.name);
|
|
140
|
-
}
|
|
81
|
+
let items = body.trimStart().startsWith("{") ? parseEdgarJson(body, feed.name) : parseXmlFeed(body, feed.name);
|
|
141
82
|
if (feed.keywords) items = filterByKeywords(items, feed.keywords);
|
|
142
83
|
allItems.push(...items);
|
|
143
84
|
} catch (e) {
|
|
@@ -153,10 +94,13 @@ async function main() {
|
|
|
153
94
|
return true;
|
|
154
95
|
});
|
|
155
96
|
const date = (/* @__PURE__ */ new Date()).toISOString().slice(0, 10);
|
|
156
|
-
const
|
|
157
|
-
const
|
|
97
|
+
const feedName = basename(feedsPath, ".json").replace(/_feeds$/, "");
|
|
98
|
+
const feedOutDir = join(outDir, feedName);
|
|
99
|
+
mkdirSync(feedOutDir, { recursive: true });
|
|
100
|
+
const outFile = join(feedOutDir, `${date}.json`);
|
|
101
|
+
const payload = { date, hours, totalFeeds: feeds.length, totalItems: deduped.length, items: deduped };
|
|
158
102
|
writeFileSync(outFile, JSON.stringify(payload, null, 2), "utf-8");
|
|
159
|
-
console.error(`\u{1F4C4} ${deduped.length} items
|
|
103
|
+
console.error(`\u{1F4C4} ${deduped.length} items \u2192 ${outFile}`);
|
|
160
104
|
console.log(JSON.stringify(payload, null, 2));
|
|
161
105
|
}
|
|
162
106
|
main().catch((err) => {
|
package/bundle/abtars-rss.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/cli/abtars-rss.ts"],
|
|
4
|
-
"sourcesContent": ["
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["/**\n * abtars-rss \u2014 fetch RSS/Atom feeds, output JSON\n *\n * Usage:\n * abtars-rss --feeds <path> # fetch feeds from JSON file\n * abtars-rss --feeds <path> --hours 48\n *\n * Reads: a feeds.json file (array of {url, name, keywords?})\n * Writes: ~/.abtars/workspace/rss/<feedname>/<date>.json\n */\n\nimport { readFileSync, writeFileSync, mkdirSync } from \"node:fs\";\nimport { join, basename } from \"node:path\";\nimport { homedir } from \"node:os\";\n\ninterface FeedConfig {\n url: string;\n name: string;\n keywords?: string[];\n}\n\ninterface RssItem {\n title: string;\n link: string;\n summary: string;\n date: string;\n source: string;\n}\n\nconst UA = \"abtars-rss/1.0\";\n\nfunction tag(xml: string, name: string): string {\n const m = xml.match(new RegExp(`<${name}[^>]*>(?:<!\\\\[CDATA\\\\[)?([\\\\s\\\\S]*?)(?:\\\\]\\\\]>)?</${name}>`, \"i\"));\n return m?.[1]?.trim() ?? \"\";\n}\n\nfunction attrHref(xml: string): string {\n const m = xml.match(/<link[^>]+href=\"([^\"]+)\"/i);\n return m?.[1] ?? \"\";\n}\n\nfunction parseXmlFeed(xml: string, source: string): RssItem[] {\n const items: RssItem[] = [];\n for (const m of xml.matchAll(/<item>([\\s\\S]*?)<\\/item>/gi)) {\n const c = m[1] ?? \"\";\n items.push({ title: tag(c, \"title\"), link: tag(c, \"link\") || attrHref(c), summary: tag(c, \"description\").replace(/<[^>]+>/g, \"\").slice(0, 300), date: tag(c, \"pubDate\"), source });\n }\n for (const m of xml.matchAll(/<entry>([\\s\\S]*?)<\\/entry>/gi)) {\n const c = m[1] ?? \"\";\n items.push({ title: tag(c, \"title\"), link: attrHref(c) || tag(c, \"link\"), summary: (tag(c, \"summary\") || tag(c, \"content\")).replace(/<[^>]+>/g, \"\").slice(0, 300), date: tag(c, \"updated\") || tag(c, \"published\"), source });\n }\n return items;\n}\n\nfunction parseEdgarJson(json: string, source: string): RssItem[] {\n try {\n const data = JSON.parse(json);\n return (data.hits?.hits ?? []).map((h: any) => ({\n title: h._source?.display_names?.join(\", \") + \" \u2014 \" + h._source?.form_type,\n link: `https://www.sec.gov/Archives/edgar/data/${h._source?.entity_id}/${h._source?.file_num}`,\n summary: (h._source?.file_description ?? \"\").slice(0, 300),\n date: h._source?.file_date ?? \"\",\n source,\n }));\n } catch { return []; }\n}\n\nasync function fetchFeed(url: string): Promise<string> {\n const res = await fetch(url, { headers: { \"User-Agent\": UA }, signal: AbortSignal.timeout(15000) });\n if (!res.ok) throw new Error(`${res.status} ${res.statusText}`);\n return res.text();\n}\n\nfunction filterByAge(items: RssItem[], hours: number): RssItem[] {\n const cutoff = Date.now() - hours * 60 * 60 * 1000;\n return items.filter((item) => {\n if (!item.date) return true;\n const ts = new Date(item.date).getTime();\n return isNaN(ts) || ts > cutoff;\n });\n}\n\nfunction filterByKeywords(items: RssItem[], keywords: string[]): RssItem[] {\n if (keywords.length === 0) return items;\n const lower = keywords.map((k) => k.toLowerCase());\n return items.filter((item) => {\n const text = `${item.title} ${item.summary}`.toLowerCase();\n return lower.some((kw) => text.includes(kw));\n });\n}\n\nasync function main(): Promise<void> {\n const args = process.argv.slice(2);\n const feedsIdx = args.indexOf(\"--feeds\");\n if (feedsIdx === -1 || !args[feedsIdx + 1]) {\n console.error(\"Usage: abtars-rss --feeds <path.json> [--hours N]\");\n process.exit(1);\n }\n const feedsPath = args[feedsIdx + 1]!;\n const hours = parseInt(args.find((_, i, a) => a[i - 1] === \"--hours\") ?? \"24\", 10);\n\n const feeds: FeedConfig[] = JSON.parse(readFileSync(feedsPath, \"utf-8\"));\n const outDir = join(process.env[\"ABTARS_HOME\"] ?? join(homedir(), \".abtars\"), \"workspace\", \"rss\");\n\n console.error(`Fetching ${feeds.length} feeds...`);\n\n const allItems: RssItem[] = [];\n for (const feed of feeds) {\n try {\n console.error(` ${feed.name}...`);\n const body = await fetchFeed(feed.url);\n let items = body.trimStart().startsWith(\"{\") ? parseEdgarJson(body, feed.name) : parseXmlFeed(body, feed.name);\n if (feed.keywords) items = filterByKeywords(items, feed.keywords);\n allItems.push(...items);\n } catch (e: any) {\n console.error(` \u26A0 ${feed.name} failed: ${e.message}`);\n }\n }\n\n const filtered = filterByAge(allItems, hours);\n const seen = new Set<string>();\n const deduped = filtered.filter((item) => {\n const key = item.title.toLowerCase().replace(/[^a-z0-9]/g, \"\").slice(0, 60);\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n });\n\n const date = new Date().toISOString().slice(0, 10);\n const feedName = basename(feedsPath, \".json\").replace(/_feeds$/, \"\");\n const feedOutDir = join(outDir, feedName);\n mkdirSync(feedOutDir, { recursive: true });\n const outFile = join(feedOutDir, `${date}.json`);\n const payload = { date, hours, totalFeeds: feeds.length, totalItems: deduped.length, items: deduped };\n writeFileSync(outFile, JSON.stringify(payload, null, 2), \"utf-8\");\n\n console.error(`\uD83D\uDCC4 ${deduped.length} items \u2192 ${outFile}`);\n console.log(JSON.stringify(payload, null, 2));\n}\n\nmain().catch((err) => { console.error(`Fatal: ${err.message}`); process.exit(1); });\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/bundle/abtars-task.js
CHANGED
|
@@ -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 {
|
|
@@ -9,13 +8,13 @@ import {
|
|
|
9
8
|
readEntry,
|
|
10
9
|
removeEntry,
|
|
11
10
|
writeEntry
|
|
12
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-H7RX7UCR.js";
|
|
13
12
|
import {
|
|
14
13
|
localISO
|
|
15
14
|
} from "./chunk-MZWMYN4O.js";
|
|
16
|
-
import "./chunk-
|
|
17
|
-
import "./chunk-
|
|
18
|
-
import "./chunk-
|
|
15
|
+
import "./chunk-CYSGXNBY.js";
|
|
16
|
+
import "./chunk-GUTRAMK3.js";
|
|
17
|
+
import "./chunk-WW5F2DCO.js";
|
|
19
18
|
import {
|
|
20
19
|
__toESM
|
|
21
20
|
} from "./chunk-7K2YZTLD.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/cli/abtars-task.ts"],
|
|
4
|
-
"sourcesContent": ["
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["/**\n * abtars-task \u2014 schedule time-based reminders and tasks.\n *\n * Usage:\n * abtars-task add --at \"2026-03-16T08:00\" --message \"Remind about cookies\" --chat-id 7773842843 --type reminder\n * abtars-task list\n * abtars-task remove <id>\n *\n * File: ~/.abtars/tasks/tasks.json\n */\n\nimport { localISO } from \"../utils/local-time.js\";\nimport { randomBytes } from \"node:crypto\";\nimport { readEntries as dbReadEntries, readEntry, writeEntry, removeEntry as dbRemoveEntry } from \"../components/tasks/task-store.js\";\n\n\nexport interface CronEntry {\n id: string;\n title?: string;\n fireAt: number;\n message: string;\n chatId: number;\n type: \"reminder\" | \"task\";\n executor?: \"agent\" | \"script\";\n schedule?: string;\n catchUp?: number; // hours: max delay after fireAt before skipping to next. 0 = no catch-up (default).\n priority?: \"high\" | \"medium\" | \"low\";\n taskFile?: string;\n paused?: boolean;\n maxRunsPerDay?: number;\n consecutiveFails?: number;\n agentFollowUp?: boolean;\n agentMessage?: string;\n fired: boolean;\n createdAt: number;\n lastRanAt?: number;\n retryAfter?: number;\n _prevFireAt?: number;\n _retrying?: boolean;\n history?: { ts: number; exitCode?: number }[];\n}\n\nexport function readEntries(): CronEntry[] {\n return dbReadEntries();\n}\n\ninterface AddArgs {\n at?: string;\n message?: string;\n chatId?: string;\n type?: string;\n executor?: string;\n schedule?: string;\n}\n\nfunction parseAddArgs(args: string[]): AddArgs {\n const parsed: AddArgs = {};\n for (let i = 0; i < args.length; i++) {\n switch (args[i]) {\n case \"--at\": parsed.at = args[++i] ?? \"\"; break;\n case \"--message\": parsed.message = args[++i] ?? \"\"; break;\n case \"--chat-id\": parsed.chatId = args[++i] ?? \"\"; break;\n case \"--type\": parsed.type = args[++i] ?? \"\"; break;\n case \"--executor\": parsed.executor = args[++i] ?? \"\"; break;\n case \"--schedule\": parsed.schedule = args[++i] ?? \"\"; break;\n }\n }\n return parsed;\n}\n\nimport { CronExpressionParser } from \"cron-parser\";\n\nfunction add(args: string[]): void {\n const parsed = parseAddArgs(args);\n if (!parsed.at && !parsed.schedule) { console.log(JSON.stringify({ ok: false, error: \"--at or --schedule is required\" })); process.exit(1); }\n if (parsed.at && parsed.schedule) { console.log(JSON.stringify({ ok: false, error: \"use --at (one-shot) or --schedule (recurring), not both\" })); process.exit(1); }\n if (!parsed.message) { console.log(JSON.stringify({ ok: false, error: \"--message is required\" })); process.exit(1); }\n if (!parsed.chatId) { console.log(JSON.stringify({ ok: false, error: \"--chat-id is required\" })); process.exit(1); }\n\n let fireAt: number;\n let schedule: string | undefined;\n\n if (parsed.schedule) {\n try {\n const expr = CronExpressionParser.parse(parsed.schedule);\n fireAt = expr.next().getTime();\n schedule = parsed.schedule;\n } catch {\n console.log(JSON.stringify({ ok: false, error: \"Invalid --schedule cron expression\" })); process.exit(1);\n }\n } else {\n fireAt = new Date(parsed.at!).getTime();\n if (!Number.isFinite(fireAt)) { console.log(JSON.stringify({ ok: false, error: \"Invalid --at date\" })); process.exit(1); }\n }\n\n const chatId = parseInt(parsed.chatId, 10);\n if (!Number.isFinite(chatId)) { console.log(JSON.stringify({ ok: false, error: \"Invalid --chat-id\" })); process.exit(1); }\n\n const type = (parsed.type ?? \"reminder\") as CronEntry[\"type\"];\n if (type !== \"reminder\" && type !== \"task\") { console.log(JSON.stringify({ ok: false, error: \"--type must be reminder or task\" })); process.exit(1); }\n\n const executor = (parsed.executor ?? \"agent\") as NonNullable<CronEntry[\"executor\"]>;\n if (executor !== \"agent\" && executor !== \"script\") { console.log(JSON.stringify({ ok: false, error: \"--executor must be agent or script\" })); process.exit(1); }\n\n const entry: CronEntry = {\n id: randomBytes(3).toString(\"hex\"),\n fireAt: fireAt!,\n message: parsed.message,\n chatId,\n type,\n executor,\n ...(schedule ? { schedule } : {}),\n fired: false,\n createdAt: Date.now(),\n };\n\n const entries = dbReadEntries();\n\n // Dedup: reject if a recurring entry with same schedule+message+chatId already exists\n if (schedule) {\n const dup = entries.find(e => e.schedule === schedule && e.message === entry.message && e.chatId === chatId && !e.paused);\n if (dup) { console.log(JSON.stringify({ ok: false, error: \"duplicate\", existing_id: dup.id })); process.exit(1); }\n }\n\n writeEntry(entry);\n console.log(JSON.stringify({ ok: true, action: \"added\", id: entry.id, fireAt: localISO(new Date(fireAt!)), ...(schedule ? { schedule } : {}) }));\n}\n\nfunction listEntries(): void {\n const entries = readEntries().filter(e => !e.fired || e.schedule);\n if (entries.length === 0) {\n console.log(JSON.stringify({ ok: true, entries: [], message: \"No pending cron entries\" }));\n return;\n }\n const display = entries.map(e => ({\n id: e.id,\n fireAt: localISO(new Date(e.fireAt)),\n message: e.message,\n chatId: e.chatId,\n type: e.type,\n ...(e.executor ? { executor: e.executor } : {}),\n ...(e.schedule ? { schedule: e.schedule } : {}),\n ...(e.priority ? { priority: e.priority } : {}),\n ...(e.paused ? { paused: true } : {}),\n ...(e.lastRanAt ? { lastRanAt: localISO(new Date(e.lastRanAt)) } : {}),\n ...(e.history?.length ? { history: e.history } : {}),\n }));\n console.log(JSON.stringify({ ok: true, entries: display }));\n}\n\nfunction remove(id: string): void {\n if (!dbRemoveEntry(id)) { console.log(JSON.stringify({ ok: false, error: `Entry ${id} not found` })); process.exit(1); }\n console.log(JSON.stringify({ ok: true, action: \"removed\", id }));\n}\n\nfunction pause(id: string): void {\n const entry = readEntry(id);\n if (!entry) { console.log(JSON.stringify({ ok: false, error: `Entry ${id} not found` })); process.exit(1); }\n entry.paused = true;\n writeEntry(entry);\n console.log(JSON.stringify({ ok: true, action: \"paused\", id }));\n}\n\nfunction resume(id: string): void {\n const entry = readEntry(id);\n if (!entry) { console.log(JSON.stringify({ ok: false, error: `Entry ${id} not found` })); process.exit(1); }\n entry.paused = false;\n entry.consecutiveFails = 0;\n writeEntry(entry);\n console.log(JSON.stringify({ ok: true, action: \"resumed\", id }));\n}\n\nfunction showHistory(id: string): void {\n const entry = readEntry(id);\n if (!entry) { console.log(JSON.stringify({ ok: false, error: `Entry ${id} not found` })); process.exit(1); }\n const runs = (entry.history ?? []).map(h => ({\n ranAt: localISO(new Date(h.ts)),\n ...(h.exitCode !== undefined ? { exitCode: h.exitCode } : {}),\n }));\n console.log(JSON.stringify({ ok: true, id, message: entry.message.slice(0, 80), runs }));\n}\n\n// --- CLI entry point ---\n\nexport function main(argv: string[] = process.argv): void {\n if (argv.includes('--help')) {\n console.log(`abtars-task \u2014 schedule time-based reminders and tasks.\n\nUsage:\n abtars-task add --at \"2026-03-16T08:00\" --message \"...\" --chat-id ID --type reminder\n abtars-task add --schedule \"0 9 * * *\" --message \"...\" --chat-id ID --type task\n abtars-task list\n abtars-task remove <id>\n abtars-task pause <id>\n abtars-task resume <id>\n abtars-task history <id>`);\n process.exit(0);\n }\n\n const args = argv.slice(2);\n const command = args[0];\n\n switch (command) {\n case \"add\":\n add(args.slice(1));\n break;\n case \"list\":\n listEntries();\n break;\n case \"remove\": {\n const id = args[1];\n if (!id) { console.log(JSON.stringify({ ok: false, error: \"Usage: abtars-task remove <id>\" })); process.exit(1); }\n remove(id);\n break;\n }\n case \"pause\": {\n const id = args[1];\n if (!id) { console.log(JSON.stringify({ ok: false, error: \"Usage: abtars-task pause <id>\" })); process.exit(1); }\n pause(id);\n break;\n }\n case \"resume\": {\n const id = args[1];\n if (!id) { console.log(JSON.stringify({ ok: false, error: \"Usage: abtars-task resume <id>\" })); process.exit(1); }\n resume(id);\n break;\n }\n case \"history\": {\n const id = args[1];\n if (!id) { console.log(JSON.stringify({ ok: false, error: \"Usage: abtars-task history <id>\" })); process.exit(1); }\n showHistory(id);\n break;\n }\n default:\n console.log(JSON.stringify({ ok: false, error: \"Usage: abtars-task <add|list|remove|pause|resume|history> [args]\" }));\n process.exit(1);\n }\n}\n\nconst isDirectRun = process.argv[1]?.endsWith(\"abtars-task.ts\") ||\n process.argv[1]?.endsWith(\"abtars-task.js\");\nif (isDirectRun) main();\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;AAYA,SAAS,mBAAmB;AA0D5B,yBAAqC;AA5B9B,SAASA,eAA2B;AACzC,SAAO,YAAc;AACvB;AAWA,SAAS,aAAa,MAAyB;AAC7C,QAAM,SAAkB,CAAC;AACzB,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,YAAQ,KAAK,CAAC,GAAG;AAAA,MACf,KAAK;AAAQ,eAAO,KAAK,KAAK,EAAE,CAAC,KAAK;AAAI;AAAA,MAC1C,KAAK;AAAa,eAAO,UAAU,KAAK,EAAE,CAAC,KAAK;AAAI;AAAA,MACpD,KAAK;AAAa,eAAO,SAAS,KAAK,EAAE,CAAC,KAAK;AAAI;AAAA,MACnD,KAAK;AAAU,eAAO,OAAO,KAAK,EAAE,CAAC,KAAK;AAAI;AAAA,MAC9C,KAAK;AAAc,eAAO,WAAW,KAAK,EAAE,CAAC,KAAK;AAAI;AAAA,MACtD,KAAK;AAAc,eAAO,WAAW,KAAK,EAAE,CAAC,KAAK;AAAI;AAAA,IACxD;AAAA,EACF;AACA,SAAO;AACT;AAIA,SAAS,IAAI,MAAsB;AACjC,QAAM,SAAS,aAAa,IAAI;AAChC,MAAI,CAAC,OAAO,MAAM,CAAC,OAAO,UAAU;AAAE,YAAQ,IAAI,KAAK,UAAU,EAAE,IAAI,OAAO,OAAO,iCAAiC,CAAC,CAAC;AAAG,YAAQ,KAAK,CAAC;AAAA,EAAG;AAC5I,MAAI,OAAO,MAAM,OAAO,UAAU;AAAE,YAAQ,IAAI,KAAK,UAAU,EAAE,IAAI,OAAO,OAAO,0DAA0D,CAAC,CAAC;AAAG,YAAQ,KAAK,CAAC;AAAA,EAAG;AACnK,MAAI,CAAC,OAAO,SAAS;AAAE,YAAQ,IAAI,KAAK,UAAU,EAAE,IAAI,OAAO,OAAO,wBAAwB,CAAC,CAAC;AAAG,YAAQ,KAAK,CAAC;AAAA,EAAG;AACpH,MAAI,CAAC,OAAO,QAAQ;AAAE,YAAQ,IAAI,KAAK,UAAU,EAAE,IAAI,OAAO,OAAO,wBAAwB,CAAC,CAAC;AAAG,YAAQ,KAAK,CAAC;AAAA,EAAG;AAEnH,MAAI;AACJ,MAAI;AAEJ,MAAI,OAAO,UAAU;AACnB,QAAI;AACF,YAAM,OAAO,wCAAqB,MAAM,OAAO,QAAQ;AACvD,eAAS,KAAK,KAAK,EAAE,QAAQ;AAC7B,iBAAW,OAAO;AAAA,IACpB,QAAQ;AACN,cAAQ,IAAI,KAAK,UAAU,EAAE,IAAI,OAAO,OAAO,qCAAqC,CAAC,CAAC;AAAG,cAAQ,KAAK,CAAC;AAAA,IACzG;AAAA,EACF,OAAO;AACL,aAAS,IAAI,KAAK,OAAO,EAAG,EAAE,QAAQ;AACtC,QAAI,CAAC,OAAO,SAAS,MAAM,GAAG;AAAE,cAAQ,IAAI,KAAK,UAAU,EAAE,IAAI,OAAO,OAAO,oBAAoB,CAAC,CAAC;AAAG,cAAQ,KAAK,CAAC;AAAA,IAAG;AAAA,EAC3H;AAEA,QAAM,SAAS,SAAS,OAAO,QAAQ,EAAE;AACzC,MAAI,CAAC,OAAO,SAAS,MAAM,GAAG;AAAE,YAAQ,IAAI,KAAK,UAAU,EAAE,IAAI,OAAO,OAAO,oBAAoB,CAAC,CAAC;AAAG,YAAQ,KAAK,CAAC;AAAA,EAAG;AAEzH,QAAM,OAAQ,OAAO,QAAQ;AAC7B,MAAI,SAAS,cAAc,SAAS,QAAQ;AAAE,YAAQ,IAAI,KAAK,UAAU,EAAE,IAAI,OAAO,OAAO,kCAAkC,CAAC,CAAC;AAAG,YAAQ,KAAK,CAAC;AAAA,EAAG;AAErJ,QAAM,WAAY,OAAO,YAAY;AACrC,MAAI,aAAa,WAAW,aAAa,UAAU;AAAE,YAAQ,IAAI,KAAK,UAAU,EAAE,IAAI,OAAO,OAAO,qCAAqC,CAAC,CAAC;AAAG,YAAQ,KAAK,CAAC;AAAA,EAAG;AAE/J,QAAM,QAAmB;AAAA,IACvB,IAAI,YAAY,CAAC,EAAE,SAAS,KAAK;AAAA,IACjC;AAAA,IACA,SAAS,OAAO;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAI,WAAW,EAAE,SAAS,IAAI,CAAC;AAAA,IAC/B,OAAO;AAAA,IACP,WAAW,KAAK,IAAI;AAAA,EACtB;AAEA,QAAM,UAAU,YAAc;AAG9B,MAAI,UAAU;AACZ,UAAM,MAAM,QAAQ,KAAK,OAAK,EAAE,aAAa,YAAY,EAAE,YAAY,MAAM,WAAW,EAAE,WAAW,UAAU,CAAC,EAAE,MAAM;AACxH,QAAI,KAAK;AAAE,cAAQ,IAAI,KAAK,UAAU,EAAE,IAAI,OAAO,OAAO,aAAa,aAAa,IAAI,GAAG,CAAC,CAAC;AAAG,cAAQ,KAAK,CAAC;AAAA,IAAG;AAAA,EACnH;AAEA,aAAW,KAAK;AAChB,UAAQ,IAAI,KAAK,UAAU,EAAE,IAAI,MAAM,QAAQ,SAAS,IAAI,MAAM,IAAI,QAAQ,SAAS,IAAI,KAAK,MAAO,CAAC,GAAG,GAAI,WAAW,EAAE,SAAS,IAAI,CAAC,EAAG,CAAC,CAAC;AACjJ;AAEA,SAAS,cAAoB;AAC3B,QAAM,UAAUA,aAAY,EAAE,OAAO,OAAK,CAAC,EAAE,SAAS,EAAE,QAAQ;AAChE,MAAI,QAAQ,WAAW,GAAG;AACxB,YAAQ,IAAI,KAAK,UAAU,EAAE,IAAI,MAAM,SAAS,CAAC,GAAG,SAAS,0BAA0B,CAAC,CAAC;AACzF;AAAA,EACF;AACA,QAAM,UAAU,QAAQ,IAAI,QAAM;AAAA,IAChC,IAAI,EAAE;AAAA,IACN,QAAQ,SAAS,IAAI,KAAK,EAAE,MAAM,CAAC;AAAA,IACnC,SAAS,EAAE;AAAA,IACX,QAAQ,EAAE;AAAA,IACV,MAAM,EAAE;AAAA,IACR,GAAI,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,IAAI,CAAC;AAAA,IAC7C,GAAI,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,IAAI,CAAC;AAAA,IAC7C,GAAI,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,IAAI,CAAC;AAAA,IAC7C,GAAI,EAAE,SAAS,EAAE,QAAQ,KAAK,IAAI,CAAC;AAAA,IACnC,GAAI,EAAE,YAAY,EAAE,WAAW,SAAS,IAAI,KAAK,EAAE,SAAS,CAAC,EAAE,IAAI,CAAC;AAAA,IACpE,GAAI,EAAE,SAAS,SAAS,EAAE,SAAS,EAAE,QAAQ,IAAI,CAAC;AAAA,EACpD,EAAE;AACF,UAAQ,IAAI,KAAK,UAAU,EAAE,IAAI,MAAM,SAAS,QAAQ,CAAC,CAAC;AAC5D;AAEA,SAAS,OAAO,IAAkB;AAChC,MAAI,CAAC,YAAc,EAAE,GAAG;AAAE,YAAQ,IAAI,KAAK,UAAU,EAAE,IAAI,OAAO,OAAO,SAAS,EAAE,aAAa,CAAC,CAAC;AAAG,YAAQ,KAAK,CAAC;AAAA,EAAG;AACvH,UAAQ,IAAI,KAAK,UAAU,EAAE,IAAI,MAAM,QAAQ,WAAW,GAAG,CAAC,CAAC;AACjE;AAEA,SAAS,MAAM,IAAkB;AAC/B,QAAM,QAAQ,UAAU,EAAE;AAC1B,MAAI,CAAC,OAAO;AAAE,YAAQ,IAAI,KAAK,UAAU,EAAE,IAAI,OAAO,OAAO,SAAS,EAAE,aAAa,CAAC,CAAC;AAAG,YAAQ,KAAK,CAAC;AAAA,EAAG;AAC3G,QAAM,SAAS;AACf,aAAW,KAAK;AAChB,UAAQ,IAAI,KAAK,UAAU,EAAE,IAAI,MAAM,QAAQ,UAAU,GAAG,CAAC,CAAC;AAChE;AAEA,SAAS,OAAO,IAAkB;AAChC,QAAM,QAAQ,UAAU,EAAE;AAC1B,MAAI,CAAC,OAAO;AAAE,YAAQ,IAAI,KAAK,UAAU,EAAE,IAAI,OAAO,OAAO,SAAS,EAAE,aAAa,CAAC,CAAC;AAAG,YAAQ,KAAK,CAAC;AAAA,EAAG;AAC3G,QAAM,SAAS;AACf,QAAM,mBAAmB;AACzB,aAAW,KAAK;AAChB,UAAQ,IAAI,KAAK,UAAU,EAAE,IAAI,MAAM,QAAQ,WAAW,GAAG,CAAC,CAAC;AACjE;AAEA,SAAS,YAAY,IAAkB;AACrC,QAAM,QAAQ,UAAU,EAAE;AAC1B,MAAI,CAAC,OAAO;AAAE,YAAQ,IAAI,KAAK,UAAU,EAAE,IAAI,OAAO,OAAO,SAAS,EAAE,aAAa,CAAC,CAAC;AAAG,YAAQ,KAAK,CAAC;AAAA,EAAG;AAC3G,QAAM,QAAQ,MAAM,WAAW,CAAC,GAAG,IAAI,QAAM;AAAA,IAC3C,OAAO,SAAS,IAAI,KAAK,EAAE,EAAE,CAAC;AAAA,IAC9B,GAAI,EAAE,aAAa,SAAY,EAAE,UAAU,EAAE,SAAS,IAAI,CAAC;AAAA,EAC7D,EAAE;AACF,UAAQ,IAAI,KAAK,UAAU,EAAE,IAAI,MAAM,IAAI,SAAS,MAAM,QAAQ,MAAM,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC;AACzF;AAIO,SAAS,KAAK,OAAiB,QAAQ,MAAY;AACxD,MAAI,KAAK,SAAS,QAAQ,GAAG;AAC3B,YAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BASW;AACvB,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM,OAAO,KAAK,MAAM,CAAC;AACzB,QAAM,UAAU,KAAK,CAAC;AAEtB,UAAQ,SAAS;AAAA,IACf,KAAK;AACH,UAAI,KAAK,MAAM,CAAC,CAAC;AACjB;AAAA,IACF,KAAK;AACH,kBAAY;AACZ;AAAA,IACF,KAAK,UAAU;AACb,YAAM,KAAK,KAAK,CAAC;AACjB,UAAI,CAAC,IAAI;AAAE,gBAAQ,IAAI,KAAK,UAAU,EAAE,IAAI,OAAO,OAAO,iCAAiC,CAAC,CAAC;AAAG,gBAAQ,KAAK,CAAC;AAAA,MAAG;AACjH,aAAO,EAAE;AACT;AAAA,IACF;AAAA,IACA,KAAK,SAAS;AACZ,YAAM,KAAK,KAAK,CAAC;AACjB,UAAI,CAAC,IAAI;AAAE,gBAAQ,IAAI,KAAK,UAAU,EAAE,IAAI,OAAO,OAAO,gCAAgC,CAAC,CAAC;AAAG,gBAAQ,KAAK,CAAC;AAAA,MAAG;AAChH,YAAM,EAAE;AACR;AAAA,IACF;AAAA,IACA,KAAK,UAAU;AACb,YAAM,KAAK,KAAK,CAAC;AACjB,UAAI,CAAC,IAAI;AAAE,gBAAQ,IAAI,KAAK,UAAU,EAAE,IAAI,OAAO,OAAO,iCAAiC,CAAC,CAAC;AAAG,gBAAQ,KAAK,CAAC;AAAA,MAAG;AACjH,aAAO,EAAE;AACT;AAAA,IACF;AAAA,IACA,KAAK,WAAW;AACd,YAAM,KAAK,KAAK,CAAC;AACjB,UAAI,CAAC,IAAI;AAAE,gBAAQ,IAAI,KAAK,UAAU,EAAE,IAAI,OAAO,OAAO,kCAAkC,CAAC,CAAC;AAAG,gBAAQ,KAAK,CAAC;AAAA,MAAG;AAClH,kBAAY,EAAE;AACd;AAAA,IACF;AAAA,IACA;AACE,cAAQ,IAAI,KAAK,UAAU,EAAE,IAAI,OAAO,OAAO,mEAAmE,CAAC,CAAC;AACpH,cAAQ,KAAK,CAAC;AAAA,EAClB;AACF;AAEA,IAAM,cAAc,QAAQ,KAAK,CAAC,GAAG,SAAS,gBAAgB,KAC5D,QAAQ,KAAK,CAAC,GAAG,SAAS,gBAAgB;AAC5C,IAAI,YAAa,MAAK;",
|
|
6
6
|
"names": ["readEntries"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createRequire as __bundleCreateRequire } from 'node:module'; import { fileURLToPath as __bundleFileURLToPath } from 'node:url'; import { dirname as __bundleDirname } from 'node:path'; const require = __bundleCreateRequire(import.meta.url); const __chunk_filename = __bundleFileURLToPath(import.meta.url); const __chunk_dirname = __bundleDirname(__chunk_filename);
|
|
3
|
+
import {
|
|
4
|
+
localDate
|
|
5
|
+
} from "./chunk-DGS7J4P6.js";
|
|
6
|
+
import {
|
|
7
|
+
abtarsHome,
|
|
8
|
+
init_paths
|
|
9
|
+
} from "./chunk-WW5F2DCO.js";
|
|
10
|
+
import "./chunk-7K2YZTLD.js";
|
|
11
|
+
|
|
12
|
+
// src/cli/abtars-todo.ts
|
|
13
|
+
init_paths();
|
|
14
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
15
|
+
import { join } from "node:path";
|
|
16
|
+
var todoPath = () => join(abtarsHome(), "workspace", "todo", "todo.md");
|
|
17
|
+
var HEADER = "# Todo List\n";
|
|
18
|
+
function ensureFile() {
|
|
19
|
+
const p = todoPath();
|
|
20
|
+
const dir = join(abtarsHome(), "workspace", "todo");
|
|
21
|
+
if (!existsSync(dir)) mkdirSync(dir, { recursive: true });
|
|
22
|
+
if (!existsSync(p)) writeFileSync(p, HEADER, "utf-8");
|
|
23
|
+
}
|
|
24
|
+
function readLines() {
|
|
25
|
+
ensureFile();
|
|
26
|
+
return readFileSync(todoPath(), "utf-8").split("\n");
|
|
27
|
+
}
|
|
28
|
+
function writeLines(lines) {
|
|
29
|
+
writeFileSync(todoPath(), lines.join("\n"), "utf-8");
|
|
30
|
+
}
|
|
31
|
+
function itemIndices(lines) {
|
|
32
|
+
return lines.reduce((acc, line, i) => {
|
|
33
|
+
if (/^- \[[ x]\] /.test(line)) acc.push(i);
|
|
34
|
+
return acc;
|
|
35
|
+
}, []);
|
|
36
|
+
}
|
|
37
|
+
function add(description) {
|
|
38
|
+
ensureFile();
|
|
39
|
+
const date = localDate();
|
|
40
|
+
const entry = `- [ ] ${date}: ${description}
|
|
41
|
+
`;
|
|
42
|
+
const content = readFileSync(todoPath(), "utf-8");
|
|
43
|
+
writeFileSync(todoPath(), content.endsWith("\n") ? content + entry : content + "\n" + entry, "utf-8");
|
|
44
|
+
console.log(JSON.stringify({ ok: true, action: "added", description }));
|
|
45
|
+
}
|
|
46
|
+
function list() {
|
|
47
|
+
const lines = readLines();
|
|
48
|
+
const items = lines.filter((l) => /^- \[[ x]\] /.test(l));
|
|
49
|
+
if (items.length === 0) {
|
|
50
|
+
console.log(JSON.stringify({ ok: true, items: [], message: "Todo list is empty" }));
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
console.log(items.join("\n"));
|
|
54
|
+
}
|
|
55
|
+
function done(lineNum) {
|
|
56
|
+
const lines = readLines();
|
|
57
|
+
const indices = itemIndices(lines);
|
|
58
|
+
if (lineNum < 1 || lineNum > indices.length) {
|
|
59
|
+
console.log(JSON.stringify({ ok: false, error: `Invalid item number ${lineNum}. Have ${indices.length} items.` }));
|
|
60
|
+
process.exit(1);
|
|
61
|
+
}
|
|
62
|
+
const idx = indices[lineNum - 1];
|
|
63
|
+
lines[idx] = lines[idx].replace("- [ ]", "- [x]");
|
|
64
|
+
writeLines(lines);
|
|
65
|
+
console.log(JSON.stringify({ ok: true, action: "done", item: lineNum }));
|
|
66
|
+
}
|
|
67
|
+
function remove(lineNum) {
|
|
68
|
+
const lines = readLines();
|
|
69
|
+
const indices = itemIndices(lines);
|
|
70
|
+
if (lineNum < 1 || lineNum > indices.length) {
|
|
71
|
+
console.log(JSON.stringify({ ok: false, error: `Invalid item number ${lineNum}. Have ${indices.length} items.` }));
|
|
72
|
+
process.exit(1);
|
|
73
|
+
}
|
|
74
|
+
const idx = indices[lineNum - 1];
|
|
75
|
+
lines.splice(idx, 1);
|
|
76
|
+
writeLines(lines);
|
|
77
|
+
console.log(JSON.stringify({ ok: true, action: "removed", item: lineNum }));
|
|
78
|
+
}
|
|
79
|
+
function main(argv = process.argv) {
|
|
80
|
+
const args = argv.slice(2);
|
|
81
|
+
if (args.includes("--help")) {
|
|
82
|
+
console.log(`Usage:
|
|
83
|
+
abtars-todo add "description"
|
|
84
|
+
abtars-todo list
|
|
85
|
+
abtars-todo done <number>
|
|
86
|
+
abtars-todo remove <number>
|
|
87
|
+
|
|
88
|
+
File: ~/.abtars/memory/todo.md`);
|
|
89
|
+
process.exit(0);
|
|
90
|
+
}
|
|
91
|
+
const command = args[0];
|
|
92
|
+
switch (command) {
|
|
93
|
+
case "add": {
|
|
94
|
+
const desc = args[1];
|
|
95
|
+
if (!desc) {
|
|
96
|
+
console.log(JSON.stringify({ ok: false, error: 'Usage: abtars-todo add "description"' }));
|
|
97
|
+
process.exit(1);
|
|
98
|
+
}
|
|
99
|
+
add(desc);
|
|
100
|
+
break;
|
|
101
|
+
}
|
|
102
|
+
case "list":
|
|
103
|
+
list();
|
|
104
|
+
break;
|
|
105
|
+
case "done": {
|
|
106
|
+
const n = parseInt(args[1] ?? "", 10);
|
|
107
|
+
if (!Number.isFinite(n)) {
|
|
108
|
+
console.log(JSON.stringify({ ok: false, error: "Usage: abtars-todo done <number>" }));
|
|
109
|
+
process.exit(1);
|
|
110
|
+
}
|
|
111
|
+
done(n);
|
|
112
|
+
break;
|
|
113
|
+
}
|
|
114
|
+
case "remove": {
|
|
115
|
+
const n = parseInt(args[1] ?? "", 10);
|
|
116
|
+
if (!Number.isFinite(n)) {
|
|
117
|
+
console.log(JSON.stringify({ ok: false, error: "Usage: abtars-todo remove <number>" }));
|
|
118
|
+
process.exit(1);
|
|
119
|
+
}
|
|
120
|
+
remove(n);
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
default:
|
|
124
|
+
console.log(JSON.stringify({ ok: false, error: "Usage: abtars-todo <add|list|done|remove> [args]" }));
|
|
125
|
+
process.exit(1);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
var isDirectRun = process.argv[1]?.endsWith("abtars-todo.ts") || process.argv[1]?.endsWith("abtars-todo.js");
|
|
129
|
+
if (isDirectRun) main();
|
|
130
|
+
export {
|
|
131
|
+
main
|
|
132
|
+
};
|
|
133
|
+
//# sourceMappingURL=abtars-todo.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/cli/abtars-todo.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * abtars-todo \u2014 persistent todo list CLI.\n *\n * Usage:\n * abtars-todo add \"Export X/Twitter session cookies\"\n * abtars-todo list\n * abtars-todo done 3\n * abtars-todo remove 3\n *\n * File: ~/.abtars/workspace/todo/todo.md\n */\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { abtarsHome } from \"../paths.js\";\nimport { localDate } from \"../utils/date.js\";\n\nconst todoPath = (): string => join(abtarsHome(), \"workspace\", \"todo\", \"todo.md\");\nconst HEADER = \"# Todo List\\n\";\n\nfunction ensureFile(): void {\n const p = todoPath();\n const dir = join(abtarsHome(), \"workspace\", \"todo\");\n if (!existsSync(dir)) mkdirSync(dir, { recursive: true });\n if (!existsSync(p)) writeFileSync(p, HEADER, \"utf-8\");\n}\n\nfunction readLines(): string[] {\n ensureFile();\n return readFileSync(todoPath(), \"utf-8\").split(\"\\n\");\n}\n\nfunction writeLines(lines: string[]): void {\n writeFileSync(todoPath(), lines.join(\"\\n\"), \"utf-8\");\n}\n\n/** Find indices of todo item lines (- [ ] or - [x]) */\nfunction itemIndices(lines: string[]): number[] {\n return lines.reduce<number[]>((acc, line, i) => {\n if (/^- \\[[ x]\\] /.test(line)) acc.push(i);\n return acc;\n }, []);\n}\n\nfunction add(description: string): void {\n ensureFile();\n const date = localDate();\n const entry = `- [ ] ${date}: ${description}\\n`;\n const content = readFileSync(todoPath(), \"utf-8\");\n writeFileSync(todoPath(), content.endsWith(\"\\n\") ? content + entry : content + \"\\n\" + entry, \"utf-8\");\n console.log(JSON.stringify({ ok: true, action: \"added\", description }));\n}\n\nfunction list(): void {\n const lines = readLines();\n const items = lines.filter(l => /^- \\[[ x]\\] /.test(l));\n if (items.length === 0) {\n console.log(JSON.stringify({ ok: true, items: [], message: \"Todo list is empty\" }));\n return;\n }\n // Print raw for agent readability\n console.log(items.join(\"\\n\"));\n}\n\nfunction done(lineNum: number): void {\n const lines = readLines();\n const indices = itemIndices(lines);\n if (lineNum < 1 || lineNum > indices.length) {\n console.log(JSON.stringify({ ok: false, error: `Invalid item number ${lineNum}. Have ${indices.length} items.` }));\n process.exit(1);\n }\n const idx = indices[lineNum - 1]!;\n lines[idx] = lines[idx]!.replace(\"- [ ]\", \"- [x]\");\n writeLines(lines);\n console.log(JSON.stringify({ ok: true, action: \"done\", item: lineNum }));\n}\n\nfunction remove(lineNum: number): void {\n const lines = readLines();\n const indices = itemIndices(lines);\n if (lineNum < 1 || lineNum > indices.length) {\n console.log(JSON.stringify({ ok: false, error: `Invalid item number ${lineNum}. Have ${indices.length} items.` }));\n process.exit(1);\n }\n const idx = indices[lineNum - 1]!;\n lines.splice(idx, 1);\n writeLines(lines);\n console.log(JSON.stringify({ ok: true, action: \"removed\", item: lineNum }));\n}\n\n// --- CLI entry point ---\n\nexport function main(argv: string[] = process.argv): void {\n const args = argv.slice(2);\n\n if (args.includes('--help')) {\n console.log(`Usage:\n abtars-todo add \"description\"\n abtars-todo list\n abtars-todo done <number>\n abtars-todo remove <number>\n\nFile: ~/.abtars/memory/todo.md`);\n process.exit(0);\n }\n\n const command = args[0];\n\n switch (command) {\n case \"add\": {\n const desc = args[1];\n if (!desc) { console.log(JSON.stringify({ ok: false, error: \"Usage: abtars-todo add \\\"description\\\"\" })); process.exit(1); }\n add(desc);\n break;\n }\n case \"list\":\n list();\n break;\n case \"done\": {\n const n = parseInt(args[1] ?? \"\", 10);\n if (!Number.isFinite(n)) { console.log(JSON.stringify({ ok: false, error: \"Usage: abtars-todo done <number>\" })); process.exit(1); }\n done(n);\n break;\n }\n case \"remove\": {\n const n = parseInt(args[1] ?? \"\", 10);\n if (!Number.isFinite(n)) { console.log(JSON.stringify({ ok: false, error: \"Usage: abtars-todo remove <number>\" })); process.exit(1); }\n remove(n);\n break;\n }\n default:\n console.log(JSON.stringify({ ok: false, error: \"Usage: abtars-todo <add|list|done|remove> [args]\" }));\n process.exit(1);\n }\n}\n\nconst isDirectRun = process.argv[1]?.endsWith(\"abtars-todo.ts\") ||\n process.argv[1]?.endsWith(\"abtars-todo.js\");\nif (isDirectRun) main();\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|