abtars 0.3.4-alpha.7 → 0.3.4
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-WGR4WOPT.js → _registry.generated-AVR7DK2A.js} +17 -14
- package/bundle/{_registry.generated-WGR4WOPT.js.map → _registry.generated-AVR7DK2A.js.map} +1 -1
- package/bundle/{abmind-lazy-7Z44NODV.js → abmind-lazy-E3YCFKQ5.js} +15 -5
- package/bundle/abtars-browser.js +4 -4
- package/bundle/abtars-cli.js +23 -13
- package/bundle/abtars-cli.js.map +2 -2
- package/bundle/abtars-restart.js +3 -3
- package/bundle/abtars-task.js +3 -3
- package/bundle/abtars-task.js.map +2 -2
- package/bundle/abtars.js +610 -455
- package/bundle/abtars.js.map +4 -4
- package/bundle/{acp-raw-client-E6FM45NC.js → acp-raw-client-UCNK3OTU.js} +2 -2
- package/bundle/{action-gate-G2V47NHW.js → action-gate-V4FCBHFB.js} +2 -2
- package/bundle/{agent-api-adapter-YAHKQMMZ.js → agent-api-adapter-7HEPYSIN.js} +3 -3
- package/bundle/{agent-api-rate-limit-WCFXJMGY.js → agent-api-rate-limit-RZSAM3SW.js} +4 -4
- package/bundle/{agent-registry-GI6CLT3Z.js → agent-registry-46A2R5KP.js} +7 -7
- package/bundle/{bootstrap-X2QYIZIJ.js → bootstrap-MIHJJSWU.js} +2 -2
- package/bundle/{bridge-lock-transport-4ZH7QTJP.js → bridge-lock-transport-7RSN7OLJ.js} +4 -4
- package/bundle/{browser-DMARZJIN.js → browser-F6BCWJWW.js} +6 -6
- package/bundle/{budget-45QOBDWA.js → budget-WUM3SPKW.js} +3 -3
- package/bundle/{capability-JFWX3IQF.js → capability-QVRKGRFC.js} +5 -5
- package/bundle/{chunk-YSKCQH6E.js → chunk-2IYJ4I66.js} +2 -2
- package/bundle/{chunk-KTYGKPYM.js → chunk-2NLUT5S2.js} +6 -6
- package/bundle/chunk-3BG3AIDP.js +191 -0
- package/bundle/chunk-3BG3AIDP.js.map +7 -0
- package/bundle/{chunk-OKAQICWY.js → chunk-3GQX34S2.js} +3 -3
- package/bundle/{chunk-QROWBWLL.js → chunk-3XZ773BS.js} +2 -2
- package/bundle/{chunk-DYBW4XXL.js → chunk-467SRLLR.js} +2 -2
- package/bundle/{chunk-LGP6TYFI.js → chunk-4AILRHUI.js} +97 -8
- package/bundle/chunk-4AILRHUI.js.map +7 -0
- package/bundle/{chunk-GPZNXY2U.js → chunk-4S3H4OK7.js} +4 -4
- package/bundle/{chunk-NDCRWEEJ.js → chunk-4Y5MJQRE.js} +6 -6
- package/bundle/{chunk-FRKW6LWB.js → chunk-55UWKI5C.js} +3 -3
- package/bundle/{chunk-4UL3KINB.js → chunk-5PNJFDSW.js} +8 -8
- package/bundle/{chunk-LUNA6PM5.js → chunk-5RVOEFGT.js} +4 -2
- package/bundle/{chunk-LUNA6PM5.js.map → chunk-5RVOEFGT.js.map} +2 -2
- package/bundle/{chunk-OXTSWQCX.js → chunk-5Y3FJ2Y7.js} +2 -2
- package/bundle/{chunk-TMUYFERL.js → chunk-6B5ZFUPD.js} +2 -2
- package/bundle/{chunk-65VCEC32.js → chunk-6PA5JBUU.js} +2 -2
- package/bundle/chunk-BNXV7SZI.js +195 -0
- package/bundle/chunk-BNXV7SZI.js.map +7 -0
- package/bundle/{chunk-AFREM7FX.js → chunk-CK7YTA2F.js} +2 -2
- package/bundle/{chunk-NRUSRJXR.js → chunk-DZJ5QZFD.js} +2 -2
- package/bundle/{chunk-YRSMGJFP.js → chunk-E67KESEG.js} +2 -2
- package/bundle/{chunk-ZV4IWKDJ.js → chunk-E7XD5UGB.js} +3 -3
- package/bundle/{chunk-GXL7HJPT.js → chunk-EAX5ZZUL.js} +63 -39
- package/bundle/chunk-EAX5ZZUL.js.map +7 -0
- package/bundle/{chunk-PEDX56EL.js → chunk-EFGBM555.js} +2 -2
- package/bundle/{chunk-EQSG2CRM.js → chunk-FGYDIX54.js} +22 -15
- package/bundle/chunk-FGYDIX54.js.map +7 -0
- package/bundle/{chunk-XWRADSXO.js → chunk-GF6NVNA7.js} +15 -5
- package/bundle/chunk-GF6NVNA7.js.map +7 -0
- package/bundle/{chunk-SIFPBTI4.js → chunk-HGSHCQ5F.js} +113 -73
- package/bundle/chunk-HGSHCQ5F.js.map +7 -0
- package/bundle/{chunk-YRU2K3O6.js → chunk-IMIGG5EO.js} +39 -39
- package/bundle/chunk-IMIGG5EO.js.map +7 -0
- package/bundle/{chunk-W4EA4GCA.js → chunk-ITOFPJAV.js} +43 -31
- package/bundle/chunk-ITOFPJAV.js.map +7 -0
- package/bundle/{chunk-UPRZDU6T.js → chunk-IY6UKLPS.js} +3 -3
- package/bundle/{chunk-EUZDKV3C.js → chunk-J4RUFAPK.js} +3 -3
- package/bundle/{chunk-HZDLFLRP.js → chunk-J7DRPVMU.js} +35 -5
- package/bundle/chunk-J7DRPVMU.js.map +7 -0
- package/bundle/{chunk-EGL6UMAO.js → chunk-JG4BKXBN.js} +7 -1
- package/bundle/chunk-JG4BKXBN.js.map +7 -0
- package/bundle/{chunk-5B5B6EHL.js → chunk-JLWYPGWI.js} +5 -5
- package/bundle/{chunk-5QUTMUIK.js → chunk-JXYWDAHD.js} +12 -12
- package/bundle/{chunk-GRVWZO4C.js → chunk-KOSFXW2S.js} +24 -3
- package/bundle/{chunk-GRVWZO4C.js.map → chunk-KOSFXW2S.js.map} +1 -1
- package/bundle/{chunk-ONBF5DDU.js → chunk-L72RIPEC.js} +248 -182
- package/bundle/chunk-L72RIPEC.js.map +7 -0
- package/bundle/{chunk-TEFZ4JA4.js → chunk-NHPLD3C7.js} +2 -2
- package/bundle/{chunk-2KC5G3EA.js → chunk-OWUO5RS3.js} +5 -5
- package/bundle/{chunk-4MULJ5SS.js → chunk-OY4Q6AMY.js} +71 -49
- package/bundle/chunk-OY4Q6AMY.js.map +7 -0
- package/bundle/{chunk-WBTJ2E62.js → chunk-P3NODAHF.js} +2 -5
- package/bundle/{chunk-WBTJ2E62.js.map → chunk-P3NODAHF.js.map} +2 -2
- package/bundle/{chunk-BROFMHC2.js → chunk-PB5GF4FG.js} +334 -237
- package/bundle/chunk-PB5GF4FG.js.map +7 -0
- package/bundle/{chunk-WYHGNI56.js → chunk-PMD5BLFS.js} +6 -6
- package/bundle/{chunk-URQPDCK5.js → chunk-Q66LQMMZ.js} +3 -3
- package/bundle/{chunk-HKRSMUXJ.js → chunk-SC2Y5NR2.js} +71 -132
- package/bundle/chunk-SC2Y5NR2.js.map +7 -0
- package/bundle/chunk-SFL4EPCZ.js +555 -0
- package/bundle/chunk-SFL4EPCZ.js.map +7 -0
- package/bundle/{chunk-LDUOOKQY.js → chunk-SJPUNDZ3.js} +5 -5
- package/bundle/{chunk-LDUOOKQY.js.map → chunk-SJPUNDZ3.js.map} +1 -1
- package/bundle/{chunk-JQDJPUHM.js → chunk-TWB2ZGVH.js} +2 -2
- package/bundle/{chunk-IJT4KWXT.js → chunk-U4U47YE7.js} +2 -2
- package/bundle/{chunk-2FAZIA37.js → chunk-W546CU3A.js} +3 -3
- package/bundle/chunk-WC5O5KOE.js +211 -0
- package/bundle/chunk-WC5O5KOE.js.map +7 -0
- package/bundle/{chunk-JNIHEDKF.js → chunk-XPWYDNWL.js} +2 -2
- package/bundle/{chunk-GWILHZPT.js → chunk-XRTXYN66.js} +10 -7
- package/bundle/{chunk-GWILHZPT.js.map → chunk-XRTXYN66.js.map} +2 -2
- package/bundle/{chunk-EFJVUJBE.js → chunk-Y5FEFKGM.js} +6 -6
- package/bundle/chunk-YJZE4OK3.js +169 -0
- package/bundle/chunk-YJZE4OK3.js.map +7 -0
- package/bundle/{chunk-GVM5YU5I.js → chunk-Z4FZPB42.js} +2 -2
- package/bundle/{chunk-7BSQ5UQO.js → chunk-ZSIDQ66D.js} +3 -3
- package/bundle/{chunk-XX6BGTPO.js → chunk-ZZZCJJEO.js} +4 -4
- package/bundle/{commands-XYEGVUZF.js → commands-2ZW6CMLC.js} +17 -16
- package/bundle/{config-M3P5IOAI.js → config-YMY5YHKN.js} +6 -6
- package/bundle/{context-2RJHC2LE.js → context-CL2RSLII.js} +7 -5
- package/bundle/context-CL2RSLII.js.map +7 -0
- package/bundle/{daemon-TB23FFWY.js → daemon-D7SU63OY.js} +3 -3
- package/bundle/{delegation-tools-QKNYQGTQ.js → delegation-tools-WS7Z56KZ.js} +12 -12
- package/bundle/{deploy-EPDWNHJU.js → deploy-AMTVKIMU.js} +2 -2
- package/bundle/{deps-WVK553KF.js → deps-T63AVJKJ.js} +3 -3
- package/bundle/{direct-api-transport-E3LNDBJT.js → direct-api-transport-QNNY2WWP.js} +56 -33
- package/bundle/direct-api-transport-QNNY2WWP.js.map +7 -0
- package/bundle/{discord-adapter-IT3KP3VB.js → discord-adapter-ABAD56Y2.js} +21 -20
- package/bundle/{discord-adapter-IT3KP3VB.js.map → discord-adapter-ABAD56Y2.js.map} +1 -1
- package/bundle/{dns-wakeup-IDOJIXBX.js → dns-wakeup-V3LEFXPE.js} +9 -33
- package/bundle/dns-wakeup-V3LEFXPE.js.map +7 -0
- package/bundle/{doctor-probes-B54JFIW3.js → doctor-probes-O6YI6XSZ.js} +6 -2
- package/bundle/{env-schema-4JXQUOH4.js → env-schema-B5RB32DC.js} +3 -3
- package/bundle/{gossip-3C3BSNPN.js → gossip-SKRCPOBS.js} +9 -5
- package/bundle/{guardrails-DL7ZSWVN.js → guardrails-64GQ5Y5K.js} +4 -4
- package/bundle/{heartbeat-system-MVTRS4GP.js → heartbeat-system-X4MUTKJD.js} +6 -6
- package/bundle/{heartbeat-tier3-ABWL3P7M.js → heartbeat-tier3-2PTPWEQQ.js} +53 -76
- package/bundle/heartbeat-tier3-2PTPWEQQ.js.map +7 -0
- package/bundle/{hook-system-M3POLUIB.js → hook-system-YB635OC4.js} +3 -3
- package/bundle/{hotskills-FWX4QI7V.js → hotskills-Q75D2DK3.js} +5 -5
- package/bundle/{install-OS3CU7NF.js → install-RFKKFSGS.js} +17 -30
- package/bundle/install-RFKKFSGS.js.map +7 -0
- package/bundle/{install-manifest-5PPWMD2W.js → install-manifest-J7ICPCJN.js} +2 -2
- package/bundle/{irc-adapter-PTTZD32W.js → irc-adapter-TVEV4R6H.js} +3 -3
- package/bundle/{irc-config-CP7ZMUOX.js → irc-config-M676FOFI.js} +4 -4
- package/bundle/{kanban-board-M326B2XJ.js → kanban-board-DLEJUCNN.js} +9 -7
- package/bundle/{kanban-channel-IJ52OMNA.js → kanban-channel-XOLUHJZJ.js} +6 -6
- package/bundle/kanban-delivery-C4QPBNPX.js +45 -0
- package/bundle/kanban-delivery-C4QPBNPX.js.map +7 -0
- package/bundle/{lazy-require-KCRVT4SI.js → lazy-require-JKQSALXN.js} +3 -3
- package/bundle/{logger-OWCSNYCA.js → logger-3EGHBD4R.js} +2 -2
- package/bundle/{main-chat-ZNUZCTNS.js → main-chat-3H63REKK.js} +4 -4
- package/bundle/{master-user-HSKM4ZFN.js → master-user-MUBUP3KD.js} +5 -5
- package/bundle/{media-utils-3ZYOD7SK.js → media-utils-HUUIALAJ.js} +3 -3
- package/bundle/{message-pipeline-P5GAQU4Z.js → message-pipeline-GRDRWONR.js} +17 -16
- package/bundle/meta.json +3699 -3138
- package/bundle/{metrics-collector-L3VPEHII.js → metrics-collector-YMUGY3PI.js} +31 -2
- package/bundle/metrics-collector-YMUGY3PI.js.map +7 -0
- package/bundle/{model-health-registry-MLEIZSTV.js → model-health-registry-QADMFQFQ.js} +2 -2
- package/bundle/{nerve-IGSXBKZZ.js → nerve-QPAEBRKX.js} +3 -3
- package/bundle/{notification-BFSIEECG.js → notification-3JICGXWU.js} +6 -6
- package/bundle/{openrouter-credits-NTVZDRYM.js → openrouter-credits-7NEIPYJN.js} +3 -3
- package/bundle/{orc-tools-4CHEFWSN.js → orc-tools-UZVPONKY.js} +5 -3
- package/bundle/{peer-auth-QC4EF2PM.js → peer-auth-RI43DKJE.js} +24 -15
- package/bundle/{peer-client-RGEU5HOK.js → peer-client-UITTMWJ2.js} +34 -29
- package/bundle/peer-client-UITTMWJ2.js.map +7 -0
- package/bundle/{peer-config-TN55LFDC.js → peer-config-URM7DCW6.js} +9 -4
- package/bundle/{peer-transport-I6JPLFZ2.js → peer-transport-SI7I72DB.js} +12 -10
- package/bundle/{phase-transport-PGKU2KD4.js → phase-transport-ESWWACZI.js} +17 -17
- package/bundle/{reconcile-CTFCLQRN.js → reconcile-GFDQYNBD.js} +3 -3
- package/bundle/{reconciler-EBKH3JNU.js → reconciler-IEUJXJN2.js} +12 -12
- package/bundle/{restore-IFHPI7I7.js → restore-FARTGLQQ.js} +3 -3
- package/bundle/{rollback-ANRI3T5Z.js → rollback-GEWPZABG.js} +2 -2
- package/bundle/{sandbox-runtime-QROWHDCS.js → sandbox-runtime-DV6E25J6.js} +2 -2
- package/bundle/{self-healer-utils-IFAYOQO2.js → self-healer-utils-P4SKNNEM.js} +3 -3
- package/bundle/{sha-tracker-ZWBP6CIJ.js → sha-tracker-77SHLYNY.js} +3 -3
- package/bundle/{skill-session-BMSRQSHV.js → skill-session-5HSMXY54.js} +3 -3
- package/bundle/{skill-stats-JORH5DGM.js → skill-stats-MI3RSWWL.js} +4 -4
- package/bundle/{skill-watcher-E4MGLKLS.js → skill-watcher-5L7JE6TN.js} +4 -4
- package/bundle/{sleep-36XS6MHJ.js → sleep-I4JFASCY.js} +11 -8
- package/bundle/{soul-bundle-VWAVHCZ6.js → soul-bundle-522C3IRH.js} +9 -8
- package/bundle/{spin-TI3TSVVT.js → spin-VHNGNWTD.js} +11 -11
- package/bundle/{spin-notifications-SE2HVZI7.js → spin-notifications-7NC5XZEM.js} +5 -5
- package/bundle/{spin-types-BLPYAETA.js → spin-types-C5KOQOPD.js} +7 -3
- package/bundle/{sse-parser-anthropic-A6R4Z2TB.js → sse-parser-anthropic-MMTVWHLI.js} +3 -3
- package/bundle/{sse-parser-responses-HSZY3QGJ.js → sse-parser-responses-3AOFN64C.js} +3 -3
- package/bundle/{ssrf-guard-O6SHIK6Q.js → ssrf-guard-U2JA72TC.js} +3 -3
- package/bundle/{start-7QZIWO3S.js → start-H5IUFAWF.js} +4 -2
- package/bundle/{start-7QZIWO3S.js.map → start-H5IUFAWF.js.map} +2 -2
- package/bundle/{stt-LGVPXMVR.js → stt-PSOPPBV4.js} +4 -4
- package/bundle/{system-status-JZU5FO7B.js → system-status-4LYGOFNO.js} +38 -24
- package/bundle/system-status-4LYGOFNO.js.map +7 -0
- package/bundle/{task-store-W5BFIAIH.js → task-store-MNCW42BW.js} +4 -4
- package/bundle/{telegram-adapter-H6PMFPMB.js → telegram-adapter-O6KIZDY6.js} +69 -46
- package/bundle/telegram-adapter-O6KIZDY6.js.map +7 -0
- package/bundle/{tool-registry-IZX2IOBM.js → tool-registry-JJMWCQKZ.js} +26 -24
- package/bundle/{tool-sandbox-4UC6GAKA.js → tool-sandbox-CNL6V6IH.js} +4 -4
- package/bundle/{transport-config-KBF5W2DP.js → transport-config-6MB2K2XC.js} +7 -7
- package/bundle/tribe-GDTFYJTK.js +111 -0
- package/bundle/tribe-GDTFYJTK.js.map +7 -0
- package/bundle/{update-MESYO4LO.js → update-HGQAOC5L.js} +3 -3
- package/bundle/{usage-tracker-NXD364VX.js → usage-tracker-SR4BI6ZT.js} +2 -2
- package/bundle/{user-registry-35BW4XKM.js → user-registry-4PACZJIJ.js} +4 -4
- package/bundle/wire-platform-KKPWNNNQ.js +88 -0
- package/bundle/wire-platform-KKPWNNNQ.js.map +7 -0
- package/bundle/ws-peer-client-U3NNPOK7.js +370 -0
- package/bundle/ws-peer-client-U3NNPOK7.js.map +7 -0
- package/package.json +1 -1
- package/scripts/abtars-watchdog.service +2 -1
- package/scripts/abtars-watchdog.sh +1 -5
- package/scripts/emergency-deploy.sh +2 -2
- package/scripts/emergency-update.sh +88 -41
- package/bundle/chunk-3AAENI2K.js +0 -210
- package/bundle/chunk-3AAENI2K.js.map +0 -7
- package/bundle/chunk-4MULJ5SS.js.map +0 -7
- package/bundle/chunk-4S554KLW.js +0 -105
- package/bundle/chunk-4S554KLW.js.map +0 -7
- package/bundle/chunk-5GCLBUBS.js +0 -257
- package/bundle/chunk-5GCLBUBS.js.map +0 -7
- package/bundle/chunk-BROFMHC2.js.map +0 -7
- package/bundle/chunk-EGL6UMAO.js.map +0 -7
- package/bundle/chunk-EQSG2CRM.js.map +0 -7
- package/bundle/chunk-GXL7HJPT.js.map +0 -7
- package/bundle/chunk-HKRSMUXJ.js.map +0 -7
- package/bundle/chunk-HT2BPTZY.js +0 -241
- package/bundle/chunk-HT2BPTZY.js.map +0 -7
- package/bundle/chunk-HZDLFLRP.js.map +0 -7
- package/bundle/chunk-IKUZPMVA.js +0 -82
- package/bundle/chunk-IKUZPMVA.js.map +0 -7
- package/bundle/chunk-LGP6TYFI.js.map +0 -7
- package/bundle/chunk-ONBF5DDU.js.map +0 -7
- package/bundle/chunk-RWRRGE4U.js +0 -72
- package/bundle/chunk-RWRRGE4U.js.map +0 -7
- package/bundle/chunk-SIFPBTI4.js.map +0 -7
- package/bundle/chunk-VUIX5AGB.js +0 -65
- package/bundle/chunk-VUIX5AGB.js.map +0 -7
- package/bundle/chunk-W4EA4GCA.js.map +0 -7
- package/bundle/chunk-XWRADSXO.js.map +0 -7
- package/bundle/chunk-Y76VUJSF.js +0 -75
- package/bundle/chunk-Y76VUJSF.js.map +0 -7
- package/bundle/chunk-YRU2K3O6.js.map +0 -7
- package/bundle/context-2RJHC2LE.js.map +0 -7
- package/bundle/direct-api-transport-E3LNDBJT.js.map +0 -7
- package/bundle/dns-wakeup-IDOJIXBX.js.map +0 -7
- package/bundle/heartbeat-tier3-ABWL3P7M.js.map +0 -7
- package/bundle/install-OS3CU7NF.js.map +0 -7
- package/bundle/metrics-collector-L3VPEHII.js.map +0 -7
- package/bundle/peer-client-RGEU5HOK.js.map +0 -7
- package/bundle/peer-jwt-NCCPXJRX.js +0 -18
- package/bundle/public/css/dashboard.css +0 -542
- package/bundle/public/index.html +0 -180
- package/bundle/public/js/app.js +0 -437
- package/bundle/public/memory-universe.js +0 -384
- package/bundle/stream-single-RFJNUTL6.js +0 -34
- package/bundle/stream-single-RFJNUTL6.js.map +0 -7
- package/bundle/subagent-runtime-5QUVES3W.js +0 -14
- package/bundle/system-status-JZU5FO7B.js.map +0 -7
- package/bundle/telegram-adapter-H6PMFPMB.js.map +0 -7
- package/bundle/usage-tracker-NXD364VX.js.map +0 -7
- package/bundle/user-registry-35BW4XKM.js.map +0 -7
- package/bundle/ws-peer-client-AIXCXF7V.js +0 -173
- package/bundle/ws-peer-client-AIXCXF7V.js.map +0 -7
- /package/bundle/{abmind-lazy-7Z44NODV.js.map → abmind-lazy-E3YCFKQ5.js.map} +0 -0
- /package/bundle/{acp-raw-client-E6FM45NC.js.map → acp-raw-client-UCNK3OTU.js.map} +0 -0
- /package/bundle/{action-gate-G2V47NHW.js.map → action-gate-V4FCBHFB.js.map} +0 -0
- /package/bundle/{agent-api-adapter-YAHKQMMZ.js.map → agent-api-adapter-7HEPYSIN.js.map} +0 -0
- /package/bundle/{agent-api-rate-limit-WCFXJMGY.js.map → agent-api-rate-limit-RZSAM3SW.js.map} +0 -0
- /package/bundle/{agent-registry-GI6CLT3Z.js.map → agent-registry-46A2R5KP.js.map} +0 -0
- /package/bundle/{bootstrap-X2QYIZIJ.js.map → bootstrap-MIHJJSWU.js.map} +0 -0
- /package/bundle/{bridge-lock-transport-4ZH7QTJP.js.map → bridge-lock-transport-7RSN7OLJ.js.map} +0 -0
- /package/bundle/{browser-DMARZJIN.js.map → browser-F6BCWJWW.js.map} +0 -0
- /package/bundle/{budget-45QOBDWA.js.map → budget-WUM3SPKW.js.map} +0 -0
- /package/bundle/{capability-JFWX3IQF.js.map → capability-QVRKGRFC.js.map} +0 -0
- /package/bundle/{chunk-YSKCQH6E.js.map → chunk-2IYJ4I66.js.map} +0 -0
- /package/bundle/{chunk-KTYGKPYM.js.map → chunk-2NLUT5S2.js.map} +0 -0
- /package/bundle/{chunk-OKAQICWY.js.map → chunk-3GQX34S2.js.map} +0 -0
- /package/bundle/{chunk-QROWBWLL.js.map → chunk-3XZ773BS.js.map} +0 -0
- /package/bundle/{chunk-DYBW4XXL.js.map → chunk-467SRLLR.js.map} +0 -0
- /package/bundle/{chunk-GPZNXY2U.js.map → chunk-4S3H4OK7.js.map} +0 -0
- /package/bundle/{chunk-NDCRWEEJ.js.map → chunk-4Y5MJQRE.js.map} +0 -0
- /package/bundle/{chunk-FRKW6LWB.js.map → chunk-55UWKI5C.js.map} +0 -0
- /package/bundle/{chunk-4UL3KINB.js.map → chunk-5PNJFDSW.js.map} +0 -0
- /package/bundle/{chunk-OXTSWQCX.js.map → chunk-5Y3FJ2Y7.js.map} +0 -0
- /package/bundle/{chunk-TMUYFERL.js.map → chunk-6B5ZFUPD.js.map} +0 -0
- /package/bundle/{chunk-65VCEC32.js.map → chunk-6PA5JBUU.js.map} +0 -0
- /package/bundle/{chunk-AFREM7FX.js.map → chunk-CK7YTA2F.js.map} +0 -0
- /package/bundle/{chunk-NRUSRJXR.js.map → chunk-DZJ5QZFD.js.map} +0 -0
- /package/bundle/{chunk-YRSMGJFP.js.map → chunk-E67KESEG.js.map} +0 -0
- /package/bundle/{chunk-ZV4IWKDJ.js.map → chunk-E7XD5UGB.js.map} +0 -0
- /package/bundle/{chunk-PEDX56EL.js.map → chunk-EFGBM555.js.map} +0 -0
- /package/bundle/{chunk-UPRZDU6T.js.map → chunk-IY6UKLPS.js.map} +0 -0
- /package/bundle/{chunk-EUZDKV3C.js.map → chunk-J4RUFAPK.js.map} +0 -0
- /package/bundle/{chunk-5B5B6EHL.js.map → chunk-JLWYPGWI.js.map} +0 -0
- /package/bundle/{chunk-5QUTMUIK.js.map → chunk-JXYWDAHD.js.map} +0 -0
- /package/bundle/{chunk-TEFZ4JA4.js.map → chunk-NHPLD3C7.js.map} +0 -0
- /package/bundle/{chunk-2KC5G3EA.js.map → chunk-OWUO5RS3.js.map} +0 -0
- /package/bundle/{chunk-WYHGNI56.js.map → chunk-PMD5BLFS.js.map} +0 -0
- /package/bundle/{chunk-URQPDCK5.js.map → chunk-Q66LQMMZ.js.map} +0 -0
- /package/bundle/{chunk-JQDJPUHM.js.map → chunk-TWB2ZGVH.js.map} +0 -0
- /package/bundle/{chunk-IJT4KWXT.js.map → chunk-U4U47YE7.js.map} +0 -0
- /package/bundle/{chunk-2FAZIA37.js.map → chunk-W546CU3A.js.map} +0 -0
- /package/bundle/{chunk-JNIHEDKF.js.map → chunk-XPWYDNWL.js.map} +0 -0
- /package/bundle/{chunk-EFJVUJBE.js.map → chunk-Y5FEFKGM.js.map} +0 -0
- /package/bundle/{chunk-GVM5YU5I.js.map → chunk-Z4FZPB42.js.map} +0 -0
- /package/bundle/{chunk-7BSQ5UQO.js.map → chunk-ZSIDQ66D.js.map} +0 -0
- /package/bundle/{chunk-XX6BGTPO.js.map → chunk-ZZZCJJEO.js.map} +0 -0
- /package/bundle/{commands-XYEGVUZF.js.map → commands-2ZW6CMLC.js.map} +0 -0
- /package/bundle/{config-M3P5IOAI.js.map → config-YMY5YHKN.js.map} +0 -0
- /package/bundle/{daemon-TB23FFWY.js.map → daemon-D7SU63OY.js.map} +0 -0
- /package/bundle/{delegation-tools-QKNYQGTQ.js.map → delegation-tools-WS7Z56KZ.js.map} +0 -0
- /package/bundle/{deploy-EPDWNHJU.js.map → deploy-AMTVKIMU.js.map} +0 -0
- /package/bundle/{deps-WVK553KF.js.map → deps-T63AVJKJ.js.map} +0 -0
- /package/bundle/{doctor-probes-B54JFIW3.js.map → doctor-probes-O6YI6XSZ.js.map} +0 -0
- /package/bundle/{env-schema-4JXQUOH4.js.map → env-schema-B5RB32DC.js.map} +0 -0
- /package/bundle/{gossip-3C3BSNPN.js.map → gossip-SKRCPOBS.js.map} +0 -0
- /package/bundle/{guardrails-DL7ZSWVN.js.map → guardrails-64GQ5Y5K.js.map} +0 -0
- /package/bundle/{heartbeat-system-MVTRS4GP.js.map → heartbeat-system-X4MUTKJD.js.map} +0 -0
- /package/bundle/{hook-system-M3POLUIB.js.map → hook-system-YB635OC4.js.map} +0 -0
- /package/bundle/{hotskills-FWX4QI7V.js.map → hotskills-Q75D2DK3.js.map} +0 -0
- /package/bundle/{install-manifest-5PPWMD2W.js.map → install-manifest-J7ICPCJN.js.map} +0 -0
- /package/bundle/{irc-adapter-PTTZD32W.js.map → irc-adapter-TVEV4R6H.js.map} +0 -0
- /package/bundle/{irc-config-CP7ZMUOX.js.map → irc-config-M676FOFI.js.map} +0 -0
- /package/bundle/{kanban-board-M326B2XJ.js.map → kanban-board-DLEJUCNN.js.map} +0 -0
- /package/bundle/{kanban-channel-IJ52OMNA.js.map → kanban-channel-XOLUHJZJ.js.map} +0 -0
- /package/bundle/{lazy-require-KCRVT4SI.js.map → lazy-require-JKQSALXN.js.map} +0 -0
- /package/bundle/{logger-OWCSNYCA.js.map → logger-3EGHBD4R.js.map} +0 -0
- /package/bundle/{main-chat-ZNUZCTNS.js.map → main-chat-3H63REKK.js.map} +0 -0
- /package/bundle/{master-user-HSKM4ZFN.js.map → master-user-MUBUP3KD.js.map} +0 -0
- /package/bundle/{media-utils-3ZYOD7SK.js.map → media-utils-HUUIALAJ.js.map} +0 -0
- /package/bundle/{message-pipeline-P5GAQU4Z.js.map → message-pipeline-GRDRWONR.js.map} +0 -0
- /package/bundle/{model-health-registry-MLEIZSTV.js.map → model-health-registry-QADMFQFQ.js.map} +0 -0
- /package/bundle/{nerve-IGSXBKZZ.js.map → nerve-QPAEBRKX.js.map} +0 -0
- /package/bundle/{notification-BFSIEECG.js.map → notification-3JICGXWU.js.map} +0 -0
- /package/bundle/{openrouter-credits-NTVZDRYM.js.map → openrouter-credits-7NEIPYJN.js.map} +0 -0
- /package/bundle/{orc-tools-4CHEFWSN.js.map → orc-tools-UZVPONKY.js.map} +0 -0
- /package/bundle/{peer-auth-QC4EF2PM.js.map → peer-auth-RI43DKJE.js.map} +0 -0
- /package/bundle/{peer-config-TN55LFDC.js.map → peer-config-URM7DCW6.js.map} +0 -0
- /package/bundle/{peer-jwt-NCCPXJRX.js.map → peer-transport-SI7I72DB.js.map} +0 -0
- /package/bundle/{peer-transport-I6JPLFZ2.js.map → phase-transport-ESWWACZI.js.map} +0 -0
- /package/bundle/{phase-transport-PGKU2KD4.js.map → reconcile-GFDQYNBD.js.map} +0 -0
- /package/bundle/{reconciler-EBKH3JNU.js.map → reconciler-IEUJXJN2.js.map} +0 -0
- /package/bundle/{restore-IFHPI7I7.js.map → restore-FARTGLQQ.js.map} +0 -0
- /package/bundle/{reconcile-CTFCLQRN.js.map → rollback-GEWPZABG.js.map} +0 -0
- /package/bundle/{sandbox-runtime-QROWHDCS.js.map → sandbox-runtime-DV6E25J6.js.map} +0 -0
- /package/bundle/{self-healer-utils-IFAYOQO2.js.map → self-healer-utils-P4SKNNEM.js.map} +0 -0
- /package/bundle/{rollback-ANRI3T5Z.js.map → sha-tracker-77SHLYNY.js.map} +0 -0
- /package/bundle/{skill-session-BMSRQSHV.js.map → skill-session-5HSMXY54.js.map} +0 -0
- /package/bundle/{sha-tracker-ZWBP6CIJ.js.map → skill-stats-MI3RSWWL.js.map} +0 -0
- /package/bundle/{skill-stats-JORH5DGM.js.map → skill-watcher-5L7JE6TN.js.map} +0 -0
- /package/bundle/{skill-watcher-E4MGLKLS.js.map → sleep-I4JFASCY.js.map} +0 -0
- /package/bundle/{sleep-36XS6MHJ.js.map → soul-bundle-522C3IRH.js.map} +0 -0
- /package/bundle/{soul-bundle-VWAVHCZ6.js.map → spin-VHNGNWTD.js.map} +0 -0
- /package/bundle/{spin-notifications-SE2HVZI7.js.map → spin-notifications-7NC5XZEM.js.map} +0 -0
- /package/bundle/{spin-TI3TSVVT.js.map → spin-types-C5KOQOPD.js.map} +0 -0
- /package/bundle/{sse-parser-anthropic-A6R4Z2TB.js.map → sse-parser-anthropic-MMTVWHLI.js.map} +0 -0
- /package/bundle/{sse-parser-responses-HSZY3QGJ.js.map → sse-parser-responses-3AOFN64C.js.map} +0 -0
- /package/bundle/{ssrf-guard-O6SHIK6Q.js.map → ssrf-guard-U2JA72TC.js.map} +0 -0
- /package/bundle/{spin-types-BLPYAETA.js.map → stt-PSOPPBV4.js.map} +0 -0
- /package/bundle/{stt-LGVPXMVR.js.map → task-store-MNCW42BW.js.map} +0 -0
- /package/bundle/{subagent-runtime-5QUVES3W.js.map → tool-registry-JJMWCQKZ.js.map} +0 -0
- /package/bundle/{task-store-W5BFIAIH.js.map → tool-sandbox-CNL6V6IH.js.map} +0 -0
- /package/bundle/{tool-registry-IZX2IOBM.js.map → transport-config-6MB2K2XC.js.map} +0 -0
- /package/bundle/{tool-sandbox-4UC6GAKA.js.map → update-HGQAOC5L.js.map} +0 -0
- /package/bundle/{transport-config-KBF5W2DP.js.map → usage-tracker-SR4BI6ZT.js.map} +0 -0
- /package/bundle/{update-MESYO4LO.js.map → user-registry-4PACZJIJ.js.map} +0 -0
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
import {
|
|
4
4
|
init_log_and_swallow,
|
|
5
5
|
logAndSwallow
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-2IYJ4I66.js";
|
|
7
7
|
import {
|
|
8
8
|
init_logger,
|
|
9
9
|
logInfo,
|
|
10
10
|
logWarn
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-XRTXYN66.js";
|
|
12
12
|
import {
|
|
13
13
|
__esm,
|
|
14
14
|
__require
|
|
@@ -287,4 +287,4 @@ export {
|
|
|
287
287
|
SkillWatcher,
|
|
288
288
|
init_skill_watcher
|
|
289
289
|
};
|
|
290
|
-
//# sourceMappingURL=chunk-
|
|
290
|
+
//# sourceMappingURL=chunk-J4RUFAPK.js.map
|
|
@@ -4,7 +4,10 @@ import {
|
|
|
4
4
|
printBanner
|
|
5
5
|
} from "./chunk-YDY6QVWJ.js";
|
|
6
6
|
import {
|
|
7
|
-
acquireLock
|
|
7
|
+
acquireLock,
|
|
8
|
+
emptyManifest,
|
|
9
|
+
readManifest,
|
|
10
|
+
writeManifest
|
|
8
11
|
} from "./chunk-5NY2YULC.js";
|
|
9
12
|
import {
|
|
10
13
|
packagePaths
|
|
@@ -13,6 +16,17 @@ import {
|
|
|
13
16
|
// src/cli/commands/rollback.ts
|
|
14
17
|
import { existsSync, readFileSync, writeFileSync, unlinkSync, symlinkSync } from "node:fs";
|
|
15
18
|
import { join } from "node:path";
|
|
19
|
+
import { hostname } from "node:os";
|
|
20
|
+
function resolveReleaseIdentity(releaseDir, target) {
|
|
21
|
+
let version = target;
|
|
22
|
+
try {
|
|
23
|
+
const pkg = JSON.parse(readFileSync(join(releaseDir, "package.json"), "utf-8"));
|
|
24
|
+
if (typeof pkg.version === "string" && pkg.version) version = pkg.version;
|
|
25
|
+
} catch {
|
|
26
|
+
}
|
|
27
|
+
const commit = /^[0-9a-f]{7,40}$/.test(target) ? target : null;
|
|
28
|
+
return { version, commit };
|
|
29
|
+
}
|
|
16
30
|
async function rollback(opts) {
|
|
17
31
|
await printBanner("rollback");
|
|
18
32
|
const paths = packagePaths("abtars");
|
|
@@ -57,12 +71,28 @@ async function rollback(opts) {
|
|
|
57
71
|
symlinkSync(targetDir, paths.app);
|
|
58
72
|
} catch {
|
|
59
73
|
}
|
|
60
|
-
|
|
74
|
+
const priorManifest = await readManifest(paths.manifest);
|
|
75
|
+
const { version: targetVersion, commit: targetCommit } = resolveReleaseIdentity(targetDir, target);
|
|
76
|
+
await writeManifest(paths.manifest, {
|
|
77
|
+
...priorManifest ?? emptyManifest("abtars", hostname()),
|
|
78
|
+
version: targetVersion,
|
|
79
|
+
commit: targetCommit,
|
|
80
|
+
activatedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
81
|
+
previousVersion: priorManifest?.version ?? null,
|
|
82
|
+
previousCommit: priorManifest?.commit ?? null
|
|
83
|
+
// source intentionally preserved from prior manifest — rollback does not
|
|
84
|
+
// change release provenance, and Manifest.source has no 'rollback' variant.
|
|
85
|
+
});
|
|
86
|
+
process.stdout.write(`\u2713 rolled back to ${target} (slot ${slot}) \u2014 manifest updated to ${targetVersion}
|
|
61
87
|
`);
|
|
62
88
|
try {
|
|
63
|
-
const
|
|
89
|
+
const statePath = join(paths.home, "deploy.state");
|
|
90
|
+
const state = JSON.parse(readFileSync(statePath, "utf-8") || "{}");
|
|
91
|
+
state.status = "rollback";
|
|
92
|
+
state.version = targetVersion;
|
|
93
|
+
state.completedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
64
94
|
state.restartCount = 0;
|
|
65
|
-
writeFileSync(
|
|
95
|
+
writeFileSync(statePath, JSON.stringify(state) + "\n");
|
|
66
96
|
} catch {
|
|
67
97
|
}
|
|
68
98
|
writeFileSync(join(paths.home, ".start-reason"), `rollback:${target}`);
|
|
@@ -82,4 +112,4 @@ async function rollback(opts) {
|
|
|
82
112
|
export {
|
|
83
113
|
rollback
|
|
84
114
|
};
|
|
85
|
-
//# sourceMappingURL=chunk-
|
|
115
|
+
//# sourceMappingURL=chunk-J7DRPVMU.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/cli/commands/rollback.ts"],
|
|
4
|
+
"sourcesContent": ["import { printBanner } from './banner.js';\n/**\n * `abtars rollback` \u2014 repoint current symlink to a previous release from history.json.\n * --to N (1-3, default 1) selects which prior to restore.\n */\n\nimport { existsSync, readFileSync, writeFileSync, unlinkSync, symlinkSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { hostname } from 'node:os';\nimport { acquireLock, packagePaths, readManifest, writeManifest, emptyManifest } from '../deploy-lib-import.js';\n\n/**\n * Derive {version, commit} for a history entry. History entries are either a\n * git short SHA (dev builds, e.g. \"3aebb9d\") or a version string (npm builds,\n * e.g. \"0.3.4-alpha.8\"). The release dir's package.json holds the full version.\n */\nfunction resolveReleaseIdentity(releaseDir: string, target: string): { version: string; commit: string | null } {\n let version = target;\n try {\n const pkg = JSON.parse(readFileSync(join(releaseDir, 'package.json'), 'utf-8')) as { version?: string };\n if (typeof pkg.version === 'string' && pkg.version) version = pkg.version;\n } catch { /* fall back to target as version */ }\n // Git short SHA: 7-40 hex chars. npm versions contain dots/dashes.\n const commit = /^[0-9a-f]{7,40}$/.test(target) ? target : null;\n return { version, commit };\n}\n\nexport async function rollback(opts?: { to?: number }): Promise<number> {\n await printBanner(\"rollback\");\n const paths = packagePaths('abtars');\n const releasesDir = paths.releasesDir;\n const historyFile = join(releasesDir, 'history.json');\n const currentLink = join(releasesDir, 'current');\n const slot = opts?.to ?? 1;\n\n if (slot < 1 || slot > 3) {\n process.stderr.write(`Invalid --to value: ${slot}. Must be 1-3.\\n`);\n return 2;\n }\n\n let history: string[] = [];\n try { history = JSON.parse(readFileSync(historyFile, \"utf-8\")); } catch {}\n\n if (history.length <= slot) {\n process.stderr.write(`Nothing at slot ${slot} (history has ${history.length} entries).\\n`);\n return 2;\n }\n\n const target = history[slot]!;\n const targetDir = join(releasesDir, target);\n if (!existsSync(targetDir)) {\n process.stderr.write(`Release dir ${target} not found on disk.\\n`);\n return 2;\n }\n\n const release = await acquireLock(paths.lock, 'rollback');\n try {\n // Repoint current symlink\n try { unlinkSync(currentLink); } catch {}\n symlinkSync(targetDir, currentLink);\n\n // Also repoint legacy app/ symlink\n try { unlinkSync(paths.app); } catch {}\n try { symlinkSync(targetDir, paths.app); } catch {}\n\n // #1291: update manifest.json + deploy.state so the respawned bridge (which\n // reads its version from manifest via getDeployedVersion()) reports the\n // rolled-back release, not the stale pre-rollback one. Without this,\n // /software and bridge.lock keep showing the old version even though the\n // symlink + code were swapped correctly.\n const priorManifest = await readManifest(paths.manifest);\n const { version: targetVersion, commit: targetCommit } = resolveReleaseIdentity(targetDir, target);\n await writeManifest(paths.manifest, {\n ...(priorManifest ?? emptyManifest('abtars', hostname())),\n version: targetVersion,\n commit: targetCommit,\n activatedAt: new Date().toISOString(),\n previousVersion: priorManifest?.version ?? null,\n previousCommit: priorManifest?.commit ?? null,\n // source intentionally preserved from prior manifest \u2014 rollback does not\n // change release provenance, and Manifest.source has no 'rollback' variant.\n });\n\n process.stdout.write(`\u2713 rolled back to ${target} (slot ${slot}) \u2014 manifest updated to ${targetVersion}\\n`);\n\n // Reset circuit breaker counter + mark deploy.state so /software deploy-state line is accurate\n try {\n const statePath = join(paths.home, 'deploy.state');\n const state: Record<string, unknown> = JSON.parse(readFileSync(statePath, 'utf-8') || '{}');\n state.status = 'rollback';\n state.version = targetVersion;\n state.completedAt = new Date().toISOString();\n state.restartCount = 0;\n writeFileSync(statePath, JSON.stringify(state) + '\\n');\n } catch {}\n\n // Write start reason + restart\n writeFileSync(join(paths.home, '.start-reason'), `rollback:${target}`);\n\n // Kill bridge so WD respawns from rolled-back code\n try {\n const bridgePid = JSON.parse(readFileSync(join(paths.home, 'bridge.lock'), 'utf-8')).pid;\n if (bridgePid > 0) process.kill(bridgePid, 'SIGTERM');\n } catch {}\n\n process.stdout.write(`\u267B\uFE0F Bridge killed \u2014 WD will respawn from ${target}\\n`);\n return 0;\n } finally {\n await release();\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -40,6 +40,7 @@ var ModelHealthRegistry = class {
|
|
|
40
40
|
}
|
|
41
41
|
drain(b, now) {
|
|
42
42
|
if (this.authSticky && b.authFailed) return;
|
|
43
|
+
if (b.creditsFailed) return;
|
|
43
44
|
const elapsed = now - b.lastUpdate;
|
|
44
45
|
b.level = Math.max(0, b.level - elapsed * this.leakPerMs);
|
|
45
46
|
b.lastUpdate = now;
|
|
@@ -87,6 +88,10 @@ var ModelHealthRegistry = class {
|
|
|
87
88
|
b.level = Math.min(1, b.level + this.rateLimitFill);
|
|
88
89
|
if (retryAfterMs && retryAfterMs > 0) b.cooldownUntil = now + retryAfterMs;
|
|
89
90
|
break;
|
|
91
|
+
case "credits":
|
|
92
|
+
b.level = 1;
|
|
93
|
+
b.creditsFailed = true;
|
|
94
|
+
break;
|
|
90
95
|
case "weak":
|
|
91
96
|
b.level = Math.min(1, b.level + this.weakFill);
|
|
92
97
|
break;
|
|
@@ -108,6 +113,7 @@ var ModelHealthRegistry = class {
|
|
|
108
113
|
this.drain(b, now);
|
|
109
114
|
let status = "healthy";
|
|
110
115
|
if (b.authFailed) status = "auth_failed";
|
|
116
|
+
else if (b.creditsFailed) status = "exhausted";
|
|
111
117
|
else if (b.level > this.skipThreshold) status = "exhausted";
|
|
112
118
|
else if (b.level > 0.3) status = "degraded";
|
|
113
119
|
result.set(key, { level: Math.round(b.level * 100), consecutiveErrors: b.consecutiveErrors, cooldownUntil: b.cooldownUntil, status });
|
|
@@ -137,4 +143,4 @@ export {
|
|
|
137
143
|
ModelHealthRegistry,
|
|
138
144
|
classifyError
|
|
139
145
|
};
|
|
140
|
-
//# sourceMappingURL=chunk-
|
|
146
|
+
//# sourceMappingURL=chunk-JG4BKXBN.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/components/transport/model-health-registry.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * ModelHealthRegistry \u2014 shared per-model error tracking.\n * Leaky-bucket algorithm: fills on errors, drains over time. Full = skip.\n * One instance per bridge process, shared across all FallbackPolicy instances.\n *\n * All tuning constants configurable via transport.json `healthPolicy` key.\n * Missing fields fall back to hardcoded defaults.\n */\n\nexport type ErrorKind = \"rate_limit\" | \"credits\" | \"auth\" | \"transient\" | \"weak\" | \"empty\" | \"truncated\";\nexport type ModelStatus = \"healthy\" | \"degraded\" | \"exhausted\" | \"auth_failed\";\n\nexport interface HealthPolicyConfig {\n /** Bucket level (0-1) above which model is skipped. Default: 0.7 */\n skipThreshold?: number;\n /** Drain rate per minute (0-1). Default: 0.03 */\n leakPerMinute?: number;\n /** Auth error: fill amount (0-1). Default: 1.0 (instant full) */\n authFill?: number;\n /** Auth errors are sticky (never auto-drain). Default: true */\n authSticky?: boolean;\n /** Rate-limit fill per hit. Default: 0.5 */\n rateLimitFill?: number;\n /** Weak-model fill per hit. Default: 0.05 */\n weakFill?: number;\n /** Empty response (0 tokens) fill per hit. Default: 0.25 */\n emptyFill?: number;\n /** Truncated response (finish_reason=length) fill per hit. Default: 0 (disabled) */\n truncatedFill?: number;\n /** Transient progressive fill array. Default: [0.1, 0.2, 0.4, 0.8] */\n transientProgressive?: number[];\n /** Consecutive errors before cooldown kicks in. Default: 3 */\n transientCooldownAfter?: number;\n /** Max cooldown seconds for transient errors. Default: 300 */\n transientMaxCooldownSec?: number;\n}\n\ninterface Bucket {\n level: number;\n lastUpdate: number;\n consecutiveErrors: number;\n cooldownUntil?: number;\n authFailed?: boolean;\n /** #1296: credits (402) errors are sticky \u2014 bucket stays full until resetAll(). */\n creditsFailed?: boolean;\n demoted?: boolean;\n}\n\n// Defaults (unchanged from pre-config behavior)\nconst D_SKIP_THRESHOLD = 0.7;\nconst D_LEAK_PER_MIN = 0.03;\nconst D_AUTH_STICKY = true;\nconst D_RATE_LIMIT_FILL = 0.5;\nconst D_WEAK_FILL = 0.35;\nconst D_EMPTY_FILL = 0.25;\nconst D_TRUNCATED_FILL = 0;\nconst D_TRANSIENT_PROGRESSIVE = [0.1, 0.2, 0.4, 0.8];\nconst D_TRANSIENT_COOLDOWN_AFTER = 3;\nconst D_TRANSIENT_MAX_COOLDOWN_SEC = 300;\n\nexport class ModelHealthRegistry {\n private readonly buckets = new Map<string, Bucket>();\n private readonly skipThreshold: number;\n private readonly leakPerMs: number;\n private readonly authSticky: boolean;\n private readonly rateLimitFill: number;\n private readonly weakFill: number;\n private readonly emptyFill: number;\n private readonly truncatedFill: number;\n private readonly transientProgressive: number[];\n private readonly transientCooldownAfter: number;\n private readonly transientMaxCooldownMs: number;\n\n /** Fired when a model crosses the demotion threshold. Wired at boot. */\n onDemote?: (model: string, endpoint: string, reason: \"auth\" | \"timeout\") => void;\n\n constructor(config?: HealthPolicyConfig) {\n this.skipThreshold = config?.skipThreshold ?? D_SKIP_THRESHOLD;\n this.leakPerMs = (config?.leakPerMinute ?? D_LEAK_PER_MIN) / 60000;\n this.authSticky = config?.authSticky ?? D_AUTH_STICKY;\n this.rateLimitFill = config?.rateLimitFill ?? D_RATE_LIMIT_FILL;\n this.weakFill = config?.weakFill ?? D_WEAK_FILL;\n this.emptyFill = config?.emptyFill ?? D_EMPTY_FILL;\n this.truncatedFill = config?.truncatedFill ?? D_TRUNCATED_FILL;\n this.transientProgressive = config?.transientProgressive ?? D_TRANSIENT_PROGRESSIVE;\n this.transientCooldownAfter = config?.transientCooldownAfter ?? D_TRANSIENT_COOLDOWN_AFTER;\n this.transientMaxCooldownMs = (config?.transientMaxCooldownSec ?? D_TRANSIENT_MAX_COOLDOWN_SEC) * 1000;\n }\n\n private drain(b: Bucket, now: number): void {\n if (this.authSticky && b.authFailed) return;\n // #1296: credits exhaustion is sticky \u2014 no drain until resetAll()\n if (b.creditsFailed) return;\n const elapsed = now - b.lastUpdate;\n b.level = Math.max(0, b.level - elapsed * this.leakPerMs);\n b.lastUpdate = now;\n }\n\n shouldSkip(model: string, endpoint: string): boolean {\n const b = this.buckets.get(`${endpoint}|${model}`);\n if (!b) return false;\n const now = Date.now();\n if (b.cooldownUntil && now < b.cooldownUntil) return true;\n if (b.cooldownUntil && now >= b.cooldownUntil) b.cooldownUntil = undefined;\n this.drain(b, now);\n return b.level > this.skipThreshold;\n }\n\n recordSuccess(model: string, endpoint: string): void {\n const b = this.buckets.get(`${endpoint}|${model}`);\n if (!b) return;\n b.consecutiveErrors = 0;\n b.cooldownUntil = undefined;\n b.authFailed = false;\n }\n\n recordError(model: string, endpoint: string, kind: ErrorKind, retryAfterMs?: number): void {\n const key = `${endpoint}|${model}`;\n const now = Date.now();\n const b = this.buckets.get(key) ?? { level: 0, lastUpdate: now, consecutiveErrors: 0 };\n this.drain(b, now);\n\n switch (kind) {\n case \"auth\":\n b.level = 1.0;\n b.authFailed = true;\n if (this.onDemote && !b.demoted) {\n b.demoted = true;\n this.onDemote(model, endpoint, \"auth\");\n }\n break;\n case \"transient\": {\n const idx = Math.min(b.consecutiveErrors, this.transientProgressive.length - 1);\n b.level = Math.min(1.0, b.level + this.transientProgressive[idx]!);\n if (b.consecutiveErrors >= this.transientCooldownAfter) {\n b.cooldownUntil = now + Math.min((b.consecutiveErrors + 1) * 60_000, this.transientMaxCooldownMs);\n }\n break;\n }\n case \"rate_limit\":\n case \"credits\":\n b.level = Math.min(1.0, b.level + this.rateLimitFill);\n if (retryAfterMs && retryAfterMs > 0) b.cooldownUntil = now + retryAfterMs;\n break;\n case \"credits\":\n // #1296: credits exhaustion is sticky \u2014 stays full until resetAll() (manual /model reset)\n b.level = 1.0;\n b.creditsFailed = true;\n break;\n case \"weak\":\n b.level = Math.min(1.0, b.level + this.weakFill);\n break;\n case \"empty\":\n b.level = Math.min(1.0, b.level + this.emptyFill);\n break;\n case \"truncated\":\n if (this.truncatedFill > 0) b.level = Math.min(1.0, b.level + this.truncatedFill);\n break;\n }\n\n b.consecutiveErrors++;\n b.lastUpdate = now;\n this.buckets.set(key, b);\n }\n\n getHealth(): Map<string, { level: number; consecutiveErrors: number; cooldownUntil?: number; status: ModelStatus }> {\n const now = Date.now();\n const result = new Map<string, { level: number; consecutiveErrors: number; cooldownUntil?: number; status: ModelStatus }>();\n for (const [key, b] of this.buckets) {\n this.drain(b, now);\n let status: ModelStatus = \"healthy\";\n if (b.authFailed) status = \"auth_failed\";\n else if (b.creditsFailed) status = \"exhausted\";\n else if (b.level > this.skipThreshold) status = \"exhausted\";\n else if (b.level > 0.3) status = \"degraded\";\n result.set(key, { level: Math.round(b.level * 100), consecutiveErrors: b.consecutiveErrors, cooldownUntil: b.cooldownUntil, status });\n }\n return result;\n }\n\n /** Get bucket level for a specific model (0-100%). */\n getBucketLevel(model: string, endpoint: string): number {\n const b = this.buckets.get(`${endpoint}|${model}`);\n if (!b) return 0;\n this.drain(b, Date.now());\n return Math.round(b.level * 100);\n }\n\n resetAll(): void {\n this.buckets.clear();\n }\n}\n\n/** Classify HTTP status to error kind. */\nexport function classifyError(status: number, message?: string): ErrorKind {\n if (status === 402 && message?.includes(\"credits\")) return \"credits\";\n if (status === 429 || status === 402) return \"rate_limit\";\n if (status === 404 && message && /image input|No endpoints found/i.test(message)) return \"transient\";\n if (status === 401 || status === 403 || status === 404) return \"auth\";\n return \"transient\";\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -5,16 +5,16 @@ import {
|
|
|
5
5
|
BrowserManager,
|
|
6
6
|
BrowserTool,
|
|
7
7
|
DomainAllowlist
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-OWUO5RS3.js";
|
|
9
9
|
import {
|
|
10
10
|
getEnv,
|
|
11
11
|
init_env_schema
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-6PA5JBUU.js";
|
|
13
13
|
import {
|
|
14
14
|
init_logger,
|
|
15
15
|
logError,
|
|
16
16
|
logInfo
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-XRTXYN66.js";
|
|
18
18
|
import {
|
|
19
19
|
abtarsHome,
|
|
20
20
|
init_paths
|
|
@@ -66,7 +66,7 @@ function register(api) {
|
|
|
66
66
|
buf = buf.slice(nl + 1);
|
|
67
67
|
try {
|
|
68
68
|
const { taskId, prompt, timeoutMs } = JSON.parse(line);
|
|
69
|
-
import("./spin-
|
|
69
|
+
import("./spin-VHNGNWTD.js").then(({ spin: s }) => {
|
|
70
70
|
const { cardId } = s.dispatch({ type: "B", goal: prompt, source: "agent", timeoutMs });
|
|
71
71
|
conn.write(JSON.stringify({ ok: true, taskId, cardId, status: "spawned" }) + "\n");
|
|
72
72
|
}).catch((err) => {
|
|
@@ -98,4 +98,4 @@ export {
|
|
|
98
98
|
register,
|
|
99
99
|
browser_exports
|
|
100
100
|
};
|
|
101
|
-
//# sourceMappingURL=chunk-
|
|
101
|
+
//# sourceMappingURL=chunk-JLWYPGWI.js.map
|
|
@@ -3,15 +3,15 @@
|
|
|
3
3
|
import {
|
|
4
4
|
init_bridge_lock_transport,
|
|
5
5
|
writeRestartReason
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-KOSFXW2S.js";
|
|
7
7
|
import {
|
|
8
8
|
getEnv,
|
|
9
9
|
init_env_schema
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-6PA5JBUU.js";
|
|
11
11
|
import {
|
|
12
12
|
init_log_and_swallow,
|
|
13
13
|
logAndSwallow
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-2IYJ4I66.js";
|
|
15
15
|
import {
|
|
16
16
|
init_logger,
|
|
17
17
|
logDebug,
|
|
@@ -19,7 +19,7 @@ import {
|
|
|
19
19
|
logInfo,
|
|
20
20
|
logTrace,
|
|
21
21
|
logWarn
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-XRTXYN66.js";
|
|
23
23
|
import {
|
|
24
24
|
__export
|
|
25
25
|
} from "./chunk-7K2YZTLD.js";
|
|
@@ -17218,7 +17218,7 @@ var AcpTransport = class _AcpTransport {
|
|
|
17218
17218
|
this._rawClient = null;
|
|
17219
17219
|
}
|
|
17220
17220
|
if (_AcpTransport._rawMode) {
|
|
17221
|
-
const { AcpRawClient } = await import("./acp-raw-client-
|
|
17221
|
+
const { AcpRawClient } = await import("./acp-raw-client-UCNK3OTU.js");
|
|
17222
17222
|
let args2;
|
|
17223
17223
|
if (this.extraCliArgs) {
|
|
17224
17224
|
args2 = [...this.extraCliArgs];
|
|
@@ -17274,7 +17274,7 @@ var AcpTransport = class _AcpTransport {
|
|
|
17274
17274
|
env: cleanEnv
|
|
17275
17275
|
});
|
|
17276
17276
|
if (this.agent.pid) {
|
|
17277
|
-
import("./bridge-lock-transport-
|
|
17277
|
+
import("./bridge-lock-transport-7RSN7OLJ.js").then(({ trackAcpPid }) => trackAcpPid(this.agent.pid)).catch(() => {
|
|
17278
17278
|
});
|
|
17279
17279
|
}
|
|
17280
17280
|
if (!this.agent.stdin || !this.agent.stdout) {
|
|
@@ -17334,7 +17334,7 @@ var AcpTransport = class _AcpTransport {
|
|
|
17334
17334
|
const inTok = typeof params["inputTokens"] === "number" ? params["inputTokens"] : 0;
|
|
17335
17335
|
const outTok = typeof params["outputTokens"] === "number" ? params["outputTokens"] : 0;
|
|
17336
17336
|
if (inTok || outTok) {
|
|
17337
|
-
import("./budget-
|
|
17337
|
+
import("./budget-WUM3SPKW.js").then(({ incrementBudgetCounter }) => incrementBudgetCounter(this.agentName, inTok + outTok)).catch(() => {
|
|
17338
17338
|
});
|
|
17339
17339
|
}
|
|
17340
17340
|
}
|
|
@@ -17410,12 +17410,12 @@ var AcpTransport = class _AcpTransport {
|
|
|
17410
17410
|
return chunks.join("") || "(no response)";
|
|
17411
17411
|
} finally {
|
|
17412
17412
|
const durationMs = Date.now() - this.promptStartedAt;
|
|
17413
|
-
import("./metrics-collector-
|
|
17413
|
+
import("./metrics-collector-YMUGY3PI.js").then(({ recordLatency, recordCall }) => {
|
|
17414
17414
|
recordLatency(`llm:${this.modelId ?? "unknown"}`, durationMs);
|
|
17415
17415
|
recordCall(`llm:${this.modelId ?? "unknown"}`, true);
|
|
17416
17416
|
}).catch(() => {
|
|
17417
17417
|
});
|
|
17418
|
-
import("./hook-system-
|
|
17418
|
+
import("./hook-system-YB635OC4.js").then(({ hasHooks, fire }) => {
|
|
17419
17419
|
if (!hasHooks("AfterPrompt")) return;
|
|
17420
17420
|
fire("AfterPrompt", {
|
|
17421
17421
|
event: "AfterPrompt",
|
|
@@ -17430,7 +17430,7 @@ var AcpTransport = class _AcpTransport {
|
|
|
17430
17430
|
}).catch((err) => logAndSwallow(TAG, "fire AfterPrompt", err));
|
|
17431
17431
|
}).catch((err) => logAndSwallow(TAG, "import hook-system", err));
|
|
17432
17432
|
this.sm.promptCompleted();
|
|
17433
|
-
import("./budget-
|
|
17433
|
+
import("./budget-WUM3SPKW.js").then(({ incrementBudgetCounter }) => incrementBudgetCounter(this.agentName, 0)).catch(() => {
|
|
17434
17434
|
});
|
|
17435
17435
|
this.drainPending();
|
|
17436
17436
|
}
|
|
@@ -17541,7 +17541,7 @@ var AcpTransport = class _AcpTransport {
|
|
|
17541
17541
|
}
|
|
17542
17542
|
async resetSession(_sessionKey) {
|
|
17543
17543
|
try {
|
|
17544
|
-
const { clearTransportCache, loadTransport, resolveAgent } = await import("./transport-config-
|
|
17544
|
+
const { clearTransportCache, loadTransport, resolveAgent } = await import("./transport-config-6MB2K2XC.js");
|
|
17545
17545
|
clearTransportCache();
|
|
17546
17546
|
const tc = loadTransport();
|
|
17547
17547
|
if (tc) {
|
|
@@ -17783,4 +17783,4 @@ export {
|
|
|
17783
17783
|
ModelNotFoundError,
|
|
17784
17784
|
AcpTransport
|
|
17785
17785
|
};
|
|
17786
|
-
//# sourceMappingURL=chunk-
|
|
17786
|
+
//# sourceMappingURL=chunk-JXYWDAHD.js.map
|
|
@@ -7,13 +7,14 @@ import {
|
|
|
7
7
|
import {
|
|
8
8
|
init_log_and_swallow,
|
|
9
9
|
logAndSwallow
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-2IYJ4I66.js";
|
|
11
11
|
import {
|
|
12
12
|
abtarsHome,
|
|
13
13
|
init_paths
|
|
14
14
|
} from "./chunk-GALQBVKO.js";
|
|
15
15
|
import {
|
|
16
|
-
__esm
|
|
16
|
+
__esm,
|
|
17
|
+
__export
|
|
17
18
|
} from "./chunk-7K2YZTLD.js";
|
|
18
19
|
|
|
19
20
|
// src/components/atomic-write.ts
|
|
@@ -33,6 +34,25 @@ var init_atomic_write = __esm({
|
|
|
33
34
|
});
|
|
34
35
|
|
|
35
36
|
// src/components/transport/bridge-lock-transport.ts
|
|
37
|
+
var bridge_lock_transport_exports = {};
|
|
38
|
+
__export(bridge_lock_transport_exports, {
|
|
39
|
+
appendRestartTimestamp: () => appendRestartTimestamp,
|
|
40
|
+
initBridgeLock: () => initBridgeLock,
|
|
41
|
+
readAndClearAcpPids: () => readAndClearAcpPids,
|
|
42
|
+
readAndClearForceSleep: () => readAndClearForceSleep,
|
|
43
|
+
readAndClearRestartReason: () => readAndClearRestartReason,
|
|
44
|
+
readAndClearRestartRequested: () => readAndClearRestartRequested,
|
|
45
|
+
readBridgeLockField: () => readBridgeLockField,
|
|
46
|
+
readLastPromptAt: () => readLastPromptAt,
|
|
47
|
+
readRestartTimestamps: () => readRestartTimestamps,
|
|
48
|
+
trackAcpPid: () => trackAcpPid,
|
|
49
|
+
updateBridgeLockField: () => updateBridgeLockField,
|
|
50
|
+
updateLastHeartbeat: () => updateLastHeartbeat,
|
|
51
|
+
writeForceSleep: () => writeForceSleep,
|
|
52
|
+
writeRestartReason: () => writeRestartReason,
|
|
53
|
+
writeRestartRequested: () => writeRestartRequested,
|
|
54
|
+
writeSleepStatus: () => writeSleepStatus
|
|
55
|
+
});
|
|
36
56
|
import { readFileSync } from "node:fs";
|
|
37
57
|
import { join } from "node:path";
|
|
38
58
|
function trackAcpPid(pid) {
|
|
@@ -173,6 +193,7 @@ export {
|
|
|
173
193
|
readAndClearForceSleep,
|
|
174
194
|
initBridgeLock,
|
|
175
195
|
updateLastHeartbeat,
|
|
196
|
+
bridge_lock_transport_exports,
|
|
176
197
|
init_bridge_lock_transport
|
|
177
198
|
};
|
|
178
|
-
//# sourceMappingURL=chunk-
|
|
199
|
+
//# sourceMappingURL=chunk-KOSFXW2S.js.map
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/components/atomic-write.ts", "../src/components/transport/bridge-lock-transport.ts"],
|
|
4
4
|
"sourcesContent": ["import { writeFileSync, renameSync, openSync, fsyncSync, closeSync, unlinkSync } from \"node:fs\";\n\n/** Atomic write: .tmp \u2192 fsync \u2192 rename. Crash-safe on POSIX. */\nexport function atomicWriteSync(path: string, data: string): void {\n const tmp = path + \".tmp\";\n writeFileSync(tmp, data, \"utf-8\");\n const fd = openSync(tmp, \"r\");\n fsyncSync(fd);\n closeSync(fd);\n renameSync(tmp, path);\n}\n\n/** Clean orphan .tmp files left by crashes. Call on boot. */\nexport function cleanOrphanTmp(path: string): void {\n try { unlinkSync(path + \".tmp\"); } catch { /* no orphan */ }\n}\n", "/**\n * bridge.lock \u2014 single source of truth for bridge runtime state.\n * Fields: pid, startedAt, lastHeartbeat, lastPromptAt, version,\n * sleepStatus, restartReason, restartRequested, forceSleep.\n */\nimport { logAndSwallow } from \"../log-and-swallow.js\";\nimport { readFileSync } from \"node:fs\";\nimport { atomicWriteSync } from \"../atomic-write.js\";\nimport { join } from \"node:path\";\nimport { abtarsHome } from \"../../paths.js\";\nimport { localISO } from \"../../utils/local-time.js\";\n\nexport type SleepStatus = \"awake\" | \"sleeping\" | \"hw_sleep\";\n\n/** Add an ACP child PID to bridge.lock tracking. */\nexport function trackAcpPid(pid: number): void {\n const pids = readBridgeLockField<number[]>(\"acpPids\") ?? [];\n pids.push(pid);\n updateBridgeLockField(\"acpPids\", pids);\n}\n\n/** Read and clear stale ACP PIDs from bridge.lock. */\nexport function readAndClearAcpPids(): number[] {\n const pids = readBridgeLockField<number[]>(\"acpPids\") ?? [];\n if (pids.length) updateBridgeLockField(\"acpPids\", []);\n return pids;\n}\n\n/** Read lastPromptAt from bridge.lock. Returns 0 if missing/unreadable. */\nexport function readLastPromptAt(): number {\n try {\n const lock = JSON.parse(readFileSync(join(abtarsHome(), \"bridge.lock\"), \"utf-8\"));\n return typeof lock.lastPromptAt === \"number\" ? lock.lastPromptAt : 0;\n } catch (err) { logAndSwallow(\"bridge_lock_transport\", \"readLastPromptAt\", err); return 0; }\n}\n\n/** Update a single field in bridge.lock (read-merge-write). */\nexport function updateBridgeLockField(key: string, value: unknown): void {\n const p = join(abtarsHome(), \"bridge.lock\");\n try {\n const lock = JSON.parse(readFileSync(p, \"utf-8\"));\n lock[key] = value;\n atomicWriteSync(p, JSON.stringify(lock));\n } catch (err) { logAndSwallow(\"bridge_lock_transport\", \"op\", err); }\n}\n\n/** Read a field from bridge.lock. Returns null if missing/unreadable. */\nexport function readBridgeLockField<T = unknown>(key: string): T | null {\n try {\n const lock = JSON.parse(readFileSync(join(abtarsHome(), \"bridge.lock\"), \"utf-8\"));\n return lock[key] ?? null;\n } catch (err) { logAndSwallow(\"bridge_lock_transport\", \"readBridgeLockField\", err); return null; }\n}\n\n/** Write restart reason to bridge.lock. */\nexport function writeRestartReason(reason: string): void {\n updateBridgeLockField(\"restartReason\", `${localISO()} ${reason}`);\n}\n\n/** Read and clear restart reason from bridge.lock. */\nexport function readAndClearRestartReason(): string | null {\n const reason = readBridgeLockField<string>(\"restartReason\");\n if (reason) updateBridgeLockField(\"restartReason\", null);\n return reason;\n}\n\n/** Write restart request to bridge.lock. */\nexport function writeRestartRequested(reason: string): void {\n updateBridgeLockField(\"restartRequested\", `${localISO()} ${reason}`);\n}\n\n/** Read and clear restart request from bridge.lock. */\nexport function readAndClearRestartRequested(): string | null {\n const req = readBridgeLockField<string>(\"restartRequested\");\n if (req) updateBridgeLockField(\"restartRequested\", null);\n return req;\n}\n\n/** Update sleep status in bridge.lock. */\nexport function writeSleepStatus(status: SleepStatus): void {\n updateBridgeLockField(\"sleepStatus\", status);\n}\n\n/** Append a restart timestamp to bridge.lock (capped at 10). Used by in-process watchdog circuit breaker. */\nexport function appendRestartTimestamp(): void {\n const ts = readBridgeLockField<number[]>(\"restartTimestamps\") ?? [];\n ts.push(Date.now());\n if (ts.length > 10) ts.splice(0, ts.length - 10);\n updateBridgeLockField(\"restartTimestamps\", ts);\n}\n\n/** Read recent restart timestamps from bridge.lock. */\nexport function readRestartTimestamps(): number[] {\n return readBridgeLockField<number[]>(\"restartTimestamps\") ?? [];\n}\n\n/** Request a forced sleep cycle on the next heartbeat tick.\n * See src/capabilities/sleep/index.ts spawnSleep() + src/components/daily-cycle.ts isDailyCycleDue().\n * Pattern mirrors writeRestartRequested/readAndClearRestartRequested. */\nexport function writeForceSleep(reason: string): void {\n updateBridgeLockField(\"forceSleep\", `${localISO()} ${reason}`);\n}\n\n/** Read and clear the force-sleep request from bridge.lock.\n * Sole deleter: spawnSleep. isDailyCycleDue peeks via readBridgeLockField. */\nexport function readAndClearForceSleep(): string | null {\n const v = readBridgeLockField<string>(\"forceSleep\");\n if (v) updateBridgeLockField(\"forceSleep\", null);\n return v;\n}\n\n/** Initialize bridge.lock with full boot state. Single writer for initial creation. */\nexport interface PrevBridgeState { pid: number | null; lastHeartbeat: number | null }\n\nexport function initBridgeLock(opts: { pid: number; startedAt: number; version: string; argv: string[]; startReason?: string }): PrevBridgeState {\n const p = join(abtarsHome(), \"bridge.lock\");\n let prev: PrevBridgeState = { pid: null, lastHeartbeat: null };\n try {\n // Read existing state (may have watchdogPid from watchdog, or stale pid from previous bridge)\n let existing: Record<string, unknown> = {};\n try { existing = JSON.parse(readFileSync(p, \"utf-8\")); } catch { /* missing or corrupt \u2014 cold boot */ }\n const prevPid = typeof existing.pid === \"number\" ? existing.pid : null;\n prev = { pid: prevPid, lastHeartbeat: typeof existing.lastHeartbeat === \"number\" ? existing.lastHeartbeat : null };\n // Classify boot type from previous heartbeat gap\n let bootType = \"cold\";\n if (prev.lastHeartbeat) {\n const gapS = (Date.now() - prev.lastHeartbeat) / 1000;\n if (gapS < 300) bootType = \"darkwake\";\n else if (gapS <= 7200) bootType = \"short-outage\";\n else bootType = \"long-outage\";\n }\n // Merge: preserve watchdogPid from watchdog or env var\n const wdPid = Number(process.env.ABTARS_WATCHDOG_PID) || existing.watchdogPid || null;\n atomicWriteSync(p, JSON.stringify({\n pid: opts.pid, watchdogPid: wdPid, startedAt: opts.startedAt, version: opts.version,\n sleepStatus: \"awake\", argv: opts.argv, lastHeartbeat: Date.now(), startReason: opts.startReason ?? \"unknown\", bootType,\n }));\n } catch (err) { logAndSwallow(\"bridge_lock_transport\", \"op\", err); }\n return prev;\n}\n\n/** Update lastHeartbeat timestamp in bridge.lock (called every tick). */\nexport function updateLastHeartbeat(): void {\n updateBridgeLockField(\"lastHeartbeat\", Date.now());\n}\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|