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
|
@@ -3,47 +3,50 @@
|
|
|
3
3
|
import {
|
|
4
4
|
require_ws
|
|
5
5
|
} from "./chunk-NIRYBWUW.js";
|
|
6
|
+
import {
|
|
7
|
+
loadMinimalSoul,
|
|
8
|
+
loadSoulBundle
|
|
9
|
+
} from "./chunk-L33WNMCP.js";
|
|
6
10
|
import {
|
|
7
11
|
transcribeAudio
|
|
8
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-SA6YEFNG.js";
|
|
9
13
|
import {
|
|
10
14
|
ModelNotFoundError
|
|
11
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-PKHYCNTT.js";
|
|
12
16
|
import {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
} from "./chunk-KFENC7BM.js";
|
|
16
|
-
import {
|
|
17
|
-
loadUsers
|
|
18
|
-
} from "./chunk-GBBTK6H2.js";
|
|
17
|
+
sanitizeOutbound
|
|
18
|
+
} from "./chunk-YWZPKBO6.js";
|
|
19
19
|
import {
|
|
20
20
|
abmind
|
|
21
21
|
} from "./chunk-JAJ3DUQ2.js";
|
|
22
22
|
import {
|
|
23
23
|
fire,
|
|
24
24
|
hasHooks
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-DO4INSXE.js";
|
|
26
26
|
import {
|
|
27
27
|
readAndClearRestartReason,
|
|
28
28
|
readBridgeLockField,
|
|
29
29
|
updateBridgeLockField,
|
|
30
30
|
writeForceSleep,
|
|
31
31
|
writeSleepStatus
|
|
32
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-RTL7HO3N.js";
|
|
33
|
+
import {
|
|
34
|
+
loadUsers
|
|
35
|
+
} from "./chunk-SRFEIZQT.js";
|
|
33
36
|
import {
|
|
34
37
|
readEntries
|
|
35
|
-
} from "./chunk-
|
|
38
|
+
} from "./chunk-H7RX7UCR.js";
|
|
36
39
|
import {
|
|
37
40
|
localTime
|
|
38
41
|
} from "./chunk-MZWMYN4O.js";
|
|
39
|
-
import {
|
|
40
|
-
init_log_and_swallow,
|
|
41
|
-
logAndSwallow
|
|
42
|
-
} from "./chunk-EX2SRTUE.js";
|
|
43
42
|
import {
|
|
44
43
|
getEnv,
|
|
45
44
|
init_env_schema
|
|
46
|
-
} from "./chunk-
|
|
45
|
+
} from "./chunk-3OXQWII3.js";
|
|
46
|
+
import {
|
|
47
|
+
init_log_and_swallow,
|
|
48
|
+
logAndSwallow
|
|
49
|
+
} from "./chunk-CYSGXNBY.js";
|
|
47
50
|
import {
|
|
48
51
|
init_logger,
|
|
49
52
|
logDebug,
|
|
@@ -51,11 +54,11 @@ import {
|
|
|
51
54
|
logInfo,
|
|
52
55
|
logTrace,
|
|
53
56
|
logWarn
|
|
54
|
-
} from "./chunk-
|
|
57
|
+
} from "./chunk-GUTRAMK3.js";
|
|
55
58
|
import {
|
|
56
59
|
abtarsHome,
|
|
57
60
|
init_paths
|
|
58
|
-
} from "./chunk-
|
|
61
|
+
} from "./chunk-WW5F2DCO.js";
|
|
59
62
|
import {
|
|
60
63
|
__commonJS,
|
|
61
64
|
__require,
|
|
@@ -863,21 +866,6 @@ function cleanForTts(text) {
|
|
|
863
866
|
return result.replace(/\n{3,}/g, "\n\n").trim();
|
|
864
867
|
}
|
|
865
868
|
|
|
866
|
-
// src/components/sanitize-outbound.ts
|
|
867
|
-
var STRIP = [
|
|
868
|
-
/\s*\[TOPICS:\s*.+?\]/gi,
|
|
869
|
-
/\s*\[NO_REPLY\]\s*/gi,
|
|
870
|
-
/\s*\[REACT:.+?\]\s*/gi
|
|
871
|
-
];
|
|
872
|
-
function sanitizeOutbound(text) {
|
|
873
|
-
let out = text;
|
|
874
|
-
for (const re of STRIP) {
|
|
875
|
-
re.lastIndex = 0;
|
|
876
|
-
out = out.replace(re, "");
|
|
877
|
-
}
|
|
878
|
-
return out.trim();
|
|
879
|
-
}
|
|
880
|
-
|
|
881
869
|
// src/components/pipeline/middleware.ts
|
|
882
870
|
async function runPipeline(ctx, middlewares) {
|
|
883
871
|
let index = 0;
|
|
@@ -1206,15 +1194,17 @@ File saved at: ${msg.mediaPath}`;
|
|
|
1206
1194
|
const isSessionStart = entry.pendingStart || !entry.seen;
|
|
1207
1195
|
logTrace(TAG3, `session-state: key=${sessionKey} seen=${entry.seen} pendingStart=${entry.pendingStart} isSessionStart=${isSessionStart}`);
|
|
1208
1196
|
if (isSessionStart && memory) {
|
|
1209
|
-
prompt = buildSessionStartPrompt(prompt, memory, userId, sessionKey, deps.maxContext);
|
|
1197
|
+
prompt = buildSessionStartPrompt(prompt, memory, userId, sessionKey, deps.maxContext, msg.platform);
|
|
1210
1198
|
}
|
|
1211
1199
|
entry.seen = true;
|
|
1212
1200
|
entry.pendingStart = false;
|
|
1213
1201
|
const userRole = registry.byUserId.get(userId)?.role;
|
|
1202
|
+
logTrace(TAG3, `recordMessage gate: memory=${!!memory} userId=${userId} userRole=${userRole}`);
|
|
1214
1203
|
if (memory && userRole !== "guest") {
|
|
1215
1204
|
const numericMsgId = typeof msg.messageId === "number" ? msg.messageId : void 0;
|
|
1216
1205
|
memory.recordMessage({ role: "user", content: text, timestamp: Date.now(), userId, sessionId: sessionKey, platformMessageId: numericMsgId });
|
|
1217
1206
|
}
|
|
1207
|
+
let recalledHits;
|
|
1218
1208
|
if (getEnv().activeMemory && memory) {
|
|
1219
1209
|
const userEntry = registry.byUserId.get(userId);
|
|
1220
1210
|
if (userEntry?.role !== "guest" && (contextPercent < 0 || contextPercent < getEnv().ctxCompactPct)) {
|
|
@@ -1256,6 +1246,7 @@ ${lines.join("\n")}
|
|
|
1256
1246
|
|
|
1257
1247
|
`;
|
|
1258
1248
|
prompt = block + prompt;
|
|
1249
|
+
recalledHits = hits.filter((h) => h.id != null).map((h) => ({ id: h.id, contentEn: h.content }));
|
|
1259
1250
|
logDebug(TAG3, `Active recall: ${hits.length} hits, ${block.length} chars, ${Math.round(performance.now() - t0)}ms`);
|
|
1260
1251
|
logTrace(TAG3, `recall content: ${block}`);
|
|
1261
1252
|
}
|
|
@@ -1273,13 +1264,13 @@ ${lines.join("\n")}
|
|
|
1273
1264
|
const scan = scanFn(text);
|
|
1274
1265
|
if (!scan.safe) {
|
|
1275
1266
|
logInfo(TAG3, `Injection blocked from ${userId}: ${scan.flags.map((f) => f.category).join(", ")}`);
|
|
1276
|
-
return { prompt: "__INJECTION_BLOCKED__", isSessionStart, imageContent: void 0 };
|
|
1267
|
+
return { prompt: "__INJECTION_BLOCKED__", isSessionStart, imageContent: void 0, recalledHits: void 0 };
|
|
1277
1268
|
}
|
|
1278
1269
|
}
|
|
1279
1270
|
}
|
|
1280
|
-
return { prompt, isSessionStart, imageContent };
|
|
1271
|
+
return { prompt, isSessionStart, imageContent, recalledHits };
|
|
1281
1272
|
}
|
|
1282
|
-
function buildSessionStartPrompt(prompt, memory, userId, sessionKey, maxContext) {
|
|
1273
|
+
function buildSessionStartPrompt(prompt, memory, userId, sessionKey, maxContext, platform2) {
|
|
1283
1274
|
const contextParts = [];
|
|
1284
1275
|
const reason = readAndClearRestartReason();
|
|
1285
1276
|
if (reason) {
|
|
@@ -1335,15 +1326,23 @@ You are now talking to ${user.userId} (${user.role}, ${CLASS_NAMES[user.maxClass
|
|
|
1335
1326
|
} else {
|
|
1336
1327
|
logInfo(TAG3, `[CURRENT USER] skipped \u2014 no sessionKey`);
|
|
1337
1328
|
}
|
|
1329
|
+
if (platform2) {
|
|
1330
|
+
const CAPS = { telegram: "voice, reactions, typing, TTS, groups", discord: "reactions, typing, threads", irc: "text only" };
|
|
1331
|
+
contextParts.push(`[SYSTEM] Platform: ${platform2} (${CAPS[platform2] ?? "unknown"})`);
|
|
1332
|
+
}
|
|
1338
1333
|
const compSummary = null;
|
|
1339
1334
|
if (compSummary && sessionKey) {
|
|
1340
1335
|
} else {
|
|
1341
|
-
const ctxOpts = isCodeSession ? { skipDailies: true, maxAgeMs: 48 * 60 * 60 * 1e3 } : void 0;
|
|
1342
|
-
const
|
|
1336
|
+
const ctxOpts = isCodeSession ? { skipDailies: true, maxAgeMs: 48 * 60 * 60 * 1e3 } : maxContext && maxContext >= 64e3 ? { skipMessages: true } : void 0;
|
|
1337
|
+
const ctxResult = abmind()?.buildSessionStartContext(memory, userId, maxContext, ctxOpts);
|
|
1338
|
+
const ctx = ctxResult?.text ?? null;
|
|
1343
1339
|
if (ctx) {
|
|
1344
1340
|
contextParts.push(ctx);
|
|
1345
|
-
|
|
1346
|
-
|
|
1341
|
+
const s = ctxResult.stats;
|
|
1342
|
+
const ctxPct = maxContext ? Math.round(ctx.length / maxContext * 100) : -1;
|
|
1343
|
+
logInfo(TAG3, `Session start: ${s.messages} messages + ${s.dailies} dailies (${(s.usedBytes / 1024).toFixed(1)}KB / ${(s.budget / 1024).toFixed(0)}KB budget, ${ctxPct}% ctx${isCodeSession ? ", Code" : ""})`);
|
|
1344
|
+
logDebug(TAG3, `Session context: ${s.messages} msgs, ${s.dailies} dailies, ${s.usedBytes}B / ${s.budget}B budget, ${ctxPct}% ctx`);
|
|
1345
|
+
logTrace(TAG3, `session-start content: ${ctx.slice(0, 500)}...`);
|
|
1347
1346
|
}
|
|
1348
1347
|
try {
|
|
1349
1348
|
const userRole = loadUsers().byUserId.get(userId)?.role ?? "master";
|
|
@@ -1464,6 +1463,14 @@ async function retrySend(fn, attempts = 3) {
|
|
|
1464
1463
|
}
|
|
1465
1464
|
var TAG4 = "pipeline";
|
|
1466
1465
|
var PRIMING_MAX = 8;
|
|
1466
|
+
var recalledIdsPerMessage = /* @__PURE__ */ new Map();
|
|
1467
|
+
var RECALL_MAP_TTL = 60 * 6e4;
|
|
1468
|
+
setInterval(() => {
|
|
1469
|
+
if (recalledIdsPerMessage.size > 200) recalledIdsPerMessage.clear();
|
|
1470
|
+
}, RECALL_MAP_TTL);
|
|
1471
|
+
function getRecalledIdsForMessage(platformMsgId) {
|
|
1472
|
+
return recalledIdsPerMessage.get(platformMsgId);
|
|
1473
|
+
}
|
|
1467
1474
|
var STOPWORDS = /* @__PURE__ */ new Set([
|
|
1468
1475
|
"the",
|
|
1469
1476
|
"a",
|
|
@@ -1588,7 +1595,7 @@ async function handleInboundMessage(msg, adapter, deps) {
|
|
|
1588
1595
|
resetIdleCompactFlag?.();
|
|
1589
1596
|
const ctxPct = transport.contextPercent;
|
|
1590
1597
|
logInfo(TAG4, `\u2190 [${msg.platform}] ${isVoice ? "\u{1F3A4} " : ""}"${text.slice(0, 60)}"${ctxPct >= 0 ? ` (ctx: ${ctxPct}%)` : ""}`);
|
|
1591
|
-
const { prompt: builtPrompt, imageContent } = await buildPrompt(msg, text, {
|
|
1598
|
+
const { prompt: builtPrompt, imageContent, recalledHits } = await buildPrompt(msg, text, {
|
|
1592
1599
|
memory,
|
|
1593
1600
|
memoryConfig,
|
|
1594
1601
|
sessions,
|
|
@@ -1616,13 +1623,28 @@ Result: ${c.result}${cost}`;
|
|
|
1616
1623
|
|
|
1617
1624
|
---
|
|
1618
1625
|
|
|
1626
|
+
${prompt}`;
|
|
1627
|
+
}
|
|
1628
|
+
const { drainTaskFailures } = await import("./task-failure-buffer-DPM5MWZ5.js");
|
|
1629
|
+
const failures = drainTaskFailures();
|
|
1630
|
+
if (failures.length > 0) {
|
|
1631
|
+
const lines = failures.map((f) => `[SYSTEM] Task "${f.taskName}" failed (exit ${f.exitCode}${f.error ? `: ${f.error}` : ""}). ${f.consecutiveFailures > 1 ? `${f.consecutiveFailures} consecutive failures.` : ""}`);
|
|
1632
|
+
prompt = `${lines.join("\n")}
|
|
1633
|
+
|
|
1634
|
+
${prompt}`;
|
|
1635
|
+
}
|
|
1636
|
+
const { drainSystemEvents } = await import("./system-event-buffer-OEPPNUGK.js");
|
|
1637
|
+
const events = drainSystemEvents();
|
|
1638
|
+
if (events.length > 0) {
|
|
1639
|
+
prompt = `${events.map((e) => `[SYSTEM] ${e}`).join("\n")}
|
|
1640
|
+
|
|
1619
1641
|
${prompt}`;
|
|
1620
1642
|
}
|
|
1621
1643
|
const activeSession = deps.sessionManager.getActiveSession(userId, msg.platform);
|
|
1622
1644
|
const agentSession = activeSession.agentSession;
|
|
1623
1645
|
logDebug(TAG4, `Route: session=${activeSessionId} type=${activeSession.type} agentSession=${agentSession ? "yes" : "no"}`);
|
|
1624
1646
|
if ("sandboxPolicy" in transport) {
|
|
1625
|
-
const { buildPolicy } = await import("./tool-sandbox-
|
|
1647
|
+
const { buildPolicy } = await import("./tool-sandbox-TLAL55QP.js");
|
|
1626
1648
|
transport.sandboxPolicy = buildPolicy("owner");
|
|
1627
1649
|
}
|
|
1628
1650
|
if ("isPaused" in transport) {
|
|
@@ -1728,6 +1750,10 @@ ${prompt}`;
|
|
|
1728
1750
|
const rawResponse = sessions.get(activeSessionId)?.fullMode ? response : cleanAnswer || response;
|
|
1729
1751
|
const { text: cleanedText, reactionEmoji, noReply, topics } = cleanResponse(rawResponse);
|
|
1730
1752
|
let userResponse = cleanedText;
|
|
1753
|
+
const reasoningSession = transport.getActiveSession?.();
|
|
1754
|
+
if (!reasoningSession?.showReasoning) {
|
|
1755
|
+
userResponse = userResponse.replace(/<thinking>[\s\S]*?<\/thinking>\s*/g, "");
|
|
1756
|
+
}
|
|
1731
1757
|
for (const [key, val] of Object.entries(process.env)) {
|
|
1732
1758
|
if (key.startsWith("SECRET_") && val && userResponse.includes(val)) {
|
|
1733
1759
|
userResponse = userResponse.replaceAll(val, `[REDACTED:$${key}]`);
|
|
@@ -1826,6 +1852,19 @@ ${prompt}`;
|
|
|
1826
1852
|
const ctxAfter = transport.contextPercent;
|
|
1827
1853
|
logInfo(TAG4, `\u2192 [${msg.platform}] Response delivered${ctxAfter >= 0 ? ` (ctx: ${ctxAfter}%)` : ""}`);
|
|
1828
1854
|
updateBridgeLockField("lastPromptAt", Date.now());
|
|
1855
|
+
if (recalledHits && recalledHits.length > 0 && memory) {
|
|
1856
|
+
try {
|
|
1857
|
+
const { detectCitations } = await import("abmind");
|
|
1858
|
+
const citedIds = detectCitations(userResponse, recalledHits);
|
|
1859
|
+
if (citedIds.length > 0) memory.bumpCitedCount(citedIds);
|
|
1860
|
+
logDebug(TAG4, `Citation: ${citedIds.length}/${recalledHits.length} recalled memories cited`);
|
|
1861
|
+
if (lastSentMsgId != null) {
|
|
1862
|
+
recalledIdsPerMessage.set(Number(lastSentMsgId), recalledHits.map((h) => h.id));
|
|
1863
|
+
}
|
|
1864
|
+
} catch (err) {
|
|
1865
|
+
logDebug(TAG4, `Citation detection failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
1866
|
+
}
|
|
1867
|
+
}
|
|
1829
1868
|
if (hasHooks("AfterMessage")) {
|
|
1830
1869
|
fire("AfterMessage", {
|
|
1831
1870
|
event: "AfterMessage",
|
|
@@ -1900,6 +1939,7 @@ async function startSession(transport, memory, userId, sessionKey, greeting, sen
|
|
|
1900
1939
|
const response = await transport.sendPrompt(sessionKey, prompt, void 0, userId);
|
|
1901
1940
|
if (response?.trim() && response.trim() !== "[NO_REPLY]" && response.trim() !== "(no response)") {
|
|
1902
1941
|
await sendResponse(response);
|
|
1942
|
+
memory.recordMessage({ role: "assistant", content: response, timestamp: Date.now(), userId, sessionId: sessionKey });
|
|
1903
1943
|
}
|
|
1904
1944
|
}
|
|
1905
1945
|
|
|
@@ -1922,7 +1962,7 @@ function registerCommand(name, handler) {
|
|
|
1922
1962
|
registerExact(name, handler);
|
|
1923
1963
|
}
|
|
1924
1964
|
async function handleCommand(text, ctx) {
|
|
1925
|
-
const isMaster = !ctx.userId || ctx.userId === "master" || (await import("./user-registry-
|
|
1965
|
+
const isMaster = !ctx.userId || ctx.userId === "master" || (await import("./user-registry-PEFDZ5AV.js")).loadUsers().byUserId.get(ctx.userId)?.role === "master";
|
|
1926
1966
|
if (!isMaster) {
|
|
1927
1967
|
const cmd = text.split(/\s/)[0];
|
|
1928
1968
|
if (cmd.startsWith("/") && !NON_MASTER_COMMANDS.has(cmd)) {
|
|
@@ -1951,7 +1991,7 @@ Type /help for available commands.`);
|
|
|
1951
1991
|
return false;
|
|
1952
1992
|
}
|
|
1953
1993
|
async function triggerNewSession(ctx, reason = "new-session") {
|
|
1954
|
-
const { hasHooks: hasHooks2, fire: fireHook } = await import("./hook-system-
|
|
1994
|
+
const { hasHooks: hasHooks2, fire: fireHook } = await import("./hook-system-ZCVOFFRD.js");
|
|
1955
1995
|
if (hasHooks2("SessionEnd")) {
|
|
1956
1996
|
await fireHook("SessionEnd", { event: "SessionEnd", timestamp: (/* @__PURE__ */ new Date()).toISOString(), sessionKey: ctx.sessionKey, platform: ctx.platform, userId: ctx.userId, reason }).catch((err) => logAndSwallow(TAG5, "fireHook session", err));
|
|
1957
1997
|
}
|
|
@@ -1970,12 +2010,12 @@ async function triggerNewSession(ctx, reason = "new-session") {
|
|
|
1970
2010
|
}
|
|
1971
2011
|
}
|
|
1972
2012
|
async function triggerResetSession(ctx) {
|
|
1973
|
-
const { hasHooks: hasHooks2, fire: fireHook } = await import("./hook-system-
|
|
2013
|
+
const { hasHooks: hasHooks2, fire: fireHook } = await import("./hook-system-ZCVOFFRD.js");
|
|
1974
2014
|
if (hasHooks2("SessionEnd")) {
|
|
1975
2015
|
await fireHook("SessionEnd", { event: "SessionEnd", timestamp: (/* @__PURE__ */ new Date()).toISOString(), sessionKey: ctx.sessionKey, platform: ctx.platform, userId: ctx.userId, reason: "reset-transport" }).catch((err) => logAndSwallow(TAG5, "fireHook session", err));
|
|
1976
2016
|
}
|
|
1977
2017
|
await ctx.idleSave.save(ctx.sessionKey, ctx.chatId);
|
|
1978
|
-
const { clearTransportCache } = await import("./transport-config-
|
|
2018
|
+
const { clearTransportCache } = await import("./transport-config-JIKHB7GT.js");
|
|
1979
2019
|
clearTransportCache();
|
|
1980
2020
|
if (ctx.rebuildTransport) await ctx.rebuildTransport();
|
|
1981
2021
|
await resetAndPrepare({
|
|
@@ -2014,7 +2054,7 @@ var TAG6 = "cmd";
|
|
|
2014
2054
|
async function handleNewReset(text, ctx) {
|
|
2015
2055
|
const isResetDefault = text.trim().toLowerCase() === "/reset default";
|
|
2016
2056
|
if (isResetDefault) {
|
|
2017
|
-
const { resetToDefaults } = await import("./transport-config-
|
|
2057
|
+
const { resetToDefaults } = await import("./transport-config-JIKHB7GT.js");
|
|
2018
2058
|
resetToDefaults();
|
|
2019
2059
|
} else {
|
|
2020
2060
|
try {
|
|
@@ -2052,7 +2092,7 @@ async function handleEmergencyAlias(_text, ctx) {
|
|
|
2052
2092
|
return handleModels("/model emergency", ctx);
|
|
2053
2093
|
}
|
|
2054
2094
|
async function handleModels(text, ctx) {
|
|
2055
|
-
const { loadTransport, resolveAgent, getModelsForProvider, writeTransportConfig } = await import("./transport-config-
|
|
2095
|
+
const { loadTransport, resolveAgent, getModelsForProvider, writeTransportConfig } = await import("./transport-config-JIKHB7GT.js");
|
|
2056
2096
|
const tc = loadTransport();
|
|
2057
2097
|
const prof = tc ? resolveAgent("professor", tc) : null;
|
|
2058
2098
|
const currentModel = ("currentModel" in ctx.transport ? ctx.transport.currentModel : void 0) ?? prof?.model ?? "unknown";
|
|
@@ -2070,8 +2110,8 @@ async function handleModels(text, ctx) {
|
|
|
2070
2110
|
if (tc) {
|
|
2071
2111
|
const hmProvider = tc.hailMary ? tc.providers[tc.hailMary.provider] : void 0;
|
|
2072
2112
|
if (hmProvider) {
|
|
2073
|
-
const { validateProviderReady, formatValidationError } = await import("./transport-config-
|
|
2074
|
-
const { getEnv: getEnv2 } = await import("./env-schema-
|
|
2113
|
+
const { validateProviderReady, formatValidationError } = await import("./transport-config-JIKHB7GT.js");
|
|
2114
|
+
const { getEnv: getEnv2 } = await import("./env-schema-T43X43BU.js");
|
|
2075
2115
|
const result = validateProviderReady(tc.hailMary.provider, hmProvider, getEnv2());
|
|
2076
2116
|
if (!result.ok) {
|
|
2077
2117
|
await ctx.reply(formatValidationError(tc.hailMary.provider, result));
|
|
@@ -2084,7 +2124,7 @@ async function handleModels(text, ctx) {
|
|
|
2084
2124
|
return true;
|
|
2085
2125
|
}
|
|
2086
2126
|
if (arg === "restore") {
|
|
2087
|
-
const { restorePrevious } = await import("./transport-config-
|
|
2127
|
+
const { restorePrevious } = await import("./transport-config-JIKHB7GT.js");
|
|
2088
2128
|
const result = restorePrevious();
|
|
2089
2129
|
if (!result.ok) {
|
|
2090
2130
|
await ctx.reply(`\u274C ${result.error}`);
|
|
@@ -2096,7 +2136,7 @@ async function handleModels(text, ctx) {
|
|
|
2096
2136
|
return true;
|
|
2097
2137
|
}
|
|
2098
2138
|
if (arg === "default") {
|
|
2099
|
-
const { resetToDefaults } = await import("./transport-config-
|
|
2139
|
+
const { resetToDefaults } = await import("./transport-config-JIKHB7GT.js");
|
|
2100
2140
|
if (!resetToDefaults()) {
|
|
2101
2141
|
await ctx.reply("\u274C Factory config not found \u2014 run abtars install to restore.");
|
|
2102
2142
|
return true;
|
|
@@ -2122,7 +2162,7 @@ async function handleModels(text, ctx) {
|
|
|
2122
2162
|
return true;
|
|
2123
2163
|
}
|
|
2124
2164
|
const endpoint = prof.provider.endpoint ?? "http://localhost:11434/v1";
|
|
2125
|
-
const apiKey = prof.provider.apiKeyEnv ? (await import("./env-schema-
|
|
2165
|
+
const apiKey = prof.provider.apiKeyEnv ? (await import("./env-schema-T43X43BU.js")).getEnv().getApiKey(prof.provider.apiKeyEnv) : void 0;
|
|
2126
2166
|
const models = /* @__PURE__ */ new Set();
|
|
2127
2167
|
for (const [, agent] of Object.entries(tc.agents)) {
|
|
2128
2168
|
if (agent.provider === prof.providerName) models.add(agent.model);
|
|
@@ -2133,7 +2173,7 @@ async function handleModels(text, ctx) {
|
|
|
2133
2173
|
if (tc.hailMary?.provider === prof.providerName) models.add(tc.hailMary.model);
|
|
2134
2174
|
await ctx.reply(`\u{1FA7A} Checking ${models.size} models on ${prof.providerName}...`);
|
|
2135
2175
|
const results = [];
|
|
2136
|
-
const { loadModels } = await import("./transport-config-
|
|
2176
|
+
const { loadModels } = await import("./transport-config-JIKHB7GT.js");
|
|
2137
2177
|
const catalog = loadModels();
|
|
2138
2178
|
for (const model of models) {
|
|
2139
2179
|
try {
|
|
@@ -2170,9 +2210,9 @@ async function handleModels(text, ctx) {
|
|
|
2170
2210
|
if (catalog[model]) catalog[model].lastChecked = (/* @__PURE__ */ new Date()).toISOString();
|
|
2171
2211
|
}
|
|
2172
2212
|
const { writeFileSync: writeFileSync2 } = await import("node:fs");
|
|
2173
|
-
const { join:
|
|
2174
|
-
const { configDir } = await import("./transport-config-
|
|
2175
|
-
writeFileSync2(
|
|
2213
|
+
const { join: join4 } = await import("node:path");
|
|
2214
|
+
const { configDir } = await import("./transport-config-JIKHB7GT.js");
|
|
2215
|
+
writeFileSync2(join4(configDir(), "models.json"), JSON.stringify(catalog, null, 2) + "\n");
|
|
2176
2216
|
await ctx.reply(`\u{1FA7A} Model Health:
|
|
2177
2217
|
${results.join("\n")}`);
|
|
2178
2218
|
return true;
|
|
@@ -2194,8 +2234,8 @@ ${results.join("\n")}`);
|
|
|
2194
2234
|
return true;
|
|
2195
2235
|
}
|
|
2196
2236
|
{
|
|
2197
|
-
const { validateProviderReady, formatValidationError } = await import("./transport-config-
|
|
2198
|
-
const { getEnv: getEnv2 } = await import("./env-schema-
|
|
2237
|
+
const { validateProviderReady, formatValidationError } = await import("./transport-config-JIKHB7GT.js");
|
|
2238
|
+
const { getEnv: getEnv2 } = await import("./env-schema-T43X43BU.js");
|
|
2199
2239
|
const result = validateProviderReady(prof.providerName, prof.provider, getEnv2());
|
|
2200
2240
|
if (!result.ok) {
|
|
2201
2241
|
await ctx.reply(formatValidationError(prof.providerName, result));
|
|
@@ -2203,7 +2243,7 @@ ${results.join("\n")}`);
|
|
|
2203
2243
|
}
|
|
2204
2244
|
}
|
|
2205
2245
|
tc.agents["professor"].model = newModel;
|
|
2206
|
-
const { cleanDemotedModels } = await import("./transport-config-
|
|
2246
|
+
const { cleanDemotedModels } = await import("./transport-config-JIKHB7GT.js");
|
|
2207
2247
|
cleanDemotedModels(tc, newModel);
|
|
2208
2248
|
writeTransportConfig(tc, `professor model \u2192 ${newModel}`);
|
|
2209
2249
|
if ("setModel" in ctx.transport) {
|
|
@@ -2214,7 +2254,7 @@ ${results.join("\n")}`);
|
|
|
2214
2254
|
}
|
|
2215
2255
|
if (arg === "list" || arg.startsWith("list ")) {
|
|
2216
2256
|
const providerArg = arg.slice(5).trim();
|
|
2217
|
-
const { getAvailableProviders, getModelsForProvider: getModels } = await import("./transport-config-
|
|
2257
|
+
const { getAvailableProviders, getModelsForProvider: getModels } = await import("./transport-config-JIKHB7GT.js");
|
|
2218
2258
|
if (!tc) {
|
|
2219
2259
|
await ctx.reply("\u274C transport.json not loaded");
|
|
2220
2260
|
return true;
|
|
@@ -2272,8 +2312,8 @@ Use /model quick <name> to switch.`);
|
|
|
2272
2312
|
await ctx.reply(`\u274C Provider "${providerName}" not found. Available: ${Object.keys(tc.providers).join(", ")}`);
|
|
2273
2313
|
return true;
|
|
2274
2314
|
}
|
|
2275
|
-
const { validateProviderReady, formatValidationError, loadProviderDefaults } = await import("./transport-config-
|
|
2276
|
-
const { getEnv: getEnv2 } = await import("./env-schema-
|
|
2315
|
+
const { validateProviderReady, formatValidationError, loadProviderDefaults } = await import("./transport-config-JIKHB7GT.js");
|
|
2316
|
+
const { getEnv: getEnv2 } = await import("./env-schema-T43X43BU.js");
|
|
2277
2317
|
const validation = validateProviderReady(providerName, provider2, getEnv2());
|
|
2278
2318
|
if (!validation.ok) {
|
|
2279
2319
|
await ctx.reply(formatValidationError(providerName, validation));
|
|
@@ -2328,6 +2368,27 @@ Use /model quick <name> to switch.`);
|
|
|
2328
2368
|
await ctx.reply(lines.join("\n"));
|
|
2329
2369
|
return true;
|
|
2330
2370
|
}
|
|
2371
|
+
async function handleReasoning(text, ctx) {
|
|
2372
|
+
const arg = text.replace(/^\/(reasoning)\s*/i, "").trim().toLowerCase();
|
|
2373
|
+
const session = ctx.transport.getActiveSession?.();
|
|
2374
|
+
if (!session) {
|
|
2375
|
+
await ctx.reply("No active session.");
|
|
2376
|
+
return true;
|
|
2377
|
+
}
|
|
2378
|
+
if (arg === "show" || arg === "on") {
|
|
2379
|
+
session.showReasoning = true;
|
|
2380
|
+
await ctx.reply("Reasoning display: on");
|
|
2381
|
+
} else if (arg === "hide" || arg === "off") {
|
|
2382
|
+
session.showReasoning = false;
|
|
2383
|
+
await ctx.reply("Reasoning display: off");
|
|
2384
|
+
} else if (["none", "low", "medium", "high"].includes(arg)) {
|
|
2385
|
+
session.reasoningEffort = arg === "none" ? null : arg;
|
|
2386
|
+
await ctx.reply(`Reasoning effort: ${arg}`);
|
|
2387
|
+
} else {
|
|
2388
|
+
await ctx.reply(`Reasoning: effort=${session.reasoningEffort ?? "default"}, display=${session.showReasoning ? "show" : "hide"}`);
|
|
2389
|
+
}
|
|
2390
|
+
return true;
|
|
2391
|
+
}
|
|
2331
2392
|
|
|
2332
2393
|
// src/components/commands/exec-async.ts
|
|
2333
2394
|
import { execFile } from "node:child_process";
|
|
@@ -2361,9 +2422,10 @@ ${raw || "(no output)"}`);
|
|
|
2361
2422
|
}
|
|
2362
2423
|
return true;
|
|
2363
2424
|
}
|
|
2364
|
-
const { getDoctorReport, renderDoctorText } = await import("./doctor-
|
|
2425
|
+
const { getDoctorReport, renderDoctorText } = await import("./doctor-PIPSGI3H.js");
|
|
2365
2426
|
const force = arg === "force";
|
|
2366
2427
|
const svcStates = ctx.registry?.getStates() ?? {};
|
|
2428
|
+
await ctx.reply("\u{1FA7A} Running diagnostics...");
|
|
2367
2429
|
const report = await getDoctorReport({
|
|
2368
2430
|
memory: ctx.memory,
|
|
2369
2431
|
transport: ctx.transport,
|
|
@@ -2376,7 +2438,7 @@ ${raw || "(no output)"}`);
|
|
|
2376
2438
|
}
|
|
2377
2439
|
async function handleStatus(_text, ctx) {
|
|
2378
2440
|
if (ctx.phaseHealth && ctx.registry) {
|
|
2379
|
-
const { getSystemStatus, renderStatusText } = await import("./system-status-
|
|
2441
|
+
const { getSystemStatus, renderStatusText } = await import("./system-status-7K2QTH3J.js");
|
|
2380
2442
|
const status = await getSystemStatus({
|
|
2381
2443
|
phaseHealth: ctx.phaseHealth,
|
|
2382
2444
|
registry: ctx.registry,
|
|
@@ -2387,7 +2449,7 @@ async function handleStatus(_text, ctx) {
|
|
|
2387
2449
|
});
|
|
2388
2450
|
let text = renderStatusText(status);
|
|
2389
2451
|
if (_text.trim().toLowerCase() === "full") {
|
|
2390
|
-
const { envDump } = await import("./env-schema-
|
|
2452
|
+
const { envDump } = await import("./env-schema-T43X43BU.js");
|
|
2391
2453
|
const dump = envDump();
|
|
2392
2454
|
const envLines = Object.entries(dump).slice(0, 30).map(([k, v]) => ` ${k}: ${v}`);
|
|
2393
2455
|
text += "\n\n\u{1F4CB} Config (top 30):\n" + envLines.join("\n");
|
|
@@ -2508,7 +2570,7 @@ async function buildStatusLines(ctx) {
|
|
|
2508
2570
|
if ("currentModel" in ctx.transport) {
|
|
2509
2571
|
model = ctx.transport.currentModel;
|
|
2510
2572
|
} else {
|
|
2511
|
-
const { loadTransport, resolveAgent } = await import("./transport-config-
|
|
2573
|
+
const { loadTransport, resolveAgent } = await import("./transport-config-JIKHB7GT.js");
|
|
2512
2574
|
const tc2 = loadTransport();
|
|
2513
2575
|
const prof2 = tc2 ? resolveAgent("professor", tc2) : null;
|
|
2514
2576
|
model = prof2?.model ?? "unknown";
|
|
@@ -2517,7 +2579,7 @@ async function buildStatusLines(ctx) {
|
|
|
2517
2579
|
const uptime = formatUptime(Date.now() - ctx.startedAt);
|
|
2518
2580
|
const ctxPct = ctx.transport.contextPercent >= 0 ? `${ctx.transport.contextPercent}%` : "n/a";
|
|
2519
2581
|
const cronInfo = ctx.memory?.getCronInfo();
|
|
2520
|
-
const { loadTransport: lt, resolveAgent: ra } = await import("./transport-config-
|
|
2582
|
+
const { loadTransport: lt, resolveAgent: ra } = await import("./transport-config-JIKHB7GT.js");
|
|
2521
2583
|
const tc = lt();
|
|
2522
2584
|
const prof = tc ? ra("professor", tc) : null;
|
|
2523
2585
|
const provider = prof?.providerName ?? "unknown";
|
|
@@ -2579,7 +2641,7 @@ function formatUptime(ms) {
|
|
|
2579
2641
|
}
|
|
2580
2642
|
async function handleUsage(_text, ctx) {
|
|
2581
2643
|
const { readUsage, resetUsage } = await import("./usage-tracker-S4Z2G2K5.js");
|
|
2582
|
-
const { loadModels } = await import("./transport-config-
|
|
2644
|
+
const { loadModels } = await import("./transport-config-JIKHB7GT.js");
|
|
2583
2645
|
const arg = _text.replace("/usage", "").trim();
|
|
2584
2646
|
if (arg === "reset") {
|
|
2585
2647
|
resetUsage();
|
|
@@ -2630,7 +2692,7 @@ async function handleUsage(_text, ctx) {
|
|
|
2630
2692
|
`;
|
|
2631
2693
|
}
|
|
2632
2694
|
}
|
|
2633
|
-
const { fetchOpenRouterCredits } = await import("./openrouter-credits-
|
|
2695
|
+
const { fetchOpenRouterCredits } = await import("./openrouter-credits-PLIKRY5D.js");
|
|
2634
2696
|
const credits = await fetchOpenRouterCredits();
|
|
2635
2697
|
if (credits) {
|
|
2636
2698
|
msg += `
|
|
@@ -2640,7 +2702,7 @@ async function handleUsage(_text, ctx) {
|
|
|
2640
2702
|
return true;
|
|
2641
2703
|
}
|
|
2642
2704
|
async function handleOpenRouter(_text, ctx) {
|
|
2643
|
-
const { fetchOpenRouterCredits } = await import("./openrouter-credits-
|
|
2705
|
+
const { fetchOpenRouterCredits } = await import("./openrouter-credits-PLIKRY5D.js");
|
|
2644
2706
|
const credits = await fetchOpenRouterCredits();
|
|
2645
2707
|
if (!credits) {
|
|
2646
2708
|
await ctx.reply("\u274C OpenRouter API key not set or request failed.");
|
|
@@ -2656,18 +2718,253 @@ Remaining: $${credits.remaining.toFixed(2)}`
|
|
|
2656
2718
|
return true;
|
|
2657
2719
|
}
|
|
2658
2720
|
async function handleWhoami(_text, ctx) {
|
|
2659
|
-
const { loadUsers: loadUsers2 } = await import("./user-registry-
|
|
2721
|
+
const { loadUsers: loadUsers2 } = await import("./user-registry-PEFDZ5AV.js");
|
|
2660
2722
|
const reg = loadUsers2();
|
|
2661
2723
|
const CLASS_NAMES = ["UNCLASSIFIED", "RESTRICTED", "CONFIDENTIAL", "SECRET"];
|
|
2662
2724
|
const user = ctx.userId ? reg.byUserId.get(ctx.userId) : void 0;
|
|
2663
2725
|
if (user) {
|
|
2664
2726
|
const clearance = CLASS_NAMES[user.maxClass] ?? `class ${user.maxClass}`;
|
|
2665
|
-
await ctx.reply(`${user.displayName ?? user.userId} (${user.role}
|
|
2727
|
+
await ctx.reply(`${user.displayName ?? user.userId} (${user.role})
|
|
2728
|
+
Clearance: ${clearance}
|
|
2729
|
+
chatId: ${ctx.chatId}`);
|
|
2666
2730
|
} else {
|
|
2667
|
-
await ctx.reply(`${ctx.userId ?? "unknown"} (unregistered)
|
|
2731
|
+
await ctx.reply(`${ctx.userId ?? "unknown"} (unregistered)
|
|
2732
|
+
chatId: ${ctx.chatId}`);
|
|
2668
2733
|
}
|
|
2669
2734
|
return true;
|
|
2670
2735
|
}
|
|
2736
|
+
async function handleSoftware(_text, ctx) {
|
|
2737
|
+
const { existsSync } = await import("node:fs");
|
|
2738
|
+
const { abtarsHome: abtarsHome2 } = await import("./paths-QQM74XYT.js");
|
|
2739
|
+
const home = abtarsHome2();
|
|
2740
|
+
const arg = _text.replace(/^\/(software|update)\s*/i, "").trim();
|
|
2741
|
+
const { loadUsers: loadUsers2 } = await import("./user-registry-PEFDZ5AV.js");
|
|
2742
|
+
const user = loadUsers2().byUserId.get(ctx.userId);
|
|
2743
|
+
const isMaster = user?.role === "master";
|
|
2744
|
+
if (arg.startsWith("rollback")) {
|
|
2745
|
+
if (!isMaster) {
|
|
2746
|
+
await ctx.reply("\u274C Requires master role.");
|
|
2747
|
+
return true;
|
|
2748
|
+
}
|
|
2749
|
+
const targetVersion = arg.replace(/^rollback\s*/, "").trim();
|
|
2750
|
+
if (!targetVersion) {
|
|
2751
|
+
await ctx.reply("Usage: /software rollback <version>\nUse /software to see available versions.");
|
|
2752
|
+
return true;
|
|
2753
|
+
}
|
|
2754
|
+
let targetSlot = null;
|
|
2755
|
+
for (let i = 1; i <= 3; i++) {
|
|
2756
|
+
const pkgPath = join2(home, `app.prev.${i}`, "package.json");
|
|
2757
|
+
try {
|
|
2758
|
+
const ver = JSON.parse(readFileSync(pkgPath, "utf-8")).version;
|
|
2759
|
+
if (ver === targetVersion) {
|
|
2760
|
+
targetSlot = i;
|
|
2761
|
+
break;
|
|
2762
|
+
}
|
|
2763
|
+
} catch {
|
|
2764
|
+
}
|
|
2765
|
+
}
|
|
2766
|
+
if (!targetSlot) {
|
|
2767
|
+
await ctx.reply(`\u274C Version ${targetVersion} not found in rollback slots.`);
|
|
2768
|
+
return true;
|
|
2769
|
+
}
|
|
2770
|
+
await ctx.reply(`\u26A0\uFE0F Rolling back to ${targetVersion}...`);
|
|
2771
|
+
try {
|
|
2772
|
+
const { rollback } = await import("./rollback-5RXXLUD6.js");
|
|
2773
|
+
await rollback({ to: targetSlot });
|
|
2774
|
+
} catch (err) {
|
|
2775
|
+
await ctx.reply(`\u274C Rollback failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
2776
|
+
}
|
|
2777
|
+
return true;
|
|
2778
|
+
}
|
|
2779
|
+
if (arg === "update" || arg === "update deploy" || arg === "deploy" || arg === "update build" || arg === "build" || arg === "update pull" || arg === "pull" || arg === "") {
|
|
2780
|
+
if (arg === "" && _text.match(/^\/software\s*$/i)) {
|
|
2781
|
+
} else if (arg === "update pull" || arg === "pull") {
|
|
2782
|
+
if (!isMaster) {
|
|
2783
|
+
await ctx.reply("Requires master role.");
|
|
2784
|
+
return true;
|
|
2785
|
+
}
|
|
2786
|
+
try {
|
|
2787
|
+
const { spawnSync } = await import("node:child_process");
|
|
2788
|
+
const { mkdirSync: mkdirSync2 } = await import("node:fs");
|
|
2789
|
+
const srcDir = join2(home, "src", "abtars");
|
|
2790
|
+
const abmindDir = join2(home, "src", "abmind");
|
|
2791
|
+
logInfo("update", "Pull requested");
|
|
2792
|
+
if (!existsSync(join2(srcDir, ".git"))) {
|
|
2793
|
+
await ctx.reply("Cloning abtars repo...");
|
|
2794
|
+
mkdirSync2(join2(home, "src"), { recursive: true });
|
|
2795
|
+
const cl = spawnSync("git", ["clone", "git@github.com:aksika/abtars.git", srcDir], { encoding: "utf-8", timeout: 6e4 });
|
|
2796
|
+
if (cl.status !== 0) {
|
|
2797
|
+
logInfo("update", "Clone failed");
|
|
2798
|
+
await ctx.reply(`Clone failed:
|
|
2799
|
+
${(cl.stderr || "").trim().slice(0, 300)}`);
|
|
2800
|
+
return true;
|
|
2801
|
+
}
|
|
2802
|
+
}
|
|
2803
|
+
spawnSync("git", ["-C", srcDir, "fetch", "origin", "dev"], { encoding: "utf-8", timeout: 3e4 });
|
|
2804
|
+
const r = spawnSync("git", ["-C", srcDir, "reset", "--hard", "origin/dev"], { encoding: "utf-8" });
|
|
2805
|
+
if (r.status !== 0) {
|
|
2806
|
+
await ctx.reply(`Pull failed (abtars):
|
|
2807
|
+
${(r.stderr || "").trim().slice(0, 300)}`);
|
|
2808
|
+
return true;
|
|
2809
|
+
}
|
|
2810
|
+
let pulled = `Pulled:
|
|
2811
|
+
${(r.stdout || "").trim().slice(0, 300)}`;
|
|
2812
|
+
if (existsSync(join2(abmindDir, ".git"))) {
|
|
2813
|
+
spawnSync("git", ["-C", abmindDir, "fetch", "origin", "dev"], { encoding: "utf-8", timeout: 3e4 });
|
|
2814
|
+
const ab = spawnSync("git", ["-C", abmindDir, "reset", "--hard", "origin/dev"], { encoding: "utf-8" });
|
|
2815
|
+
if (ab.status !== 0) {
|
|
2816
|
+
await ctx.reply(`Pull failed (abmind):
|
|
2817
|
+
${(ab.stderr || "").trim().slice(0, 300)}`);
|
|
2818
|
+
return true;
|
|
2819
|
+
}
|
|
2820
|
+
pulled += `
|
|
2821
|
+
abmind: ${(ab.stdout || "").trim().slice(0, 200)}`;
|
|
2822
|
+
}
|
|
2823
|
+
logInfo("update", `Pull complete`);
|
|
2824
|
+
await ctx.reply(`${pulled}
|
|
2825
|
+
|
|
2826
|
+
Ready to deploy: /update deploy`);
|
|
2827
|
+
} catch (err) {
|
|
2828
|
+
await ctx.reply(`Pull failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
2829
|
+
}
|
|
2830
|
+
return true;
|
|
2831
|
+
} else if (arg === "update deploy" || arg === "deploy" || arg === "update build" || arg === "build") {
|
|
2832
|
+
if (!isMaster) {
|
|
2833
|
+
await ctx.reply("Requires master role.");
|
|
2834
|
+
return true;
|
|
2835
|
+
}
|
|
2836
|
+
try {
|
|
2837
|
+
const { spawnSync, spawn: spawn2 } = await import("node:child_process");
|
|
2838
|
+
const srcDir = join2(home, "src", "abtars");
|
|
2839
|
+
const abmindDir = join2(home, "src", "abmind");
|
|
2840
|
+
if (!existsSync(join2(srcDir, ".git"))) {
|
|
2841
|
+
await ctx.reply("No source repo. Run /update pull first.");
|
|
2842
|
+
return true;
|
|
2843
|
+
}
|
|
2844
|
+
const { getDeployedVersion } = await import("./paths-QQM74XYT.js");
|
|
2845
|
+
const head = spawnSync("git", ["-C", srcDir, "rev-parse", "--short", "HEAD"], { encoding: "utf-8" }).stdout.trim();
|
|
2846
|
+
const running = getDeployedVersion();
|
|
2847
|
+
if (head && (running.version.includes(head) || running.commit === head)) {
|
|
2848
|
+
await ctx.reply(`Already running ${head}. Nothing to deploy.`);
|
|
2849
|
+
return true;
|
|
2850
|
+
}
|
|
2851
|
+
logInfo("update", `Deploy starting (non-blocking)`);
|
|
2852
|
+
await ctx.reply("\u2699\uFE0F Deploying (building in background)...");
|
|
2853
|
+
const script = join2(srcDir, "scripts", "build-and-deploy.sh");
|
|
2854
|
+
spawn2("bash", [script, srcDir, abmindDir], {
|
|
2855
|
+
detached: true,
|
|
2856
|
+
stdio: "ignore"
|
|
2857
|
+
}).unref();
|
|
2858
|
+
} catch (err) {
|
|
2859
|
+
await ctx.reply(`Deploy failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
2860
|
+
}
|
|
2861
|
+
return true;
|
|
2862
|
+
} else if (arg === "update" || arg === "npm" || arg === "update npm") {
|
|
2863
|
+
if (!isMaster) {
|
|
2864
|
+
await ctx.reply("Requires master role.");
|
|
2865
|
+
return true;
|
|
2866
|
+
}
|
|
2867
|
+
logInfo("update", "npm update starting");
|
|
2868
|
+
await ctx.reply("Updating from npm...");
|
|
2869
|
+
const { spawn: spawn2 } = await import("node:child_process");
|
|
2870
|
+
spawn2("abtars", ["update", "--source", "npm"], { detached: true, stdio: "ignore" }).unref();
|
|
2871
|
+
return true;
|
|
2872
|
+
}
|
|
2873
|
+
}
|
|
2874
|
+
if (arg === "check") {
|
|
2875
|
+
await ctx.reply("\u{1F50D} Checking npm registry...");
|
|
2876
|
+
try {
|
|
2877
|
+
const { spawnSync } = await import("node:child_process");
|
|
2878
|
+
const abtarsLatest = spawnSync("npm", ["view", "abtars", "dist-tags", "--json"], { encoding: "utf-8", timeout: 1e4 });
|
|
2879
|
+
const abmindLatest = spawnSync("npm", ["view", "abmind", "dist-tags", "--json"], { encoding: "utf-8", timeout: 1e4 });
|
|
2880
|
+
const abt = abtarsLatest.status === 0 ? JSON.parse(abtarsLatest.stdout) : null;
|
|
2881
|
+
const abm = abmindLatest.status === 0 ? JSON.parse(abmindLatest.stdout) : null;
|
|
2882
|
+
const lines2 = ["\u{1F4E6} npm registry (fresh):"];
|
|
2883
|
+
if (abt) lines2.push(` abtars: latest=${abt.latest ?? "?"} alpha=${abt.alpha ?? "?"}`);
|
|
2884
|
+
if (abm) lines2.push(` abmind: latest=${abm.latest ?? "?"} alpha=${abm.alpha ?? "?"}`);
|
|
2885
|
+
if (!abt && !abm) lines2.push(" \u26A0\uFE0F npm unreachable");
|
|
2886
|
+
await ctx.reply(lines2.join("\n"));
|
|
2887
|
+
} catch {
|
|
2888
|
+
await ctx.reply("\u274C npm check failed (timeout or network error)");
|
|
2889
|
+
}
|
|
2890
|
+
return true;
|
|
2891
|
+
}
|
|
2892
|
+
const lines = ["\u{1F527} Software"];
|
|
2893
|
+
try {
|
|
2894
|
+
const { getDeployedVersion } = await import("./paths-QQM74XYT.js");
|
|
2895
|
+
const ver = getDeployedVersion();
|
|
2896
|
+
const manifest = existsSync(join2(home, "manifest.json")) ? JSON.parse(readFileSync(join2(home, "manifest.json"), "utf-8")) : null;
|
|
2897
|
+
const deployed = manifest?.activatedAt ? new Date(manifest.activatedAt).toLocaleString() : "unknown";
|
|
2898
|
+
lines.push(` abtars: ${ver.version}${ver.commit && !ver.version.includes(ver.commit) ? "-" + ver.commit : ""} (deployed ${deployed})`);
|
|
2899
|
+
if (manifest?.source) lines.push(` source: ${manifest.source === "local" ? "local" : "npm"}`);
|
|
2900
|
+
try {
|
|
2901
|
+
const { execFileSync } = await import("node:child_process");
|
|
2902
|
+
const raw = execFileSync("npm", ["view", "abtars", "dist-tags", "--json"], { encoding: "utf-8", timeout: 5e3 });
|
|
2903
|
+
const latest = JSON.parse(raw).alpha ?? JSON.parse(raw).latest;
|
|
2904
|
+
if (latest) lines.push(` npm latest: abtars@${latest} ${latest === ver.version || ver.version.startsWith(latest) ? "\u2713" : "\u26A0\uFE0F"}`);
|
|
2905
|
+
} catch {
|
|
2906
|
+
}
|
|
2907
|
+
} catch {
|
|
2908
|
+
lines.push(" abtars: unknown");
|
|
2909
|
+
}
|
|
2910
|
+
lines.push("");
|
|
2911
|
+
const abmindBundlePkg = join2(home, "app", "bundle", "node_modules", "abmind", "package.json");
|
|
2912
|
+
const abmindAppPkg = join2(home, "app", "node_modules", "abmind", "package.json");
|
|
2913
|
+
const abmindHome = process.env["ABMIND_HOME"] ?? join2(home, "..", ".abmind");
|
|
2914
|
+
const abmindManifest = join2(abmindHome, "manifest.json");
|
|
2915
|
+
const abmindPkgPath = existsSync(abmindBundlePkg) ? abmindBundlePkg : existsSync(abmindAppPkg) ? abmindAppPkg : null;
|
|
2916
|
+
if (abmindPkgPath) {
|
|
2917
|
+
try {
|
|
2918
|
+
const pkg = JSON.parse(readFileSync(abmindPkgPath, "utf-8"));
|
|
2919
|
+
const manifest = existsSync(abmindManifest) ? JSON.parse(readFileSync(abmindManifest, "utf-8")) : null;
|
|
2920
|
+
const deployed = manifest?.activatedAt ? new Date(manifest.activatedAt).toLocaleString() : "unknown";
|
|
2921
|
+
lines.push(` abmind: ${pkg.version ?? "?"} (deployed ${deployed})`);
|
|
2922
|
+
lines.push(` source: local`);
|
|
2923
|
+
try {
|
|
2924
|
+
const { execFileSync } = await import("node:child_process");
|
|
2925
|
+
const raw = execFileSync("npm", ["view", "abmind", "dist-tags", "--json"], { encoding: "utf-8", timeout: 5e3 });
|
|
2926
|
+
const latest = JSON.parse(raw).alpha ?? JSON.parse(raw).latest;
|
|
2927
|
+
if (latest) lines.push(` npm latest: abmind@${latest} ${latest === pkg.version || pkg.version.startsWith(latest) ? "\u2713" : "\u26A0\uFE0F"}`);
|
|
2928
|
+
} catch {
|
|
2929
|
+
}
|
|
2930
|
+
} catch {
|
|
2931
|
+
lines.push(" abmind: installed (version unknown)");
|
|
2932
|
+
}
|
|
2933
|
+
} else if (existsSync(abmindManifest)) {
|
|
2934
|
+
try {
|
|
2935
|
+
const m = JSON.parse(readFileSync(abmindManifest, "utf-8"));
|
|
2936
|
+
const deployed = m.activatedAt ? new Date(m.activatedAt).toLocaleString() : "unknown";
|
|
2937
|
+
lines.push(` abmind: ${m.version ?? "?"} (deployed ${deployed})`);
|
|
2938
|
+
lines.push(` source: npm`);
|
|
2939
|
+
try {
|
|
2940
|
+
const { execFileSync } = await import("node:child_process");
|
|
2941
|
+
const raw = execFileSync("npm", ["view", "abmind", "dist-tags", "--json"], { encoding: "utf-8", timeout: 5e3 });
|
|
2942
|
+
const latest = JSON.parse(raw).alpha ?? JSON.parse(raw).latest;
|
|
2943
|
+
if (latest) lines.push(` npm latest: abmind@${latest} ${latest === m.version || m.version.startsWith(latest) ? "\u2713" : "\u26A0\uFE0F"}`);
|
|
2944
|
+
} catch {
|
|
2945
|
+
}
|
|
2946
|
+
} catch {
|
|
2947
|
+
lines.push(" abmind: installed (version unknown)");
|
|
2948
|
+
}
|
|
2949
|
+
} else {
|
|
2950
|
+
lines.push(" abmind: not installed");
|
|
2951
|
+
}
|
|
2952
|
+
lines.push("");
|
|
2953
|
+
lines.push(" Rollback:");
|
|
2954
|
+
for (let i = 1; i <= 3; i++) {
|
|
2955
|
+
const pkgPath = join2(home, `app.prev.${i}`, "package.json");
|
|
2956
|
+
try {
|
|
2957
|
+
const ver = JSON.parse(readFileSync(pkgPath, "utf-8")).version;
|
|
2958
|
+
lines.push(` ${i}: ${ver}`);
|
|
2959
|
+
} catch {
|
|
2960
|
+
lines.push(` ${i}: (empty)`);
|
|
2961
|
+
}
|
|
2962
|
+
}
|
|
2963
|
+
lines.push("");
|
|
2964
|
+
lines.push(" /update [pull|deploy|npm] | /software rollback <version>");
|
|
2965
|
+
await ctx.reply(lines.join("\n"));
|
|
2966
|
+
return true;
|
|
2967
|
+
}
|
|
2671
2968
|
|
|
2672
2969
|
// src/components/nlm-command-handler.ts
|
|
2673
2970
|
init_env_schema();
|
|
@@ -2982,7 +3279,7 @@ async function handleTasksList(_text, ctx) {
|
|
|
2982
3279
|
const now = (/* @__PURE__ */ new Date()).toLocaleString("en-GB", { timeZone: tz, dateStyle: "medium", timeStyle: "medium" });
|
|
2983
3280
|
let listing;
|
|
2984
3281
|
try {
|
|
2985
|
-
const { readEntries: readEntries2 } = await import("./task-store-
|
|
3282
|
+
const { readEntries: readEntries2 } = await import("./task-store-VCBHAB43.js");
|
|
2986
3283
|
const entries = readEntries2();
|
|
2987
3284
|
const active = entries.filter((e) => !e.fired);
|
|
2988
3285
|
active.sort((a, b) => {
|
|
@@ -3096,23 +3393,40 @@ async function handleTaskPause(text, ctx) {
|
|
|
3096
3393
|
}
|
|
3097
3394
|
return true;
|
|
3098
3395
|
}
|
|
3396
|
+
async function handleKanban(_text, ctx) {
|
|
3397
|
+
try {
|
|
3398
|
+
const { kanbanList } = await import("./kanban-board-6Q5E5GEB.js");
|
|
3399
|
+
const cards = kanbanList();
|
|
3400
|
+
if (cards.length === 0) {
|
|
3401
|
+
await ctx.reply("\u{1F4CB} Kanban board is empty.");
|
|
3402
|
+
return true;
|
|
3403
|
+
}
|
|
3404
|
+
const lines = cards.map((c) => {
|
|
3405
|
+
const icon = c.status === "delivered" ? "\u2705" : c.status === "done" ? "\u{1F4EC}" : c.status === "running" ? "\u23F3" : c.status === "failed" ? "\u274C" : "\u{1F4E5}";
|
|
3406
|
+
const due = c.due_at ? ` due:${c.due_at.slice(0, 10)}` : "";
|
|
3407
|
+
return `${icon} #${c.id} ${c.title} (${c.source}/${c.priority})${due}`;
|
|
3408
|
+
});
|
|
3409
|
+
await ctx.reply(`\u{1F4CB} Kanban Board:
|
|
3410
|
+
${lines.join("\n")}`);
|
|
3411
|
+
} catch (err) {
|
|
3412
|
+
await ctx.reply(`\u274C Failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
3413
|
+
}
|
|
3414
|
+
return true;
|
|
3415
|
+
}
|
|
3099
3416
|
|
|
3100
3417
|
// src/components/commands/handlers-admin.ts
|
|
3101
3418
|
init_log_and_swallow();
|
|
3102
|
-
init_paths();
|
|
3103
|
-
import { readdirSync as readdirSync3 } from "node:fs";
|
|
3104
|
-
import { join as join4 } from "node:path";
|
|
3105
3419
|
var TAG11 = "cmd_admin";
|
|
3106
3420
|
async function handleUsers(text, ctx) {
|
|
3107
|
-
const { loadUsers: loadUsers2 } = await import("./user-registry-
|
|
3421
|
+
const { loadUsers: loadUsers2 } = await import("./user-registry-PEFDZ5AV.js");
|
|
3108
3422
|
const parts = text.trim().split(/\s+/);
|
|
3109
3423
|
const sub = parts[1];
|
|
3110
3424
|
if (sub === "approve" && parts[2]) {
|
|
3111
3425
|
const platformId = parts[2];
|
|
3112
3426
|
const { writeFileSync: writeFileSync2, readFileSync: readFileSync3 } = await import("node:fs");
|
|
3113
|
-
const { join:
|
|
3114
|
-
const { abtarsHome: abtarsHome2 } = await import("./paths-
|
|
3115
|
-
const configPath =
|
|
3427
|
+
const { join: join4 } = await import("node:path");
|
|
3428
|
+
const { abtarsHome: abtarsHome2 } = await import("./paths-QQM74XYT.js");
|
|
3429
|
+
const configPath = join4(abtarsHome2(), "config", "users.json");
|
|
3116
3430
|
try {
|
|
3117
3431
|
const raw = JSON.parse(readFileSync3(configPath, "utf-8"));
|
|
3118
3432
|
const users = Array.isArray(raw.users) ? raw.users : [];
|
|
@@ -3132,9 +3446,9 @@ async function handleUsers(text, ctx) {
|
|
|
3132
3446
|
if (sub === "revoke" && parts[2]) {
|
|
3133
3447
|
const targetUserId = parts[2];
|
|
3134
3448
|
const { writeFileSync: writeFileSync2, readFileSync: readFileSync3 } = await import("node:fs");
|
|
3135
|
-
const { join:
|
|
3136
|
-
const { abtarsHome: abtarsHome2 } = await import("./paths-
|
|
3137
|
-
const configPath =
|
|
3449
|
+
const { join: join4 } = await import("node:path");
|
|
3450
|
+
const { abtarsHome: abtarsHome2 } = await import("./paths-QQM74XYT.js");
|
|
3451
|
+
const configPath = join4(abtarsHome2(), "config", "users.json");
|
|
3138
3452
|
try {
|
|
3139
3453
|
const raw = JSON.parse(readFileSync3(configPath, "utf-8"));
|
|
3140
3454
|
const users = (Array.isArray(raw.users) ? raw.users : []).filter((u) => u.userId !== targetUserId);
|
|
@@ -3158,30 +3472,34 @@ ${lines.join("\n")}
|
|
|
3158
3472
|
return true;
|
|
3159
3473
|
}
|
|
3160
3474
|
async function handleSkills(_text, ctx) {
|
|
3161
|
-
const
|
|
3162
|
-
const
|
|
3475
|
+
const { getSkillCache } = await import("./hotskills-DTROJY6G.js");
|
|
3476
|
+
const skills = getSkillCache();
|
|
3477
|
+
if (skills.length === 0) {
|
|
3478
|
+
await ctx.reply("\u{1F4DA} No skills loaded.");
|
|
3479
|
+
return true;
|
|
3480
|
+
}
|
|
3481
|
+
const active = skills.filter((s) => !s.skipped);
|
|
3482
|
+
const skipped = skills.filter((s) => s.skipped);
|
|
3483
|
+
const groups = /* @__PURE__ */ new Map();
|
|
3484
|
+
for (const s of skills) {
|
|
3485
|
+
const list = groups.get(s.group) ?? [];
|
|
3486
|
+
list.push(s);
|
|
3487
|
+
groups.set(s.group, list);
|
|
3488
|
+
}
|
|
3489
|
+
const header = `\u{1F4DA} Skills: ${active.length} active${skipped.length ? `, ${skipped.length} skipped` : ""}`;
|
|
3163
3490
|
const sections = [];
|
|
3164
|
-
|
|
3165
|
-
|
|
3166
|
-
|
|
3167
|
-
|
|
3168
|
-
const files = readdirSync3(dir, { recursive: true }).map((f) => String(f)).filter((f) => f.endsWith(".md") && !f.endsWith("TOOLS.md")).sort();
|
|
3169
|
-
if (files.length > 0) {
|
|
3170
|
-
total += files.length;
|
|
3171
|
-
sections.push(`${group} (${files.length}):
|
|
3172
|
-
${files.map((f) => ` \u2022 ${f.replace(/\.md$/, "")}`).join("\n")}`);
|
|
3173
|
-
}
|
|
3174
|
-
} catch (err) {
|
|
3175
|
-
logAndSwallow("command_handlers", "op", err);
|
|
3176
|
-
}
|
|
3491
|
+
for (const [group, items] of [...groups.entries()].sort((a, b) => a[0].localeCompare(b[0]))) {
|
|
3492
|
+
const lines = items.map((s) => s.skipped ? ` \u2717 ${s.name} (${s.skipped})` : ` \u2713 ${s.name}`);
|
|
3493
|
+
sections.push(`${group} (${items.length}):
|
|
3494
|
+
${lines.join("\n")}`);
|
|
3177
3495
|
}
|
|
3178
|
-
await ctx.reply(
|
|
3496
|
+
await ctx.reply(`${header}
|
|
3179
3497
|
|
|
3180
|
-
${sections.join("\n\n")}`
|
|
3498
|
+
${sections.join("\n\n")}`);
|
|
3181
3499
|
return true;
|
|
3182
3500
|
}
|
|
3183
3501
|
async function handleHooks(_text, ctx) {
|
|
3184
|
-
const { getHookSummary } = await import("./hook-system-
|
|
3502
|
+
const { getHookSummary } = await import("./hook-system-ZCVOFFRD.js");
|
|
3185
3503
|
const summary = getHookSummary();
|
|
3186
3504
|
const lines = ["\u{1FA9D} Hooks:"];
|
|
3187
3505
|
for (const { event, hooks } of summary) {
|
|
@@ -3197,7 +3515,7 @@ async function handleHooks(_text, ctx) {
|
|
|
3197
3515
|
async function handleMcp(_text, ctx) {
|
|
3198
3516
|
const arg = _text.replace(/^\/mcp\s*/i, "").trim().toLowerCase();
|
|
3199
3517
|
if (arg === "start") {
|
|
3200
|
-
const { loadUsers: loadUsers2 } = await import("./user-registry-
|
|
3518
|
+
const { loadUsers: loadUsers2 } = await import("./user-registry-PEFDZ5AV.js");
|
|
3201
3519
|
const registry = loadUsers2();
|
|
3202
3520
|
const user = registry.byUserId.get(ctx.userId);
|
|
3203
3521
|
if (user?.role !== "master") {
|
|
@@ -3254,7 +3572,14 @@ async function handleHelp(_text, ctx) {
|
|
|
3254
3572
|
"/reset \u2014 Reload transport + fresh session",
|
|
3255
3573
|
"/reset default \u2014 Restore transport.default.json + fresh session",
|
|
3256
3574
|
"/compact \u2014 Compact context window (summarize + fresh session)",
|
|
3257
|
-
"/status \u2014
|
|
3575
|
+
"/status \u2014 Operational health (PID, uptime, platforms, context)",
|
|
3576
|
+
"/software \u2014 Version info, deploy date, npm check, rollback",
|
|
3577
|
+
"/software update [pull|deploy] \u2014 Pull & build from git",
|
|
3578
|
+
"/software update npm \u2014 Update from npm registry",
|
|
3579
|
+
"/software rollback <version> \u2014 Roll back to previous version",
|
|
3580
|
+
"/update \u2014 Alias for /software update pull",
|
|
3581
|
+
"/model \u2014 Model configuration (provider, context, fallbacks)",
|
|
3582
|
+
"/model set <name> \u2014 Switch model",
|
|
3258
3583
|
"/doctor \u2014 Deep probe all subsystems",
|
|
3259
3584
|
"/doctor fix \u2014 Run safe auto-repairs",
|
|
3260
3585
|
"/doctor fix-full \u2014 Full repair (+ FTS rebuild, WAL checkpoint)",
|
|
@@ -3263,41 +3588,31 @@ async function handleHelp(_text, ctx) {
|
|
|
3263
3588
|
"/stop, /ctrlc \u2014 Stop current response",
|
|
3264
3589
|
"/memory \u2014 Memory storage statistics",
|
|
3265
3590
|
"/heartbeat \u2014 Heartbeat diagnostics (tasks, last tick)",
|
|
3266
|
-
"/models \u2014 Model, transport & agent status",
|
|
3591
|
+
"/models \u2014 Model, transport & agent status (legacy)",
|
|
3267
3592
|
"/models change \u2014 Switch model/provider (any agent)",
|
|
3268
3593
|
"/models quick <model> \u2014 Instant switch on same provider",
|
|
3269
|
-
"/
|
|
3270
|
-
"/models restore \u2014 Undo last model/provider switch",
|
|
3271
|
-
"/models default \u2014 Factory reset (transport.default.json)",
|
|
3272
|
-
"/models emergency \u2014 \u{1F6A8} Activate paid hailMary model (manual)",
|
|
3273
|
-
"/emergency \u2014 Shortcut for /models emergency",
|
|
3274
|
-
"/models health reset \u2014 Reset model health buckets",
|
|
3594
|
+
"/emergency \u2014 \u{1F6A8} Activate paid hailMary model",
|
|
3275
3595
|
"/tasks \u2014 Scheduled tasks",
|
|
3276
3596
|
"/tasks log <id> \u2014 Last 5 runs for a task",
|
|
3277
3597
|
"/task run <id> \u2014 Manually fire a task",
|
|
3278
|
-
"/task pause <id> \u2014 Pause
|
|
3279
|
-
"/task resume <id> \u2014 Resume a paused task",
|
|
3598
|
+
"/task pause <id> \u2014 Pause / /task resume <id> \u2014 Resume",
|
|
3280
3599
|
"/facts \u2014 Core knowledge (user profile + agent notes)",
|
|
3281
|
-
"/skills \u2014 List
|
|
3600
|
+
"/skills \u2014 List active/skipped skills",
|
|
3282
3601
|
"/session \u2014 List sessions",
|
|
3283
3602
|
"/session new [browse|code|task] \u2014 New session",
|
|
3284
|
-
"/session <#> \u2014 Switch session",
|
|
3285
|
-
"/session end [#] \u2014 End session (keep messages)",
|
|
3286
|
-
"/session kill <#> \u2014 Kill session (wipe messages)",
|
|
3287
|
-
"/default \u2014 Switch back to default agent",
|
|
3603
|
+
"/session <#> \u2014 Switch / /session end [#] \u2014 End / /session kill <#> \u2014 Kill",
|
|
3288
3604
|
"/nlm \u2014 Knowledge base (list/create/sources/query)",
|
|
3289
|
-
"/restart \u2014 Restart
|
|
3290
|
-
"/wakeup \u2014 Wake Mac from sleep
|
|
3291
|
-
"/sleep \u2014 Sleep status",
|
|
3292
|
-
"/
|
|
3293
|
-
"/
|
|
3294
|
-
"/
|
|
3605
|
+
"/restart \u2014 Restart bridge",
|
|
3606
|
+
"/wakeup \u2014 Wake Mac from sleep",
|
|
3607
|
+
"/sleep \u2014 Sleep status / /sleep resume / /sleep now",
|
|
3608
|
+
"/whoami \u2014 Your user info & clearance",
|
|
3609
|
+
"/reasoning \u2014 Reasoning effort (low/medium/high/none) + show/hide thinking",
|
|
3610
|
+
"/kanban \u2014 Kanban board"
|
|
3295
3611
|
];
|
|
3296
3612
|
if (ctx.platform === "telegram") {
|
|
3297
3613
|
cmds.push("/full \u2014 Raw output, TTS disabled", "/short \u2014 Clean responses (default)", "/healing \u2014 Toggle self-healer on/off");
|
|
3298
3614
|
}
|
|
3299
3615
|
cmds.push("/help \u2014 Show this help");
|
|
3300
|
-
cmds.push("/skills \u2014 List available skills");
|
|
3301
3616
|
await ctx.reply(`\u{1F4CB} Available commands:
|
|
3302
3617
|
|
|
3303
3618
|
${cmds.join("\n")}`);
|
|
@@ -3658,15 +3973,19 @@ registerExact("/restart", handleRestart);
|
|
|
3658
3973
|
registerExact("/full", handleFull);
|
|
3659
3974
|
registerExact("/short", handleShort);
|
|
3660
3975
|
registerExact("/healing", handleHealing);
|
|
3976
|
+
registerExact("/software", handleSoftware);
|
|
3977
|
+
registerExact("/update", handleSoftware);
|
|
3661
3978
|
registerExact("/facts", handleFacts);
|
|
3662
3979
|
registerExact("/tasks", handleTasksList);
|
|
3663
3980
|
registerExact("/task", handleTasksList);
|
|
3664
3981
|
registerExact("/cron", handleTasksList);
|
|
3982
|
+
registerExact("/kanban", handleKanban);
|
|
3665
3983
|
registerExact("/memory", handleMemory);
|
|
3666
3984
|
registerExact("/heartbeat", handleHeartbeat);
|
|
3667
3985
|
registerExact("/models", handleModels);
|
|
3668
3986
|
registerExact("/model", handleModels);
|
|
3669
3987
|
registerExact("/change", (_, ctx) => handleModels("/model change", ctx));
|
|
3988
|
+
registerExact("/reasoning", handleReasoning);
|
|
3670
3989
|
registerExact("/emergency", handleEmergencyAlias);
|
|
3671
3990
|
registerExact("/help", handleHelp);
|
|
3672
3991
|
registerExact("/users", handleUsers);
|
|
@@ -3699,7 +4018,6 @@ export {
|
|
|
3699
4018
|
SessionRegistry,
|
|
3700
4019
|
SessionManager,
|
|
3701
4020
|
loadNLMConfig,
|
|
3702
|
-
sanitizeOutbound,
|
|
3703
4021
|
routeReaction,
|
|
3704
4022
|
formatReactionSignal,
|
|
3705
4023
|
cleanResponse,
|
|
@@ -3708,10 +4026,11 @@ export {
|
|
|
3708
4026
|
triggerNewSession,
|
|
3709
4027
|
triggerResetSession,
|
|
3710
4028
|
killWakeInhibit,
|
|
4029
|
+
getRecalledIdsForMessage,
|
|
3711
4030
|
resetIdleCompactFlag,
|
|
3712
4031
|
setIdleCompactReset,
|
|
3713
4032
|
resetAndPrepare,
|
|
3714
4033
|
handleInboundMessage,
|
|
3715
4034
|
startSession
|
|
3716
4035
|
};
|
|
3717
|
-
//# sourceMappingURL=chunk-
|
|
4036
|
+
//# sourceMappingURL=chunk-N7UG4FID.js.map
|