abtars 0.3.3 → 0.3.4-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundle/{_registry.generated-7DRCE4V6.js → _registry.generated-ZJBAZMXN.js} +16 -15
- package/bundle/{_registry.generated-7DRCE4V6.js.map → _registry.generated-ZJBAZMXN.js.map} +1 -1
- package/bundle/abtars-browser.js +6 -5
- package/bundle/abtars-browser.js.map +1 -1
- package/bundle/abtars-cli.js +47 -39
- package/bundle/abtars-cli.js.map +2 -2
- package/bundle/abtars-restart.js +7 -7
- package/bundle/abtars-rss.js +2 -1
- package/bundle/abtars-rss.js.map +2 -2
- package/bundle/abtars-task.js +6 -5
- package/bundle/abtars-task.js.map +1 -1
- package/bundle/abtars-todo.js +2 -1
- package/bundle/abtars-todo.js.map +1 -1
- package/bundle/abtars.js +299 -209
- package/bundle/abtars.js.map +4 -4
- package/bundle/{acp-raw-client-AZJCEB6S.js → acp-raw-client-YTBGFN4S.js} +4 -3
- package/bundle/{acp-raw-client-AZJCEB6S.js.map → acp-raw-client-YTBGFN4S.js.map} +1 -1
- package/bundle/{action-gate-QYJL57IX.js → action-gate-YISTP773.js} +4 -3
- package/bundle/{action-gate-QYJL57IX.js.map → action-gate-YISTP773.js.map} +1 -1
- package/bundle/{agent-api-adapter-PYMNQXHE.js → agent-api-adapter-E4HWVJ32.js} +5 -4
- package/bundle/{agent-api-adapter-PYMNQXHE.js.map → agent-api-adapter-E4HWVJ32.js.map} +1 -1
- package/bundle/{agent-api-rate-limit-4GEZ4YN5.js → agent-api-rate-limit-VENFGOAD.js} +6 -5
- package/bundle/{agent-registry-563P4EUJ.js → agent-registry-DL7UT272.js} +9 -8
- package/bundle/bootstrap-V5MROD3X.js +62 -0
- package/bundle/bootstrap-V5MROD3X.js.map +7 -0
- package/bundle/{bridge-lock-transport-LXCF2IVN.js → bridge-lock-transport-BJAMHMXW.js} +6 -5
- package/bundle/{browser-2VZOGOGX.js → browser-PT54UWSW.js} +8 -7
- package/bundle/{budget-PPA7WY3D.js → budget-QNK6IIT6.js} +5 -4
- package/bundle/{budget-PPA7WY3D.js.map → budget-QNK6IIT6.js.map} +1 -1
- package/bundle/{capability-WXEA2WFK.js → capability-EKPGHQIO.js} +7 -6
- package/bundle/{chunk-C3EYYJN3.js → chunk-2BXXQG7P.js} +16 -4
- package/bundle/chunk-2BXXQG7P.js.map +7 -0
- package/bundle/{chunk-4PIVWXUJ.js → chunk-2ZD7VQRW.js} +2 -2
- package/bundle/{chunk-OY2HAK33.js → chunk-36ZEYDKZ.js} +1 -1
- package/bundle/chunk-36ZEYDKZ.js.map +7 -0
- package/bundle/{chunk-3QW2K53E.js → chunk-4IGLXZCC.js} +11 -19
- package/bundle/chunk-4IGLXZCC.js.map +7 -0
- package/bundle/{chunk-T7TAWGBX.js → chunk-52PQM4EZ.js} +2 -2
- package/bundle/{chunk-2RGR3LSV.js → chunk-5P5HF7IJ.js} +2 -2
- package/bundle/{chunk-LE23VPN3.js → chunk-63A7ZRIH.js} +4 -4
- package/bundle/{chunk-LE23VPN3.js.map → chunk-63A7ZRIH.js.map} +1 -1
- package/bundle/chunk-6IB3GVXK.js +77 -0
- package/bundle/chunk-6IB3GVXK.js.map +7 -0
- package/bundle/{chunk-OOKNHOCB.js → chunk-6S3G6GPO.js} +2 -2
- package/bundle/{chunk-E7MV7WFT.js → chunk-6VTHSN4V.js} +6 -6
- package/bundle/{chunk-NGZVJ52F.js → chunk-76YN7O3U.js} +7 -7
- package/bundle/{chunk-43DKPXTP.js → chunk-7LORCJCQ.js} +4 -4
- package/bundle/{chunk-HDOFJVFS.js → chunk-7OI46MH7.js} +3 -3
- package/bundle/{chunk-H2K23MOF.js → chunk-7XXISOHU.js} +21 -5
- package/bundle/chunk-7XXISOHU.js.map +7 -0
- package/bundle/{chunk-CB6S3ZRF.js → chunk-AFFW2LRY.js} +3 -3
- package/bundle/{chunk-TCI6FZTP.js → chunk-AHJDG6OM.js} +9 -9
- package/bundle/{chunk-NP72ZB7P.js → chunk-AMUJEP6L.js} +45 -45
- package/bundle/{chunk-NP72ZB7P.js.map → chunk-AMUJEP6L.js.map} +2 -2
- package/bundle/{chunk-BU7LTI2W.js → chunk-AWCO3DQ3.js} +6 -7
- package/bundle/chunk-AWCO3DQ3.js.map +7 -0
- package/bundle/{chunk-YME7NRGP.js → chunk-B2TIRDZC.js} +2 -2
- package/bundle/{chunk-SSCGWDIC.js → chunk-BWJ37KMW.js} +2 -2
- package/bundle/{chunk-ULO2PX3T.js → chunk-CCZ43JB7.js} +3 -3
- package/bundle/{chunk-FVUL44T4.js → chunk-CNENVY37.js} +2 -2
- package/bundle/{chunk-J5NOL4DB.js → chunk-DJOSXXM2.js} +2 -2
- package/bundle/{chunk-7RAGSHSH.js → chunk-DMDX35YT.js} +12 -10
- package/bundle/chunk-DMDX35YT.js.map +7 -0
- package/bundle/{chunk-DNDYD5SL.js → chunk-E7DZYCSF.js} +3 -3
- package/bundle/{chunk-M6Q3IQ4H.js → chunk-FF2F7ENH.js} +250 -118
- package/bundle/chunk-FF2F7ENH.js.map +7 -0
- package/bundle/{chunk-GCFIK6OB.js → chunk-FSGICOCX.js} +21 -21
- package/bundle/{chunk-IXKQ4JMX.js → chunk-GFAJSPMD.js} +33 -17
- package/bundle/chunk-GFAJSPMD.js.map +7 -0
- package/bundle/{chunk-FJF42RZY.js → chunk-GHRLO2UL.js} +3 -3
- package/bundle/{chunk-3LQOJVTB.js → chunk-HFOCNYEO.js} +1842 -1220
- package/bundle/{chunk-3LQOJVTB.js.map → chunk-HFOCNYEO.js.map} +4 -4
- package/bundle/{chunk-7WHXTCVD.js → chunk-HWFN7JGU.js} +2 -2
- package/bundle/{chunk-KBPVJGD7.js → chunk-IXGDDDAB.js} +3 -3
- package/bundle/chunk-JHLKEUHE.js +37 -0
- package/bundle/chunk-JHLKEUHE.js.map +7 -0
- package/bundle/{chunk-YEOZN5IE.js → chunk-JRGEEGZF.js} +2 -2
- package/bundle/{chunk-56D3Y44D.js → chunk-KLG4SCF7.js} +10 -10
- package/bundle/{chunk-ASYX43OU.js → chunk-LB43Q7G6.js} +26 -26
- package/bundle/{chunk-TVSPVZTX.js → chunk-LN5MNDSA.js} +3 -3
- package/bundle/{chunk-RJX45XIC.js → chunk-LPF2HELD.js} +9 -4
- package/bundle/chunk-LPF2HELD.js.map +7 -0
- package/bundle/{chunk-72T2Q7IG.js → chunk-MJACYH7A.js} +270 -282
- package/bundle/chunk-MJACYH7A.js.map +7 -0
- package/bundle/{chunk-SESM4GBM.js → chunk-MPQ2PJQX.js} +52 -25
- package/bundle/chunk-MPQ2PJQX.js.map +7 -0
- package/bundle/{chunk-FIAVVKGN.js → chunk-MTE32OQH.js} +3 -3
- package/bundle/{chunk-MV5KOWOR.js → chunk-N3Q3TASM.js} +7 -7
- package/bundle/{chunk-IQKADER4.js → chunk-O4YBJS2K.js} +2 -2
- package/bundle/{chunk-VJATH7AN.js → chunk-OOUCUCUW.js} +9 -8
- package/bundle/chunk-OOUCUCUW.js.map +7 -0
- package/bundle/{chunk-5V4VHKEA.js → chunk-OT6HLPEA.js} +3 -3
- package/bundle/{chunk-V6CV3QPH.js → chunk-OWPQIBAO.js} +2 -2
- package/bundle/{chunk-EDZGF6BC.js → chunk-QJPDBJDP.js} +11 -4
- package/bundle/chunk-QJPDBJDP.js.map +7 -0
- package/bundle/{chunk-N5VROZ7A.js → chunk-QMP2KC4W.js} +5 -5
- package/bundle/{chunk-4HNCOQSK.js → chunk-QOGZ7BFL.js} +7 -7
- package/bundle/{chunk-2LKQV2ND.js → chunk-R23FHZRY.js} +3 -3
- package/bundle/{chunk-SXNY6HC4.js → chunk-R4GYWVCR.js} +6 -6
- package/bundle/chunk-R4GYWVCR.js.map +7 -0
- package/bundle/{chunk-S7ZIGIR5.js → chunk-R76K6L6H.js} +27 -27
- package/bundle/{chunk-S7ZIGIR5.js.map → chunk-R76K6L6H.js.map} +1 -1
- package/bundle/{chunk-TY26WMQY.js → chunk-RCWQ34QR.js} +2 -2
- package/bundle/{chunk-MQJG7OJX.js → chunk-RJ2OUNFU.js} +38 -36
- package/bundle/chunk-RJ2OUNFU.js.map +7 -0
- package/bundle/{chunk-S6HEHCCG.js → chunk-RO3TAYBR.js} +83 -46
- package/bundle/chunk-RO3TAYBR.js.map +7 -0
- package/bundle/{chunk-ZOCEBV62.js → chunk-UU3RLJSD.js} +3 -3
- package/bundle/{chunk-P5O6QZDC.js → chunk-V7Y2LFO4.js} +10 -6
- package/bundle/chunk-V7Y2LFO4.js.map +7 -0
- package/bundle/{chunk-WP7FZHMI.js → chunk-W2PSVV2T.js} +2 -2
- package/bundle/{chunk-V2QIAXWZ.js → chunk-WEGFRA6G.js} +3 -3
- package/bundle/{chunk-ZY6DH2S4.js → chunk-WTIGZO3N.js} +80 -70
- package/bundle/chunk-WTIGZO3N.js.map +7 -0
- package/bundle/{chunk-O4GKI3Q3.js → chunk-X7DLKIQM.js} +4 -4
- package/bundle/{chunk-BNBC4T45.js → chunk-XZ4ZBDM5.js} +3 -3
- package/bundle/{chunk-24V4A6RP.js → chunk-YI2KSYB4.js} +4 -4
- package/bundle/{chunk-37EX63K4.js → chunk-YWHJJHJ2.js} +6998 -3621
- package/bundle/chunk-YWHJJHJ2.js.map +7 -0
- package/bundle/{chunk-IK4R3RBZ.js → chunk-YZCOA4DC.js} +3 -3
- package/bundle/{chunk-2FZJDMAF.js → chunk-ZGNSCJWH.js} +10 -10
- package/bundle/{chunk-W726UGI6.js → chunk-ZKMKAO75.js} +3 -3
- package/bundle/{chunk-WGWM4IZM.js → chunk-ZT5ZBGWS.js} +4 -4
- package/bundle/{chunk-WGWM4IZM.js.map → chunk-ZT5ZBGWS.js.map} +1 -1
- package/bundle/{commands-XXFU2ZF7.js → commands-2JQ5YTJX.js} +20 -20
- package/bundle/{config-EWDZ234X.js → config-ZEWIM5Z2.js} +8 -7
- package/bundle/{config-show-6J33O4TE.js → config-show-WBJPQPRD.js} +5 -5
- package/bundle/{context-OCS7HLJP.js → context-V75QNXB5.js} +5 -2
- package/bundle/{context-OCS7HLJP.js.map → context-V75QNXB5.js.map} +1 -1
- package/bundle/{daemon-LTDAXNA2.js → daemon-W7VQOSZC.js} +7 -7
- package/bundle/{delegation-tools-YDTWQMZD.js → delegation-tools-VGTRFQBF.js} +13 -11
- package/bundle/{registry-client-VN2MM2HI.js → deploy-5AGIULM2.js} +10 -6
- package/bundle/{deploy-lib-import-RGZJ3CGC.js → deploy-lib-import-ZBDYORN4.js} +5 -3
- package/bundle/{deps-PHSLIA77.js → deps-VB3S3RLF.js} +21 -19
- package/bundle/deps-VB3S3RLF.js.map +7 -0
- package/bundle/{direct-api-transport-OAKYQBJR.js → direct-api-transport-YSROTC35.js} +30 -28
- package/bundle/direct-api-transport-YSROTC35.js.map +7 -0
- package/bundle/{discord-adapter-WUNYPTDE.js → discord-adapter-LKBSIFLV.js} +26 -26
- package/bundle/{dist-7HEHHQI2.js → dist-KMK7TZGN.js} +376 -348
- package/bundle/dist-KMK7TZGN.js.map +7 -0
- package/bundle/{dns-wakeup-F55ALHXJ.js → dns-wakeup-KIURCCFJ.js} +4 -3
- package/bundle/{dns-wakeup-F55ALHXJ.js.map → dns-wakeup-KIURCCFJ.js.map} +1 -1
- package/bundle/{doctor-probes-3SLIUGKS.js → doctor-probes-46UKIROK.js} +4 -3
- package/bundle/{env-schema-MSDP2YBO.js → env-schema-YGHCKX5B.js} +5 -4
- package/bundle/{gossip-CS3G3447.js → gossip-VSEY2HSE.js} +7 -6
- package/bundle/{guardrails-24XK2COI.js → guardrails-U7M6H2GE.js} +6 -5
- package/bundle/{health-check-FRUNRVNQ.js → health-check-ASRLUJE5.js} +6 -2
- package/bundle/health-check-ASRLUJE5.js.map +7 -0
- package/bundle/{heartbeat-system-G4IFQXT6.js → heartbeat-system-MUXLT4E6.js} +7 -6
- package/bundle/{heartbeat-tier3-3ZO3EVXP.js → heartbeat-tier3-636ZMM4E.js} +45 -44
- package/bundle/heartbeat-tier3-636ZMM4E.js.map +7 -0
- package/bundle/{hook-system-X6INNJGV.js → hook-system-Z4XD6IM5.js} +5 -4
- package/bundle/{hotskills-6FQYTJIO.js → hotskills-AOUWVTQB.js} +7 -6
- package/bundle/{install-ZAHTZ5M5.js → install-3GGZUN22.js} +23 -20
- package/bundle/install-3GGZUN22.js.map +7 -0
- package/bundle/{install-manifest-QX7KVDCA.js → install-manifest-624KOB4S.js} +4 -3
- package/bundle/{install-manifest-QX7KVDCA.js.map → install-manifest-624KOB4S.js.map} +1 -1
- package/bundle/{irc-adapter-IEJQKKJF.js → irc-adapter-SA7GLJGR.js} +5 -4
- package/bundle/{irc-adapter-IEJQKKJF.js.map → irc-adapter-SA7GLJGR.js.map} +1 -1
- package/bundle/{irc-config-TTWNYFLH.js → irc-config-PG4X2I4M.js} +6 -5
- package/bundle/{irc-config-TTWNYFLH.js.map → irc-config-PG4X2I4M.js.map} +1 -1
- package/bundle/{kanban-board-J6RO3ZU7.js → kanban-board-4AI5Z6B5.js} +7 -5
- package/bundle/{kanban-channel-5EIXBFSA.js → kanban-channel-JMBYWGWD.js} +8 -6
- package/bundle/{lazy-require-V6EFUATC.js → lazy-require-GURNBC3C.js} +11 -6
- package/bundle/{logger-Y3VILPRH.js → logger-UQJPZMYV.js} +4 -3
- package/bundle/{logs-YS3GDURO.js → logs-2WTDLMB5.js} +5 -5
- package/bundle/{main-chat-YLZDNQPO.js → main-chat-EID5Y6H2.js} +6 -5
- package/bundle/{master-user-Z4M7KCJE.js → master-user-TKA7M2GL.js} +7 -6
- package/bundle/{media-utils-P6RZ2K3U.js → media-utils-X3UN342B.js} +44 -43
- package/bundle/{media-utils-P6RZ2K3U.js.map → media-utils-X3UN342B.js.map} +2 -2
- package/bundle/{message-pipeline-MHEBDJLH.js → message-pipeline-TAWXNEVS.js} +20 -20
- package/bundle/meta.json +9264 -8575
- package/bundle/{migrate-layout-RJJQLVGR.js → migrate-layout-KEAIIN26.js} +8 -4
- package/bundle/migrate-layout-KEAIIN26.js.map +7 -0
- package/bundle/{nerve-VZNMFDGY.js → nerve-TC34H4EL.js} +5 -4
- package/bundle/{notification-VV2OR6NW.js → notification-JQNVGICN.js} +8 -7
- package/bundle/{openrouter-credits-LXC7P4G6.js → openrouter-credits-5Q3EYWE5.js} +5 -4
- package/bundle/{openrouter-credits-LXC7P4G6.js.map → openrouter-credits-5Q3EYWE5.js.map} +1 -1
- package/bundle/{orc-KC4USP55.js → orc-74Z62W7B.js} +4 -4
- package/bundle/{orc-tools-CHRSXSAS.js → orc-tools-GME3DKIN.js} +5 -4
- package/bundle/{paths-EDK6KWHG.js → paths-BAUNPLNJ.js} +6 -2
- package/bundle/{paths-RZF6WDMG.js → paths-MZC2KU2C.js} +3 -2
- package/bundle/{peer-auth-SRONOLNG.js → peer-auth-VRO3JYL5.js} +9 -8
- package/bundle/{peer-client-VOF77T6C.js → peer-client-WLK5GZQS.js} +9 -8
- package/bundle/{peer-client-VOF77T6C.js.map → peer-client-WLK5GZQS.js.map} +1 -1
- package/bundle/{peer-config-FRWLEYQ5.js → peer-config-24WILLCJ.js} +6 -5
- package/bundle/{peer-jwt-XY3XRIA2.js → peer-jwt-ZR6RF3XM.js} +6 -5
- package/bundle/{peer-transport-UBBXTDRP.js → peer-transport-BK5VHI2M.js} +8 -7
- package/bundle/{phase-transport-4NQHZX75.js → phase-transport-7QJM7J6V.js} +18 -16
- package/bundle/{reconcile-2EUXJ6W5.js → reconcile-7N7OE2GU.js} +5 -4
- package/bundle/{reconciler-FFQGV4DO.js → reconciler-7LOOUK43.js} +13 -11
- package/bundle/{reconciler-FFQGV4DO.js.map → reconciler-7LOOUK43.js.map} +1 -1
- package/bundle/{restore-NFDE2RG6.js → restore-MENZ3I3K.js} +13 -9
- package/bundle/{restore-NFDE2RG6.js.map → restore-MENZ3I3K.js.map} +3 -3
- package/bundle/{rollback-MVZ53XS4.js → rollback-JOHY6KWW.js} +5 -5
- package/bundle/{chunk-SKY6656M.js → sandbox-runtime-T7RF4WJD.js} +11 -28
- package/bundle/{chunk-SKY6656M.js.map → sandbox-runtime-T7RF4WJD.js.map} +1 -1
- package/bundle/{self-healer-utils-KD6LV63S.js → self-healer-utils-OR2N6RLD.js} +5 -4
- package/bundle/{self-healer-utils-KD6LV63S.js.map → self-healer-utils-OR2N6RLD.js.map} +1 -1
- package/bundle/{sha-tracker-2DB4R2TW.js → sha-tracker-BXOLWZJL.js} +5 -4
- package/bundle/{skill-session-BPDVA6ZG.js → skill-session-H6EQ4NGN.js} +5 -4
- package/bundle/{skill-session-BPDVA6ZG.js.map → skill-session-H6EQ4NGN.js.map} +1 -1
- package/bundle/{skill-stats-TPD2NROA.js → skill-stats-7O777ZSZ.js} +6 -5
- package/bundle/{skill-watcher-D7QYYYON.js → skill-watcher-ZGLTDPG5.js} +6 -5
- package/bundle/{sleep-GH6DLBJJ.js → sleep-3LFZH727.js} +10 -9
- package/bundle/{soul-bundle-GXLMDBCC.js → soul-bundle-RQ2YQMJW.js} +10 -9
- package/bundle/{spin-4DBYHS3E.js → spin-76K4R6FK.js} +12 -10
- package/bundle/{spin-notifications-IKYJPER5.js → spin-notifications-LD46B4K5.js} +7 -5
- package/bundle/{spin-notifications-IKYJPER5.js.map → spin-notifications-LD46B4K5.js.map} +1 -1
- package/bundle/{spin-types-PLJH3SIK.js → spin-types-MOKTZXGB.js} +5 -4
- package/bundle/{src-SUFZ27S5.js → src-6BTCMOD3.js} +4 -4
- package/bundle/{sse-parser-anthropic-U7ILHOY5.js → sse-parser-anthropic-NV2CGBIT.js} +5 -4
- package/bundle/{sse-parser-anthropic-U7ILHOY5.js.map → sse-parser-anthropic-NV2CGBIT.js.map} +1 -1
- package/bundle/{sse-parser-responses-OI73R3AH.js → sse-parser-responses-FC3PFHQ5.js} +5 -4
- package/bundle/{sse-parser-responses-OI73R3AH.js.map → sse-parser-responses-FC3PFHQ5.js.map} +1 -1
- package/bundle/{ssrf-guard-6GP4QYVA.js → ssrf-guard-E2YPLW6G.js} +5 -4
- package/bundle/{ssrf-guard-6GP4QYVA.js.map → ssrf-guard-E2YPLW6G.js.map} +1 -1
- package/bundle/{start-JT2BPMSW.js → start-HPO5LYJP.js} +5 -5
- package/bundle/start-HPO5LYJP.js.map +7 -0
- package/bundle/{stt-KD3AABKG.js → stt-UE7EOYD7.js} +6 -5
- package/bundle/{subagent-runtime-LVECAUPV.js → subagent-runtime-4X3UHF4H.js} +6 -5
- package/bundle/system-status-PLPWV4RF.js +346 -0
- package/bundle/system-status-PLPWV4RF.js.map +7 -0
- package/bundle/{task-store-2XRDM3AW.js → task-store-RAFMDQ7N.js} +6 -5
- package/bundle/{telegram-adapter-UJ3RYYV6.js → telegram-adapter-PPXKTGOP.js} +35 -35
- package/bundle/{tool-registry-YU6WBXPA.js → tool-registry-NKIPNJZ5.js} +25 -23
- package/bundle/{tool-sandbox-RNNPDR5M.js → tool-sandbox-DQCP3UTU.js} +6 -5
- package/bundle/{transport-config-OK3MZPJK.js → transport-config-SF6GBV47.js} +9 -8
- package/bundle/{update-ENNPRW7Y.js → update-QOOGMFSJ.js} +6 -6
- package/bundle/{update-check-SJB6GV3A.js → update-check-LPZG3K5P.js} +3 -2
- package/bundle/{update-check-SJB6GV3A.js.map → update-check-LPZG3K5P.js.map} +1 -1
- package/bundle/{usage-tracker-HRSGC7QC.js → usage-tracker-TBDM4KE6.js} +2 -2
- package/bundle/{user-registry-6PUJJ5J2.js → user-registry-OYJVAHDD.js} +6 -5
- package/bundle/{wrapper-WLHLG4MI.js → wrapper-W66YICNZ.js} +3 -3
- package/bundle/{ws-peer-client-WHW3RJTD.js → ws-peer-client-G5QHOF6K.js} +15 -14
- package/bundle/{ws-peer-client-WHW3RJTD.js.map → ws-peer-client-G5QHOF6K.js.map} +2 -2
- package/package.json +3 -7
- package/scripts/emergency-deploy.sh +11 -8
- package/scripts/emergency-update.sh +156 -23
- package/templates/config/.env +1 -1
- package/templates/config/models.json +13 -0
- package/bundle/chunk-37EX63K4.js.map +0 -7
- package/bundle/chunk-3QW2K53E.js.map +0 -7
- package/bundle/chunk-72T2Q7IG.js.map +0 -7
- package/bundle/chunk-7RAGSHSH.js.map +0 -7
- package/bundle/chunk-BU7LTI2W.js.map +0 -7
- package/bundle/chunk-C3EYYJN3.js.map +0 -7
- package/bundle/chunk-CAOIIVFP.js +0 -110
- package/bundle/chunk-CAOIIVFP.js.map +0 -7
- package/bundle/chunk-EDZGF6BC.js.map +0 -7
- package/bundle/chunk-H2K23MOF.js.map +0 -7
- package/bundle/chunk-HAZHNBBY.js +0 -156
- package/bundle/chunk-HAZHNBBY.js.map +0 -7
- package/bundle/chunk-IXKQ4JMX.js.map +0 -7
- package/bundle/chunk-JAJ3DUQ2.js +0 -30
- package/bundle/chunk-JAJ3DUQ2.js.map +0 -7
- package/bundle/chunk-KMFR5AVY.js +0 -45
- package/bundle/chunk-KMFR5AVY.js.map +0 -7
- package/bundle/chunk-M6Q3IQ4H.js.map +0 -7
- package/bundle/chunk-MQJG7OJX.js.map +0 -7
- package/bundle/chunk-OY2HAK33.js.map +0 -7
- package/bundle/chunk-P5O6QZDC.js.map +0 -7
- package/bundle/chunk-RJX45XIC.js.map +0 -7
- package/bundle/chunk-S6HEHCCG.js.map +0 -7
- package/bundle/chunk-SESM4GBM.js.map +0 -7
- package/bundle/chunk-SXNY6HC4.js.map +0 -7
- package/bundle/chunk-VJATH7AN.js.map +0 -7
- package/bundle/chunk-ZY6DH2S4.js.map +0 -7
- package/bundle/deps-PHSLIA77.js.map +0 -7
- package/bundle/direct-api-transport-OAKYQBJR.js.map +0 -7
- package/bundle/dist-7HEHHQI2.js.map +0 -7
- package/bundle/health-check-FRUNRVNQ.js.map +0 -7
- package/bundle/heartbeat-tier3-3ZO3EVXP.js.map +0 -7
- package/bundle/install-ZAHTZ5M5.js.map +0 -7
- package/bundle/migrate-layout-RJJQLVGR.js.map +0 -7
- package/bundle/phase-config-V4XETN5F.js +0 -18
- package/bundle/sandbox-runtime-WHACQLLN.js +0 -22
- package/bundle/start-JT2BPMSW.js.map +0 -7
- package/bundle/system-status-XXJWTVJN.js +0 -243
- package/bundle/system-status-XXJWTVJN.js.map +0 -7
- package/bundle/user-registry-6PUJJ5J2.js.map +0 -7
- package/bundle/wrapper-WLHLG4MI.js.map +0 -7
- /package/bundle/{agent-api-rate-limit-4GEZ4YN5.js.map → agent-api-rate-limit-VENFGOAD.js.map} +0 -0
- /package/bundle/{agent-registry-563P4EUJ.js.map → agent-registry-DL7UT272.js.map} +0 -0
- /package/bundle/{bridge-lock-transport-LXCF2IVN.js.map → bridge-lock-transport-BJAMHMXW.js.map} +0 -0
- /package/bundle/{browser-2VZOGOGX.js.map → browser-PT54UWSW.js.map} +0 -0
- /package/bundle/{capability-WXEA2WFK.js.map → capability-EKPGHQIO.js.map} +0 -0
- /package/bundle/{chunk-4PIVWXUJ.js.map → chunk-2ZD7VQRW.js.map} +0 -0
- /package/bundle/{chunk-T7TAWGBX.js.map → chunk-52PQM4EZ.js.map} +0 -0
- /package/bundle/{chunk-2RGR3LSV.js.map → chunk-5P5HF7IJ.js.map} +0 -0
- /package/bundle/{chunk-OOKNHOCB.js.map → chunk-6S3G6GPO.js.map} +0 -0
- /package/bundle/{chunk-E7MV7WFT.js.map → chunk-6VTHSN4V.js.map} +0 -0
- /package/bundle/{chunk-NGZVJ52F.js.map → chunk-76YN7O3U.js.map} +0 -0
- /package/bundle/{chunk-43DKPXTP.js.map → chunk-7LORCJCQ.js.map} +0 -0
- /package/bundle/{chunk-HDOFJVFS.js.map → chunk-7OI46MH7.js.map} +0 -0
- /package/bundle/{chunk-CB6S3ZRF.js.map → chunk-AFFW2LRY.js.map} +0 -0
- /package/bundle/{chunk-TCI6FZTP.js.map → chunk-AHJDG6OM.js.map} +0 -0
- /package/bundle/{chunk-YME7NRGP.js.map → chunk-B2TIRDZC.js.map} +0 -0
- /package/bundle/{chunk-SSCGWDIC.js.map → chunk-BWJ37KMW.js.map} +0 -0
- /package/bundle/{chunk-ULO2PX3T.js.map → chunk-CCZ43JB7.js.map} +0 -0
- /package/bundle/{chunk-FVUL44T4.js.map → chunk-CNENVY37.js.map} +0 -0
- /package/bundle/{chunk-J5NOL4DB.js.map → chunk-DJOSXXM2.js.map} +0 -0
- /package/bundle/{chunk-DNDYD5SL.js.map → chunk-E7DZYCSF.js.map} +0 -0
- /package/bundle/{chunk-GCFIK6OB.js.map → chunk-FSGICOCX.js.map} +0 -0
- /package/bundle/{chunk-FJF42RZY.js.map → chunk-GHRLO2UL.js.map} +0 -0
- /package/bundle/{chunk-7WHXTCVD.js.map → chunk-HWFN7JGU.js.map} +0 -0
- /package/bundle/{chunk-KBPVJGD7.js.map → chunk-IXGDDDAB.js.map} +0 -0
- /package/bundle/{chunk-YEOZN5IE.js.map → chunk-JRGEEGZF.js.map} +0 -0
- /package/bundle/{chunk-56D3Y44D.js.map → chunk-KLG4SCF7.js.map} +0 -0
- /package/bundle/{chunk-ASYX43OU.js.map → chunk-LB43Q7G6.js.map} +0 -0
- /package/bundle/{chunk-TVSPVZTX.js.map → chunk-LN5MNDSA.js.map} +0 -0
- /package/bundle/{chunk-FIAVVKGN.js.map → chunk-MTE32OQH.js.map} +0 -0
- /package/bundle/{chunk-MV5KOWOR.js.map → chunk-N3Q3TASM.js.map} +0 -0
- /package/bundle/{chunk-IQKADER4.js.map → chunk-O4YBJS2K.js.map} +0 -0
- /package/bundle/{chunk-5V4VHKEA.js.map → chunk-OT6HLPEA.js.map} +0 -0
- /package/bundle/{chunk-V6CV3QPH.js.map → chunk-OWPQIBAO.js.map} +0 -0
- /package/bundle/{chunk-N5VROZ7A.js.map → chunk-QMP2KC4W.js.map} +0 -0
- /package/bundle/{chunk-4HNCOQSK.js.map → chunk-QOGZ7BFL.js.map} +0 -0
- /package/bundle/{chunk-2LKQV2ND.js.map → chunk-R23FHZRY.js.map} +0 -0
- /package/bundle/{chunk-TY26WMQY.js.map → chunk-RCWQ34QR.js.map} +0 -0
- /package/bundle/{chunk-ZOCEBV62.js.map → chunk-UU3RLJSD.js.map} +0 -0
- /package/bundle/{chunk-WP7FZHMI.js.map → chunk-W2PSVV2T.js.map} +0 -0
- /package/bundle/{chunk-V2QIAXWZ.js.map → chunk-WEGFRA6G.js.map} +0 -0
- /package/bundle/{chunk-O4GKI3Q3.js.map → chunk-X7DLKIQM.js.map} +0 -0
- /package/bundle/{chunk-BNBC4T45.js.map → chunk-XZ4ZBDM5.js.map} +0 -0
- /package/bundle/{chunk-24V4A6RP.js.map → chunk-YI2KSYB4.js.map} +0 -0
- /package/bundle/{chunk-IK4R3RBZ.js.map → chunk-YZCOA4DC.js.map} +0 -0
- /package/bundle/{chunk-2FZJDMAF.js.map → chunk-ZGNSCJWH.js.map} +0 -0
- /package/bundle/{chunk-W726UGI6.js.map → chunk-ZKMKAO75.js.map} +0 -0
- /package/bundle/{commands-XXFU2ZF7.js.map → commands-2JQ5YTJX.js.map} +0 -0
- /package/bundle/{config-EWDZ234X.js.map → config-ZEWIM5Z2.js.map} +0 -0
- /package/bundle/{config-show-6J33O4TE.js.map → config-show-WBJPQPRD.js.map} +0 -0
- /package/bundle/{daemon-LTDAXNA2.js.map → daemon-W7VQOSZC.js.map} +0 -0
- /package/bundle/{delegation-tools-YDTWQMZD.js.map → delegation-tools-VGTRFQBF.js.map} +0 -0
- /package/bundle/{deploy-lib-import-RGZJ3CGC.js.map → deploy-5AGIULM2.js.map} +0 -0
- /package/bundle/{doctor-probes-3SLIUGKS.js.map → deploy-lib-import-ZBDYORN4.js.map} +0 -0
- /package/bundle/{discord-adapter-WUNYPTDE.js.map → discord-adapter-LKBSIFLV.js.map} +0 -0
- /package/bundle/{env-schema-MSDP2YBO.js.map → doctor-probes-46UKIROK.js.map} +0 -0
- /package/bundle/{gossip-CS3G3447.js.map → env-schema-YGHCKX5B.js.map} +0 -0
- /package/bundle/{guardrails-24XK2COI.js.map → gossip-VSEY2HSE.js.map} +0 -0
- /package/bundle/{heartbeat-system-G4IFQXT6.js.map → guardrails-U7M6H2GE.js.map} +0 -0
- /package/bundle/{hook-system-X6INNJGV.js.map → heartbeat-system-MUXLT4E6.js.map} +0 -0
- /package/bundle/{hotskills-6FQYTJIO.js.map → hook-system-Z4XD6IM5.js.map} +0 -0
- /package/bundle/{kanban-board-J6RO3ZU7.js.map → hotskills-AOUWVTQB.js.map} +0 -0
- /package/bundle/{kanban-channel-5EIXBFSA.js.map → kanban-board-4AI5Z6B5.js.map} +0 -0
- /package/bundle/{lazy-require-V6EFUATC.js.map → kanban-channel-JMBYWGWD.js.map} +0 -0
- /package/bundle/{logger-Y3VILPRH.js.map → lazy-require-GURNBC3C.js.map} +0 -0
- /package/bundle/{main-chat-YLZDNQPO.js.map → logger-UQJPZMYV.js.map} +0 -0
- /package/bundle/{logs-YS3GDURO.js.map → logs-2WTDLMB5.js.map} +0 -0
- /package/bundle/{master-user-Z4M7KCJE.js.map → main-chat-EID5Y6H2.js.map} +0 -0
- /package/bundle/{message-pipeline-MHEBDJLH.js.map → master-user-TKA7M2GL.js.map} +0 -0
- /package/bundle/{nerve-VZNMFDGY.js.map → message-pipeline-TAWXNEVS.js.map} +0 -0
- /package/bundle/{notification-VV2OR6NW.js.map → nerve-TC34H4EL.js.map} +0 -0
- /package/bundle/{orc-tools-CHRSXSAS.js.map → notification-JQNVGICN.js.map} +0 -0
- /package/bundle/{orc-KC4USP55.js.map → orc-74Z62W7B.js.map} +0 -0
- /package/bundle/{paths-EDK6KWHG.js.map → orc-tools-GME3DKIN.js.map} +0 -0
- /package/bundle/{paths-RZF6WDMG.js.map → paths-BAUNPLNJ.js.map} +0 -0
- /package/bundle/{peer-auth-SRONOLNG.js.map → paths-MZC2KU2C.js.map} +0 -0
- /package/bundle/{peer-config-FRWLEYQ5.js.map → peer-auth-VRO3JYL5.js.map} +0 -0
- /package/bundle/{peer-jwt-XY3XRIA2.js.map → peer-config-24WILLCJ.js.map} +0 -0
- /package/bundle/{peer-transport-UBBXTDRP.js.map → peer-jwt-ZR6RF3XM.js.map} +0 -0
- /package/bundle/{phase-config-V4XETN5F.js.map → peer-transport-BK5VHI2M.js.map} +0 -0
- /package/bundle/{phase-transport-4NQHZX75.js.map → phase-transport-7QJM7J6V.js.map} +0 -0
- /package/bundle/{reconcile-2EUXJ6W5.js.map → reconcile-7N7OE2GU.js.map} +0 -0
- /package/bundle/{registry-client-VN2MM2HI.js.map → rollback-JOHY6KWW.js.map} +0 -0
- /package/bundle/{rollback-MVZ53XS4.js.map → sha-tracker-BXOLWZJL.js.map} +0 -0
- /package/bundle/{sandbox-runtime-WHACQLLN.js.map → skill-stats-7O777ZSZ.js.map} +0 -0
- /package/bundle/{sha-tracker-2DB4R2TW.js.map → skill-watcher-ZGLTDPG5.js.map} +0 -0
- /package/bundle/{skill-stats-TPD2NROA.js.map → sleep-3LFZH727.js.map} +0 -0
- /package/bundle/{skill-watcher-D7QYYYON.js.map → soul-bundle-RQ2YQMJW.js.map} +0 -0
- /package/bundle/{sleep-GH6DLBJJ.js.map → spin-76K4R6FK.js.map} +0 -0
- /package/bundle/{soul-bundle-GXLMDBCC.js.map → spin-types-MOKTZXGB.js.map} +0 -0
- /package/bundle/{spin-4DBYHS3E.js.map → src-6BTCMOD3.js.map} +0 -0
- /package/bundle/{spin-types-PLJH3SIK.js.map → stt-UE7EOYD7.js.map} +0 -0
- /package/bundle/{src-SUFZ27S5.js.map → subagent-runtime-4X3UHF4H.js.map} +0 -0
- /package/bundle/{stt-KD3AABKG.js.map → task-store-RAFMDQ7N.js.map} +0 -0
- /package/bundle/{telegram-adapter-UJ3RYYV6.js.map → telegram-adapter-PPXKTGOP.js.map} +0 -0
- /package/bundle/{subagent-runtime-LVECAUPV.js.map → tool-registry-NKIPNJZ5.js.map} +0 -0
- /package/bundle/{task-store-2XRDM3AW.js.map → tool-sandbox-DQCP3UTU.js.map} +0 -0
- /package/bundle/{tool-registry-YU6WBXPA.js.map → transport-config-SF6GBV47.js.map} +0 -0
- /package/bundle/{tool-sandbox-RNNPDR5M.js.map → update-QOOGMFSJ.js.map} +0 -0
- /package/bundle/{transport-config-OK3MZPJK.js.map → usage-tracker-TBDM4KE6.js.map} +0 -0
- /package/bundle/{update-ENNPRW7Y.js.map → user-registry-OYJVAHDD.js.map} +0 -0
- /package/bundle/{usage-tracker-HRSGC7QC.js.map → wrapper-W66YICNZ.js.map} +0 -0
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/boot/heartbeat-tier3.ts", "../src/components/self-healer.ts", "../src/boot/heartbeat-model-health.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * heartbeat-tier3.ts \u2014 Register Tier 3 heartbeat tasks.\n *\n * Called from phasePipelineDeps after transport+platforms+cronQueue are ready.\n * These tasks need transport, memory, cronQueue, or platform adapters.\n */\n\nimport { getEnv } from \"../components/env-schema.js\";\nimport { logAndSwallow } from \"../components/log-and-swallow.js\";\nimport { join } from \"node:path\";\nimport { createSelfHealerTask } from \"../components/self-healer.js\";\nimport {\n createIdleCompactTask, createAgeCheckTask, createDbIntegrityTask,\n createKanbanDeliveryTask, createKanbanCleanupTask, createUserSessionExpiryTask, createMetricsTask,\n} from \"../components/heartbeat-tasks.js\";\nimport { checkCron, readPendingReminders, clearPendingReminders } from \"../components/tasks/task-checker.js\";\nimport { loadUsers } from \"../components/user-registry.js\";\nimport { logInfo, logWarn } from \"../components/logger.js\";\nimport { abtarsHome, abtarsRoot } from \"../paths.js\";\nimport { createCronCallback } from \"./phase-pipeline-deps.js\";\nimport { createModelHealthTask } from \"./heartbeat-model-health.js\";\nimport { readEnvWithDefault } from \"../components/env.js\";\nimport type { BootCtx } from \"./context.js\";\n\nconst TAG = \"heartbeat\";\n\nexport async function registerTier3Tasks(ctx: BootCtx): Promise<void> {\n const { heartbeat, transport, cronQueue, memory, memoryConfig, config, pipelineDeps, capabilities } = ctx;\n if (!heartbeat || !transport || !cronQueue || !pipelineDeps) return;\n\n const cronCallback = createCronCallback(ctx);\n\n heartbeat.registerTask({\n name: \"tasks\",\n execute: async () => {\n const dueTasks = checkCron();\n for (const entry of dueTasks) cronQueue.enqueue(entry, cronCallback);\n },\n });\n\n heartbeat.registerTask({\n name: \"reminder-injector\",\n execute: async () => {\n const reminders = readPendingReminders();\n if (reminders.length === 0) return;\n clearPendingReminders();\n for (const r of reminders) {\n logInfo(\"main\", `Injecting reminder for chat ${r.chatId}: \"${r.message}\"`);\n if (ctx.telegramAdapter) {\n ctx.telegramAdapter.injectMessage({\n platform: \"telegram\",\n channelId: String(r.chatId),\n userId: loadUsers().byPlatformId.get(\"telegram:\" + r.chatId)?.userId ?? \"master\",\n senderId: String(r.chatId),\n senderName: \"task\",\n text: `[Scheduled reminder] ${r.message}`,\n timestamp: Date.now(),\n threadId: r.threadId ? String(r.threadId) : undefined,\n isGroup: false,\n isVoice: false,\n });\n }\n }\n },\n });\n\n const SLEEP_HOUR = parseInt(readEnvWithDefault(\"BED_TIME\", \"2\", \"bedtime hour\").split(\":\")[0] ?? \"2\", 10);\n const SLEEP_MINUTE = parseInt(readEnvWithDefault(\"BED_TIME\", \"2\", \"bedtime hour\").split(\":\")[1] ?? \"0\", 10);\n\n if (getEnv().ctxIdleCompactMin > 0) {\n heartbeat.registerTask(createIdleCompactTask({\n transport, memory, memoryDir: memoryConfig.memoryDir,\n allowedUserIds: config.telegram.allowedUserIds,\n isSleepActive: ctx.isSleepActive,\n }));\n }\n\n heartbeat.registerTask(createAgeCheckTask({\n memory,\n bridgeLockPath: ctx.bridgeLockPath,\n sleepAuditDir: ctx.sleepAuditDir,\n sleepHour: SLEEP_HOUR,\n sleepMinute: SLEEP_MINUTE,\n isSleepActive: ctx.isSleepActive,\n // doctorPath removed \u2014 runFixes() called directly from heartbeat-tasks.ts\n startSleep: () => { ctx.sleepHandle?.spawn(); },\n checkHwSleep: () => { ctx.sleepHandle?.checkHwSleep(); },\n checkStaleSleep: () => { ctx.sleepHandle?.checkStale(); },\n cronBusy: () => cronQueue.currentJob !== null || cronQueue.pending > 0,\n }));\n\n heartbeat.registerTask(createDbIntegrityTask(memory));\n\n const masterChatId = [...config.telegram.allowedUserIds][0] ?? 0;\n heartbeat.registerTask(createKanbanDeliveryTask({\n sendSystemMessage: ctx.sendSystemMessage!,\n sendMessage: async (chatId, text) => {\n if (!ctx.telegramAdapter) return;\n await ctx.telegramAdapter.sendMessage(chatId, text);\n },\n sendDocument: async (chatId, filePath, caption) => {\n if (!ctx.telegramAdapter) return;\n await ctx.telegramAdapter.sendDocument(chatId, filePath, caption);\n },\n chatId: () => String(masterChatId),\n }));\n\n // Nerve-driven instant delivery\n import(\"../components/nerve.js\").then(({ nerve }) => {\n nerve.on(\"card:done\", async (cardId: number) => {\n try {\n const { kanbanPending, kanbanSetDelivering, kanbanMarkDelivered } = await import(\"../components/tasks/kanban-board.js\");\n const pending = kanbanPending();\n const card = pending.find((c: { id: number }) => c.id === cardId);\n if (!card) return;\n\n kanbanSetDelivering(card.id);\n const targetChat = card.chat_id || String(masterChatId);\n\n if (card.delivery_mode === \"silent\") {\n kanbanMarkDelivered(card.id);\n return;\n }\n\n if (card.delivery_mode === \"deliver\") {\n if (ctx.telegramAdapter) {\n if (card.result_path) await ctx.telegramAdapter.sendDocument(targetChat, card.result_path, card.title);\n }\n if (ctx.sendSystemMessage) {\n await ctx.sendSystemMessage(`[SYSTEM] Task \"${card.title}\" complete. File delivered: ${card.result_path ?? \"(no file)\"}`);\n }\n kanbanMarkDelivered(card.id);\n return;\n }\n\n // \"announce\" \u2014 inject into agent for natural delivery\n if (ctx.sendSystemMessage) {\n await ctx.sendSystemMessage(\n `[TASK COMPLETE] \"${card.title}\" done.\\nResult:\\n${card.result_summary ?? \"(no output)\"}\\n\\nDeliver this to the user naturally.`\n );\n }\n kanbanMarkDelivered(card.id);\n } catch (err) { logAndSwallow(TAG, \"nerve:card:done delivery\", err); }\n });\n\n nerve.on(\"channel:message\", async (_cardId: number, meta?: Record<string, unknown>) => {\n if (!meta || (meta.to as string)?.toUpperCase() !== \"MASTER\") return;\n if (!ctx.telegramAdapter) return;\n try {\n const from = meta.from as string ?? \"agent\";\n await ctx.telegramAdapter.sendMessage(String(masterChatId), `[${from}->MASTER] card:${_cardId}\\n${String(meta.message ?? \"\").slice(0, 200)}`);\n } catch (err) { logAndSwallow(TAG, \"nerve:channel:message TG notify\", err); }\n });\n }).catch(err => logAndSwallow(TAG, \"nerve import\", err));\n\n heartbeat.registerTask(createKanbanCleanupTask());\n\n import(\"../components/metrics-collector.js\").then(({ initMetrics }) => {\n initMetrics(abtarsHome());\n }).catch(() => {});\n heartbeat.registerTask(createMetricsTask(() => cronQueue.pending));\n\n heartbeat.registerTask(createUserSessionExpiryTask());\n\n // Reconciler\n import(\"../components/reconciler.js\").then(({ startReconciler }) => {\n startReconciler();\n }).catch(err => logAndSwallow(TAG, \"reconciler\", err));\n\n // Spin tick\n import(\"../components/spin.js\").then(({ spin }) => {\n heartbeat.registerTask({ name: \"spin-tick\", execute: () => spin.tick() });\n }).catch(err => logAndSwallow(TAG, \"spin-tick\", err));\n\n // Busy-unstick\n {\n const { spin: spinRef } = require(\"../components/spin.js\") as typeof import(\"../components/spin.js\");\n heartbeat.registerTask({ name: \"busy-unstick\", execute: () => {\n const now = Date.now();\n for (const s of spinRef.listAllSessions()) {\n if (s.busy && s.lastActiveAt && now - s.lastActiveAt > 60_000) {\n if (transport && \"sendInterrupt\" in transport) {\n (transport as { sendInterrupt: (r?: string) => Promise<void> }).sendInterrupt(\"timeout\").catch(() => {});\n }\n s.busy = false;\n logWarn(TAG, `Force-cleared stuck busy on ${s.id} (>60s) \u2014 interrupted`);\n }\n }\n }});\n }\n\n // Gossip\n import(\"../components/peer-transport/gossip.js\").then(({ gossipBroadcast, setGossipInterval }) => {\n setGossipInterval(heartbeat.intervalMs);\n heartbeat.registerTask({ name: \"gossip-health\", execute: async () => { gossipBroadcast(); } });\n }).catch(err => logAndSwallow(TAG, \"gossip\", err));\n\n if (transport.healthCheck) {\n heartbeat.registerTask({ name: \"transport-health\", execute: () => transport.healthCheck!() });\n }\n\n // Self-healer\n let selfHealerTask: ReturnType<typeof createSelfHealerTask> | null = null;\n if (getEnv().selfhealEnabled) {\n selfHealerTask = createSelfHealerTask(() => ctx.telegramAdapter, config.telegram.allowedUserIds);\n heartbeat.registerTask(selfHealerTask);\n }\n ctx.selfHealerTask = selfHealerTask;\n pipelineDeps.selfHealerTask = selfHealerTask;\n\n // Capability tasks + commands\n const { registerCommand } = await import(\"../components/commands/index.js\");\n for (const [name, handler] of capabilities.commands) {\n registerCommand(name, handler);\n }\n for (const task of capabilities.heartbeatTasks) {\n heartbeat.registerTask(task);\n }\n\n // Model health\n const { task: modelHealthTask, runNow: runModelHealth } = createModelHealthTask(ctx);\n heartbeat.registerTask(modelHealthTask);\n queueMicrotask(() => { runModelHealth().catch(err => logAndSwallow(TAG, \"runModelHealth boot\", err)); });\n}\n", "/**\n * Self-healer heartbeat task \u2014 scans bridge log for ERROR lines (#954).\n *\n * Two-state dispatch:\n * 1. Known fault (pattern in sha-policy fixes) \u2192 wired command[], no LLM\n * 2. Unknown fault (no matching rule) \u2192 one-shot agent via Spin (if SELFHEAL_ENABLED)\n *\n * All gating via sha-tracker. No inline state.\n */\n\nimport { readFileSync, appendFileSync, mkdirSync, existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { spawn, execSync } from \"node:child_process\";\nimport { logInfo, logDebug } from \"./logger.js\";\nimport { getLogFile } from \"./logger.js\";\nimport { abtarsHome } from \"../paths.js\";\nimport { logAndSwallow } from \"./log-and-swallow.js\";\nimport { getEnv } from \"./env-schema.js\";\nimport { localISO } from \"../utils/local-time.js\";\nimport { loadFixes, shouldAttempt, recordResult } from \"./sha-tracker.js\";\nimport type { FixRule } from \"./sha-tracker.js\";\nimport type { HeartbeatTask } from \"../types/index.js\";\nimport type { TelegramAdapter } from \"../platforms/telegram/telegram-adapter.js\";\n\n/** Write SHA dispatch to sha-call.log (model reads this for recurrence detection). */\nfunction logShaCall(errorKey: string, errorLine: string): void {\n const logPath = join(abtarsHome(), \"logs\", \"sha-call.log\");\n const entry = JSON.stringify({ ts: localISO(), errorKey, errorLine: errorLine.slice(0, 300) });\n try { appendFileSync(logPath, entry + \"\\n\"); } catch {}\n}\n\n// Known-noise patterns are in sha-policy.json (seeded) \u2014 no hardcoded list.\n\nfunction logAutoFix(message: string): void {\n const dir = join(abtarsHome(), \"logs\");\n try { mkdirSync(dir, { recursive: true }); } catch (err) { logAndSwallow(\"self_healer\", \"op\", err); }\n const date = new Date().toISOString().slice(0, 10);\n appendFileSync(join(dir, `autofix-${date}.log`), `${localISO()} ${message}\\n`);\n}\n\nfunction notify(adapter: TelegramAdapter, chatId: string, msg: string): void {\n try { adapter.sendNotification(chatId, msg); } catch {}\n}\n\nexport function createSelfHealerTask(\n getTelegramAdapter: () => TelegramAdapter | null,\n allowedUserIds: Set<number>,\n): HeartbeatTask & { enabled: boolean } {\n let lastTs = localISO();\n let bridgeStartTs = \"\";\n let enabled = getEnv().selfhealEnabled;\n let agentRunning = false;\n const dryRun = process.env[\"SELFHEAL_DRY_RUN\"] === \"true\";\n\n const task: HeartbeatTask & { enabled: boolean } = {\n name: \"self-healer\",\n get enabled() { return enabled; },\n set enabled(v: boolean) { enabled = v; },\n execute: async () => {\n if (!enabled) return;\n const logFile = getLogFile();\n try {\n const content = readFileSync(logFile, \"utf-8\");\n const lines = content.split(\"\\n\");\n const fixes = loadFixes();\n\n if (!bridgeStartTs) {\n for (let i = lines.length - 1; i >= 0; i--) {\n if (lines[i]!.includes(\"BRIDGE START\")) { bridgeStartTs = lines[i]!.slice(0, 23); break; }\n }\n }\n\n const adapter = getTelegramAdapter();\n const chatId = String([...allowedUserIds][0] ?? \"\");\n if (!adapter || !chatId) return;\n\n for (let i = lines.length - 1; i >= 0; i--) {\n const line = lines[i]!;\n if (line.length < 24 || !line.includes(\" ERROR \")) continue;\n const ts = line.slice(0, 23);\n if (ts <= lastTs) break;\n if (bridgeStartTs && ts < bridgeStartTs) continue;\n if (line.includes(\"TEST \")) continue;\n\n const match = line.match(/\\[([^\\]]+)\\] (.+)/);\n if (!match) continue;\n const stableMsg = match[2]!.slice(0, 80)\n .replace(/\\b[0-9a-f]{8,}\\b/gi, \"X\")\n .replace(/\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}[:\\d.]*/g, \"T\")\n .replace(/\\b\\d{4,}\\b/g, \"N\")\n .replace(/\\s+/g, \" \").trim();\n const errorKey = `${match[1]}:${stableMsg}`;\n\n // Try to match a wired fix rule\n const rule = fixes.find(f => line.includes(f.pattern));\n if (rule) {\n handleKnownFault(rule, errorKey, adapter, chatId, dryRun);\n continue;\n }\n\n // Unknown fault \u2014 agent path (one-shot)\n if (!agentRunning) {\n handleUnknownFault(line, errorKey, adapter, chatId, () => { agentRunning = false; });\n if (!agentRunning) agentRunning = true; // set after dispatch\n }\n }\n\n // Advance watermark\n if (lines.length > 1) {\n const lastLine = lines[lines.length - 2] ?? \"\";\n if (lastLine.length >= 23) lastTs = lastLine.slice(0, 23);\n }\n } catch (err) { logAndSwallow(\"self_healer\", \"op\", err); }\n },\n };\n return task;\n}\n\nfunction handleKnownFault(rule: FixRule, _errorKey: string, adapter: TelegramAdapter, chatId: string, dryRun: boolean): void {\n if (!shouldAttempt(\"autofix-known\", rule.pattern)) return;\n\n // Suppress: known noise, skip silently\n if (rule.action === \"suppress\") {\n logDebug(\"self-healer\", `Suppressed: \"${rule.pattern}\"`);\n return;\n }\n\n if (!rule.command?.length) return;\n\n if (dryRun) {\n logInfo(\"self-healer\", `[DRY-RUN] Would run: ${rule.command.join(\" \")}`);\n return;\n }\n\n logInfo(\"self-healer\", `Wired fix: ${rule.command.join(\" \")} (pattern: \"${rule.pattern}\")`);\n logAutoFix(`WIRED START: ${rule.pattern} \u2192 ${rule.command.join(\" \")}`);\n\n const child = spawn(rule.command[0]!, rule.command.slice(1), { stdio: \"ignore\" });\n child.on(\"exit\", (code) => {\n const ok = code === 0;\n recordResult(\"autofix-known\", rule.pattern, ok, ok ? undefined : `exit ${code}`);\n logAutoFix(`WIRED ${ok ? \"OK\" : \"FAIL\"}: ${rule.pattern} (exit ${code})`);\n\n if (!ok) {\n // Check if we hit maxRetries \u2014 notify user\n if (!shouldAttempt(\"autofix-known\", rule.pattern)) {\n notify(adapter, chatId, `\u26A0\uFE0F Wired fix failed 3x for \"${rule.pattern}\" \u2014 suppressed 24h. Manual intervention needed.`);\n }\n } else if (rule.verified === false) {\n // Unverified self-rule first success \u2014 notify\n notify(adapter, chatId, `\uD83D\uDD27 Self-fix ran: \"${rule.pattern}\" \u2192 ${rule.command.join(\" \")} \u2713\\nRun /healing approve ${rule.pattern.slice(0, 20)} to silence.`);\n }\n });\n}\n\nfunction handleUnknownFault(errorLine: string, errorKey: string, adapter: TelegramAdapter, chatId: string, onDone: () => void): void {\n if (!shouldAttempt(\"autofix-unknown\", errorKey)) return;\n\n // Skip dispatch during darkwake (deploy restart) or night hours\n const hour = new Date().getHours();\n if (hour < 7) { logDebug(\"self-healer\", `Skipping SHA dispatch \u2014 night hours (${hour}:xx)`); return; }\n try {\n const lock = JSON.parse(readFileSync(join(abtarsHome(), \"bridge.lock\"), \"utf-8\"));\n if (lock.bootType === \"darkwake\") { logDebug(\"self-healer\", \"Skipping SHA dispatch \u2014 darkwake boot\"); return; }\n } catch { /* proceed if unreadable */ }\n\n logInfo(\"self-healer\", `Unknown fault \u2014 dispatching agent: ${errorKey.slice(0, 60)}`);\n logAutoFix(`AGENT START: ${errorKey}`);\n logShaCall(errorKey, errorLine);\n\n // Ensure source is available for SHA to investigate\n const srcDir = join(abtarsHome(), \"src/abtars\");\n if (!existsSync(srcDir)) {\n try {\n mkdirSync(join(abtarsHome(), \"src\"), { recursive: true });\n execSync(`git clone -b dev git@github.com:aksika/abtars.git \"${srcDir}\"`, { timeout: 60_000, stdio: \"ignore\" });\n } catch { /* proceed without source */ }\n }\n\n const prompt = `A runtime error occurred:\\n\"${errorLine.slice(0, 500)}\"\\n\\nBefore investigating, check ~/.abtars/logs/sha-call.log for prior entries matching this error pattern.\\nIf you find a PREVIOUS entry with a similar error pattern:\\n - This is a recurring fault you could not eliminate last time.\\n - Add a suppress rule to ~/.abtars/config/sha-policy-self.json (read existing file, append to fixes array):\\n {\"pattern\": \"<plain substring from the error line>\", \"action\": \"suppress\"}\\n Pattern is matched via substring (includes), NOT regex. Use a distinctive fragment.\\n - Report: \"Recurring unfixable fault \u2014 suppressed.\"\\n - Do NOT attempt a fix.\\n\\nOtherwise, diagnose and fix it. After fixing:\\n1. Report what you did (1 paragraph)\\n2. If this error is likely to recur and you found a deterministic fix, write a wired rule to ~/.abtars/config/sha-policy-self.json:\\n {\"pattern\": \"<substring>\", \"action\": \"run\", \"command\": [...], \"cooldownMin\": 30}\\n Pattern is matched via substring (includes), NOT regex.\\n If the error was a one-off or no reliable automated fix exists, skip this step.\\n\\nIf you cannot find the root cause in the source code, tell the user:\\n\"This may be fixed in a newer version. Try /update to get the latest.\"\nDo NOT attempt to fix code you don't understand.`;\n\n const timeout = setTimeout(() => { onDone(); }, 5 * 60_000);\n\n (async () => {\n try {\n const { spin } = await import(\"./spin.js\");\n const { result } = await spin.dispatchAwait({ type: \"H\", goal: prompt, title: `SHA: ${errorKey.slice(0, 20)}`, source: \"agent\" });\n recordResult(\"autofix-unknown\", errorKey, true);\n logAutoFix(`AGENT OK: ${errorKey} \u2192 ${result.slice(0, 200)}`);\n notify(adapter, chatId, `\uD83E\uDDE0 SHA agent fixed: ${errorKey.slice(0, 40)}\\n${result.slice(0, 300)}`);\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n recordResult(\"autofix-unknown\", errorKey, false, msg);\n logAutoFix(`AGENT FAIL: ${errorKey} \u2192 ${msg}`);\n notify(adapter, chatId, `\u26A0\uFE0F SHA agent failed: ${errorKey.slice(0, 40)}\\n${msg.slice(0, 200)}`);\n } finally {\n clearTimeout(timeout);\n onDone();\n }\n })();\n}\n", "/**\n * heartbeat-model-health.ts \u2014 Model health check task.\n * Probes each configured model on first tick. Reports failures to Telegram.\n */\n\nimport { getEnv } from \"../components/env-schema.js\";\nimport { logInfo, logWarn } from \"../components/logger.js\";\nimport type { BootCtx } from \"./context.js\";\nimport type { HeartbeatTask } from \"../types/index.js\";\n\nexport function createModelHealthTask(ctx: BootCtx): { task: HeartbeatTask; runNow: () => Promise<void> } {\n let done = false;\n\n const execute = async (): Promise<void> => {\n if (done) return;\n done = true;\n const { loadTransport, resolveAgent, consumeRepairs } = await import(\"../components/transport-config.js\");\n const tc = loadTransport();\n if (!tc) return;\n\n const repairs = consumeRepairs();\n const warnings: string[] = [];\n if (repairs.length > 0) {\n for (const r of repairs) warnings.push(`\uD83D\uDD27 ${r.agent} auto-repaired: was ${r.oldProvider} \u2014 ${r.reason}`);\n }\n\n const prof = resolveAgent(\"professor\", tc);\n if (!prof) return;\n const profType = prof.provider.transport ?? \"api\";\n\n if (profType === \"api\") {\n const agents = [\"professor\", \"dreamy\", \"browsie\", \"coding\"] as const;\n const modelToAgents = new Map<string, string[]>();\n const modelToResolved = new Map<string, { endpoint: string; apiKey: string }>();\n for (const a of agents) {\n const r = resolveAgent(a, tc);\n if (!r) continue;\n if (!modelToAgents.has(r.model)) {\n modelToAgents.set(r.model, []);\n modelToResolved.set(r.model, { endpoint: r.provider.endpoint ?? \"http://localhost:11434/v1\", apiKey: getEnv().getApiKey(r.provider.apiKeyEnv ?? \"API_KEY\") ?? \"\" });\n }\n modelToAgents.get(r.model)!.push(a);\n }\n for (const [model, agentNames] of modelToAgents) {\n const { endpoint, apiKey } = modelToResolved.get(model)!;\n try {\n const res = await fetch(`${endpoint}/chat/completions`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\", ...(apiKey ? { Authorization: `Bearer ${apiKey}` } : {}) },\n body: JSON.stringify({ model, messages: [{ role: \"user\", content: \"hi\" }], max_tokens: 1 }),\n signal: AbortSignal.timeout(30_000),\n });\n if (!res.ok) {\n warnings.push(`\u26A0\uFE0F ${model} \u2014 ${res.status} ${res.statusText} (affects ${agentNames.join(\", \")})`);\n logWarn(\"model-health\", `${model} failed: ${res.status} (${agentNames.join(\", \")})`);\n } else {\n logInfo(\"model-health\", `\u2713 ${agentNames[0]}=${model}`);\n }\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n warnings.push(`\u26A0\uFE0F ${model} \u2014 ${msg} (affects ${agentNames.join(\", \")})`);\n logWarn(\"model-health\", `${model} unreachable: ${msg} (${agentNames.join(\", \")})`);\n }\n }\n } else if (profType === \"acp\" || profType === \"tmux\") {\n const transport = ctx.transport;\n if (transport && \"isConnected\" in transport && typeof (transport as { isConnected?: () => boolean }).isConnected === \"function\") {\n const connected = (transport as { isConnected: () => boolean }).isConnected();\n if (connected) {\n logInfo(\"model-health\", `\u2713 ${profType} transport connected`);\n } else {\n warnings.push(`\u26A0\uFE0F ${profType} transport not connected`);\n logWarn(\"model-health\", `${profType} transport not connected`);\n }\n } else {\n logInfo(\"model-health\", `\u2713 ${profType} transport (no isConnected check available)`);\n }\n }\n\n if (warnings.length > 0) {\n const { sendNotification } = await import(\"../components/notification.js\");\n sendNotification(ctx, `\uD83C\uDFE5 Model health check:\\n${warnings.join(\"\\n\")}\\nSubagents will fall back to main model.`);\n }\n };\n\n return { task: { name: \"model-health\", execute }, runNow: execute };\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/cli/commands/install.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * `abtars install [--force]` \u2014 scaffolding utilities.\n *\n * Exports writeWrapper (used by deploy.ts) and install() for legacy paths.\n * The primary install flow is in onboard.ts (called by CLI dispatcher).\n */\n\nimport { mkdir, readFile, stat, symlink, writeFile } from 'node:fs/promises';\nimport { existsSync, readFileSync, readdirSync, copyFileSync, mkdirSync, realpathSync } from 'node:fs';\nimport { hostname, homedir as _homedir } from 'node:os';\nimport { execSync } from 'node:child_process';\nimport { basename, dirname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { emptyManifest, packagePaths, readManifest, resolveUserBinDir, writeManifest } from '../deploy-lib-import.js';\n\n/** Resolve real user home even under sudo. */\nfunction homedir(): string {\n const sudoUser = process.env['SUDO_USER'];\n if (sudoUser) {\n try { return execSync(`getent passwd ${sudoUser}`, { encoding: 'utf-8' }).split(':')[5]!.trim(); }\n catch { /* fall through */ }\n }\n return _homedir();\n}\n\nexport interface InstallOptions {\n readonly restore?: string;\n readonly force: boolean;\n readonly dryRun: boolean;\n readonly mode?: \"simple\" | \"daemon\";\n}\n\n// CLI wrappers are read from install-manifest.json at runtime.\n// Each is a thin wrapper that invokes `node current/dist/cli/<name>.js \"$@\"`.\n// Regenerated on every install / flat-to-releases migration.\n\nasync function exists(p: string): Promise<boolean> {\n try {\n await stat(p);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * True if `p` exists as any filesystem entry \u2014 regular file, directory,\n * symlink (including dangling). Use this for collision checks in\n * reconcilePathLink, where a dangling symlink still occupies the inode\n * and would cause EEXIST on symlink(). `exists()` above uses stat() which\n * follows symlinks and returns false on dangling ones; that's wrong for\n * collision detection.\n */\nasync function existsAny(p: string): Promise<boolean> {\n try {\n const { lstat } = await import('node:fs/promises');\n await lstat(p);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function isSymlink(p: string): Promise<boolean> {\n try {\n const { lstat } = await import('node:fs/promises');\n const s = await lstat(p);\n return s.isSymbolicLink();\n } catch {\n return false;\n }\n}\n\nasync function createSkeleton(home: string, dryRun: boolean): Promise<void> {\n const { loadManifest } = await import('../install-manifest.js');\n const manifest = loadManifest();\n const dirs = manifest.directories.map(d => join(home, d.path));\n if (dryRun) {\n process.stdout.write(`[dry-run] mkdir -p:\\n ${dirs.join('\\n ')}\\n`);\n return;\n }\n for (const d of manifest.directories) {\n await mkdir(join(home, d.path), { recursive: true, mode: d.mode ? parseInt(d.mode, 8) : undefined });\n }\n}\n\nasync function seedConfig(repoRoot: string, _configDir: string, dryRun: boolean, home: string): Promise<readonly string[]> {\n const { loadManifest } = await import('../install-manifest.js');\n const manifest = loadManifest(repoRoot);\n const seeded: string[] = [];\n for (const seed of manifest.configSeeds) {\n const src = join(repoRoot, seed.source);\n const dst = join(home, seed.dest);\n if (!(await exists(src))) continue;\n if (await exists(dst)) continue;\n if (dryRun) {\n seeded.push(`[dry-run] cp ${src} ${dst}`);\n continue;\n }\n const content = await readFile(src, 'utf-8');\n await mkdir(dirname(dst), { recursive: true });\n await writeFile(dst, content, { mode: seed.mode ? parseInt(seed.mode, 8) : 0o644 });\n seeded.push(basename(dst));\n }\n return seeded;\n}\n\n/**\n * Reconcile a single PATH symlink at ~/.local/bin/<name>.\n * Policy (plan \u00A7\"PATH symlink collision\"):\n * - Missing \u2192 create\n * - Symlink pointing into our own ~/.abtars/bin/ \u2192 overwrite\n * - Anything else \u2192 refuse with message, unless force\n */\nasync function reconcilePathLink(\n binDir: string,\n userBinDir: string,\n name: string,\n force: boolean,\n dryRun: boolean,\n): Promise<{ action: string; message?: string }> {\n const linkPath = join(userBinDir, name);\n const targetPath = join(binDir, name);\n const linkExists = await existsAny(linkPath);\n if (!linkExists) {\n if (dryRun) return { action: `[dry-run] ln -s ${targetPath} ${linkPath}` };\n await symlink(targetPath, linkPath);\n return { action: `created ${linkPath}` };\n }\n if (await isSymlink(linkPath)) {\n const { readlink, unlink } = await import('node:fs/promises');\n const current = await readlink(linkPath);\n // \"We own it\" means: points at THIS install's bin dir, not a fuzzy match\n // on any path containing /.abtars/bin/. A smoke-test install at\n // ABTARS_HOME=~/.cache/ab-smoke-.../ must not clobber the real\n // ~/.abtars symlinks. Compare absolute paths directly.\n const ownsIt = current === targetPath;\n if (ownsIt) {\n if (dryRun) return { action: `[dry-run] overwrite ${linkPath} (we own it)` };\n await unlink(linkPath);\n await symlink(targetPath, linkPath);\n return { action: `updated ${linkPath}` };\n }\n if (force) {\n if (dryRun) return { action: `[dry-run] --force overwrite ${linkPath} (currently -> ${current})` };\n await unlink(linkPath);\n await symlink(targetPath, linkPath);\n return { action: `forced overwrite ${linkPath} (was -> ${current})` };\n }\n return {\n action: 'refused',\n message: `${linkPath} is a symlink to ${current} (not ours). Pass --force to overwrite.`,\n };\n }\n if (force) {\n if (dryRun) return { action: `[dry-run] --force overwrite ${linkPath} (regular file)` };\n const { unlink } = await import('node:fs/promises');\n await unlink(linkPath);\n await symlink(targetPath, linkPath);\n return { action: `forced overwrite ${linkPath} (was regular file)` };\n }\n return {\n action: 'refused',\n message: `${linkPath} exists as a regular file (not our symlink). Pass --force to overwrite.`,\n };\n}\n\nexport async function writeWrapper(binDir: string, name: string, currentLink: string, dryRun: boolean): Promise<void> {\n const bundleFile = name === 'abtars' ? 'abtars-cli.js' : `${name}.js`;\n // #912: ensure node is in PATH on macOS (homebrew) and Linux (.local/bin)\n const pathPreamble = `export PATH=\"/opt/homebrew/bin:$HOME/.local/bin:$PATH\"\\nexport NODE_PATH=\"$HOME/.local/lib/node_modules:\\${NODE_PATH:-}\"\\n`;\n let content: string;\n\n if (name === 'abmind') {\n content = `#!/usr/bin/env bash\n${pathPreamble}# Resolve abmind CLI \u2014 no ~/.abmind/current dependency (#863)\nBUNDLE_CLI=\"$HOME/.abtars/app/node_modules/abmind/dist/cli/abmind.js\"\nSRC_CLI=\"$HOME/.abtars-releases/src/abmind/dist/cli/abmind.js\"\nGLOBAL_CLI=\"$(npm root -g 2>/dev/null)/abmind/dist/cli/abmind.js\"\nif [ -f \"$BUNDLE_CLI\" ]; then\n exec node \"$BUNDLE_CLI\" \"$@\"\nelif [ -f \"$SRC_CLI\" ]; then\n exec node \"$SRC_CLI\" \"$@\"\nelif [ -f \"$GLOBAL_CLI\" ]; then\n exec node \"$GLOBAL_CLI\" \"$@\"\nelse\n echo \"abmind: not found. Install via npm or deploy via abtars update.\" >&2\n exit 1\nfi\n`;\n } else {\n const target = join(currentLink, 'bundle', bundleFile);\n const distFile = name === 'abtars' ? 'abtars.js' : `${name}.js`;\n const fallback = join(currentLink, 'dist', 'cli', distFile);\n content = `#!/usr/bin/env bash\n${pathPreamble}if [ -f \"${target}\" ]; then\n exec node \"${target}\" \"$@\"\nelif [ -f \"${fallback}\" ]; then\n exec node \"${fallback}\" \"$@\"\nelse\n GLOBAL_BIN=\"$(npm root -g 2>/dev/null)/abtars/bundle/${bundleFile}\"\n if [ -f \"$GLOBAL_BIN\" ]; then\n exec node \"$GLOBAL_BIN\" \"$@\"\n fi\n echo \"abtars: no release staged. Run 'abtars install' first.\" >&2\n exit 1\nfi\n`;\n }\n const path = join(binDir, name);\n if (dryRun) {\n process.stdout.write(`[dry-run] write wrapper ${path}\\n`);\n return;\n }\n try { const { unlinkSync } = await import(\"node:fs\"); unlinkSync(path); } catch { /* doesn't exist */ }\n await writeFile(path, content, { mode: 0o755 });\n}\n\nfunction isPathOnPATH(userBinDir: string): boolean {\n const PATH = process.env['PATH'] ?? '';\n return PATH.split(':').some((p) => p === userBinDir);\n}\n\nexport async function install(opts: InstallOptions): Promise<number> {\n const paths = packagePaths('abtars');\n const home = paths.home;\n const userBinDir = resolveUserBinDir();\n const repoRoot = join(dirname(realpathSync(process.argv[1] ?? fileURLToPath(import.meta.url))), \"..\");\n\n // Install log (#718)\n const { initInstallLog, logInstall, logInstallHeader } = await import(\"../install-log.js\");\n initInstallLog(home);\n logInstallHeader(\"install\");\n const _origWrite = process.stdout.write.bind(process.stdout);\n process.stdout.write = ((chunk: any, ...args: any[]) => {\n if (typeof chunk === \"string\" && (chunk.startsWith(\"\u2713\") || chunk.startsWith(\"\u26A0\"))) logInstall(chunk.trimEnd());\n return _origWrite(chunk, ...args);\n }) as typeof process.stdout.write;\n\n const homeExists = await exists(home);\n const manifest = homeExists ? await readManifest(paths.manifest) : null;\n\n // #1101: Detect and remove stale shims from previous installs\n try {\n const { execSync } = await import(\"node:child_process\");\n const shimPath = execSync(\"which abtars 2>/dev/null\", { encoding: \"utf-8\" }).trim();\n const pnpmHome = process.env.PNPM_HOME ?? \"\";\n if (shimPath && pnpmHome && !shimPath.startsWith(pnpmHome) && !shimPath.includes(\".abtars\")) {\n const { unlinkSync } = await import(\"node:fs\");\n try { unlinkSync(shimPath); process.stdout.write(`\u2713 removed stale shim ${shimPath}\\n`); }\n catch { process.stderr.write(`\u26A0\uFE0F Stale shim at ${shimPath} \u2014 remove manually: rm ${shimPath}\\n`); }\n }\n } catch { /* which failed \u2014 no shim */ }\n\n if (homeExists && manifest && !opts.force && !opts.restore) {\n process.stderr.write(\n `~/.abtars already installed at version ${manifest.version || '(unset)'}.\\nUse 'abtars update' to upgrade, or --force to re-seed missing config.\\n`,\n );\n return 2;\n }\n\n // Kill stale daemon/watchdog from previous install (#771)\n try {\n const { execSync } = await import(\"node:child_process\");\n execSync(\"systemctl is-active abtars 2>/dev/null\", { stdio: \"ignore\" });\n execSync(\"sudo -n systemctl stop abtars 2>/dev/null\", { stdio: \"ignore\" });\n execSync(\"sudo -n systemctl disable abtars 2>/dev/null\", { stdio: \"ignore\" });\n } catch { /* not running or no sudo \u2014 fine */ }\n try {\n const { execSync } = await import(\"node:child_process\");\n execSync(\"pkill -f 'abtars-watchdog.sh' 2>/dev/null\", { stdio: \"ignore\" });\n } catch { /* no watchdog \u2014 fine */ }\n\n // Create skeleton (idempotent)\n await createSkeleton(home, opts.dryRun);\n process.stdout.write(`\u2713 skeleton at ${home}\\n`);\n\n // Core templates: abmind seeds its own on first boot (#427 ensureInitialized).\n // No longer seeded by abtars install.\n\n // Kiro agent config created on-demand by ACP transport (ensureAgentConfig)\n\n // Generate Ed25519 identity keypair (skip if already exists)\n const identityKey = join(paths.config, 'identity.key');\n const identityPub = join(paths.config, 'identity.pub');\n if (!opts.dryRun && !(await exists(identityKey))) {\n const { generateKeyPairSync } = await import('node:crypto');\n const { privateKey, publicKey } = generateKeyPairSync('ed25519');\n await writeFile(identityKey, privateKey.export({ format: 'der', type: 'pkcs8' }).toString('base64'));\n await writeFile(identityPub, publicKey.export({ format: 'der', type: 'spki' }).toString('base64'));\n const { chmodSync } = await import('node:fs');\n chmodSync(identityKey, 0o600);\n process.stdout.write(`\u2713 identity keypair generated\\n`);\n }\n\n // Generate self-signed Ed25519 TLS certificate (skip if already exists)\n const identityCrt = join(paths.config, 'identity.crt');\n const identityTlsKey = join(paths.config, 'identity.tls.key');\n if (!opts.dryRun && !(await exists(identityCrt))) {\n const { execSync } = await import('node:child_process');\n const { chmodSync } = await import('node:fs');\n const agentName = hostname();\n try {\n execSync(`openssl req -x509 -newkey ed25519 -keyout identity.tls.key -out identity.crt -days 3650 -nodes -subj \"/CN=${agentName}\"`, { cwd: paths.config, stdio: 'ignore' });\n chmodSync(identityTlsKey, 0o600);\n process.stdout.write(`\u2713 TLS certificate generated (Ed25519, 10yr)\\n`);\n } catch (err) {\n process.stderr.write(`\u26A0 TLS cert generation failed (openssl not found?). Agent-api will start without TLS.\\n`);\n }\n }\n\n // Seed config from examples (only missing ones)\n const seeded = await seedConfig(repoRoot, paths.config, opts.dryRun, home);\n if (seeded.length > 0) {\n process.stdout.write(`\u2713 seeded config: ${seeded.join(', ')}\\n`);\n }\n\n // Write wrappers (always overwrite \u2014 they're regenerable thin shims)\n const { loadManifest: loadInstallManifest } = await import('../install-manifest.js');\n const installManifest = loadInstallManifest(repoRoot);\n if (!opts.dryRun) {\n await mkdir(paths.bin, { recursive: true });\n }\n for (const name of installManifest.cliWrappers) {\n await writeWrapper(paths.bin, name, paths.current, opts.dryRun);\n }\n process.stdout.write(`\u2713 wrappers in ${paths.bin}\\n`);\n\n // Warn if ~/.local/bin not on PATH\n if (!isPathOnPATH(paths.bin)) {\n process.stderr.write(\n `\\nWarning: ${paths.bin} is not on $PATH. Add to your shell config:\\n export PATH=\"${paths.bin}:$PATH\"\\n`,\n );\n }\n\n // Initialize manifest if brand-new install AND migration didn't write one.\n // (Migration 003 writes a manifest mid-flow with version + migration record;\n // we must not clobber it here.)\n const manifestAfter = await readManifest(paths.manifest);\n if (manifestAfter === null && !opts.dryRun) {\n await writeManifest(paths.manifest, {\n ...emptyManifest('abtars', hostname()),\n version: '',\n });\n process.stdout.write(`\u2713 manifest initialized at ${paths.manifest}\\n`);\n }\n\n // Write install mode to manifest. Priority:\n // 1. --mode flag (explicit) \u2014 always wins\n // 2. existing manifest installMode \u2014 preserved (don't clobber on --force)\n // 3. default: supervised\n const manifestForMode = await readManifest(paths.manifest);\n const existingMode = manifestForMode?.installMode;\n const mode = opts.mode ?? existingMode ?? \"daemon\";\n if (manifestForMode) {\n await writeManifest(paths.manifest, { ...manifestForMode, installMode: mode });\n }\n process.stdout.write(`\u2713 install mode: ${mode}\\n`);\n\n // Release staging is handled by `abtars update` (auto-detects npm vs git source)\n\n // Restore from backup zip\n if (opts.restore) {\n const { spawnSync } = await import('node:child_process');\n const { existsSync: fileExists } = await import('node:fs');\n const zipPath = opts.restore;\n if (!fileExists(zipPath)) {\n process.stderr.write(`error: backup file not found: ${zipPath}\\n`);\n return 1;\n }\n // Extract to temp dir\n const tmpDir = join(process.env['TMPDIR'] ?? '/tmp', `abtars-restore-${Date.now()}`);\n const is7z = zipPath.endsWith('.7z');\n const extractCmd = is7z\n ? spawnSync('7z', ['x', zipPath, `-o${tmpDir}`, '-y'], { encoding: 'utf-8' })\n : spawnSync('unzip', ['-o', zipPath, '-d', tmpDir], { encoding: 'utf-8' });\n if (extractCmd.status !== 0) {\n process.stderr.write(`error: extract failed: ${extractCmd.stderr}\\n`);\n return 1;\n }\n // Copy abtars files \u2014 overwrite everything EXCEPT binaries (releases/, current, bin/)\n const abSrc = join(tmpDir, 'abtars');\n if (fileExists(abSrc)) {\n const skipSet = new Set(['releases', 'current', 'bin']);\n for (const f of readdirSync(abSrc)) {\n if (skipSet.has(f)) continue;\n spawnSync('cp', ['-r', join(abSrc, f), home], { stdio: 'inherit' });\n }\n process.stdout.write(`\u2713 restored abtars data\\n`);\n }\n // Copy abmind files\n const { resolveAbmindHome } = await import(\"../deploy-lib/paths.js\");\n const abmindHome = resolveAbmindHome();\n const abmindSrc = join(tmpDir, 'abmind');\n if (fileExists(abmindSrc)) {\n spawnSync('cp', ['-r', ...readdirSync(abmindSrc).map(f => join(abmindSrc, f)), abmindHome], { stdio: 'inherit' });\n process.stdout.write(`\u2713 restored abmind data\\n`);\n }\n // Cleanup + resync\n spawnSync('rm', ['-rf', tmpDir]);\n process.stdout.write(`\\n\u2713 Restore complete. Run 'abtars update' to resync.\\n`);\n return 0;\n }\n\n // --- supervised: load user-scope watchdog (LaunchAgent / systemd user) ---\n if (mode === 'daemon') {\n const { execSync } = await import('node:child_process');\n if (process.platform === 'darwin') {\n const plistSrc = join(home, 'scripts', 'com.abtars.watchdog.plist');\n const plistDst = join(homedir(), 'Library', 'LaunchAgents', 'com.abtars.watchdog.plist');\n if (existsSync(plistSrc)) {\n const content = readFileSync(plistSrc, 'utf-8').replaceAll('{{HOME}}', homedir());\n const { writeFileSync } = await import('node:fs');\n writeFileSync(plistDst, content);\n const uid = `gui/${process.getuid!()}`;\n try { execSync(`launchctl bootstrap ${uid} \"${plistDst}\"`, { stdio: 'ignore', timeout: 5000 }); } catch { /* already loaded */ }\n process.stdout.write(`\u2713 watchdog LaunchAgent loaded\\n`);\n }\n } else if (process.platform === 'linux') {\n const releaseSrc = join(homedir(), '.abtars-releases', 'src', 'abtars', 'scripts', 'abtars-watchdog.service');\n const unitSrc = existsSync(releaseSrc) ? releaseSrc : join(home, 'scripts', 'abtars-watchdog.service');\n const unitDir = join(homedir(), '.config', 'systemd', 'user');\n if (existsSync(unitSrc)) {\n mkdirSync(unitDir, { recursive: true });\n copyFileSync(unitSrc, join(unitDir, 'abtars-watchdog.service'));\n try { execSync('systemctl --user daemon-reload && systemctl --user enable --now abtars-watchdog', { stdio: 'ignore' }); } catch { /* may fail in chroot */ }\n process.stdout.write(`\u2713 watchdog systemd user service enabled\\n`);\n }\n }\n }\n\n process.stdout.write(`\\nInstall complete.\\n`);\n if (!manifestAfter || manifestAfter.version === '') {\n process.stdout.write(`Next: 'abtars update' to build and activate the first release.\\n`);\n } else {\n process.stdout.write(`\\n\u2500\u2500 Next steps \u2500\u2500\\n`);\n process.stdout.write(` 1. (Optional) Install Ollama for memory embeddings: curl -fsSL https://ollama.com/install.sh | sh\\n`);\n process.stdout.write(` 2. Start the bridge: 'abtars restart' or use the watchdog\\n\\n`);\n }\n\n const { printHealthSummary } = await import('./health-check.js');\n printHealthSummary(paths.home);\n\n // #334: Post-install healthcheck \u2014 validate operator channel exists (only on --restore)\n if (!opts.dryRun && opts.restore) {\n const { validateMinimumViability, formatValidationError } = await import('./install-validate.js');\n const validation = validateMinimumViability(paths.config);\n if (!validation.ok) {\n const invocation = `abtars install --restore ${opts.restore}`;\n process.stderr.write(\"\\n\" + formatValidationError(validation, invocation) + \"\\n\");\n return 1;\n }\n }\n\n return 0;\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["execSync"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/cli/deploy-lib/migrate-layout.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * migrate-layout.ts \u2014 One-time migration from #1085 layout to #1089 releases dir.\n * Detects old layout (app/ is a real dir, not a symlink) and moves to releases.\n */\n\nimport { existsSync, lstatSync, mkdirSync, renameSync, symlinkSync, writeFileSync, readFileSync, rmSync } from \"node:fs\";\nimport { join, resolve } from \"node:path\";\nimport { homedir } from \"node:os\";\n\nexport function migrateIfNeeded(home: string): boolean {\n const appDir = join(home, \"app\");\n const releasesDir = resolve(homedir(), \".abtars-releases\");\n\n // Already migrated: app/ is a symlink OR releases/current exists\n if (!existsSync(appDir)) return false;\n try {\n if (lstatSync(appDir).isSymbolicLink()) return false;\n } catch { return false; }\n\n // Old layout detected \u2014 migrate\n process.stdout.write(\"[migrate] Converting from #1085 layout to #1089 releases dir...\\n\");\n mkdirSync(releasesDir, { recursive: true });\n\n // Determine version from manifest\n let version = \"migrated\";\n try {\n const manifest = JSON.parse(readFileSync(join(home, \"manifest.json\"), \"utf-8\"));\n version = manifest.commit ?? manifest.version ?? \"migrated\";\n } catch {}\n\n const targetDir = join(releasesDir, version);\n\n // Move app/ to releases/<version>/\n if (!existsSync(targetDir)) {\n renameSync(appDir, targetDir);\n } else {\n rmSync(appDir, { recursive: true, force: true });\n }\n process.stdout.write(` \u2713 app/ \u2192 releases/${version}\\n`);\n\n // Move app.prev/ if exists\n const prevDir = join(home, \"app.prev\");\n if (existsSync(prevDir) && !lstatSync(prevDir).isSymbolicLink()) {\n let prevVersion = \"prev\";\n try {\n const pkg = JSON.parse(readFileSync(join(prevDir, \"package.json\"), \"utf-8\"));\n prevVersion = pkg.version ?? \"prev\";\n } catch {}\n const prevTarget = join(releasesDir, prevVersion);\n if (!existsSync(prevTarget)) renameSync(prevDir, prevTarget);\n else rmSync(prevDir, { recursive: true, force: true });\n process.stdout.write(` \u2713 app.prev/ \u2192 releases/${prevVersion}\\n`);\n }\n\n // Move src/ if exists\n const srcDir = join(home, \"src\");\n const releasesSrc = join(releasesDir, \"src\");\n if (existsSync(srcDir)) {\n if (!existsSync(releasesSrc)) {\n renameSync(srcDir, releasesSrc);\n process.stdout.write(\" \u2713 src/ \u2192 releases/src/\\n\");\n } else {\n rmSync(srcDir, { recursive: true, force: true });\n process.stdout.write(\" \u2713 src/ removed (already in releases/src/)\\n\");\n }\n }\n\n // Create symlinks\n const currentLink = join(releasesDir, \"current\");\n try { symlinkSync(targetDir, currentLink); } catch {}\n try { symlinkSync(targetDir, appDir); } catch {}\n\n // Write history.json\n const history = [version];\n if (existsSync(join(releasesDir, \"prev\"))) history.push(\"prev\");\n writeFileSync(join(releasesDir, \"history.json\"), JSON.stringify(history) + \"\\n\");\n\n // Remove old dirs that are now dead\n for (const old of [\"app.prev.1\", \"app.prev.2\", \"app.prev.3\", \"app.staging\", \"core\"]) {\n rmSync(join(home, old), { recursive: true, force: true });\n }\n\n process.stdout.write(\"[migrate] Done. Layout upgraded to #1089.\\n\");\n return true;\n}\n"],
|
|
5
|
-
"mappings": ";;;;;AAKA,SAAS,YAAY,WAAW,WAAW,YAAY,aAAa,eAAe,cAAc,cAAc;AAC/G,SAAS,MAAM,eAAe;AAC9B,SAAS,eAAe;AAEjB,SAAS,gBAAgB,MAAuB;AACrD,QAAM,SAAS,KAAK,MAAM,KAAK;AAC/B,QAAM,cAAc,QAAQ,QAAQ,GAAG,kBAAkB;AAGzD,MAAI,CAAC,WAAW,MAAM,EAAG,QAAO;AAChC,MAAI;AACF,QAAI,UAAU,MAAM,EAAE,eAAe,EAAG,QAAO;AAAA,EACjD,QAAQ;AAAE,WAAO;AAAA,EAAO;AAGxB,UAAQ,OAAO,MAAM,mEAAmE;AACxF,YAAU,aAAa,EAAE,WAAW,KAAK,CAAC;AAG1C,MAAI,UAAU;AACd,MAAI;AACF,UAAM,WAAW,KAAK,MAAM,aAAa,KAAK,MAAM,eAAe,GAAG,OAAO,CAAC;AAC9E,cAAU,SAAS,UAAU,SAAS,WAAW;AAAA,EACnD,QAAQ;AAAA,EAAC;AAET,QAAM,YAAY,KAAK,aAAa,OAAO;AAG3C,MAAI,CAAC,WAAW,SAAS,GAAG;AAC1B,eAAW,QAAQ,SAAS;AAAA,EAC9B,OAAO;AACL,WAAO,QAAQ,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA,EACjD;AACA,UAAQ,OAAO,MAAM,iCAAuB,OAAO;AAAA,CAAI;AAGvD,QAAM,UAAU,KAAK,MAAM,UAAU;AACrC,MAAI,WAAW,OAAO,KAAK,CAAC,UAAU,OAAO,EAAE,eAAe,GAAG;AAC/D,QAAI,cAAc;AAClB,QAAI;AACF,YAAM,MAAM,KAAK,MAAM,aAAa,KAAK,SAAS,cAAc,GAAG,OAAO,CAAC;AAC3E,oBAAc,IAAI,WAAW;AAAA,IAC/B,QAAQ;AAAA,IAAC;AACT,UAAM,aAAa,KAAK,aAAa,WAAW;AAChD,QAAI,CAAC,WAAW,UAAU,EAAG,YAAW,SAAS,UAAU;AAAA,QACtD,QAAO,SAAS,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AACrD,YAAQ,OAAO,MAAM,sCAA4B,WAAW;AAAA,CAAI;AAAA,EAClE;AAGA,QAAM,SAAS,KAAK,MAAM,KAAK;AAC/B,QAAM,cAAc,KAAK,aAAa,KAAK;AAC3C,MAAI,WAAW,MAAM,GAAG;AACtB,QAAI,CAAC,WAAW,WAAW,GAAG;AAC5B,iBAAW,QAAQ,WAAW;AAC9B,cAAQ,OAAO,MAAM,sCAA4B;AAAA,IACnD,OAAO;AACL,aAAO,QAAQ,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAC/C,cAAQ,OAAO,MAAM,oDAA+C;AAAA,IACtE;AAAA,EACF;AAGA,QAAM,cAAc,KAAK,aAAa,SAAS;AAC/C,MAAI;AAAE,gBAAY,WAAW,WAAW;AAAA,EAAG,QAAQ;AAAA,EAAC;AACpD,MAAI;AAAE,gBAAY,WAAW,MAAM;AAAA,EAAG,QAAQ;AAAA,EAAC;AAG/C,QAAM,UAAU,CAAC,OAAO;AACxB,MAAI,WAAW,KAAK,aAAa,MAAM,CAAC,EAAG,SAAQ,KAAK,MAAM;AAC9D,gBAAc,KAAK,aAAa,cAAc,GAAG,KAAK,UAAU,OAAO,IAAI,IAAI;AAG/E,aAAW,OAAO,CAAC,cAAc,cAAc,cAAc,eAAe,MAAM,GAAG;AACnF,WAAO,KAAK,MAAM,GAAG,GAAG,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA,EAC1D;AAEA,UAAQ,OAAO,MAAM,6CAA6C;AAClE,SAAO;AACT;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,18 +0,0 @@
|
|
|
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
|
-
phaseConfig
|
|
5
|
-
} from "./chunk-CAOIIVFP.js";
|
|
6
|
-
import "./chunk-HAZHNBBY.js";
|
|
7
|
-
import "./chunk-MV5KOWOR.js";
|
|
8
|
-
import "./chunk-V6CV3QPH.js";
|
|
9
|
-
import "./chunk-43DKPXTP.js";
|
|
10
|
-
import "./chunk-SSCGWDIC.js";
|
|
11
|
-
import "./chunk-WP7FZHMI.js";
|
|
12
|
-
import "./chunk-OOKNHOCB.js";
|
|
13
|
-
import "./chunk-H2K23MOF.js";
|
|
14
|
-
import "./chunk-7K2YZTLD.js";
|
|
15
|
-
export {
|
|
16
|
-
phaseConfig
|
|
17
|
-
};
|
|
18
|
-
//# sourceMappingURL=phase-config-V4XETN5F.js.map
|
|
@@ -1,22 +0,0 @@
|
|
|
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
|
-
dockerAvailable,
|
|
5
|
-
getActiveSandboxes,
|
|
6
|
-
init_sandbox_runtime,
|
|
7
|
-
killAllSandboxes,
|
|
8
|
-
killSandbox,
|
|
9
|
-
spawnSandbox
|
|
10
|
-
} from "./chunk-SKY6656M.js";
|
|
11
|
-
import "./chunk-OOKNHOCB.js";
|
|
12
|
-
import "./chunk-H2K23MOF.js";
|
|
13
|
-
import "./chunk-7K2YZTLD.js";
|
|
14
|
-
init_sandbox_runtime();
|
|
15
|
-
export {
|
|
16
|
-
dockerAvailable,
|
|
17
|
-
getActiveSandboxes,
|
|
18
|
-
killAllSandboxes,
|
|
19
|
-
killSandbox,
|
|
20
|
-
spawnSandbox
|
|
21
|
-
};
|
|
22
|
-
//# sourceMappingURL=sandbox-runtime-WHACQLLN.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/cli/commands/start.ts"],
|
|
4
|
-
"sourcesContent": ["import { printBanner } from './banner.js';\nimport { existsSync, readFileSync, unlinkSync, writeFileSync } from \"node:fs\";\nimport { execFileSync } from \"node:child_process\";\nimport { join } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport { abtarsHome } from \"../../paths.js\";\n\n\nfunction pidAlive(pid: number): boolean {\n try { process.kill(pid, 0); return true; } catch { return false; }\n}\n\nfunction readJsonField(file: string, field: string): unknown {\n try { return JSON.parse(readFileSync(file, \"utf-8\"))[field]; } catch { return undefined; }\n}\n\nexport async function start(): Promise<number> {\n await printBanner(\"start\");\n const home = abtarsHome();\n const lockFile = join(home, \"bridge.lock\");\n const startReasonFile = join(home, \".start-reason\");\n\n // Clear stop sentinel so WD/bridge can start\n try { unlinkSync(startReasonFile); } catch {}\n try { unlinkSync(join(home, \".stopped\")); } catch {}\n\n const installMode = readJsonField(join(home, \"manifest.json\"), \"installMode\") as string | undefined;\n\n // Daemon mode \u2014 let launchd/systemd handle it\n if (installMode === \"daemon\") {\n if (process.platform === \"darwin\") {\n const plistPath = join(homedir(), \"Library\", \"LaunchAgents\", \"com.abtars.watchdog.plist\");\n const uid = `gui/${process.getuid!()}`;\n try { execFileSync(\"launchctl\", [\"bootstrap\", uid, plistPath], { timeout: 5000 }); } catch {}\n } else {\n try { execFileSync(\"systemctl\", [\"--user\", \"unmask\", \"abtars-watchdog\"], { timeout: 5000 }); } catch {}\n try { execFileSync(\"systemctl\", [\"--user\", \"enable\", \"abtars-watchdog\"], { timeout: 5000 }); } catch {}\n try { execFileSync(\"systemctl\", [\"--user\", \"start\", \"abtars-watchdog\"], { timeout: 5000 }); } catch {}\n }\n process.stdout.write(`\u2713 Service loaded. Watchdog starting...\\n`);\n return 0;\n }\n\n // Simple mode \u2014 spawn bridge directly\n if (existsSync(lockFile)) {\n try {\n const lock = JSON.parse(readFileSync(lockFile, \"utf-8\"));\n if (lock.pid && pidAlive(lock.pid)) {\n process.stdout.write(`Bridge already running (pid ${lock.pid}).\\n`);\n return 0;\n }\n } catch { /* corrupt lock \u2014 proceed */ }\n }\n\n const entryPoint = join(home, \"app\", \"bundle\", \"abtars.js\");\n if (!existsSync(entryPoint)) {\n process.stderr.write(`No release deployed. Run 'abtars update' first.\\n`);\n return 1;\n }\n\n const { spawn } = await import(\"node:child_process\");\n const { openSync, closeSync, mkdirSync } = await import(\"node:fs\");\n mkdirSync(join(home, \"logs\"), { recursive: true });\n const logFd = openSync(join(home, \"logs\", \"bridge.log\"), \"a\");\n const br = spawn(\"node\", [\"--max-old-space-size=1024\", entryPoint], {\n detached: true,\n stdio: [\"ignore\", logFd, logFd],\n cwd: home,\n env: { ...process.env, ABTARS_START_REASON: \"manual-start\" },\n });\n br.unref();\n closeSync(logFd);\n process.stdout.write(`\u2713 Bridge started (pid ${br.pid}).\\n`);\n return 0;\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,243 +0,0 @@
|
|
|
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
|
-
hotskills_exports,
|
|
5
|
-
init_hotskills
|
|
6
|
-
} from "./chunk-IK4R3RBZ.js";
|
|
7
|
-
import "./chunk-FIAVVKGN.js";
|
|
8
|
-
import {
|
|
9
|
-
init_sandbox_runtime,
|
|
10
|
-
sandbox_runtime_exports
|
|
11
|
-
} from "./chunk-SKY6656M.js";
|
|
12
|
-
import {
|
|
13
|
-
heartbeat_system_exports,
|
|
14
|
-
init_heartbeat_system
|
|
15
|
-
} from "./chunk-DNDYD5SL.js";
|
|
16
|
-
import {
|
|
17
|
-
getInstanceName,
|
|
18
|
-
init_soul_bundle
|
|
19
|
-
} from "./chunk-56D3Y44D.js";
|
|
20
|
-
import "./chunk-O4GKI3Q3.js";
|
|
21
|
-
import "./chunk-4PIVWXUJ.js";
|
|
22
|
-
import "./chunk-W726UGI6.js";
|
|
23
|
-
import "./chunk-43DKPXTP.js";
|
|
24
|
-
import "./chunk-N5KN3LGD.js";
|
|
25
|
-
import "./chunk-SSCGWDIC.js";
|
|
26
|
-
import {
|
|
27
|
-
init_log_and_swallow,
|
|
28
|
-
logAndSwallow
|
|
29
|
-
} from "./chunk-WP7FZHMI.js";
|
|
30
|
-
import "./chunk-OOKNHOCB.js";
|
|
31
|
-
import "./chunk-H2K23MOF.js";
|
|
32
|
-
import {
|
|
33
|
-
__toCommonJS
|
|
34
|
-
} from "./chunk-7K2YZTLD.js";
|
|
35
|
-
|
|
36
|
-
// src/components/system-status.ts
|
|
37
|
-
init_log_and_swallow();
|
|
38
|
-
init_soul_bundle();
|
|
39
|
-
import { readFileSync } from "node:fs";
|
|
40
|
-
import { join } from "node:path";
|
|
41
|
-
import { homedir } from "node:os";
|
|
42
|
-
async function getSystemStatus(ctx) {
|
|
43
|
-
const { getDeployedVersion } = await import("./paths-RZF6WDMG.js");
|
|
44
|
-
const deployed = getDeployedVersion();
|
|
45
|
-
const version = deployed.version;
|
|
46
|
-
const commit = deployed.commit || "?";
|
|
47
|
-
let model = "unknown";
|
|
48
|
-
let transportType = "unknown";
|
|
49
|
-
let transportProvider = "unknown";
|
|
50
|
-
try {
|
|
51
|
-
const { loadTransport, resolveAgent } = await import("./transport-config-OK3MZPJK.js");
|
|
52
|
-
const tc = loadTransport();
|
|
53
|
-
const prof = tc ? resolveAgent("professor", tc) : null;
|
|
54
|
-
if (prof) {
|
|
55
|
-
model = prof.model;
|
|
56
|
-
transportType = (prof.provider.transport ?? "acp").toUpperCase();
|
|
57
|
-
transportProvider = prof.providerName ?? "unknown";
|
|
58
|
-
}
|
|
59
|
-
} catch (err) {
|
|
60
|
-
logAndSwallow("system_status", "op", err);
|
|
61
|
-
}
|
|
62
|
-
const serviceStates = ctx.registry.getStates();
|
|
63
|
-
const subsystems = [];
|
|
64
|
-
for (const [name, health] of ctx.phaseHealth) {
|
|
65
|
-
const entry = { name, status: health.status };
|
|
66
|
-
const svcName = phaseToService(name);
|
|
67
|
-
if (svcName && serviceStates[svcName]) {
|
|
68
|
-
const svc = serviceStates[svcName];
|
|
69
|
-
if (health.status === "ok" && !svc.running) {
|
|
70
|
-
entry.status = svc.retrying ? "retrying" : "stopped";
|
|
71
|
-
}
|
|
72
|
-
if (svc.retrying) {
|
|
73
|
-
entry.detail = `retry #${svc.retrying.attempt}`;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
if (name === "phaseTransport" && health.status === "ok" && ctx.transport) {
|
|
77
|
-
entry.detail = `${transportType} (${transportProvider}), ${ctx.transport.isReady ? "ready" : "not ready"}`;
|
|
78
|
-
}
|
|
79
|
-
if (name === "phaseHeartbeat" && health.status === "ok" && ctx.heartbeat) {
|
|
80
|
-
try {
|
|
81
|
-
const lock = JSON.parse(readFileSync(ctx.bridgeLockPath, "utf-8"));
|
|
82
|
-
const ago = Math.round((Date.now() - (lock.lastHeartbeat || 0)) / 6e4);
|
|
83
|
-
entry.detail = `${Math.round(ctx.heartbeat.intervalMs / 1e3)}s, last tick ${ago}m ago`;
|
|
84
|
-
} catch (err) {
|
|
85
|
-
logAndSwallow("system_status", "op", err);
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
if (name === "phaseDashboard" && health.status === "ok") {
|
|
89
|
-
entry.detail = `:${process.env["WEB_PORT"] || "3000"}`;
|
|
90
|
-
}
|
|
91
|
-
subsystems.push(entry);
|
|
92
|
-
}
|
|
93
|
-
let tasks = { recurring: 0, pending: 0, paused: 0 };
|
|
94
|
-
try {
|
|
95
|
-
const { readEntries } = await import("./task-store-2XRDM3AW.js");
|
|
96
|
-
const entries = readEntries();
|
|
97
|
-
tasks = {
|
|
98
|
-
recurring: entries.filter((e) => e.schedule && !e.paused).length,
|
|
99
|
-
pending: entries.filter((e) => !e.fired && !e.schedule).length,
|
|
100
|
-
paused: entries.filter((e) => e.paused).length
|
|
101
|
-
};
|
|
102
|
-
} catch (err) {
|
|
103
|
-
logAndSwallow("system_status", "op", err);
|
|
104
|
-
}
|
|
105
|
-
let lastBackup = null;
|
|
106
|
-
try {
|
|
107
|
-
const { readdirSync } = await import("node:fs");
|
|
108
|
-
const bd = join(homedir(), ".backup-abtars");
|
|
109
|
-
const bk = readdirSync(bd).filter((f) => f.startsWith("abtars-") && (f.endsWith(".zip") || f.endsWith(".7z"))).sort();
|
|
110
|
-
if (bk.length > 0) lastBackup = bk[bk.length - 1] ?? null;
|
|
111
|
-
} catch (err) {
|
|
112
|
-
logAndSwallow("system_status", "op", err);
|
|
113
|
-
}
|
|
114
|
-
let contextPercent = -1;
|
|
115
|
-
try {
|
|
116
|
-
const lock = JSON.parse(readFileSync(ctx.bridgeLockPath, "utf-8"));
|
|
117
|
-
if (typeof lock.contextPercent === "number") contextPercent = lock.contextPercent;
|
|
118
|
-
} catch {
|
|
119
|
-
}
|
|
120
|
-
let sleepStatus = null;
|
|
121
|
-
try {
|
|
122
|
-
const lock = JSON.parse(readFileSync(ctx.bridgeLockPath, "utf-8"));
|
|
123
|
-
sleepStatus = lock.sleepStatus ?? null;
|
|
124
|
-
} catch {
|
|
125
|
-
}
|
|
126
|
-
return {
|
|
127
|
-
version,
|
|
128
|
-
commit,
|
|
129
|
-
model,
|
|
130
|
-
transportType,
|
|
131
|
-
transportProvider,
|
|
132
|
-
transportReady: ctx.transport?.isReady ?? false,
|
|
133
|
-
uptimeMs: Date.now() - ctx.startedAt,
|
|
134
|
-
contextPercent,
|
|
135
|
-
sleepStatus,
|
|
136
|
-
subsystems,
|
|
137
|
-
tasks,
|
|
138
|
-
lastBackup
|
|
139
|
-
};
|
|
140
|
-
}
|
|
141
|
-
function phaseToService(phaseName) {
|
|
142
|
-
switch (phaseName) {
|
|
143
|
-
case "phasePlatforms":
|
|
144
|
-
return null;
|
|
145
|
-
// platforms registers telegram + discord separately
|
|
146
|
-
case "phaseDashboard":
|
|
147
|
-
return null;
|
|
148
|
-
case "phaseAgentApi":
|
|
149
|
-
return "agent-api";
|
|
150
|
-
default:
|
|
151
|
-
return null;
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
function renderStatusText(status) {
|
|
155
|
-
const uptime = formatUptime(status.uptimeMs);
|
|
156
|
-
const failures = status.subsystems.filter((s) => s.status === "failed").length;
|
|
157
|
-
const mood = failures === 0 ? "\u{1F60A}" : failures <= 2 ? "\u{1F610}" : "\u{1F61F}";
|
|
158
|
-
const lines = [
|
|
159
|
-
`abTARS\u2122 ${getInstanceName()} online ${mood}`,
|
|
160
|
-
` PID ${process.pid} (up ${uptime})`
|
|
161
|
-
];
|
|
162
|
-
const wdPid = process.env.ABTARS_WATCHDOG_PID;
|
|
163
|
-
if (wdPid && wdPid !== "0") {
|
|
164
|
-
try {
|
|
165
|
-
process.kill(Number(wdPid), 0);
|
|
166
|
-
lines.push(` Watchdog: PID ${wdPid}`);
|
|
167
|
-
} catch {
|
|
168
|
-
lines.push(" Watchdog: not running (stale PID)");
|
|
169
|
-
}
|
|
170
|
-
} else {
|
|
171
|
-
lines.push(" Watchdog: not detected");
|
|
172
|
-
}
|
|
173
|
-
const platforms = status.subsystems.find((s) => s.name === "phasePlatforms");
|
|
174
|
-
if (platforms?.detail) lines.push(` Platforms: ${platforms.detail}`);
|
|
175
|
-
lines.push(` Model: ${status.model.split("/").pop() ?? status.model}`);
|
|
176
|
-
if (status.contextPercent >= 0) lines.push(` Context: ${status.contextPercent}%`);
|
|
177
|
-
try {
|
|
178
|
-
const lock = JSON.parse(readFileSync(join(homedir(), ".abtars", "bridge.lock"), "utf-8"));
|
|
179
|
-
if (lock.lastPromptAt) {
|
|
180
|
-
const ago = Math.round((Date.now() - lock.lastPromptAt) / 1e3);
|
|
181
|
-
lines.push(` Last prompt: ${ago < 60 ? `${ago}s ago` : `${Math.round(ago / 60)}m ago`}`);
|
|
182
|
-
}
|
|
183
|
-
} catch {
|
|
184
|
-
}
|
|
185
|
-
if (status.sleepStatus) lines.push(` Sleep: ${status.sleepStatus}`);
|
|
186
|
-
const webPort = process.env["WEB_PORT"];
|
|
187
|
-
if (webPort) lines.push(` Dashboard: :${webPort}`);
|
|
188
|
-
else lines.push(` Dashboard: disabled`);
|
|
189
|
-
const apiPort = process.env["AGENT_API_PORT"];
|
|
190
|
-
if (apiPort) lines.push(` Agent API: :${apiPort}`);
|
|
191
|
-
try {
|
|
192
|
-
const { getHeartbeatInstance } = (init_heartbeat_system(), __toCommonJS(heartbeat_system_exports));
|
|
193
|
-
const hb = getHeartbeatInstance();
|
|
194
|
-
if (hb) {
|
|
195
|
-
const mins = Math.round(hb.intervalMs / 6e4);
|
|
196
|
-
const taskCount = hb.getTaskNames().length;
|
|
197
|
-
lines.push(` Heartbeat: ${hb.isRunning ? "running" : "stopped"} (${mins}min, ${taskCount} tasks)`);
|
|
198
|
-
}
|
|
199
|
-
} catch {
|
|
200
|
-
}
|
|
201
|
-
try {
|
|
202
|
-
const { getSkillCache } = (init_hotskills(), __toCommonJS(hotskills_exports));
|
|
203
|
-
const skills = getSkillCache();
|
|
204
|
-
if (skills.length > 0) {
|
|
205
|
-
const active = skills.filter((s) => !s.skipped).length;
|
|
206
|
-
lines.push(` Skills: ${active} active`);
|
|
207
|
-
}
|
|
208
|
-
} catch {
|
|
209
|
-
}
|
|
210
|
-
try {
|
|
211
|
-
const { getActiveSandboxes } = (init_sandbox_runtime(), __toCommonJS(sandbox_runtime_exports));
|
|
212
|
-
const sandboxes = getActiveSandboxes();
|
|
213
|
-
if (sandboxes.size > 0) {
|
|
214
|
-
lines.push(` \u{1F433} Sandboxes: ${sandboxes.size} active`);
|
|
215
|
-
}
|
|
216
|
-
} catch {
|
|
217
|
-
}
|
|
218
|
-
lines.push("", "\u{1F3E5} Subsystems:");
|
|
219
|
-
for (const s of status.subsystems) {
|
|
220
|
-
const icon = s.status === "ok" ? "\u2713" : s.status === "skipped" ? "\u25CB" : "\u2717";
|
|
221
|
-
const label = s.name.replace("phase", "").replace(/([A-Z])/g, " $1").trim().toLowerCase();
|
|
222
|
-
const detail = s.detail ? ` \u2014 ${s.detail}` : "";
|
|
223
|
-
lines.push(` ${icon} ${label}${detail}`);
|
|
224
|
-
}
|
|
225
|
-
lines.push("");
|
|
226
|
-
lines.push(`\u23F0 Tasks: ${status.tasks.recurring} recurring, ${status.tasks.pending} pending${status.tasks.paused ? `, ${status.tasks.paused} paused` : ""}`);
|
|
227
|
-
if (status.lastBackup) lines.push(`\u{1F4BE} Last backup: ${status.lastBackup}`);
|
|
228
|
-
return lines.join("\n");
|
|
229
|
-
}
|
|
230
|
-
function formatUptime(ms) {
|
|
231
|
-
const s = Math.floor(ms / 1e3);
|
|
232
|
-
const m = Math.floor(s / 60) % 60;
|
|
233
|
-
const h = Math.floor(s / 3600) % 24;
|
|
234
|
-
const d = Math.floor(s / 86400);
|
|
235
|
-
if (d > 0) return `${d}d ${h}h ${m}m`;
|
|
236
|
-
if (h > 0) return `${h}h ${m}m`;
|
|
237
|
-
return `${m}m`;
|
|
238
|
-
}
|
|
239
|
-
export {
|
|
240
|
-
getSystemStatus,
|
|
241
|
-
renderStatusText
|
|
242
|
-
};
|
|
243
|
-
//# sourceMappingURL=system-status-XXJWTVJN.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/components/system-status.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * system-status.ts \u2014 Single source of truth for bridge status.\n * One collector, many renderers. Used by /status (text), dashboard (HTML), future API (JSON).\n */\n\nimport { logAndSwallow } from \"./log-and-swallow.js\";\nimport { getInstanceName } from \"./soul-bundle.js\";\nimport { readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport type { ServiceState } from \"./service-registry.js\";\n\nexport interface SubsystemHealth {\n name: string;\n status: \"ok\" | \"failed\" | \"skipped\" | \"stopped\" | \"retrying\";\n detail?: string;\n}\n\nexport interface SystemStatus {\n version: string;\n commit: string;\n model: string;\n transportType: string;\n transportProvider: string;\n transportReady: boolean;\n uptimeMs: number;\n contextPercent: number;\n sleepStatus: string | null;\n subsystems: SubsystemHealth[];\n tasks: { recurring: number; pending: number; paused: number };\n lastBackup: string | null;\n}\n\nexport interface StatusContext {\n phaseHealth: Map<string, { status: \"ok\" | \"failed\" | \"skipped\"; error?: string }>;\n registry: { getStates(): Record<string, ServiceState> };\n transport: { isReady: boolean } | null;\n startedAt: number;\n bridgeLockPath: string;\n heartbeat: { intervalMs: number } | null;\n}\n\nexport async function getSystemStatus(ctx: StatusContext): Promise<SystemStatus> {\n // Version + commit from manifest.json (single source of truth)\n const { getDeployedVersion } = await import(\"../paths.js\");\n const deployed = getDeployedVersion();\n const version = deployed.version;\n const commit = deployed.commit || \"?\";\n\n // Model + transport\n let model = \"unknown\";\n let transportType = \"unknown\";\n let transportProvider = \"unknown\";\n try {\n const { loadTransport, resolveAgent } = await import(\"./transport-config.js\");\n const tc = loadTransport();\n const prof = tc ? resolveAgent(\"professor\", tc) : null;\n if (prof) {\n model = prof.model;\n transportType = (prof.provider.transport ?? \"acp\").toUpperCase();\n transportProvider = prof.providerName ?? \"unknown\";\n }\n } catch (err) { logAndSwallow(\"system_status\", \"op\", err); }\n\n // Subsystem health: merge phaseHealth + ServiceRegistry live state\n const serviceStates = ctx.registry.getStates();\n const subsystems: SubsystemHealth[] = [];\n\n for (const [name, health] of ctx.phaseHealth) {\n const entry: SubsystemHealth = { name, status: health.status };\n\n // For platform services, override with live ServiceRegistry state\n const svcName = phaseToService(name);\n if (svcName && serviceStates[svcName]) {\n const svc = serviceStates[svcName] as ServiceState;\n if (health.status === \"ok\" && !svc.running) {\n entry.status = svc.retrying ? \"retrying\" : \"stopped\";\n }\n if (svc.retrying) {\n entry.detail = `retry #${svc.retrying.attempt}`;\n }\n }\n\n // Add contextual detail for specific phases\n if (name === \"phaseTransport\" && health.status === \"ok\" && ctx.transport) {\n entry.detail = `${transportType} (${transportProvider}), ${ctx.transport.isReady ? \"ready\" : \"not ready\"}`;\n }\n if (name === \"phaseHeartbeat\" && health.status === \"ok\" && ctx.heartbeat) {\n try {\n const lock = JSON.parse(readFileSync(ctx.bridgeLockPath, \"utf-8\"));\n const ago = Math.round((Date.now() - (lock.lastHeartbeat || 0)) / 60000);\n entry.detail = `${Math.round(ctx.heartbeat.intervalMs / 1000)}s, last tick ${ago}m ago`;\n } catch (err) { logAndSwallow(\"system_status\", \"op\", err); }\n }\n if (name === \"phaseDashboard\" && health.status === \"ok\") {\n entry.detail = `:${process.env[\"WEB_PORT\"] || \"3000\"}`;\n }\n\n subsystems.push(entry);\n }\n\n // Tasks\n let tasks = { recurring: 0, pending: 0, paused: 0 };\n try {\n const { readEntries } = await import(\"./tasks/task-store.js\");\n const entries = readEntries();\n tasks = {\n recurring: entries.filter((e: any) => e.schedule && !e.paused).length,\n pending: entries.filter((e: any) => !e.fired && !e.schedule).length,\n paused: entries.filter((e: any) => e.paused).length,\n };\n } catch (err) { logAndSwallow(\"system_status\", \"op\", err); }\n\n // Last backup\n let lastBackup: string | null = null;\n try {\n const { readdirSync } = await import(\"node:fs\");\n const bd = join(homedir(), \".backup-abtars\");\n const bk = readdirSync(bd).filter((f: string) => f.startsWith(\"abtars-\") && (f.endsWith(\".zip\") || f.endsWith(\".7z\"))).sort();\n if (bk.length > 0) lastBackup = bk[bk.length - 1] ?? null;\n } catch (err) { logAndSwallow(\"system_status\", \"op\", err); }\n\n // Context percent from bridge.lock\n let contextPercent = -1;\n try {\n const lock = JSON.parse(readFileSync(ctx.bridgeLockPath, \"utf-8\"));\n if (typeof lock.contextPercent === \"number\") contextPercent = lock.contextPercent;\n } catch { /* ignore */ }\n\n // Sleep status\n let sleepStatus: string | null = null;\n try {\n const lock = JSON.parse(readFileSync(ctx.bridgeLockPath, \"utf-8\"));\n sleepStatus = lock.sleepStatus ?? null;\n } catch { /* ignore */ }\n\n return {\n version,\n commit,\n model,\n transportType,\n transportProvider,\n transportReady: ctx.transport?.isReady ?? false,\n uptimeMs: Date.now() - ctx.startedAt,\n contextPercent,\n sleepStatus,\n subsystems,\n tasks,\n lastBackup,\n };\n}\n\n/** Map phase names to ServiceRegistry service names (for live state merge). */\nfunction phaseToService(phaseName: string): string | null {\n switch (phaseName) {\n case \"phasePlatforms\": return null; // platforms registers telegram + discord separately\n case \"phaseDashboard\": return null;\n case \"phaseAgentApi\": return \"agent-api\";\n default: return null;\n }\n}\n\n/** Render SystemStatus as plain text for Telegram/Discord /status command. */\nexport function renderStatusText(status: SystemStatus): string {\n const uptime = formatUptime(status.uptimeMs);\n const failures = status.subsystems.filter(s => s.status === \"failed\").length;\n const mood = failures === 0 ? \"\uD83D\uDE0A\" : failures <= 2 ? \"\uD83D\uDE10\" : \"\uD83D\uDE1F\";\n const lines: string[] = [\n `abTARS\u2122 ${getInstanceName()} online ${mood}`,\n ` PID ${process.pid} (up ${uptime})`,\n ];\n\n // Watchdog\n const wdPid = process.env.ABTARS_WATCHDOG_PID;\n if (wdPid && wdPid !== \"0\") {\n try { process.kill(Number(wdPid), 0); lines.push(` Watchdog: PID ${wdPid}`); }\n catch { lines.push(\" Watchdog: not running (stale PID)\"); }\n } else {\n lines.push(\" Watchdog: not detected\");\n }\n\n // Platforms\n const platforms = status.subsystems.find(s => s.name === \"phasePlatforms\");\n if (platforms?.detail) lines.push(` Platforms: ${platforms.detail}`);\n\n // Model + context\n lines.push(` Model: ${status.model.split(\"/\").pop() ?? status.model}`);\n if (status.contextPercent >= 0) lines.push(` Context: ${status.contextPercent}%`);\n\n // Last prompt\n try {\n const lock = JSON.parse(readFileSync(join(homedir(), \".abtars\", \"bridge.lock\"), \"utf-8\"));\n if (lock.lastPromptAt) {\n const ago = Math.round((Date.now() - lock.lastPromptAt) / 1000);\n lines.push(` Last prompt: ${ago < 60 ? `${ago}s ago` : `${Math.round(ago / 60)}m ago`}`);\n }\n } catch { /* no lock */ }\n\n // Sleep\n if (status.sleepStatus) lines.push(` Sleep: ${status.sleepStatus}`);\n\n // Dashboard\n const webPort = process.env[\"WEB_PORT\"];\n if (webPort) lines.push(` Dashboard: :${webPort}`);\n else lines.push(` Dashboard: disabled`);\n\n // Agent API\n const apiPort = process.env[\"AGENT_API_PORT\"];\n if (apiPort) lines.push(` Agent API: :${apiPort}`);\n\n // Heartbeat\n try {\n const { getHeartbeatInstance } = require(\"./heartbeat-system.js\") as typeof import(\"./heartbeat-system.js\");\n const hb = getHeartbeatInstance();\n if (hb) {\n const mins = Math.round(hb.intervalMs / 60000);\n const taskCount = hb.getTaskNames().length;\n lines.push(` Heartbeat: ${hb.isRunning ? \"running\" : \"stopped\"} (${mins}min, ${taskCount} tasks)`);\n }\n } catch { /* */ }\n\n // Skills\n try {\n const { getSkillCache } = require(\"../capabilities/hotskills/index.js\") as typeof import(\"../capabilities/hotskills/index.js\");\n const skills = getSkillCache();\n if (skills.length > 0) {\n const active = skills.filter(s => !s.skipped).length;\n lines.push(` Skills: ${active} active`);\n }\n } catch { /* hotskills not loaded */ }\n\n // #478: Sandbox status\n try {\n const { getActiveSandboxes } = require(\"./sandbox-runtime.js\") as typeof import(\"./sandbox-runtime.js\");\n const sandboxes = getActiveSandboxes();\n if (sandboxes.size > 0) {\n lines.push(` \uD83D\uDC33 Sandboxes: ${sandboxes.size} active`);\n }\n } catch { /* sandbox-runtime not loaded */ }\n\n lines.push(\"\", \"\uD83C\uDFE5 Subsystems:\");\n\n for (const s of status.subsystems) {\n const icon = s.status === \"ok\" ? \"\u2713\" : s.status === \"skipped\" ? \"\u25CB\" : \"\u2717\";\n const label = s.name.replace(\"phase\", \"\").replace(/([A-Z])/g, \" $1\").trim().toLowerCase();\n const detail = s.detail ? ` \u2014 ${s.detail}` : \"\";\n lines.push(` ${icon} ${label}${detail}`);\n }\n\n lines.push(\"\");\n lines.push(`\u23F0 Tasks: ${status.tasks.recurring} recurring, ${status.tasks.pending} pending${status.tasks.paused ? `, ${status.tasks.paused} paused` : \"\"}`);\n if (status.lastBackup) lines.push(`\uD83D\uDCBE Last backup: ${status.lastBackup}`);\n\n return lines.join(\"\\n\");\n}\n\nfunction formatUptime(ms: number): string {\n const s = Math.floor(ms / 1000);\n const m = Math.floor(s / 60) % 60;\n const h = Math.floor(s / 3600) % 24;\n const d = Math.floor(s / 86400);\n if (d > 0) return `${d}d ${h}h ${m}m`;\n if (h > 0) return `${h}h ${m}m`;\n return `${m}m`;\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
/package/bundle/{agent-api-rate-limit-4GEZ4YN5.js.map → agent-api-rate-limit-VENFGOAD.js.map}
RENAMED
|
File without changes
|
|
File without changes
|
/package/bundle/{bridge-lock-transport-LXCF2IVN.js.map → bridge-lock-transport-BJAMHMXW.js.map}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|