abtars 0.3.4-alpha.8 → 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-YP5GLSG7.js → _registry.generated-AVR7DK2A.js} +15 -15
- 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.js +385 -466
- 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-WRGEQ6DV.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-GHNG2PH3.js → agent-registry-46A2R5KP.js} +7 -7
- package/bundle/{bootstrap-PZIDBPEJ.js → bootstrap-MIHJJSWU.js} +2 -2
- package/bundle/{bridge-lock-transport-4ZH7QTJP.js → bridge-lock-transport-7RSN7OLJ.js} +4 -4
- package/bundle/{browser-D3LZV7ZK.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-W2R2HFOQ.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-374NCXFZ.js → chunk-4AILRHUI.js} +10 -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-7JN2MMU7.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-C7K6VZNY.js → chunk-BNXV7SZI.js} +21 -12
- 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-CXXU3HAU.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-YPAQEQSC.js → chunk-GF6NVNA7.js} +15 -5
- package/bundle/chunk-GF6NVNA7.js.map +7 -0
- package/bundle/{chunk-UNM3OXHB.js → chunk-HGSHCQ5F.js} +110 -72
- package/bundle/{chunk-UNM3OXHB.js.map → chunk-HGSHCQ5F.js.map} +2 -2
- package/bundle/{chunk-VXCETPZU.js → chunk-IMIGG5EO.js} +39 -39
- package/bundle/chunk-IMIGG5EO.js.map +7 -0
- package/bundle/{chunk-P2K2K6XL.js → chunk-ITOFPJAV.js} +44 -32
- package/bundle/chunk-ITOFPJAV.js.map +7 -0
- package/bundle/{chunk-75ATTOW4.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-N4EB6LA7.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-M3JEX6L4.js → chunk-L72RIPEC.js} +9 -9
- 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-SMPHE3ZM.js → chunk-PB5GF4FG.js} +215 -163
- 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-IHYKTDIP.js → chunk-SC2Y5NR2.js} +36 -119
- 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-OIISYHTD.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-YATZFKYO.js → delegation-tools-WS7Z56KZ.js} +12 -12
- package/bundle/{deploy-T6R45OZJ.js → deploy-AMTVKIMU.js} +2 -2
- package/bundle/{deps-WVK553KF.js → deps-T63AVJKJ.js} +3 -3
- package/bundle/{direct-api-transport-S2RDH2I7.js → direct-api-transport-QNNY2WWP.js} +51 -32
- package/bundle/direct-api-transport-QNNY2WWP.js.map +7 -0
- package/bundle/{discord-adapter-UTXUWX3A.js → discord-adapter-ABAD56Y2.js} +21 -20
- package/bundle/{discord-adapter-UTXUWX3A.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-6KH45CL6.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-AUIUNM5R.js → message-pipeline-GRDRWONR.js} +17 -16
- package/bundle/meta.json +2773 -2241
- 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-TOD4WHTM.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-5VKK2I7P.js → peer-transport-SI7I72DB.js} +12 -10
- package/bundle/{phase-transport-FS6NL4A5.js → phase-transport-ESWWACZI.js} +17 -17
- package/bundle/{reconcile-CTFCLQRN.js → reconcile-GFDQYNBD.js} +3 -3
- package/bundle/{reconciler-NZ4O4BCP.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-VJXTKOKL.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-BEWAUFCL.js → sleep-I4JFASCY.js} +11 -11
- package/bundle/{soul-bundle-VWAVHCZ6.js → soul-bundle-522C3IRH.js} +9 -8
- package/bundle/{spin-E3ZDEDKT.js → spin-VHNGNWTD.js} +11 -11
- package/bundle/{spin-notifications-SE2HVZI7.js → spin-notifications-7NC5XZEM.js} +5 -5
- package/bundle/{spin-types-OIE67MJK.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-FAVNIUFJ.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-4TX7QWKC.js → telegram-adapter-O6KIZDY6.js} +62 -45
- package/bundle/telegram-adapter-O6KIZDY6.js.map +7 -0
- package/bundle/{tool-registry-7FK3OQGL.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-CKFP6LBE.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.sh +1 -5
- package/scripts/emergency-deploy.sh +2 -2
- package/scripts/emergency-update.sh +36 -37
- package/bundle/chunk-374NCXFZ.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-C7K6VZNY.js.map +0 -7
- package/bundle/chunk-CXXU3HAU.js.map +0 -7
- package/bundle/chunk-EGL6UMAO.js.map +0 -7
- package/bundle/chunk-EQSG2CRM.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-IHYKTDIP.js.map +0 -7
- package/bundle/chunk-IKUZPMVA.js +0 -82
- package/bundle/chunk-IKUZPMVA.js.map +0 -7
- package/bundle/chunk-P2K2K6XL.js.map +0 -7
- package/bundle/chunk-PU5HSKWH.js +0 -257
- package/bundle/chunk-PU5HSKWH.js.map +0 -7
- package/bundle/chunk-RWRRGE4U.js +0 -72
- package/bundle/chunk-RWRRGE4U.js.map +0 -7
- package/bundle/chunk-SMPHE3ZM.js.map +0 -7
- package/bundle/chunk-VUIX5AGB.js +0 -65
- package/bundle/chunk-VUIX5AGB.js.map +0 -7
- package/bundle/chunk-VXCETPZU.js.map +0 -7
- package/bundle/chunk-YPAQEQSC.js.map +0 -7
- package/bundle/context-2RJHC2LE.js.map +0 -7
- package/bundle/direct-api-transport-S2RDH2I7.js.map +0 -7
- package/bundle/dns-wakeup-IDOJIXBX.js.map +0 -7
- package/bundle/heartbeat-tier3-6KH45CL6.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/stream-single-RFJNUTL6.js +0 -34
- package/bundle/stream-single-RFJNUTL6.js.map +0 -7
- package/bundle/system-status-FAVNIUFJ.js.map +0 -7
- package/bundle/telegram-adapter-4TX7QWKC.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/{_registry.generated-YP5GLSG7.js.map → _registry.generated-AVR7DK2A.js.map} +0 -0
- /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-WRGEQ6DV.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-GHNG2PH3.js.map → agent-registry-46A2R5KP.js.map} +0 -0
- /package/bundle/{bootstrap-PZIDBPEJ.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-D3LZV7ZK.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-W2R2HFOQ.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-7JN2MMU7.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-75ATTOW4.js.map → chunk-IY6UKLPS.js.map} +0 -0
- /package/bundle/{chunk-EUZDKV3C.js.map → chunk-J4RUFAPK.js.map} +0 -0
- /package/bundle/{chunk-N4EB6LA7.js.map → chunk-JLWYPGWI.js.map} +0 -0
- /package/bundle/{chunk-5QUTMUIK.js.map → chunk-JXYWDAHD.js.map} +0 -0
- /package/bundle/{chunk-M3JEX6L4.js.map → chunk-L72RIPEC.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-OIISYHTD.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-YATZFKYO.js.map → delegation-tools-WS7Z56KZ.js.map} +0 -0
- /package/bundle/{deploy-T6R45OZJ.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-AUIUNM5R.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-TOD4WHTM.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-5VKK2I7P.js.map → phase-transport-ESWWACZI.js.map} +0 -0
- /package/bundle/{phase-transport-FS6NL4A5.js.map → reconcile-GFDQYNBD.js.map} +0 -0
- /package/bundle/{reconciler-NZ4O4BCP.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-VJXTKOKL.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-BEWAUFCL.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-E3ZDEDKT.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-OIE67MJK.js.map → stt-PSOPPBV4.js.map} +0 -0
- /package/bundle/{stt-LGVPXMVR.js.map → task-store-MNCW42BW.js.map} +0 -0
- /package/bundle/{task-store-W5BFIAIH.js.map → tool-registry-JJMWCQKZ.js.map} +0 -0
- /package/bundle/{tool-registry-7FK3OQGL.js.map → tool-sandbox-CNL6V6IH.js.map} +0 -0
- /package/bundle/{tool-sandbox-4UC6GAKA.js.map → transport-config-6MB2K2XC.js.map} +0 -0
- /package/bundle/{transport-config-KBF5W2DP.js.map → update-HGQAOC5L.js.map} +0 -0
- /package/bundle/{update-CKFP6LBE.js.map → usage-tracker-SR4BI6ZT.js.map} +0 -0
- /package/bundle/{usage-tracker-NXD364VX.js.map → user-registry-4PACZJIJ.js.map} +0 -0
|
@@ -2,37 +2,36 @@
|
|
|
2
2
|
import { createRequire as __bundleCreateRequire } from 'node:module'; import { fileURLToPath as __bundleFileURLToPath } from 'node:url'; import { dirname as __bundleDirname } from 'node:path'; const require = __bundleCreateRequire(import.meta.url); const __chunk_filename = __bundleFileURLToPath(import.meta.url); const __chunk_dirname = __bundleDirname(__chunk_filename);
|
|
3
3
|
import {
|
|
4
4
|
updateCtxStart
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-TWB2ZGVH.js";
|
|
6
6
|
import {
|
|
7
7
|
createAgentTransport
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-EAX5ZZUL.js";
|
|
9
9
|
import {
|
|
10
10
|
init_spin,
|
|
11
11
|
spin_exports
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-L72RIPEC.js";
|
|
13
13
|
import {
|
|
14
14
|
abmind
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-YJZE4OK3.js";
|
|
16
16
|
import {
|
|
17
17
|
init_user_registry,
|
|
18
18
|
loadUsers
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-E7XD5UGB.js";
|
|
20
20
|
import {
|
|
21
21
|
getEnv,
|
|
22
22
|
init_env_schema
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-6PA5JBUU.js";
|
|
24
24
|
import {
|
|
25
25
|
init_log_and_swallow,
|
|
26
26
|
logAndSwallow
|
|
27
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-2IYJ4I66.js";
|
|
28
28
|
import {
|
|
29
29
|
init_logger,
|
|
30
|
-
isLogLevel,
|
|
31
30
|
logDebug,
|
|
32
31
|
logError,
|
|
33
32
|
logInfo,
|
|
34
33
|
logWarn
|
|
35
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-XRTXYN66.js";
|
|
36
35
|
import {
|
|
37
36
|
abtarsHome,
|
|
38
37
|
init_paths
|
|
@@ -414,9 +413,9 @@ var TAG2 = "transport";
|
|
|
414
413
|
async function phaseTransport(ctx) {
|
|
415
414
|
const { memoryConfig } = ctx;
|
|
416
415
|
await buildTransport(ctx);
|
|
417
|
-
const { isDockerActive, isSeatbeltActive } = await import("./guardrails-
|
|
416
|
+
const { isDockerActive, isSeatbeltActive } = await import("./guardrails-64GQ5Y5K.js");
|
|
418
417
|
if (isDockerActive()) {
|
|
419
|
-
const { dockerAvailable } = await import("./sandbox-runtime-
|
|
418
|
+
const { dockerAvailable } = await import("./sandbox-runtime-DV6E25J6.js");
|
|
420
419
|
if (dockerAvailable()) {
|
|
421
420
|
ctx.sandboxEnabled = true;
|
|
422
421
|
logInfo("main", "\u{1F433} Docker mode active \u2014 W/B/C sessions will run in Docker containers");
|
|
@@ -442,7 +441,7 @@ async function phaseTransport(ctx) {
|
|
|
442
441
|
async function buildTransport(ctx) {
|
|
443
442
|
const { config } = ctx;
|
|
444
443
|
let transport;
|
|
445
|
-
const { resolveAgent, getEnvFallback, loadTransport, resolveHailMary, clearTransportCache, validateProviderReady } = await import("./transport-config-
|
|
444
|
+
const { resolveAgent, getEnvFallback, loadTransport, resolveHailMary, clearTransportCache, validateProviderReady } = await import("./transport-config-6MB2K2XC.js");
|
|
446
445
|
const { existsSync, renameSync } = await import("node:fs");
|
|
447
446
|
const { join: pathJoin } = await import("node:path");
|
|
448
447
|
clearTransportCache();
|
|
@@ -483,7 +482,7 @@ async function buildTransport(ctx) {
|
|
|
483
482
|
logWarn("main", `\u26A0\uFE0F No transport.json \u2014 emergency mode: ${fb.model} via ${fb.providerName}`);
|
|
484
483
|
resolved = { model: fb.model, provider: fb.provider, providerName: fb.providerName, contextWindow: fb.contextWindow, maxOutput: fb.maxOutput, fallbacks: [] };
|
|
485
484
|
setTimeout(() => {
|
|
486
|
-
import("./notification-
|
|
485
|
+
import("./notification-3JICGXWU.js").then(({ sendNotification }) => sendNotification(ctx, `\u26A0\uFE0F transport.json missing, no backup. Running emergency model: ${fb.model}. Fix: /update deploy`)).catch(() => {
|
|
487
486
|
});
|
|
488
487
|
}, 1e4);
|
|
489
488
|
} else {
|
|
@@ -536,8 +535,8 @@ async function buildTransport(ctx) {
|
|
|
536
535
|
defaults?.maxWaitSec ?? config.transport.tmuxMaxWaitSec
|
|
537
536
|
);
|
|
538
537
|
} else if (resolved.provider.transport === "api") {
|
|
539
|
-
const { DirectApiTransport } = await import("./direct-api-transport-
|
|
540
|
-
const { ModelHealthRegistry } = await import("./model-health-registry-
|
|
538
|
+
const { DirectApiTransport } = await import("./direct-api-transport-QNNY2WWP.js");
|
|
539
|
+
const { ModelHealthRegistry } = await import("./model-health-registry-QADMFQFQ.js");
|
|
541
540
|
const { FallbackPolicy } = await import("./fallback-policy-SR6ED5I3.js");
|
|
542
541
|
const apiKey = getEnv().getApiKey(resolved.provider.apiKeyEnv ?? "API_KEY");
|
|
543
542
|
const candidates = [
|
|
@@ -557,8 +556,8 @@ async function buildTransport(ctx) {
|
|
|
557
556
|
}
|
|
558
557
|
if (!ctx.modelHealthRegistry.onDemote) {
|
|
559
558
|
ctx.modelHealthRegistry.onDemote = (model, _endpoint, reason) => {
|
|
560
|
-
import("./transport-config-
|
|
561
|
-
import("./notification-
|
|
559
|
+
import("./transport-config-6MB2K2XC.js").then(({ demoteModel }) => demoteModel(model, reason));
|
|
560
|
+
import("./notification-3JICGXWU.js").then(({ sendNotification }) => sendNotification(ctx, `\u26A0\uFE0F ${model} demoted (${reason}). Next healthy model promoted.`)).catch((err) => logAndSwallow(TAG2, "sendNotification model-demote", err));
|
|
562
561
|
};
|
|
563
562
|
}
|
|
564
563
|
const policy = new FallbackPolicy(candidates, ctx.modelHealthRegistry);
|
|
@@ -575,7 +574,7 @@ async function buildTransport(ctx) {
|
|
|
575
574
|
}, policy);
|
|
576
575
|
logInfo("main", `\u{1F50C} Direct API transport (${resolved.providerName}, model=${resolved.model}, ${candidates.length} candidates)`);
|
|
577
576
|
} else {
|
|
578
|
-
const { readAndClearAcpPids } = await import("./bridge-lock-transport-
|
|
577
|
+
const { readAndClearAcpPids } = await import("./bridge-lock-transport-7RSN7OLJ.js");
|
|
579
578
|
const stalePids = readAndClearAcpPids();
|
|
580
579
|
for (const pid of stalePids) {
|
|
581
580
|
try {
|
|
@@ -639,20 +638,20 @@ async function buildTransport(ctx) {
|
|
|
639
638
|
ctx.runtime.setSessionManager(ctx.sessionManager);
|
|
640
639
|
if (ctx.sandboxEnabled) ctx.runtime.setSandboxEnabled(true);
|
|
641
640
|
if (getEnv().enableAsyncDelegation) {
|
|
642
|
-
const { setDelegationDeps } = await import("./delegation-tools-
|
|
641
|
+
const { setDelegationDeps } = await import("./delegation-tools-WS7Z56KZ.js");
|
|
643
642
|
setDelegationDeps(ctx.runtime);
|
|
644
643
|
}
|
|
645
644
|
logInfo("main", "\u2713 Transport ready");
|
|
646
645
|
const { join: join2 } = await import("node:path");
|
|
647
646
|
const { abtarsHome: abtarsHome2 } = await import("./paths-X4LRYUI6.js");
|
|
648
|
-
const { ActionGate } = await import("./action-gate-
|
|
649
|
-
const { setActionGate } = await import("./tool-registry-
|
|
647
|
+
const { ActionGate } = await import("./action-gate-V4FCBHFB.js");
|
|
648
|
+
const { setActionGate } = await import("./tool-registry-JJMWCQKZ.js");
|
|
650
649
|
const authDir = join2(abtarsHome2(), "auth");
|
|
651
650
|
ctx.actionGate = new ActionGate(authDir);
|
|
652
651
|
setActionGate(ctx.actionGate);
|
|
653
652
|
logDebug("main", "\u{1F512} ActionGate wired");
|
|
654
653
|
if (ctx.seatbeltActive) {
|
|
655
|
-
const { setSeatbelt } = await import("./tool-registry-
|
|
654
|
+
const { setSeatbelt } = await import("./tool-registry-JJMWCQKZ.js");
|
|
656
655
|
const { getPolicy } = await import("./seatbelt-GFJ3BR2E.js");
|
|
657
656
|
const home = abtarsHome2();
|
|
658
657
|
const policy = getPolicy("A", join2(home, "workspace"), home);
|
|
@@ -666,21 +665,16 @@ async function buildTransport(ctx) {
|
|
|
666
665
|
const mod = abmind();
|
|
667
666
|
if (mod) {
|
|
668
667
|
const { ContextEngine } = mod;
|
|
669
|
-
const { createContextOrchestrator } = await import("./context-
|
|
668
|
+
const { createContextOrchestrator } = await import("./context-CL2RSLII.js");
|
|
669
|
+
const { spin } = await import("./spin-VHNGNWTD.js");
|
|
670
|
+
const { recordCompaction } = await import("./metrics-collector-YMUGY3PI.js");
|
|
670
671
|
const contextEngine = new ContextEngine(db);
|
|
672
|
+
const compactionModel = (tc ? resolveAgent("dreamy", tc) : null)?.model ?? null;
|
|
671
673
|
const orchestrator = createContextOrchestrator(
|
|
672
674
|
contextEngine,
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
endpoint: resolved.provider.endpoint ?? "http://localhost:11434/v1",
|
|
677
|
-
apiKey: getEnv().getApiKey(resolved.provider.apiKeyEnv ?? "API_KEY") ?? void 0,
|
|
678
|
-
model: resolved.model,
|
|
679
|
-
systemPrompt,
|
|
680
|
-
userPrompt,
|
|
681
|
-
maxTokens: 4096
|
|
682
|
-
});
|
|
683
|
-
},
|
|
675
|
+
(systemPrompt, userPrompt) => spin.dispatchBackground({ agent: "dreamy", prompt: `${systemPrompt}
|
|
676
|
+
|
|
677
|
+
${userPrompt}` }),
|
|
684
678
|
(_chatId) => {
|
|
685
679
|
try {
|
|
686
680
|
return ctx.memory?.getLastMessageTimestamp(true) ?? null;
|
|
@@ -688,10 +682,11 @@ async function buildTransport(ctx) {
|
|
|
688
682
|
logAndSwallow(TAG2, "getLastMessageTimestamp", err);
|
|
689
683
|
return null;
|
|
690
684
|
}
|
|
691
|
-
}
|
|
685
|
+
},
|
|
686
|
+
{ compactionModel, onCompactionEvent: recordCompaction }
|
|
692
687
|
);
|
|
693
688
|
transport.contextOrchestrator = orchestrator;
|
|
694
|
-
logInfo("main",
|
|
689
|
+
logInfo("main", `\u{1F4E6} Context engine wired (auto-compaction active, model: ${compactionModel ?? "main"})`);
|
|
695
690
|
}
|
|
696
691
|
}
|
|
697
692
|
}
|
|
@@ -701,11 +696,16 @@ async function buildTransport(ctx) {
|
|
|
701
696
|
const reasonTag = reason ? ` (${reason})` : "";
|
|
702
697
|
const msg = `\u26A1 Fallback${reasonTag}: ${model}${ctxPct >= 0 ? ` (ctx: ~${ctxPct}%)` : ""}`;
|
|
703
698
|
logInfo("main", msg);
|
|
704
|
-
if (model !== lastNotifiedModel
|
|
699
|
+
if (model !== lastNotifiedModel) {
|
|
705
700
|
lastNotifiedModel = model;
|
|
706
|
-
import("./notification-
|
|
701
|
+
import("./notification-3JICGXWU.js").then(({ sendNotification }) => sendNotification(ctx, msg)).catch((err) => logAndSwallow(TAG2, "sendNotification fallback", err));
|
|
707
702
|
}
|
|
708
703
|
};
|
|
704
|
+
if ("onPrimaryRestored" in transport) {
|
|
705
|
+
transport.onPrimaryRestored = () => {
|
|
706
|
+
lastNotifiedModel = null;
|
|
707
|
+
};
|
|
708
|
+
}
|
|
709
709
|
}
|
|
710
710
|
return "ran";
|
|
711
711
|
}
|
|
@@ -727,4 +727,4 @@ export {
|
|
|
727
727
|
buildTransport,
|
|
728
728
|
rebuildTransport
|
|
729
729
|
};
|
|
730
|
-
//# sourceMappingURL=chunk-
|
|
730
|
+
//# sourceMappingURL=chunk-IMIGG5EO.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/boot/phase-transport.ts", "../src/components/transport/tmux-client.ts"],
|
|
4
|
+
"sourcesContent": ["import { logAndSwallow } from \"../components/log-and-swallow.js\";\nimport { getEnv } from \"../components/env-schema.js\";\n/**\n * phase-transport \u2014 boot phase 3: select, initialize, and wrap the agent transport.\n *\n * Also exports buildTransport/rebuildTransport for /reset to pick up transport.json changes\n * (including provider switches that can't be live-patched).\n */\n\nimport { execSync } from \"node:child_process\";\nimport { TmuxClient } from \"../components/transport/tmux-client.js\";\nimport { createAgentTransport } from \"../components/agent-registry.js\";\nimport { logDebug, logInfo, logWarn, logError, isLogLevel } from \"../components/logger.js\";\nimport { loadUsers } from \"../components/user-registry.js\";\nimport { updateCtxStart } from \"./ctx-start.js\";\nimport { abmind } from \"../utils/abmind-lazy.js\";\nimport type { BootCtx, PhaseResult } from \"./context.js\";\nimport type { IKiroTransport } from \"../components/transport/kiro-transport.js\";\n\nconst TAG = \"transport\";\n\nexport async function phaseTransport(ctx: BootCtx): Promise<PhaseResult> {\n const { memoryConfig } = ctx;\n\n await buildTransport(ctx);\n\n // Docker detection (#478)\n const { isDockerActive, isSeatbeltActive } = await import(\"../components/guardrails.js\");\n if (isDockerActive()) {\n const { dockerAvailable } = await import(\"../components/sandbox-runtime.js\");\n if (dockerAvailable()) {\n ctx.sandboxEnabled = true;\n logInfo(\"main\", \"\uD83D\uDC33 Docker mode active \u2014 W/B/C sessions will run in Docker containers\");\n } else {\n logWarn(\"main\", \"SECURITY_MODE=docker but Docker not available \u2014 falling back to seatbelt\");\n }\n }\n\n // Seatbelt detection (#906)\n if (isSeatbeltActive()) {\n const { isAvailable, mechanismName } = await import(\"../components/seatbelt/index.js\");\n if (isAvailable()) {\n ctx.seatbeltActive = true;\n logInfo(\"main\", `\uD83D\uDEE1\uFE0F Seatbelt active \u2014 bash commands sandboxed via ${mechanismName()}`);\n } else {\n logWarn(\"main\", `SECURITY_MODE=seatbelt but ${mechanismName()} not available \u2014 falling back to guardrails`);\n }\n }\n\n // Initialize context-window-start for all known users\n if (memoryConfig.memoryEnabled) {\n const reg = loadUsers();\n for (const user of reg.users) updateCtxStart(memoryConfig.memoryDir, user.userId, ctx.startedAt);\n }\n return \"ran\";\n}\n\n/**\n * Construct professor transport from current transport.json + env and attach to ctx.transport.\n * Idempotent: destroys any existing ctx.transport first.\n *\n * #367 \u2014 Validates the resolved provider BEFORE destroying the old transport.\n * If validation fails:\n * - During `/reset` (old transport exists): logs ERROR, keeps the old transport up\n * - At boot (no old transport): falls back to .env config if possible, or throws\n * - In either case: bridge stays alive in degraded mode rather than crash-looping\n */\nexport async function buildTransport(ctx: BootCtx): Promise<PhaseResult> {\n const { config } = ctx;\n\n let transport: IKiroTransport;\n\n const { resolveAgent, getEnvFallback, loadTransport, resolveHailMary, clearTransportCache, validateProviderReady } = await import(\"../components/transport-config.js\");\n const { existsSync, renameSync } = await import(\"node:fs\");\n const { join: pathJoin } = await import(\"node:path\");\n clearTransportCache(); // always re-read (picks up /models change writes)\n let tc = loadTransport();\n\n // Recovery: if transport.json missing/corrupt, try transport.old.json\n if (!tc) {\n const configDir = pathJoin(getEnv().abtarsHome, \"config\");\n const primary = pathJoin(configDir, \"transport.json\");\n const old = pathJoin(configDir, \"transport.old.json\");\n if (existsSync(old)) {\n logDebug(\"main\", \"transport.json missing/corrupt \u2014 recovering from transport.old.json\");\n renameSync(old, primary);\n clearTransportCache();\n tc = loadTransport();\n }\n }\n\n const prof = tc ? resolveAgent(\"professor\", tc) : null;\n\n const hm = resolveHailMary(tc);\n if (hm) {\n ctx.hailMary = {\n model: hm.model,\n endpoint: hm.endpoint,\n apiKey: hm.apiKeyEnv ? getEnv().getApiKey(hm.apiKeyEnv) : undefined,\n };\n logInfo(\"main\", `\uD83D\uDEA8 hailMary configured: ${hm.model} (manual /model emergency only)`);\n } else {\n ctx.hailMary = null;\n }\n\n let resolved: typeof prof = null;\n\n if (!tc) {\n // No transport.json and no .old.json \u2014 emergency mode from .env\n const fb = getEnvFallback();\n const fbValidation = validateProviderReady(fb.providerName, fb.provider, getEnv());\n if (!fbValidation.ok) {\n logError(\"main\", `No transport.json, no backup, and .env emergency model also invalid: ${fbValidation.reason}`);\n logWarn(\"main\", \"Transport unavailable \u2014 running in Tier 2 (no agent responses)\");\n ctx.transport = null;\n return \"skipped\";\n }\n logWarn(\"main\", `\u26A0\uFE0F No transport.json \u2014 emergency mode: ${fb.model} via ${fb.providerName}`);\n resolved = { model: fb.model, provider: fb.provider, providerName: fb.providerName, contextWindow: fb.contextWindow, maxOutput: fb.maxOutput, fallbacks: [] };\n // Notify user (deferred \u2014 transport not yet built)\n setTimeout(() => {\n import(\"../components/notification.js\").then(({ sendNotification }) =>\n sendNotification(ctx, `\u26A0\uFE0F transport.json missing, no backup. Running emergency model: ${fb.model}. Fix: /update deploy`))\n .catch(() => {});\n }, 10_000);\n } else {\n // transport.json valid \u2014 walk primary + fb chain\n const validation = validateProviderReady(prof!.providerName, prof!.provider, getEnv());\n if (validation.ok) {\n logDebug(\"main\", `Model init OK: ${prof!.model} via ${prof!.providerName}`);\n resolved = prof;\n } else {\n logDebug(\"main\", `Model init failed: ${prof!.model} \u2014 ${validation.reason}`);\n logWarn(\"main\", `${prof!.model}: ${validation.reason} \u2014 trying fallbacks`);\n // Walk fallback chain\n for (const fb of prof!.fallbacks) {\n const fbResolved = resolveAgent(\"_fb\", { ...tc!, agents: { ...tc!.agents, _fb: { model: fb.model, provider: fb.provider } } });\n if (!fbResolved) continue;\n const fbVal = validateProviderReady(fbResolved.providerName, fbResolved.provider, getEnv());\n if (fbVal.ok) {\n logDebug(\"main\", `Fallback init OK: ${fbResolved.model} via ${fbResolved.providerName}`);\n resolved = fbResolved;\n break;\n }\n logDebug(\"main\", `Fallback init failed: ${fbResolved.model} \u2014 ${fbVal.reason}`);\n logWarn(\"main\", `${fbResolved.model}: ${fbVal.reason} \u2014 trying next`);\n }\n }\n\n if (!resolved) {\n // ALL configured models failed \u2014 hard error (boot) or keep existing (reset)\n const tried = [prof!.model, ...prof!.fallbacks.map(f => f.model)].join(\", \");\n if (ctx.transport) {\n logError(\"main\", `All models failed init (${tried}) \u2014 keeping existing transport up`);\n return \"ran\";\n }\n logError(\"main\", `All configured models failed init (${tried}). Fix transport.json or use /emergency`);\n logWarn(\"main\", \"Transport unavailable \u2014 running in Tier 2 (no agent responses)\");\n ctx.transport = null;\n return \"skipped\";\n }\n }\n\n // #367 \u2014 if existing transport is up and new config rebuild needed, keep old on error\n // (This path is only hit via /reset rebuild, not boot)\n\n // Destroy old (if any) \u2014 now that we know the new config is valid\n if (ctx.transport) {\n try { await ctx.transport.destroy(); } catch (err) {\n logWarn(\"main\", `Old transport destroy failed: ${err instanceof Error ? err.message : String(err)}`);\n }\n ctx.transport = null;\n }\n\n if (resolved.provider.transport === \"tmux\") {\n const defaults = tc?.transportDefaults?.tmux;\n logInfo(\"main\", `\uD83D\uDDA5\uFE0F tmux transport (${resolved.providerName})`);\n transport = new TmuxClient(\n defaults?.session ?? config.transport.tmuxSession,\n defaults?.captureDelaySec ?? config.transport.tmuxCaptureDelaySec,\n defaults?.maxWaitSec ?? config.transport.tmuxMaxWaitSec,\n );\n } else if (resolved.provider.transport === \"api\") {\n const { DirectApiTransport } = await import(\"../components/transport/direct-api-transport.js\");\n const { ModelHealthRegistry } = await import(\"../components/transport/model-health-registry.js\");\n const { FallbackPolicy } = await import(\"../components/transport/fallback-policy.js\");\n const apiKey = getEnv().getApiKey(resolved.provider.apiKeyEnv ?? \"API_KEY\");\n\n const candidates: Array<{ model: string; endpoint: string; apiKey?: string; maxContext: number }> = [\n { endpoint: resolved.provider.endpoint ?? \"http://localhost:11434/v1\", apiKey, model: resolved.model, maxContext: resolved.contextWindow },\n ];\n for (const fb of resolved.fallbacks) {\n const fbResolved = tc ? resolveAgent(\"_fallback\", { ...tc, agents: { ...tc.agents, _fallback: { model: fb.model, provider: fb.provider } } }) : null;\n candidates.push({\n endpoint: fbResolved?.provider.endpoint ?? resolved.provider.endpoint!,\n apiKey: fbResolved?.provider.apiKeyEnv ? getEnv().getApiKey(fbResolved.provider.apiKeyEnv) : apiKey,\n model: fb.model,\n maxContext: fbResolved?.contextWindow ?? resolved.contextWindow,\n });\n }\n\n if (!ctx.modelHealthRegistry) {\n ctx.modelHealthRegistry = new ModelHealthRegistry(tc?.healthPolicy);\n }\n // Wire auto-demotion\n if (!ctx.modelHealthRegistry.onDemote) {\n ctx.modelHealthRegistry.onDemote = (model, _endpoint, reason) => {\n import(\"../components/transport-config.js\").then(({ demoteModel }) => demoteModel(model, reason));\n import(\"../components/notification.js\").then(({ sendNotification }) =>\n sendNotification(ctx, `\u26A0\uFE0F ${model} demoted (${reason}). Next healthy model promoted.`)).catch(err => logAndSwallow(TAG, \"sendNotification model-demote\", err));\n };\n }\n const policy = new FallbackPolicy(candidates, ctx.modelHealthRegistry);\n\n transport = new DirectApiTransport({\n endpoint: resolved.provider.endpoint ?? \"http://localhost:11434/v1\",\n apiKey,\n model: resolved.model,\n maxContext: resolved.contextWindow,\n maxOutput: resolved.maxOutput,\n maxTurns: tc?.maxTurns ?? 50,\n maxToolRounds: tc?.maxToolRounds ?? 25,\n apiFormat: resolved.provider.apiFormat,\n thinking: resolved.provider.thinking,\n }, policy);\n logInfo(\"main\", `\uD83D\uDD0C Direct API transport (${resolved.providerName}, model=${resolved.model}, ${candidates.length} candidates)`);\n } else {\n // Kill stale ACP processes from previous run (#921, #1012)\n const { readAndClearAcpPids } = await import(\"../components/transport/bridge-lock-transport.js\");\n const stalePids = readAndClearAcpPids();\n for (const pid of stalePids) {\n try { process.kill(pid, \"SIGTERM\"); } catch { /* already dead */ }\n }\n if (stalePids.length) logDebug(\"main\", `Killed ${stalePids.length} stale ACP process(es)`);\n // #1012: Defense-in-depth \u2014 kill kiro-cli acp processes whose CWD is inside ~/.abtars/\n // Safe: agent sessions (AG1-5) have CWD outside ~/.abtars/, won't be touched.\n try {\n const { abtarsHome } = await import(\"../paths.js\");\n const home = abtarsHome();\n const { readlinkSync } = await import(\"node:fs\");\n const candidates = execSync(\"ps ax -o pid,args 2>/dev/null | grep '[k]iro-cli.*acp' | awk '{print $1}' || true\", { encoding: \"utf-8\", timeout: 3000 }).trim().split(\"\\n\").filter(Boolean);\n let killed = 0;\n for (const p of candidates) {\n const pid = parseInt(p, 10);\n if (!pid || pid === process.pid) continue;\n try {\n const cwd = readlinkSync(`/proc/${pid}/cwd`);\n if (cwd.startsWith(home)) { process.kill(pid, \"SIGTERM\"); killed++; }\n } catch {} // dead, no /proc (macOS), or no permission\n }\n if (killed) logDebug(\"main\", `CWD-checked kill: ${killed} orphan(s)`);\n } catch { /* best effort */ }\n logInfo(\"main\", `\uD83D\uDD0C ACP transport (${resolved.provider.cli ?? \"kiro-cli\"}, model=${resolved.model})`);\n transport = createAgentTransport(\"professor\", {\n cliPath: resolved.provider.cli ?? config.transport.agentCliPath,\n workingDir: config.transport.workingDir,\n agentCli: resolved.provider.cli ?? \"kiro-cli\",\n model: resolved.model,\n });\n }\n\n await transport.initialize();\n\n // SOUL bundle set in phase-pipelineDeps (after memory state resolved) #998\n\n if (resolved.fallbacks.length > 0 && resolved.provider.transport !== \"api\") {\n logWarn(\"main\", `\u26A0\uFE0F Fallbacks configured for ${resolved.provider.transport} transport \u2014 only API transport supports model fallback`);\n }\n\n ctx.transport = transport;\n // Flush message queues on reinit \u2014 model lost context\n if (\"onReinit\" in transport) {\n (transport as any).onReinit = () => {\n const { spin } = require(\"../components/spin.js\") as typeof import(\"../components/spin.js\");\n for (const s of spin.listAllSessions()) {\n if (s.queue.length) {\n logWarn(\"transport\", `Reinit: flushing ${s.queue.length} queued message(s)`);\n s.queue.length = 0;\n }\n }\n };\n }\n ctx.modelName = resolved.model;\n ctx.modelProvider = resolved.providerName;\n ctx.fallbackChain = resolved.fallbacks.map((f: { model: string }) => f.model);\n\n if (ctx.modelHealthRegistry) {\n ctx.runtime.setRegistry(ctx.modelHealthRegistry);\n }\n ctx.runtime.setMainTransport(transport);\n ctx.runtime.setSessionManager(ctx.sessionManager);\n if (ctx.sandboxEnabled) ctx.runtime.setSandboxEnabled(true);\n\n // Wire async delegation tools (#570)\n if (getEnv().enableAsyncDelegation) {\n const { setDelegationDeps } = await import(\"../components/transport/delegation-tools.js\");\n setDelegationDeps(ctx.runtime);\n }\n\n logInfo(\"main\", \"\u2713 Transport ready\");\n\n // Wire ActionGate for auth-required commands\n const { join } = await import(\"node:path\");\n const { abtarsHome } = await import(\"../paths.js\");\n const { ActionGate } = await import(\"../components/action-gate.js\");\n const { setActionGate } = await import(\"../components/transport/tool-registry.js\");\n const authDir = join(abtarsHome(), \"auth\");\n ctx.actionGate = new ActionGate(authDir);\n setActionGate(ctx.actionGate);\n logDebug(\"main\", \"\uD83D\uDD12 ActionGate wired\");\n\n // #906: Wire seatbelt into tool-registry\n if (ctx.seatbeltActive) {\n const { setSeatbelt } = await import(\"../components/transport/tool-registry.js\");\n const { getPolicy } = await import(\"../components/seatbelt/index.js\");\n const home = abtarsHome();\n const policy = getPolicy(\"A\", join(home, \"workspace\"), home); // Main session policy\n setSeatbelt(true, policy);\n logDebug(\"main\", \"\uD83D\uDEE1\uFE0F Seatbelt wired to tool-registry\");\n }\n\n // #843: Wire memory to DirectApiTransport for session hydration on restart.\n // Transport-specific \u2014 only DirectApiTransport has this field.\n if (resolved.provider.transport === \"api\" && ctx.memory) {\n (transport as import(\"../components/transport/direct-api-transport.js\").DirectApiTransport).memoryBackend = ctx.memory!;\n\n // Wire context engine for automatic compaction (DirectApiTransport-specific).\n const db = ctx.memory!.getDb?.() ?? ctx.memory!.getDatabase?.();\n if (db && resolved.contextWindow >= 128000) {\n const mod = abmind();\n if (mod) {\n const { ContextEngine } = mod;\n const { createContextOrchestrator } = await import(\"../components/context/index.js\");\n const { spin } = await import(\"../components/spin.js\");\n const { recordCompaction } = await import(\"../components/metrics-collector.js\");\n const contextEngine = new ContextEngine(db);\n // Cheap compaction model: route summarization through Spin as an S-type\n // one-shot (ephemeral, terminateAfter \"call\") on the dreamy agent. Spin\n // resolves agent \u2192 model/provider/metrics; no raw LLM call, no lingering session.\n const compactionModel = (tc ? resolveAgent(\"dreamy\", tc) : null)?.model ?? null;\n const orchestrator = createContextOrchestrator(\n contextEngine,\n (systemPrompt: string, userPrompt: string) =>\n spin.dispatchBackground({ agent: \"dreamy\", prompt: `${systemPrompt}\\n\\n${userPrompt}` }),\n (_chatId: string) => {\n try { return ctx.memory?.getLastMessageTimestamp(true) ?? null; } catch (err) { logAndSwallow(TAG, \"getLastMessageTimestamp\", err); return null; }\n },\n { compactionModel, onCompactionEvent: recordCompaction },\n );\n (transport as import(\"../components/transport/direct-api-transport.js\").DirectApiTransport).contextOrchestrator = orchestrator;\n logInfo(\"main\", `\uD83D\uDCE6 Context engine wired (auto-compaction active, model: ${compactionModel ?? \"main\"})`);\n }\n }\n }\n\n if (\"onFallback\" in transport) {\n let lastNotifiedModel: string | null = null;\n (transport as unknown as { onFallback: (model: string, ctxPct: number, reason?: string) => void }).onFallback = (model, ctxPct, reason) => {\n const reasonTag = reason ? ` (${reason})` : \"\";\n const msg = `\u26A1 Fallback${reasonTag}: ${model}${ctxPct >= 0 ? ` (ctx: ~${ctxPct}%)` : \"\"}`;\n logInfo(\"main\", msg);\n // #1296: notify once per fallback episode. Do NOT bypass on debug \u2014 logInfo() above covers\n // debug logging. Re-armed by onPrimaryRestored when primary recovers.\n if (model !== lastNotifiedModel) {\n lastNotifiedModel = model;\n import(\"../components/notification.js\").then(({ sendNotification }) => sendNotification(ctx, msg)).catch(err => logAndSwallow(TAG, \"sendNotification fallback\", err));\n }\n };\n // #1296: re-arm when primary recovers so the next fallback episode notifies again\n if (\"onPrimaryRestored\" in transport) {\n (transport as unknown as { onPrimaryRestored: () => void }).onPrimaryRestored = () => {\n lastNotifiedModel = null;\n };\n }\n }\n return \"ran\";\n}\n\n/**\n * Rebuild professor transport in place (picks up transport.json changes).\n * Patches downstream references that captured the old transport (pipelineDeps, idleSave).\n */\nexport async function rebuildTransport(ctx: BootCtx): Promise<PhaseResult> {\n logInfo(\"main\", \"\uD83D\uDD04 Rebuilding transport...\");\n await buildTransport(ctx);\n if (ctx.pipelineDeps && ctx.transport) {\n (ctx.pipelineDeps as { transport: IKiroTransport }).transport = ctx.transport;\n }\n if (ctx.idleSave && ctx.transport) {\n (ctx.idleSave as unknown as { transport: IKiroTransport }).transport = ctx.transport;\n }\n logInfo(\"main\", \"\u2713 Transport rebuilt\");\n return \"ran\";\n}\n", "import { execSync } from \"node:child_process\";\nimport { writeFileSync, unlinkSync, mkdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { IKiroTransport } from \"./kiro-transport.js\";\nimport { logInfo, logDebug, logWarn } from \"../logger.js\";\nimport { logAndSwallow } from \"../log-and-swallow.js\";\nimport { abtarsHome } from \"../../paths.js\";\n\nconst TAG = \"tmux\";\n\n// Kiro CLI prompt pattern: \"N% >\" or \"N% !>\" where N is a number (context usage percentage)\n// The \"!\" appears in trust-all-tools mode\nconst KIRO_PROMPT_RE = /^\\d+%\\s*!?>/;\n\n// Also match common shell prompts as fallback\nconst SHELL_PROMPT_RE = /[$\u276F%#]\\s*$/;\n\n/**\n * Communicates with kiro-cli running inside a tmux session.\n * Uses `tmux send-keys` to send prompts and `tmux capture-pane`\n * to read responses.\n */\nexport class TmuxClient implements IKiroTransport {\n private readonly sessionName: string;\n private readonly captureDelaySec: number;\n private readonly maxWaitSec: number;\n private ready = false;\n\n /** Optional callback for streaming intermediate responses before final prompt. */\n onIntermediateResponse?: (text: string) => void;\n\n /** Tracks the cumulative text delivered via intermediate chunks (for tail detection). */\n private lastIntermediateDelivered = \"\";\n\n constructor(sessionName: string, captureDelaySec: number, maxWaitSec: number) {\n this.sessionName = sessionName;\n this.captureDelaySec = captureDelaySec;\n this.maxWaitSec = maxWaitSec;\n }\n\n async initialize(): Promise<void> {\n if (!this.sessionExists()) {\n throw new Error(\n `tmux session \"${this.sessionName}\" not found. ` +\n `Run: scripts/tmux-session.sh to start it.`,\n );\n }\n this.ready = true;\n logInfo(\"tmux\", `Session \"${this.sessionName}\" found`);\n }\n\n get isReady(): boolean {\n return this.ready && this.sessionExists();\n }\n\n readonly transportCommands: string[] = [];\n\n async sendPrompt(_sessionKey: string, message: string): Promise<string> {\n if (!this.isReady) {\n throw new Error(\"tmux session not available\");\n }\n\n this.lastIntermediateDelivered = \"\";\n const maxAttempts = 2;\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n // Snapshot pane content before sending\n const before = this.capturePaneRaw();\n if (attempt === 1) {\n logDebug(\"tmux\", `Sending: \"${message.slice(0, 80)}\"`);\n } else {\n logInfo(\"tmux\", `Retry #${attempt}: resending prompt`);\n }\n\n // Send the message \u2014 use temp file for long prompts to avoid tmux command length limit\n try {\n if (message.length > 4000) {\n const tmpDir = join(abtarsHome(), \"tmp\");\n mkdirSync(tmpDir, { recursive: true });\n const tmpFile = join(tmpDir, `prompt-${Date.now()}.txt`);\n writeFileSync(tmpFile, message);\n const readCmd = `My full message is in ${tmpFile} \u2014 please read it and respond.`;\n const escaped = readCmd.replace(/'/g, \"'\\\\''\");\n this.exec(`tmux send-keys -t ${this.sessionName} '${escaped}' Enter`);\n setTimeout(() => { try { unlinkSync(tmpFile); } catch (err) { logAndSwallow(TAG, \"unlink tmpFile\", err); } }, 120_000);\n } else {\n const escaped = message.replace(/'/g, \"'\\\\''\");\n this.exec(`tmux send-keys -t ${this.sessionName} '${escaped}' Enter`);\n }\n } catch (err) {\n logWarn(\"tmux\", `send-keys failed: ${err instanceof Error ? err.message : String(err)}`);\n return \"\u26A0\uFE0F Failed to send message to Kiro session. The tmux session may be in copy mode or unresponsive. Try /reset.\";\n }\n\n // Wait for initial processing\n await sleep(this.captureDelaySec * 1000);\n\n // Poll until Kiro finishes\n const response = await this.pollForResponse(before);\n\n // Check for Kiro transient error \u2014 retry once\n if (response.startsWith(\"Kiro is having trouble\") && attempt < maxAttempts) {\n logInfo(\"tmux\", `Kiro trouble detected, will retry in 5s...`);\n await sleep(5000);\n continue;\n }\n\n logDebug(\"tmux\", `Got response (${response.length} chars)`);\n return response;\n }\n\n // Should not reach here, but just in case\n return \"\u26A0\uFE0F Kiro is having trouble responding. Try again or /reset.\";\n }\n\n async resetSession(_sessionKey: string): Promise<void> {\n if (!this.sessionExists()) return;\n this.exec(`tmux send-keys -t ${this.sessionName} C-c`);\n await sleep(1000);\n this.exec(`tmux send-keys -t ${this.sessionName} '/clear' Enter`);\n await sleep(2000);\n // Kiro asks \"Are you sure? [y/n]:\" \u2014 confirm with 'y'\n this.exec(`tmux send-keys -t ${this.sessionName} 'y' Enter`);\n await sleep(1000);\n }\n\n async restartSession(workingDir: string, kiroModel?: string): Promise<void> {\n // Kill existing tmux session and start fresh\n if (this.sessionExists()) {\n this.exec(`tmux kill-session -t ${this.sessionName}`);\n await sleep(1000);\n }\n let cmd = `kiro-cli chat --trust-all-tools`;\n if (kiroModel) cmd += ` --model ${kiroModel}`;\n this.exec(`tmux new-session -d -s ${this.sessionName} -c '${workingDir}' '${cmd}'`);\n this.exec(`tmux set-option -t ${this.sessionName} history-limit 5000`);\n await sleep(3000);\n // Enable thinking tool\n this.exec(`tmux send-keys -t ${this.sessionName} '/settings chat.enableThinking true' Enter`);\n await sleep(2000);\n this.ready = this.sessionExists();\n logInfo(\"tmux\", `Session restarted (ready=${this.ready})`);\n }\n\n async sendInterrupt(): Promise<void> {\n if (!this.sessionExists()) return;\n logInfo(\"tmux\", \"Sending Ctrl+C interrupt\");\n this.exec(`tmux send-keys -t ${this.sessionName} C-c`);\n }\n\n destroy(): void {\n this.ready = false;\n }\n\n /**\n * Poll capture-pane until Kiro's prompt reappears (N% >).\n * Delivers intermediate purple-line responses via onIntermediateResponse callback\n * so the user sees partial answers while Kiro continues with tools.\n * Only returns when the actual Kiro prompt appears or timeout.\n */\n private async pollForResponse(beforeSnapshot: string): Promise<string> {\n const startTime = Date.now();\n const maxWaitMs = this.maxWaitSec * 1000;\n let lastCapture = \"\";\n let stableCount = 0;\n let lastDeliveredAnswer = \"\";\n\n while (Date.now() - startTime < maxWaitMs) {\n const capture = this.capturePaneRaw();\n\n // Get only the NEW content (diff from before)\n const newContent = this.diffOutput(beforeSnapshot, capture);\n\n if (newContent.length === 0) {\n await sleep(2000);\n continue;\n }\n\n // Check if the last non-empty line is a Kiro prompt (N% >)\n const lines = capture.split(\"\\n\");\n const lastNonEmpty = this.getLastNonEmptyLine(lines);\n const lastClean = this.stripAnsi(lastNonEmpty);\n\n if (KIRO_PROMPT_RE.test(lastClean)) {\n const pctMatch = lastClean.match(/^(\\d+)%/);\n if (pctMatch) {\n this.lastContextPercent = parseInt(pctMatch[1]!, 10);\n logDebug(\"tmux\", `Context window: ${this.lastContextPercent}%`);\n }\n logDebug(\"tmux\", `Detected Kiro prompt: \"${lastClean}\"`);\n return this.extractResponse(newContent);\n }\n\n // Check for shell prompt as fallback\n if (SHELL_PROMPT_RE.test(lastClean) && newContent.length > 10) {\n logDebug(\"tmux\", `Detected shell prompt: \"${lastClean}\"`);\n return this.extractResponse(newContent);\n }\n\n // No prompt yet \u2014 deliver intermediate answer if we have new purple lines\n if (this.onIntermediateResponse && capture !== lastCapture) {\n const intermediateAnswer = this.extractAnswerOnly(newContent);\n if (intermediateAnswer && intermediateAnswer !== lastDeliveredAnswer) {\n const newPart = intermediateAnswer.startsWith(lastDeliveredAnswer)\n ? intermediateAnswer.slice(lastDeliveredAnswer.length).trim()\n : intermediateAnswer;\n if (newPart) {\n logDebug(\"tmux\", `Delivering intermediate chunk (${newPart.length} chars)`);\n this.onIntermediateResponse(newPart);\n lastDeliveredAnswer = intermediateAnswer;\n this.lastIntermediateDelivered = intermediateAnswer;\n }\n }\n }\n\n // Track stabilization but do NOT return on it \u2014 only N% > ends the poll\n if (capture === lastCapture) {\n stableCount++;\n } else {\n stableCount = 0;\n lastCapture = capture;\n }\n\n await sleep(2000);\n }\n\n // Timeout\n const finalCapture = this.capturePaneRaw();\n const finalNew = this.diffOutput(beforeSnapshot, finalCapture);\n if (finalNew.length > 0) {\n return this.extractResponse(finalNew) + \"\\n\\n\u23F1\uFE0F (response may be incomplete \u2014 timed out)\";\n }\n return \"\u23F1\uFE0F Kiro is still processing. Check the tmux session directly.\";\n }\n\n /**\n * Extract the meaningful response from the diff.\n * Removes the echoed user input line and Kiro's prompt lines.\n * Stores the \"answer only\" portion (lines that were \"> \" prefixed)\n * separately for TTS use.\n *\n * Kiro output format:\n * N% > <echoed user input>\n * > <response line 1>\n * > <response line 2>\n * \u25B8 Time: Ns\n * M% >\n */\n private lastAnswerOnly = \"\";\n private lastContextPercent = -1;\n\n /** Get just the Kiro answer lines (\"> \" prefixed) from the last response \u2014 for TTS. */\n get answerOnly(): string {\n return this.lastAnswerOnly;\n }\n get toolCallsSucceeded(): number { return 0; }\n\n /** Get the context window usage percentage from the last Kiro prompt (e.g. 10 for \"10% >\"). Returns -1 if unknown. */\n get contextPercent(): number {\n return this.lastContextPercent;\n }\n /** Get the cumulative text that was delivered via intermediate streaming. */\n get intermediateDeliveredText(): string {\n return this.lastIntermediateDelivered;\n }\n\n /** Extract just the purple \"> \" answer lines from raw tmux output (no side effects). */\n private extractAnswerOnly(raw: string): string {\n const PURPLE_PREFIX = /\\x1b\\[38;5;141m>\\s/;\n const lines = raw.split(\"\\n\");\n\n // Find last contiguous block of purple lines\n let blockStart = -1;\n for (let i = lines.length - 1; i >= 0; i--) {\n if (PURPLE_PREFIX.test(lines[i]!)) {\n blockStart = i;\n while (blockStart > 0 && PURPLE_PREFIX.test(lines[blockStart - 1]!)) blockStart--;\n break;\n }\n }\n if (blockStart < 0) return \"\";\n\n const answerLines: string[] = [];\n for (let i = blockStart; i < lines.length; i++) {\n const clean = this.stripAnsi(lines[i]!).trim();\n if (KIRO_PROMPT_RE.test(clean)) break;\n if (clean.startsWith(\"\u25B8 Time:\")) break;\n if (clean.startsWith(\"> \")) answerLines.push(clean.slice(2));\n else if (clean === \">\") answerLines.push(\"\");\n else if (clean === \"\") answerLines.push(\"\");\n else answerLines.push(clean);\n }\n return answerLines.join(\"\\n\").trim();\n }\n\n private extractResponse(raw: string): string {\n // ANSI color 141 (light purple) marks the \"> \" prefix on actual LLM response lines.\n // We detect these BEFORE stripping ANSI to reliably distinguish LLM output from\n // injected context (gray, color 245) and other noise.\n const PURPLE_PREFIX = /\\x1b\\[38;5;141m>\\s/;\n\n const lines = raw.split(\"\\n\");\n\n // First pass: identify lines that are genuine LLM responses (purple \"> \" prefix)\n const answerLines: string[] = [];\n let lastPurpleBlockStart = -1;\n\n for (let i = 0; i < lines.length; i++) {\n if (PURPLE_PREFIX.test(lines[i]!)) {\n if (lastPurpleBlockStart === -1) lastPurpleBlockStart = i;\n }\n }\n\n // Find the LAST contiguous block of purple \"> \" lines \u2014 that's the real answer.\n // Walk backwards to find the start of the last block.\n let blockStart = -1;\n for (let i = lines.length - 1; i >= 0; i--) {\n if (PURPLE_PREFIX.test(lines[i]!)) {\n blockStart = i;\n // Keep walking back through contiguous purple lines and continuation lines\n while (blockStart > 0) {\n const prev = lines[blockStart - 1]!;\n if (PURPLE_PREFIX.test(prev) || (!KIRO_PROMPT_RE.test(this.stripAnsi(prev).trim()) && !prev.includes(\"\u25B8 Time:\") && this.stripAnsi(prev).trim() !== \"\" && !PURPLE_PREFIX.test(prev) && blockStart === i)) {\n // Only extend back through purple lines\n if (PURPLE_PREFIX.test(prev)) {\n blockStart--;\n } else {\n break;\n }\n } else {\n break;\n }\n }\n break;\n }\n }\n\n if (blockStart >= 0) {\n // Extract from the last purple block to the end, stripping ANSI and \"> \" prefix\n for (let i = blockStart; i < lines.length; i++) {\n const line = lines[i]!;\n const clean = this.stripAnsi(line).trim();\n // Stop at Kiro prompt or Time summary\n if (KIRO_PROMPT_RE.test(clean)) break;\n if (clean.startsWith(\"\u25B8 Time:\") || clean.startsWith(\"\u25B8 Time:\")) break;\n if (clean === \"\") {\n answerLines.push(\"\");\n continue;\n }\n // Strip \"> \" prefix\n if (clean.startsWith(\"> \")) {\n answerLines.push(clean.slice(2));\n } else if (clean === \">\") {\n answerLines.push(\"\");\n } else {\n answerLines.push(clean);\n }\n }\n this.lastAnswerOnly = answerLines.join(\"\\n\").trim();\n } else {\n this.lastAnswerOnly = \"\";\n }\n\n // Full response: strip ANSI, then remove prompt lines and noise (legacy behavior)\n const cleaned = this.stripAnsi(raw);\n const allLines = cleaned.split(\"\\n\");\n const result: string[] = [];\n\n for (const line of allLines) {\n const trimmed = line.trim();\n if (result.length === 0 && trimmed === \"\") continue;\n if (KIRO_PROMPT_RE.test(trimmed)) continue;\n if (trimmed.startsWith(\"\u25B8 Time:\") || trimmed.startsWith(\"\u25B8 Time:\")) continue;\n if (/^-{4,}$/.test(trimmed)) continue;\n result.push(line);\n }\n\n const stripped = result.map((line) => {\n const trimmed = line.trimStart();\n if (trimmed.startsWith(\"> \")) return trimmed.slice(2);\n if (trimmed === \">\") return \"\";\n return line;\n });\n\n const final = stripped.join(\"\\n\").trim();\n logDebug(\"tmux\", `extractResponse: ${result.length} lines \u2192 \"${final.slice(0, 120)}\"`);\n if (this.lastAnswerOnly) {\n logDebug(\"tmux\", `answerOnly (${this.lastAnswerOnly.length} chars): \"${this.lastAnswerOnly.slice(0, 120)}\"`);\n }\n return final;\n }\n\n /** Get new content by diffing before/after snapshots. */\n private diffOutput(before: string, after: string): string {\n const beforeLines = before.split(\"\\n\");\n const afterLines = after.split(\"\\n\");\n\n // Find where the new content starts\n let commonPrefix = 0;\n while (\n commonPrefix < beforeLines.length &&\n commonPrefix < afterLines.length &&\n beforeLines[commonPrefix] === afterLines[commonPrefix]\n ) {\n commonPrefix++;\n }\n\n return afterLines.slice(commonPrefix).join(\"\\n\").trim();\n }\n\n /** Get the last non-empty line from an array. */\n private getLastNonEmptyLine(lines: string[]): string {\n for (let i = lines.length - 1; i >= 0; i--) {\n const trimmed = lines[i]!.trim();\n if (trimmed.length > 0) return trimmed;\n }\n return \"\";\n }\n\n /** Strip ANSI escape codes. */\n private stripAnsi(text: string): string {\n // eslint-disable-next-line no-control-regex\n return text.replace(/\\x1B\\[[0-9;]*[a-zA-Z]/g, \"\")\n .replace(/\\x1B\\][^\\x07]*\\x07/g, \"\"); // OSC sequences\n }\n\n private capturePaneRaw(): string {\n try {\n return this.exec(`tmux capture-pane -t ${this.sessionName} -p -e -S -2000`);\n } catch (err) {\n logAndSwallow(TAG, \"capturePaneRaw\", err);\n return \"\";\n }\n }\n\n private sessionExists(): boolean {\n try {\n this.exec(`tmux has-session -t ${this.sessionName}`);\n return true;\n } catch (err) {\n logAndSwallow(TAG, \"sessionExists check\", err);\n return false;\n }\n }\n\n private exec(command: string): string {\n return execSync(command, {\n encoding: \"utf-8\",\n timeout: 15_000,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n }).trim();\n }\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["execSync", "TAG", "abtarsHome", "execSync", "join"]
|
|
7
|
+
}
|
|
@@ -2,60 +2,60 @@
|
|
|
2
2
|
import { createRequire as __bundleCreateRequire } from 'node:module'; import { fileURLToPath as __bundleFileURLToPath } from 'node:url'; import { dirname as __bundleDirname } from 'node:path'; const require = __bundleCreateRequire(import.meta.url); const __chunk_filename = __bundleFileURLToPath(import.meta.url); const __chunk_dirname = __bundleDirname(__chunk_filename);
|
|
3
3
|
import {
|
|
4
4
|
getDelegationTools
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-5PNJFDSW.js";
|
|
6
6
|
import {
|
|
7
7
|
guardrails_exports,
|
|
8
8
|
init_guardrails
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-Q66LQMMZ.js";
|
|
10
10
|
import {
|
|
11
11
|
init_seatbelt,
|
|
12
12
|
seatbelt_exports
|
|
13
13
|
} from "./chunk-VOLAZHA2.js";
|
|
14
|
-
import {
|
|
15
|
-
getOrcTools,
|
|
16
|
-
init_orc_tools
|
|
17
|
-
} from "./chunk-YPAQEQSC.js";
|
|
18
14
|
import {
|
|
19
15
|
artifactAttachTool,
|
|
20
16
|
artifactPullTool,
|
|
21
17
|
artifactPushTool,
|
|
22
18
|
init_artifact_tools
|
|
23
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-L72RIPEC.js";
|
|
24
20
|
import {
|
|
25
21
|
auditDeny,
|
|
26
22
|
checkPath,
|
|
27
23
|
checkTool
|
|
28
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-P3NODAHF.js";
|
|
29
25
|
import {
|
|
30
26
|
abmind
|
|
31
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-YJZE4OK3.js";
|
|
32
28
|
import {
|
|
33
29
|
bumpRead,
|
|
34
30
|
setProvenance
|
|
35
|
-
} from "./chunk-
|
|
36
|
-
import {
|
|
37
|
-
getPeerTransport,
|
|
38
|
-
init_peer_transport
|
|
39
|
-
} from "./chunk-PU5HSKWH.js";
|
|
31
|
+
} from "./chunk-NHPLD3C7.js";
|
|
40
32
|
import {
|
|
41
33
|
channelPost,
|
|
42
34
|
channelRead,
|
|
43
35
|
init_kanban_channel
|
|
44
|
-
} from "./chunk-
|
|
36
|
+
} from "./chunk-2NLUT5S2.js";
|
|
37
|
+
import {
|
|
38
|
+
getOrcTools,
|
|
39
|
+
init_orc_tools
|
|
40
|
+
} from "./chunk-GF6NVNA7.js";
|
|
45
41
|
import {
|
|
46
42
|
getMasterUserId,
|
|
47
43
|
init_master_user
|
|
48
|
-
} from "./chunk-
|
|
44
|
+
} from "./chunk-CK7YTA2F.js";
|
|
45
|
+
import {
|
|
46
|
+
getPeerTransport,
|
|
47
|
+
init_peer_transport
|
|
48
|
+
} from "./chunk-SFL4EPCZ.js";
|
|
49
49
|
import {
|
|
50
50
|
init_kanban_board,
|
|
51
51
|
kanbanEnqueue,
|
|
52
52
|
kanbanList,
|
|
53
53
|
kanbanUpdate
|
|
54
|
-
} from "./chunk-
|
|
54
|
+
} from "./chunk-FGYDIX54.js";
|
|
55
55
|
import {
|
|
56
56
|
init_log_and_swallow,
|
|
57
57
|
logAndSwallow
|
|
58
|
-
} from "./chunk-
|
|
58
|
+
} from "./chunk-2IYJ4I66.js";
|
|
59
59
|
import {
|
|
60
60
|
init_logger,
|
|
61
61
|
logDebug,
|
|
@@ -63,7 +63,7 @@ import {
|
|
|
63
63
|
logTrace,
|
|
64
64
|
logWarn,
|
|
65
65
|
redactSecrets
|
|
66
|
-
} from "./chunk-
|
|
66
|
+
} from "./chunk-XRTXYN66.js";
|
|
67
67
|
import {
|
|
68
68
|
abtarsHome,
|
|
69
69
|
init_paths
|
|
@@ -413,26 +413,30 @@ var peerDelegateTool = {
|
|
|
413
413
|
required: ["goal"]
|
|
414
414
|
},
|
|
415
415
|
async execute(args) {
|
|
416
|
+
const { isActiveCardPeerSourced } = await import("./orc-tools-UZVPONKY.js");
|
|
417
|
+
if (await isActiveCardPeerSourced()) {
|
|
418
|
+
return JSON.stringify({ error: "Relaying to other peers is not permitted for peer-originated requests. Peers communicate directly.", reason: "peer_relay_blocked" });
|
|
419
|
+
}
|
|
416
420
|
const { goal, priority, context } = args;
|
|
417
421
|
let peer = args.peer;
|
|
418
422
|
const requires = args.requires ? typeof args.requires === "string" ? JSON.parse(args.requires) : args.requires : [];
|
|
419
423
|
const artifacts = args.artifacts ? JSON.parse(args.artifacts) : void 0;
|
|
420
424
|
if (!goal) return JSON.stringify({ error: "goal is required" });
|
|
421
425
|
if (!peer && requires.length > 0) {
|
|
422
|
-
const { findCapablePeer } = await import("./gossip-
|
|
426
|
+
const { findCapablePeer } = await import("./gossip-SKRCPOBS.js");
|
|
423
427
|
const match = findCapablePeer(requires);
|
|
424
428
|
if (!match) return JSON.stringify({ error: `No alive peer with capabilities: [${requires.join(", ")}]` });
|
|
425
429
|
peer = match.name;
|
|
426
430
|
logDebug(TAG3, `Auto-selected peer ${peer} for requires=[${requires.join(",")}] (load=${match.load})`);
|
|
427
431
|
} else if (!peer) {
|
|
428
|
-
const { getPeerTable } = await import("./gossip-
|
|
432
|
+
const { getPeerTable } = await import("./gossip-SKRCPOBS.js");
|
|
429
433
|
const alive = getPeerTable().sort((a, b) => a.load - b.load);
|
|
430
434
|
if (alive.length === 0) return JSON.stringify({ error: "No alive peers available" });
|
|
431
435
|
peer = alive[0].name;
|
|
432
436
|
logDebug(TAG3, `Auto-selected least-loaded peer ${peer} (load=${alive[0].load})`);
|
|
433
437
|
}
|
|
434
438
|
if (requires.length > 0 && args.peer) {
|
|
435
|
-
const { getPeerTable } = await import("./gossip-
|
|
439
|
+
const { getPeerTable } = await import("./gossip-SKRCPOBS.js");
|
|
436
440
|
const entry = getPeerTable(true).find((p) => p.name.toLowerCase() === peer.toLowerCase());
|
|
437
441
|
if (entry && !requires.every((r) => entry.capabilities.includes(r))) {
|
|
438
442
|
const missing = requires.filter((r) => !entry.capabilities.includes(r));
|
|
@@ -450,8 +454,8 @@ var peerDelegateTool = {
|
|
|
450
454
|
notes: JSON.stringify({ peer, remote_task_id: remoteTaskId, remote_session_id: remoteSessionId, goal, requires })
|
|
451
455
|
});
|
|
452
456
|
if (remoteSessionId) {
|
|
453
|
-
const { spin } = await import("./spin-
|
|
454
|
-
const { getMasterUserId: getMasterUserId2 } = await import("./master-user-
|
|
457
|
+
const { spin } = await import("./spin-VHNGNWTD.js");
|
|
458
|
+
const { getMasterUserId: getMasterUserId2 } = await import("./master-user-MUBUP3KD.js");
|
|
455
459
|
spin.createHollowSession(getMasterUserId2(), "telegram", "W", peer, remoteSessionId);
|
|
456
460
|
}
|
|
457
461
|
logInfo(TAG3, `Delegated to ${peer}: remote#${remoteTaskId} \u2192 local#${localCardId}`);
|
|
@@ -871,7 +875,7 @@ var memoryRecallTool = {
|
|
|
871
875
|
try {
|
|
872
876
|
const t0 = Date.now();
|
|
873
877
|
const userId = context?.userId ?? getMasterUserId();
|
|
874
|
-
const { loadUsers } = await import("./user-registry-
|
|
878
|
+
const { loadUsers } = await import("./user-registry-4PACZJIJ.js");
|
|
875
879
|
const userEntry = loadUsers().byUserId.get(userId);
|
|
876
880
|
const result = await memoryBackend.recall({
|
|
877
881
|
translated: [args["query"] ?? ""],
|
|
@@ -880,7 +884,7 @@ var memoryRecallTool = {
|
|
|
880
884
|
limit: parseInt(args["limit"] ?? "10", 10),
|
|
881
885
|
maxClassification: userEntry?.maxClass ?? 1
|
|
882
886
|
});
|
|
883
|
-
import("./metrics-collector-
|
|
887
|
+
import("./metrics-collector-YMUGY3PI.js").then(({ recordLatency }) => recordLatency("recall", Date.now() - t0)).catch(() => {
|
|
884
888
|
});
|
|
885
889
|
return JSON.stringify(result);
|
|
886
890
|
} catch (err) {
|
|
@@ -1047,8 +1051,12 @@ var peerSessionTool = {
|
|
|
1047
1051
|
required: ["peer_name", "message"]
|
|
1048
1052
|
},
|
|
1049
1053
|
async execute(args) {
|
|
1050
|
-
const {
|
|
1051
|
-
|
|
1054
|
+
const { isActiveCardPeerSourced } = await import("./orc-tools-UZVPONKY.js");
|
|
1055
|
+
if (await isActiveCardPeerSourced()) {
|
|
1056
|
+
return JSON.stringify({ error: "Relaying to other peers is not permitted for peer-originated requests. Peers communicate directly.", reason: "peer_relay_blocked" });
|
|
1057
|
+
}
|
|
1058
|
+
const { callPeer } = await import("./peer-client-UITTMWJ2.js");
|
|
1059
|
+
const { loadPeerConfig } = await import("./peer-config-URM7DCW6.js");
|
|
1052
1060
|
const { getOrCreateSession, addTurn, isEnded, destroySession } = await import("./peer-sessions-MY2YVXHC.js");
|
|
1053
1061
|
const peerName = args.peer_name?.trim();
|
|
1054
1062
|
const message = args.message?.trim();
|
|
@@ -1087,15 +1095,19 @@ var peerWakeupTool = {
|
|
|
1087
1095
|
required: ["peer_name"]
|
|
1088
1096
|
},
|
|
1089
1097
|
async execute(args) {
|
|
1090
|
-
const {
|
|
1091
|
-
|
|
1098
|
+
const { isActiveCardPeerSourced } = await import("./orc-tools-UZVPONKY.js");
|
|
1099
|
+
if (await isActiveCardPeerSourced()) {
|
|
1100
|
+
return JSON.stringify({ error: "Relaying to other peers is not permitted for peer-originated requests. Peers communicate directly.", reason: "peer_relay_blocked" });
|
|
1101
|
+
}
|
|
1102
|
+
const { sendWakeup } = await import("./dns-wakeup-V3LEFXPE.js");
|
|
1103
|
+
const { loadPeerConfig } = await import("./peer-config-URM7DCW6.js");
|
|
1092
1104
|
const peerName = args.peer_name?.trim();
|
|
1093
1105
|
if (!peerName) return JSON.stringify({ error: "peer_name required" });
|
|
1094
1106
|
const config = loadPeerConfig();
|
|
1095
1107
|
const peer = config.peers[peerName];
|
|
1096
1108
|
if (!peer) return JSON.stringify({ error: `Unknown peer: ${peerName}` });
|
|
1097
1109
|
const udpPort = peer.udpPort ?? 5353;
|
|
1098
|
-
sendWakeup(config.self.name, peer.host, udpPort
|
|
1110
|
+
sendWakeup(config.self.name, peer.host, udpPort);
|
|
1099
1111
|
return JSON.stringify({ ok: true, message: `Wake-up sent to ${peerName}. Expect callback within seconds.` });
|
|
1100
1112
|
}
|
|
1101
1113
|
};
|
|
@@ -1212,4 +1224,4 @@ export {
|
|
|
1212
1224
|
getToolSchemas,
|
|
1213
1225
|
executeToolCall
|
|
1214
1226
|
};
|
|
1215
|
-
//# sourceMappingURL=chunk-
|
|
1227
|
+
//# sourceMappingURL=chunk-ITOFPJAV.js.map
|