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
package/bundle/chunk-4S554KLW.js
DELETED
|
@@ -1,105 +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
|
-
PEERS_SCHEMA,
|
|
5
|
-
init_config_validator,
|
|
6
|
-
validateShape
|
|
7
|
-
} from "./chunk-LUNA6PM5.js";
|
|
8
|
-
import {
|
|
9
|
-
init_logger,
|
|
10
|
-
logInfo,
|
|
11
|
-
logWarn
|
|
12
|
-
} from "./chunk-GWILHZPT.js";
|
|
13
|
-
import {
|
|
14
|
-
abtarsHome,
|
|
15
|
-
init_paths
|
|
16
|
-
} from "./chunk-GALQBVKO.js";
|
|
17
|
-
import {
|
|
18
|
-
__esm,
|
|
19
|
-
__export
|
|
20
|
-
} from "./chunk-7K2YZTLD.js";
|
|
21
|
-
|
|
22
|
-
// src/components/peer-config.ts
|
|
23
|
-
var peer_config_exports = {};
|
|
24
|
-
__export(peer_config_exports, {
|
|
25
|
-
clearPeerConfigCache: () => clearPeerConfigCache,
|
|
26
|
-
loadPeerConfig: () => loadPeerConfig
|
|
27
|
-
});
|
|
28
|
-
import { existsSync, readFileSync } from "node:fs";
|
|
29
|
-
import { join } from "node:path";
|
|
30
|
-
function loadPeerConfig() {
|
|
31
|
-
if (_config) return _config;
|
|
32
|
-
const p = join(abtarsHome(), "config", "peers.json");
|
|
33
|
-
if (!existsSync(p)) {
|
|
34
|
-
_config = { self: { name: "default" }, peers: {}, ...DEFAULTS };
|
|
35
|
-
return _config;
|
|
36
|
-
}
|
|
37
|
-
try {
|
|
38
|
-
const raw = JSON.parse(readFileSync(p, "utf-8"));
|
|
39
|
-
validateShape(raw, PEERS_SCHEMA, "peers.json");
|
|
40
|
-
const peers = {};
|
|
41
|
-
if (raw.peers && typeof raw.peers === "object") {
|
|
42
|
-
for (const [name, entry] of Object.entries(raw.peers)) {
|
|
43
|
-
const e = entry;
|
|
44
|
-
if (typeof e.host === "string" && typeof e.port === "number" && typeof e.token === "string") {
|
|
45
|
-
peers[name] = {
|
|
46
|
-
host: e.host,
|
|
47
|
-
port: e.port,
|
|
48
|
-
token: e.token,
|
|
49
|
-
...typeof e.trust === "number" ? { trust: e.trust } : {},
|
|
50
|
-
...e.mode === "signed" ? { mode: "signed" } : {},
|
|
51
|
-
...typeof e.verifyKey === "string" ? { verifyKey: e.verifyKey } : {},
|
|
52
|
-
...typeof e.udpPort === "number" ? { udpPort: e.udpPort } : {},
|
|
53
|
-
...typeof e.certFingerprint === "string" ? { certFingerprint: e.certFingerprint } : {},
|
|
54
|
-
...typeof e.certPem === "string" ? { certPem: e.certPem } : {},
|
|
55
|
-
...Array.isArray(e.allowedTools) ? { allowedTools: e.allowedTools } : {},
|
|
56
|
-
...Array.isArray(e.allowedRead) ? { allowedRead: e.allowedRead } : {},
|
|
57
|
-
...Array.isArray(e.allowedWrite) ? { allowedWrite: e.allowedWrite } : {}
|
|
58
|
-
};
|
|
59
|
-
} else {
|
|
60
|
-
logWarn(TAG, `Skipped peer '${name}' \u2014 missing host/port/token`);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
_config = {
|
|
65
|
-
self: {
|
|
66
|
-
name: typeof raw.self?.name === "string" ? raw.self.name : "default",
|
|
67
|
-
...typeof raw.self?.signingKey === "string" ? { signingKey: raw.self.signingKey } : {},
|
|
68
|
-
...typeof raw.self?.udpPort === "number" ? { udpPort: raw.self.udpPort } : {}
|
|
69
|
-
},
|
|
70
|
-
peers,
|
|
71
|
-
...typeof raw.gossipSecret === "string" ? { gossipSecret: raw.gossipSecret } : {},
|
|
72
|
-
maxHops: typeof raw.maxHops === "number" ? raw.maxHops : DEFAULTS.maxHops,
|
|
73
|
-
timeoutMs: typeof raw.timeoutMs === "number" ? raw.timeoutMs : DEFAULTS.timeoutMs
|
|
74
|
-
};
|
|
75
|
-
const names = Object.keys(peers);
|
|
76
|
-
if (names.length > 0) logInfo(TAG, `Loaded ${names.length} peer(s): ${names.join(", ")} (self: ${_config.self.name})`);
|
|
77
|
-
return _config;
|
|
78
|
-
} catch (err) {
|
|
79
|
-
logWarn(TAG, `Failed to parse peers.json: ${err instanceof Error ? err.message : String(err)}`);
|
|
80
|
-
_config = { self: { name: "default" }, peers: {}, ...DEFAULTS };
|
|
81
|
-
return _config;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
function clearPeerConfigCache() {
|
|
85
|
-
_config = null;
|
|
86
|
-
}
|
|
87
|
-
var TAG, DEFAULTS, _config;
|
|
88
|
-
var init_peer_config = __esm({
|
|
89
|
-
"src/components/peer-config.ts"() {
|
|
90
|
-
init_paths();
|
|
91
|
-
init_logger();
|
|
92
|
-
init_config_validator();
|
|
93
|
-
TAG = "peer-config";
|
|
94
|
-
DEFAULTS = { maxHops: 12, timeoutMs: 6e4 };
|
|
95
|
-
_config = null;
|
|
96
|
-
}
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
export {
|
|
100
|
-
loadPeerConfig,
|
|
101
|
-
clearPeerConfigCache,
|
|
102
|
-
peer_config_exports,
|
|
103
|
-
init_peer_config
|
|
104
|
-
};
|
|
105
|
-
//# sourceMappingURL=chunk-4S554KLW.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/components/peer-config.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * peer-config.ts \u2014 load and validate ~/.abtars/config/peers.json (#392).\n */\n\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { abtarsHome } from \"../paths.js\";\nimport { logInfo, logWarn } from \"./logger.js\";\nimport { validateShape, PEERS_SCHEMA } from \"./config-validator.js\";\n\nconst TAG = \"peer-config\";\n\nexport interface PeerEntry {\n host: string;\n port: number;\n token: string;\n trust?: number;\n mode?: \"plain\" | \"signed\";\n verifyKey?: string;\n udpPort?: number;\n certFingerprint?: string;\n certPem?: string;\n allowedTools?: string[];\n allowedRead?: string[];\n allowedWrite?: string[];\n transport?: \"http\" | \"ws-outbound\";\n}\n\nexport interface PeerConfig {\n self: { name: string; signingKey?: string; udpPort?: number };\n peers: Record<string, PeerEntry>;\n gossipSecret?: string;\n maxHops: number;\n timeoutMs: number;\n}\n\nconst DEFAULTS: Omit<PeerConfig, \"peers\" | \"self\"> = { maxHops: 12, timeoutMs: 60000 };\n\nlet _config: PeerConfig | null = null;\n\nexport function loadPeerConfig(): PeerConfig {\n if (_config) return _config;\n const p = join(abtarsHome(), \"config\", \"peers.json\");\n if (!existsSync(p)) {\n _config = { self: { name: \"default\" }, peers: {}, ...DEFAULTS };\n return _config;\n }\n try {\n const raw = JSON.parse(readFileSync(p, \"utf-8\"));\n validateShape(raw, PEERS_SCHEMA, \"peers.json\");\n const peers: Record<string, PeerEntry> = {};\n if (raw.peers && typeof raw.peers === \"object\") {\n for (const [name, entry] of Object.entries(raw.peers)) {\n const e = entry as Record<string, unknown>;\n if (typeof e.host === \"string\" && typeof e.port === \"number\" && typeof e.token === \"string\") {\n peers[name] = {\n host: e.host, port: e.port, token: e.token,\n ...(typeof e.trust === \"number\" ? { trust: e.trust } : {}),\n ...(e.mode === \"signed\" ? { mode: \"signed\" as const } : {}),\n ...(typeof e.verifyKey === \"string\" ? { verifyKey: e.verifyKey } : {}),\n ...(typeof e.udpPort === \"number\" ? { udpPort: e.udpPort } : {}),\n ...(typeof e.certFingerprint === \"string\" ? { certFingerprint: e.certFingerprint } : {}),\n ...(typeof e.certPem === \"string\" ? { certPem: e.certPem } : {}),\n ...(Array.isArray(e.allowedTools) ? { allowedTools: e.allowedTools as string[] } : {}),\n ...(Array.isArray(e.allowedRead) ? { allowedRead: e.allowedRead as string[] } : {}),\n ...(Array.isArray(e.allowedWrite) ? { allowedWrite: e.allowedWrite as string[] } : {}),\n };\n } else {\n logWarn(TAG, `Skipped peer '${name}' \u2014 missing host/port/token`);\n }\n }\n }\n _config = {\n self: {\n name: typeof raw.self?.name === \"string\" ? raw.self.name : \"default\",\n ...(typeof raw.self?.signingKey === \"string\" ? { signingKey: raw.self.signingKey } : {}),\n ...(typeof raw.self?.udpPort === \"number\" ? { udpPort: raw.self.udpPort } : {}),\n },\n peers,\n ...(typeof raw.gossipSecret === \"string\" ? { gossipSecret: raw.gossipSecret } : {}),\n maxHops: typeof raw.maxHops === \"number\" ? raw.maxHops : DEFAULTS.maxHops,\n timeoutMs: typeof raw.timeoutMs === \"number\" ? raw.timeoutMs : DEFAULTS.timeoutMs,\n };\n const names = Object.keys(peers);\n if (names.length > 0) logInfo(TAG, `Loaded ${names.length} peer(s): ${names.join(\", \")} (self: ${_config.self.name})`);\n return _config;\n } catch (err) {\n logWarn(TAG, `Failed to parse peers.json: ${err instanceof Error ? err.message : String(err)}`);\n _config = { self: { name: \"default\" }, peers: {}, ...DEFAULTS };\n return _config;\n }\n}\n\nexport function clearPeerConfigCache(): void { _config = null; }\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
package/bundle/chunk-5GCLBUBS.js
DELETED
|
@@ -1,257 +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
|
-
getAlivePeers,
|
|
5
|
-
init_gossip
|
|
6
|
-
} from "./chunk-HT2BPTZY.js";
|
|
7
|
-
import {
|
|
8
|
-
init_peer_config,
|
|
9
|
-
loadPeerConfig
|
|
10
|
-
} from "./chunk-4S554KLW.js";
|
|
11
|
-
import {
|
|
12
|
-
init_logger,
|
|
13
|
-
logDebug,
|
|
14
|
-
logInfo,
|
|
15
|
-
logTrace
|
|
16
|
-
} from "./chunk-GWILHZPT.js";
|
|
17
|
-
import {
|
|
18
|
-
__esm
|
|
19
|
-
} from "./chunk-7K2YZTLD.js";
|
|
20
|
-
|
|
21
|
-
// src/components/peer-transport/http-transport.ts
|
|
22
|
-
function resolvePeer(peers, name) {
|
|
23
|
-
const key = Object.keys(peers).find((k) => k.toLowerCase() === name.toLowerCase());
|
|
24
|
-
if (!key || !peers[key]) throw new Error(`Unknown peer '${name}'. Available: ${Object.keys(peers).join(", ")}`);
|
|
25
|
-
return peers[key];
|
|
26
|
-
}
|
|
27
|
-
var TAG, HttpTransport;
|
|
28
|
-
var init_http_transport = __esm({
|
|
29
|
-
"src/components/peer-transport/http-transport.ts"() {
|
|
30
|
-
"use strict";
|
|
31
|
-
init_gossip();
|
|
32
|
-
init_peer_config();
|
|
33
|
-
init_logger();
|
|
34
|
-
TAG = "http-transport";
|
|
35
|
-
HttpTransport = class {
|
|
36
|
-
handlers = [];
|
|
37
|
-
wsClients = /* @__PURE__ */ new Map();
|
|
38
|
-
/** Init WS connections for all ws-outbound peers. Call on boot. */
|
|
39
|
-
async initWsConnections() {
|
|
40
|
-
const config = loadPeerConfig();
|
|
41
|
-
const { WsPeerClient: Client } = await import("./ws-peer-client-AIXCXF7V.js");
|
|
42
|
-
for (const [name, entry] of Object.entries(config.peers)) {
|
|
43
|
-
if (entry.transport !== "ws-outbound") continue;
|
|
44
|
-
const client = new Client(name, entry);
|
|
45
|
-
client.onPush((method, payload) => {
|
|
46
|
-
if (method === "callback") {
|
|
47
|
-
const p = payload;
|
|
48
|
-
import("./kanban-board-M326B2XJ.js").then(({ kanbanList, kanbanComplete, kanbanFail, kanbanAddTokens }) => {
|
|
49
|
-
const cards = kanbanList("running", "status").filter((c) => {
|
|
50
|
-
if (c.type !== "remote") return false;
|
|
51
|
-
try {
|
|
52
|
-
const m = JSON.parse(c.notes ?? "{}");
|
|
53
|
-
return m.peer === name && m.remote_task_id === p.task_id;
|
|
54
|
-
} catch {
|
|
55
|
-
return false;
|
|
56
|
-
}
|
|
57
|
-
});
|
|
58
|
-
if (!cards.length) return;
|
|
59
|
-
const card = cards[0];
|
|
60
|
-
if (p.tokens_used) kanbanAddTokens(card.id, p.tokens_used);
|
|
61
|
-
if (p.status === "done") kanbanComplete(card.id, null, p.result_summary ?? "");
|
|
62
|
-
else kanbanFail(card.id, p.error ?? "remote failure");
|
|
63
|
-
import("./nerve-IGSXBKZZ.js").then(({ nerve }) => nerve.emit(p.status === "done" ? "card:done" : "card:failed", card.id));
|
|
64
|
-
}).catch(() => {
|
|
65
|
-
});
|
|
66
|
-
} else if (method === "channel") {
|
|
67
|
-
const p = payload;
|
|
68
|
-
import("./kanban-channel-IJ52OMNA.js").then(({ channelPost }) => {
|
|
69
|
-
channelPost(p.card_id, p.from_agent, "ALL", p.message);
|
|
70
|
-
}).catch(() => {
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
for (const h of this.handlers) h(name, { type: method, payload });
|
|
74
|
-
});
|
|
75
|
-
client.connect();
|
|
76
|
-
this.wsClients.set(name, client);
|
|
77
|
-
logInfo(TAG, `WS outbound: connecting to ${name}`);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
/** Check if a peer is reachable via WS. */
|
|
81
|
-
hasWsConnection(peer) {
|
|
82
|
-
return this.wsClients.get(peer)?.connected ?? false;
|
|
83
|
-
}
|
|
84
|
-
discover() {
|
|
85
|
-
return getAlivePeers();
|
|
86
|
-
}
|
|
87
|
-
async send(peer, message) {
|
|
88
|
-
if (message.type === "ask") {
|
|
89
|
-
const { callPeer } = await import("./peer-client-RGEU5HOK.js");
|
|
90
|
-
const config = loadPeerConfig();
|
|
91
|
-
return callPeer(peer, message.payload.prompt, config.maxHops);
|
|
92
|
-
}
|
|
93
|
-
if (message.type === "task" && message.payload.action === "callback") {
|
|
94
|
-
const config = loadPeerConfig();
|
|
95
|
-
const entry = resolvePeer(config.peers, peer);
|
|
96
|
-
logDebug(TAG, `\u2192 callback ${peer}: task_id=${message.payload.task_id} status=${message.payload.status}`);
|
|
97
|
-
logTrace(TAG, `\u2192 callback ${peer} result: ${String(message.payload.result_summary ?? "").slice(0, 200)}`);
|
|
98
|
-
const payload = { task_id: message.payload.task_id, status: message.payload.status, result_summary: message.payload.result_summary, error: message.payload.error };
|
|
99
|
-
if (message.payload.artifacts) payload.artifacts = message.payload.artifacts;
|
|
100
|
-
const ws = this.wsClients.get(peer);
|
|
101
|
-
if (ws?.connected) {
|
|
102
|
-
await ws.send("callback", payload);
|
|
103
|
-
logInfo(TAG, `CALLBACK ${peer} (ws) task_id=${message.payload.task_id}`);
|
|
104
|
-
return;
|
|
105
|
-
}
|
|
106
|
-
const body = JSON.stringify(payload);
|
|
107
|
-
return this.httpCall(entry, peer, "POST", "/v1/callbacks", body);
|
|
108
|
-
}
|
|
109
|
-
if (message.type === "task") return this.delegateTask(peer, message.payload.goal, message.payload);
|
|
110
|
-
if (message.type === "check") return this.checkTask(peer, message.payload.taskId);
|
|
111
|
-
if (message.type === "terminate") return this.terminateTask(peer, message.payload.taskId);
|
|
112
|
-
throw new Error(`Unknown message type: ${message.type}`);
|
|
113
|
-
}
|
|
114
|
-
async broadcast(message) {
|
|
115
|
-
const peers = this.discover();
|
|
116
|
-
await Promise.allSettled(peers.map((p) => this.send(p.name, message)));
|
|
117
|
-
}
|
|
118
|
-
onMessage(handler) {
|
|
119
|
-
this.handlers.push(handler);
|
|
120
|
-
}
|
|
121
|
-
/** Called by agent-api-server when an inbound peer message arrives. */
|
|
122
|
-
dispatchInbound(from, message) {
|
|
123
|
-
for (const h of this.handlers) {
|
|
124
|
-
try {
|
|
125
|
-
h(from, message);
|
|
126
|
-
} catch {
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
async delegateTask(peer, goal, opts) {
|
|
131
|
-
const config = loadPeerConfig();
|
|
132
|
-
const entry = resolvePeer(config.peers, peer);
|
|
133
|
-
logDebug(TAG, `\u2192 peer_delegate ${peer}: priority=${opts?.priority ?? "MEDIUM"}, goal=${goal.length}ch`);
|
|
134
|
-
logTrace(TAG, `\u2192 peer_delegate ${peer} goal: ${goal.slice(0, 300)}`);
|
|
135
|
-
if (opts?.artifacts?.length) {
|
|
136
|
-
const MAX_SINGLE = 14e5;
|
|
137
|
-
const MAX_TOTAL = 5e6;
|
|
138
|
-
let total = 0;
|
|
139
|
-
for (const a of opts.artifacts) {
|
|
140
|
-
if (a.content.length > MAX_SINGLE) throw new Error(`Artifact '${a.name}' exceeds 1.4MB limit (${a.content.length} bytes)`);
|
|
141
|
-
total += a.content.length;
|
|
142
|
-
}
|
|
143
|
-
if (total > MAX_TOTAL) throw new Error(`Total artifacts exceed 5MB limit (${total} bytes)`);
|
|
144
|
-
}
|
|
145
|
-
const payload = { goal, priority: opts?.priority ?? "MEDIUM", context: opts?.context, callback_peer: config.self.name };
|
|
146
|
-
if (opts?.artifacts?.length) payload.artifacts = opts.artifacts;
|
|
147
|
-
const ws = this.wsClients.get(peer);
|
|
148
|
-
if (ws?.connected) {
|
|
149
|
-
const result = await ws.send("delegate", payload);
|
|
150
|
-
logInfo(TAG, `PEER_DELEGATE ${peer} (ws) \u2192 remote#${result.taskId} (${goal.length}ch)`);
|
|
151
|
-
return { taskId: result.taskId, remoteSessionId: result.session_id };
|
|
152
|
-
}
|
|
153
|
-
const body = JSON.stringify(payload);
|
|
154
|
-
const response = await this.httpCall(entry, peer, "POST", "/v1/tasks", body);
|
|
155
|
-
const parsed = JSON.parse(response);
|
|
156
|
-
logInfo(TAG, `PEER_DELEGATE ${peer} \u2192 remote#${parsed.task_id} (${goal.length}ch)`);
|
|
157
|
-
return { taskId: parsed.task_id, remoteSessionId: parsed.session_id };
|
|
158
|
-
}
|
|
159
|
-
async checkTask(peer, taskId) {
|
|
160
|
-
const config = loadPeerConfig();
|
|
161
|
-
const entry = resolvePeer(config.peers, peer);
|
|
162
|
-
logDebug(TAG, `\u2192 peer_check ${peer}#${taskId}`);
|
|
163
|
-
const response = await this.httpCall(entry, peer, "GET", `/v1/tasks/${taskId}`);
|
|
164
|
-
const parsed = JSON.parse(response);
|
|
165
|
-
logDebug(TAG, `\u2190 peer_check ${peer}#${taskId}: status=${parsed.status}`);
|
|
166
|
-
logTrace(TAG, `\u2190 peer_check ${peer}#${taskId} result: ${(parsed.result_summary ?? "").slice(0, 200)}`);
|
|
167
|
-
return {
|
|
168
|
-
taskId: parsed.id ?? taskId,
|
|
169
|
-
status: parsed.status,
|
|
170
|
-
result: parsed.result_summary,
|
|
171
|
-
error: parsed.error,
|
|
172
|
-
tokensUsed: parsed.tokens_used
|
|
173
|
-
};
|
|
174
|
-
}
|
|
175
|
-
async terminateTask(peer, taskId) {
|
|
176
|
-
const config = loadPeerConfig();
|
|
177
|
-
const entry = resolvePeer(config.peers, peer);
|
|
178
|
-
logDebug(TAG, `\u2192 peer_terminate ${peer}#${taskId}`);
|
|
179
|
-
await this.httpCall(entry, peer, "DELETE", `/v1/tasks/${taskId}`);
|
|
180
|
-
logInfo(TAG, `PEER_TERMINATE ${peer}#${taskId}`);
|
|
181
|
-
}
|
|
182
|
-
/** #949: Push a channel message to a remote peer. */
|
|
183
|
-
async pushChannelMessage(peer, cardId, from, message, createdAt) {
|
|
184
|
-
const config = loadPeerConfig();
|
|
185
|
-
const entry = resolvePeer(config.peers, peer);
|
|
186
|
-
await this.httpCall(entry, peer, "POST", `/v1/tasks/${cardId}/messages`, JSON.stringify({ from_agent: from, message, created_at: createdAt }));
|
|
187
|
-
}
|
|
188
|
-
async httpCall(entry, peerName, method, path, body) {
|
|
189
|
-
const { mintPeerJwt, signBody, tlsOptions } = await import("./peer-auth-QC4EF2PM.js");
|
|
190
|
-
const jwt = mintPeerJwt(peerName);
|
|
191
|
-
const finalBody = body ? await signBody(peerName, body) : void 0;
|
|
192
|
-
const tls = tlsOptions(entry);
|
|
193
|
-
const http = await import("node:https");
|
|
194
|
-
return new Promise((resolve, reject) => {
|
|
195
|
-
const headers = {
|
|
196
|
-
"Authorization": `Bearer ${jwt}`,
|
|
197
|
-
"Content-Type": "application/json"
|
|
198
|
-
};
|
|
199
|
-
if (finalBody) headers["Content-Length"] = String(Buffer.byteLength(finalBody));
|
|
200
|
-
const req = http.request({
|
|
201
|
-
hostname: entry.host,
|
|
202
|
-
port: entry.port,
|
|
203
|
-
path,
|
|
204
|
-
method,
|
|
205
|
-
headers,
|
|
206
|
-
timeout: 6e4,
|
|
207
|
-
...tls
|
|
208
|
-
}, (res) => {
|
|
209
|
-
let data = "";
|
|
210
|
-
res.on("data", (c) => data += c);
|
|
211
|
-
res.on("end", () => {
|
|
212
|
-
if (res.statusCode >= 400) {
|
|
213
|
-
reject(new Error(`Peer ${peerName} returned ${res.statusCode}: ${data.slice(0, 200)}`));
|
|
214
|
-
return;
|
|
215
|
-
}
|
|
216
|
-
resolve(data);
|
|
217
|
-
});
|
|
218
|
-
});
|
|
219
|
-
req.on("timeout", () => {
|
|
220
|
-
req.destroy();
|
|
221
|
-
reject(new Error(`Peer ${peerName} timeout`));
|
|
222
|
-
});
|
|
223
|
-
req.on("error", (err) => reject(new Error(`Peer ${peerName} unreachable: ${err.message}`)));
|
|
224
|
-
if (finalBody) req.write(finalBody);
|
|
225
|
-
req.end();
|
|
226
|
-
});
|
|
227
|
-
}
|
|
228
|
-
};
|
|
229
|
-
}
|
|
230
|
-
});
|
|
231
|
-
|
|
232
|
-
// src/components/peer-transport/index.ts
|
|
233
|
-
function getPeerTransport() {
|
|
234
|
-
if (!_instance) _instance = new HttpTransport();
|
|
235
|
-
return _instance;
|
|
236
|
-
}
|
|
237
|
-
async function initPeerTransport() {
|
|
238
|
-
const transport = getPeerTransport();
|
|
239
|
-
await transport.initWsConnections();
|
|
240
|
-
}
|
|
241
|
-
var _instance;
|
|
242
|
-
var init_peer_transport = __esm({
|
|
243
|
-
"src/components/peer-transport/index.ts"() {
|
|
244
|
-
init_http_transport();
|
|
245
|
-
init_gossip();
|
|
246
|
-
init_http_transport();
|
|
247
|
-
_instance = null;
|
|
248
|
-
}
|
|
249
|
-
});
|
|
250
|
-
|
|
251
|
-
export {
|
|
252
|
-
HttpTransport,
|
|
253
|
-
getPeerTransport,
|
|
254
|
-
initPeerTransport,
|
|
255
|
-
init_peer_transport
|
|
256
|
-
};
|
|
257
|
-
//# sourceMappingURL=chunk-5GCLBUBS.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/components/peer-transport/http-transport.ts", "../src/components/peer-transport/index.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * peer-transport/http-transport.ts \u2014 HTTP implementation of PeerTransport (#911).\n *\n * Wraps existing peer-client.ts (JWT auth, TLS, Ed25519 signing) behind the\n * PeerTransport interface. discover() reads peers.json (static).\n */\n\nimport type { PeerTransport, PeerCard, PeerMessage, TaskResult } from \"./interface.js\";\nimport { getAlivePeers } from \"./gossip.js\";\nimport { loadPeerConfig, type PeerEntry } from \"../peer-config.js\";\nimport { logInfo, logDebug, logTrace } from \"../logger.js\";\nimport type { WsPeerClient } from \"./ws-peer-client.js\";\n\nconst TAG = \"http-transport\";\n\nexport class HttpTransport implements PeerTransport {\n private handlers: Array<(from: string, message: PeerMessage) => void> = [];\n private wsClients = new Map<string, WsPeerClient>();\n\n /** Init WS connections for all ws-outbound peers. Call on boot. */\n async initWsConnections(): Promise<void> {\n const config = loadPeerConfig();\n const { WsPeerClient: Client } = await import(\"./ws-peer-client.js\");\n for (const [name, entry] of Object.entries(config.peers)) {\n if (entry.transport !== \"ws-outbound\") continue;\n const client = new Client(name, entry);\n client.onPush((method, payload) => {\n if (method === \"callback\") {\n // Inbound callback from peer \u2014 fire as if it arrived via HTTP /v1/callbacks\n const p = payload as { task_id: number; status: string; result_summary?: string; error?: string; tokens_used?: number };\n import(\"../tasks/kanban-board.js\").then(({ kanbanList, kanbanComplete, kanbanFail, kanbanAddTokens }) => {\n const cards = kanbanList(\"running\", \"status\").filter(c => {\n if (c.type !== \"remote\") return false;\n try { const m = JSON.parse(c.notes ?? \"{}\"); return m.peer === name && m.remote_task_id === p.task_id; } catch { return false; }\n });\n if (!cards.length) return;\n const card = cards[0]!;\n if (p.tokens_used) kanbanAddTokens(card.id, p.tokens_used);\n if (p.status === \"done\") kanbanComplete(card.id, null, p.result_summary ?? \"\");\n else kanbanFail(card.id, p.error ?? \"remote failure\");\n import(\"../nerve.js\").then(({ nerve }) => nerve.emit(p.status === \"done\" ? \"card:done\" : \"card:failed\", card.id));\n }).catch(() => {});\n } else if (method === \"channel\") {\n // Inbound channel message from peer\n const p = payload as { card_id: number; from_agent: string; message: string; created_at: string };\n import(\"../tasks/kanban-channel.js\").then(({ channelPost }) => {\n channelPost(p.card_id, p.from_agent, \"ALL\", p.message);\n }).catch(() => {});\n }\n for (const h of this.handlers) h(name, { type: method as any, payload: payload as any });\n });\n client.connect();\n this.wsClients.set(name, client);\n logInfo(TAG, `WS outbound: connecting to ${name}`);\n }\n }\n\n /** Check if a peer is reachable via WS. */\n hasWsConnection(peer: string): boolean {\n return this.wsClients.get(peer)?.connected ?? false;\n }\n\n discover(): PeerCard[] {\n return getAlivePeers();\n }\n\n async send(peer: string, message: PeerMessage): Promise<unknown> {\n if (message.type === \"ask\") {\n const { callPeer } = await import(\"../peer-client.js\");\n const config = loadPeerConfig();\n return callPeer(peer, message.payload.prompt as string, config.maxHops);\n }\n if (message.type === \"task\" && message.payload.action === \"callback\") {\n const config = loadPeerConfig();\n const entry = resolvePeer(config.peers, peer);\n logDebug(TAG, `\u2192 callback ${peer}: task_id=${message.payload.task_id} status=${message.payload.status}`);\n logTrace(TAG, `\u2192 callback ${peer} result: ${String(message.payload.result_summary ?? \"\").slice(0, 200)}`);\n const payload: Record<string, unknown> = { task_id: message.payload.task_id, status: message.payload.status, result_summary: message.payload.result_summary, error: message.payload.error };\n if (message.payload.artifacts) payload.artifacts = message.payload.artifacts;\n\n // #972: Push via WS if connected\n const ws = this.wsClients.get(peer);\n if (ws?.connected) {\n await ws.send(\"callback\", payload);\n logInfo(TAG, `CALLBACK ${peer} (ws) task_id=${message.payload.task_id}`);\n return;\n }\n\n const body = JSON.stringify(payload);\n return this.httpCall(entry, peer, \"POST\", \"/v1/callbacks\", body);\n }\n if (message.type === \"task\") return this.delegateTask(peer, message.payload.goal as string, message.payload as any);\n if (message.type === \"check\") return this.checkTask(peer, message.payload.taskId as number);\n if (message.type === \"terminate\") return this.terminateTask(peer, message.payload.taskId as number);\n throw new Error(`Unknown message type: ${message.type}`);\n }\n\n async broadcast(message: PeerMessage): Promise<void> {\n const peers = this.discover();\n await Promise.allSettled(peers.map(p => this.send(p.name, message)));\n }\n\n onMessage(handler: (from: string, message: PeerMessage) => void): void {\n this.handlers.push(handler);\n }\n\n /** Called by agent-api-server when an inbound peer message arrives. */\n dispatchInbound(from: string, message: PeerMessage): void {\n for (const h of this.handlers) { try { h(from, message); } catch {} }\n }\n\n async delegateTask(peer: string, goal: string, opts?: { priority?: string; context?: string; artifacts?: Array<{ name: string; content: string }> }): Promise<{ taskId: number; remoteSessionId?: string }> {\n const config = loadPeerConfig();\n const entry = resolvePeer(config.peers, peer);\n\n // Callback: remote peer looks us up in its peers.json by name\n\n logDebug(TAG, `\u2192 peer_delegate ${peer}: priority=${opts?.priority ?? \"MEDIUM\"}, goal=${goal.length}ch`);\n logTrace(TAG, `\u2192 peer_delegate ${peer} goal: ${goal.slice(0, 300)}`);\n\n // Size guard for artifacts (#928)\n if (opts?.artifacts?.length) {\n const MAX_SINGLE = 1_400_000; // 1.4MB base64 per artifact\n const MAX_TOTAL = 5_000_000; // 5MB total\n let total = 0;\n for (const a of opts.artifacts) {\n if (a.content.length > MAX_SINGLE) throw new Error(`Artifact '${a.name}' exceeds 1.4MB limit (${a.content.length} bytes)`);\n total += a.content.length;\n }\n if (total > MAX_TOTAL) throw new Error(`Total artifacts exceed 5MB limit (${total} bytes)`);\n }\n\n const payload: Record<string, unknown> = { goal, priority: opts?.priority ?? \"MEDIUM\", context: opts?.context, callback_peer: config.self.name };\n if (opts?.artifacts?.length) payload.artifacts = opts.artifacts;\n\n // #972: Route via WS if connected, otherwise HTTP\n const ws = this.wsClients.get(peer);\n if (ws?.connected) {\n const result = await ws.send(\"delegate\", payload) as any;\n logInfo(TAG, `PEER_DELEGATE ${peer} (ws) \u2192 remote#${result.taskId} (${goal.length}ch)`);\n return { taskId: result.taskId, remoteSessionId: result.session_id };\n }\n\n const body = JSON.stringify(payload);\n const response = await this.httpCall(entry, peer, \"POST\", \"/v1/tasks\", body);\n const parsed = JSON.parse(response);\n logInfo(TAG, `PEER_DELEGATE ${peer} \u2192 remote#${parsed.task_id} (${goal.length}ch)`);\n return { taskId: parsed.task_id, remoteSessionId: parsed.session_id };\n }\n\n async checkTask(peer: string, taskId: number): Promise<TaskResult> {\n const config = loadPeerConfig();\n const entry = resolvePeer(config.peers, peer);\n logDebug(TAG, `\u2192 peer_check ${peer}#${taskId}`);\n const response = await this.httpCall(entry, peer, \"GET\", `/v1/tasks/${taskId}`);\n const parsed = JSON.parse(response);\n logDebug(TAG, `\u2190 peer_check ${peer}#${taskId}: status=${parsed.status}`);\n logTrace(TAG, `\u2190 peer_check ${peer}#${taskId} result: ${(parsed.result_summary ?? \"\").slice(0, 200)}`);\n return {\n taskId: parsed.id ?? taskId,\n status: parsed.status,\n result: parsed.result_summary,\n error: parsed.error,\n tokensUsed: parsed.tokens_used,\n };\n }\n\n async terminateTask(peer: string, taskId: number): Promise<void> {\n const config = loadPeerConfig();\n const entry = resolvePeer(config.peers, peer);\n logDebug(TAG, `\u2192 peer_terminate ${peer}#${taskId}`);\n await this.httpCall(entry, peer, \"DELETE\", `/v1/tasks/${taskId}`);\n logInfo(TAG, `PEER_TERMINATE ${peer}#${taskId}`);\n }\n\n /** #949: Push a channel message to a remote peer. */\n async pushChannelMessage(peer: string, cardId: number, from: string, message: string, createdAt: string): Promise<void> {\n const config = loadPeerConfig();\n const entry = resolvePeer(config.peers, peer);\n await this.httpCall(entry, peer, \"POST\", `/v1/tasks/${cardId}/messages`, JSON.stringify({ from_agent: from, message, created_at: createdAt }));\n }\n\n private async httpCall(entry: PeerEntry, peerName: string, method: string, path: string, body?: string): Promise<string> {\n const { mintPeerJwt, signBody, tlsOptions } = await import(\"./peer-auth.js\");\n const jwt = mintPeerJwt(peerName);\n const finalBody = body ? await signBody(peerName, body) : undefined;\n const tls = tlsOptions(entry);\n const http = await import(\"node:https\");\n\n return new Promise((resolve, reject) => {\n const headers: Record<string, string> = {\n \"Authorization\": `Bearer ${jwt}`,\n \"Content-Type\": \"application/json\",\n };\n if (finalBody) headers[\"Content-Length\"] = String(Buffer.byteLength(finalBody));\n\n const req = http.request({\n hostname: entry.host,\n port: entry.port,\n path,\n method,\n headers,\n timeout: 60_000,\n ...tls,\n } as any, (res: any) => {\n let data = \"\";\n res.on(\"data\", (c: any) => data += c);\n res.on(\"end\", () => {\n if (res.statusCode >= 400) {\n reject(new Error(`Peer ${peerName} returned ${res.statusCode}: ${data.slice(0, 200)}`));\n return;\n }\n resolve(data);\n });\n });\n req.on(\"timeout\", () => { req.destroy(); reject(new Error(`Peer ${peerName} timeout`)); });\n req.on(\"error\", (err: Error) => reject(new Error(`Peer ${peerName} unreachable: ${err.message}`)));\n if (finalBody) req.write(finalBody);\n req.end();\n });\n }\n}\n\nfunction resolvePeer(peers: Record<string, PeerEntry>, name: string): PeerEntry {\n const key = Object.keys(peers).find(k => k.toLowerCase() === name.toLowerCase());\n if (!key || !peers[key]) throw new Error(`Unknown peer '${name}'. Available: ${Object.keys(peers).join(\", \")}`);\n return peers[key];\n}\n", "/**\n * peer-transport/index.ts \u2014 Factory + singleton (#911).\n */\n\nexport type { PeerTransport, PeerCard, PeerMessage, TaskResult, PeerHealth } from \"./interface.js\";\nexport { HttpTransport } from \"./http-transport.js\";\nexport { startGossipListener, gossipBroadcast, getAlivePeers, getPeerTable, setGossipInterval, stopGossipListener } from \"./gossip.js\";\n\nimport { HttpTransport } from \"./http-transport.js\";\nimport type { PeerTransport } from \"./interface.js\";\n\nlet _instance: PeerTransport | null = null;\n\n/** Get the singleton PeerTransport instance. */\nexport function getPeerTransport(): PeerTransport {\n if (!_instance) _instance = new HttpTransport();\n return _instance;\n}\n\n/** Initialize peer transport + WS outbound connections. Call at boot. */\nexport async function initPeerTransport(): Promise<void> {\n const transport = getPeerTransport() as HttpTransport;\n await transport.initWsConnections();\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|