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,42 +2,47 @@
|
|
|
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
|
classifyError
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-JG4BKXBN.js";
|
|
6
6
|
import {
|
|
7
7
|
recordUsage
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-6B5ZFUPD.js";
|
|
9
9
|
import {
|
|
10
10
|
executeToolCall,
|
|
11
11
|
getToolSchemas
|
|
12
|
-
} from "./chunk-
|
|
13
|
-
import "./chunk-
|
|
14
|
-
import "./chunk-
|
|
15
|
-
import "./chunk-URQPDCK5.js";
|
|
12
|
+
} from "./chunk-ITOFPJAV.js";
|
|
13
|
+
import "./chunk-5PNJFDSW.js";
|
|
14
|
+
import "./chunk-Q66LQMMZ.js";
|
|
16
15
|
import "./chunk-VOLAZHA2.js";
|
|
17
|
-
import "./chunk-
|
|
18
|
-
import
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
import "./chunk-
|
|
23
|
-
import "./chunk-
|
|
24
|
-
import "./chunk-
|
|
25
|
-
import "./chunk-
|
|
26
|
-
import "./chunk-
|
|
27
|
-
import "./chunk-
|
|
28
|
-
import "./chunk-
|
|
29
|
-
import "./chunk-
|
|
30
|
-
import "./chunk-
|
|
31
|
-
import "./chunk-
|
|
32
|
-
import "./chunk-
|
|
16
|
+
import "./chunk-L72RIPEC.js";
|
|
17
|
+
import {
|
|
18
|
+
init_spin_types,
|
|
19
|
+
isCompactable
|
|
20
|
+
} from "./chunk-BNXV7SZI.js";
|
|
21
|
+
import "./chunk-P3NODAHF.js";
|
|
22
|
+
import "./chunk-YJZE4OK3.js";
|
|
23
|
+
import "./chunk-NHPLD3C7.js";
|
|
24
|
+
import "./chunk-MV6CJFWR.js";
|
|
25
|
+
import "./chunk-2NLUT5S2.js";
|
|
26
|
+
import "./chunk-GF6NVNA7.js";
|
|
27
|
+
import "./chunk-CK7YTA2F.js";
|
|
28
|
+
import "./chunk-E7XD5UGB.js";
|
|
29
|
+
import "./chunk-SFL4EPCZ.js";
|
|
30
|
+
import "./chunk-KOSFXW2S.js";
|
|
31
|
+
import "./chunk-FGYDIX54.js";
|
|
32
|
+
import "./chunk-Z4FZPB42.js";
|
|
33
|
+
import "./chunk-5Y3FJ2Y7.js";
|
|
34
|
+
import "./chunk-3BG3AIDP.js";
|
|
35
|
+
import "./chunk-5RVOEFGT.js";
|
|
36
|
+
import "./chunk-WC5O5KOE.js";
|
|
37
|
+
import "./chunk-N5KN3LGD.js";
|
|
33
38
|
import {
|
|
34
39
|
getEnv,
|
|
35
40
|
init_env_schema
|
|
36
|
-
} from "./chunk-
|
|
41
|
+
} from "./chunk-6PA5JBUU.js";
|
|
37
42
|
import {
|
|
38
43
|
init_log_and_swallow,
|
|
39
44
|
logAndSwallow
|
|
40
|
-
} from "./chunk-
|
|
45
|
+
} from "./chunk-2IYJ4I66.js";
|
|
41
46
|
import {
|
|
42
47
|
init_logger,
|
|
43
48
|
logDebug,
|
|
@@ -45,7 +50,7 @@ import {
|
|
|
45
50
|
logInfo,
|
|
46
51
|
logTrace,
|
|
47
52
|
logWarn
|
|
48
|
-
} from "./chunk-
|
|
53
|
+
} from "./chunk-XRTXYN66.js";
|
|
49
54
|
import "./chunk-GALQBVKO.js";
|
|
50
55
|
import "./chunk-O7KQG6ME.js";
|
|
51
56
|
import "./chunk-7K2YZTLD.js";
|
|
@@ -309,6 +314,7 @@ function parseUsageLimitCooldown(message) {
|
|
|
309
314
|
}
|
|
310
315
|
|
|
311
316
|
// src/components/transport/direct-api-transport.ts
|
|
317
|
+
init_spin_types();
|
|
312
318
|
var TAG3 = "direct-api";
|
|
313
319
|
var DirectApiTransport = class {
|
|
314
320
|
config;
|
|
@@ -326,6 +332,8 @@ var DirectApiTransport = class {
|
|
|
326
332
|
activeEndpoint;
|
|
327
333
|
activeApiKey;
|
|
328
334
|
activeModel;
|
|
335
|
+
/** #1295: maxContext of the model currently serving requests. Used for accurate contextPercent. */
|
|
336
|
+
_activeMaxContext;
|
|
329
337
|
_lastPromptTokens = 0;
|
|
330
338
|
_lastCompletionTokens = 0;
|
|
331
339
|
_activeSessionKey = "";
|
|
@@ -343,6 +351,9 @@ var DirectApiTransport = class {
|
|
|
343
351
|
sandboxPolicy;
|
|
344
352
|
/** Called when fallback model is selected — send notification before response. */
|
|
345
353
|
onFallback;
|
|
354
|
+
/** #1296: fired when the primary model succeeds after a fallback episode, so the
|
|
355
|
+
* notification layer can re-arm and notify again on the next fallback. */
|
|
356
|
+
onPrimaryRestored;
|
|
346
357
|
/** Cooperative pause check — if returns true, agent loop breaks between tool calls. */
|
|
347
358
|
isPaused;
|
|
348
359
|
/** Returns a pending instruction from parent, if any. Consumed once. */
|
|
@@ -372,6 +383,7 @@ var DirectApiTransport = class {
|
|
|
372
383
|
this.activeEndpoint = config.endpoint;
|
|
373
384
|
this.activeApiKey = config.apiKey;
|
|
374
385
|
this.activeModel = config.model;
|
|
386
|
+
this._activeMaxContext = config.maxContext;
|
|
375
387
|
this.policy = policy ?? null;
|
|
376
388
|
}
|
|
377
389
|
async initialize() {
|
|
@@ -412,12 +424,12 @@ var DirectApiTransport = class {
|
|
|
412
424
|
return await this.sendWithPolicy(session, ac.signal);
|
|
413
425
|
} finally {
|
|
414
426
|
const durationMs = Date.now() - (this._promptStartedAt ?? Date.now());
|
|
415
|
-
import("./metrics-collector-
|
|
427
|
+
import("./metrics-collector-YMUGY3PI.js").then(({ recordLatency, recordCall }) => {
|
|
416
428
|
recordLatency(`llm:${this.activeModel}`, durationMs);
|
|
417
429
|
recordCall(`llm:${this.activeModel}`, this._lastAnswer.length > 0);
|
|
418
430
|
}).catch(() => {
|
|
419
431
|
});
|
|
420
|
-
import("./hook-system-
|
|
432
|
+
import("./hook-system-YB635OC4.js").then(({ hasHooks, fire }) => {
|
|
421
433
|
if (!hasHooks("AfterPrompt")) return;
|
|
422
434
|
fire("AfterPrompt", {
|
|
423
435
|
event: "AfterPrompt",
|
|
@@ -441,6 +453,7 @@ var DirectApiTransport = class {
|
|
|
441
453
|
this.activeEndpoint = em.endpoint;
|
|
442
454
|
this.activeApiKey = em.apiKey;
|
|
443
455
|
this.activeModel = em.model;
|
|
456
|
+
this._activeMaxContext = em.maxContext;
|
|
444
457
|
this._lastActivityAt = Date.now();
|
|
445
458
|
logWarn(TAG3, `\u{1F6A8} Emergency mode: using ${em.model}`);
|
|
446
459
|
const result = await this.agentLoop(session, signal);
|
|
@@ -456,6 +469,7 @@ var DirectApiTransport = class {
|
|
|
456
469
|
this.activeEndpoint = candidate.endpoint;
|
|
457
470
|
this.activeApiKey = candidate.apiKey;
|
|
458
471
|
this.activeModel = candidate.model;
|
|
472
|
+
this._activeMaxContext = candidate.maxContext;
|
|
459
473
|
this._lastActivityAt = Date.now();
|
|
460
474
|
logDebug(TAG3, `Trying model: ${candidate.model}`);
|
|
461
475
|
if (!isPrimary(candidate.model) && this.onFallback) {
|
|
@@ -470,6 +484,7 @@ var DirectApiTransport = class {
|
|
|
470
484
|
policy.recordError(candidate, "empty");
|
|
471
485
|
} else {
|
|
472
486
|
policy.recordSuccess(candidate);
|
|
487
|
+
if (isPrimary(candidate.model) && this.onPrimaryRestored) this.onPrimaryRestored();
|
|
473
488
|
}
|
|
474
489
|
return result;
|
|
475
490
|
} catch (err) {
|
|
@@ -520,6 +535,7 @@ var DirectApiTransport = class {
|
|
|
520
535
|
this.activeEndpoint = smallest.endpoint;
|
|
521
536
|
this.activeApiKey = smallest.apiKey;
|
|
522
537
|
this.activeModel = smallest.model;
|
|
538
|
+
this._activeMaxContext = smallest.maxContext;
|
|
523
539
|
if (this.onFallback) {
|
|
524
540
|
this.onFallback(`${smallest.model} (compacted)`, Math.round(session.estimateTokens() / smallest.maxContext * 100));
|
|
525
541
|
}
|
|
@@ -559,10 +575,12 @@ ${summary}`);
|
|
|
559
575
|
const { content, toolCalls, usage } = await this.streamCompletion(session, signal);
|
|
560
576
|
if (usage) {
|
|
561
577
|
session.updateTokens(usage.prompt_tokens);
|
|
562
|
-
this._contextPercent = session.contextPercent;
|
|
578
|
+
this._contextPercent = this._activeMaxContext > 0 ? Math.round(usage.prompt_tokens / this._activeMaxContext * 100) : session.contextPercent;
|
|
563
579
|
this._lastPromptTokens = usage.prompt_tokens;
|
|
564
580
|
this._lastCompletionTokens = usage.completion_tokens ?? 0;
|
|
565
|
-
|
|
581
|
+
if (isCompactable(this._activeSessionKey)) {
|
|
582
|
+
this.contextOrchestrator?.onApiResponse(this._activeSessionKey, usage.prompt_tokens, this.config.maxContext);
|
|
583
|
+
}
|
|
566
584
|
logTrace(TAG3, `${this.activeModel} \u2014 ${usage.prompt_tokens}\u2192${usage.completion_tokens ?? 0} tokens, ${Date.now() - (this._lastActivityAt ?? Date.now())}ms`);
|
|
567
585
|
recordUsage(this.activeModel, usage.prompt_tokens, usage.completion_tokens ?? 0, this.agentLabel);
|
|
568
586
|
}
|
|
@@ -668,7 +686,7 @@ ${summary}`);
|
|
|
668
686
|
try {
|
|
669
687
|
if (this.config.apiFormat === "responses") {
|
|
670
688
|
const { toResponsesRequest } = await import("./responses-adapter-DAV2JUL7.js");
|
|
671
|
-
const { parseResponsesSSE } = await import("./sse-parser-responses-
|
|
689
|
+
const { parseResponsesSSE } = await import("./sse-parser-responses-3AOFN64C.js");
|
|
672
690
|
const msgs = session.messages.map((m) => ({ role: m.role, content: m.content ?? "" }));
|
|
673
691
|
const reqBody = { ...toResponsesRequest(this.activeModel, msgs, getToolSchemas(this.sandboxPolicy), this.config.maxOutput), stream: true };
|
|
674
692
|
const hdrs = { "Content-Type": "application/json" };
|
|
@@ -707,7 +725,7 @@ ${summary}`);
|
|
|
707
725
|
}
|
|
708
726
|
if (this.config.apiFormat === "anthropic") {
|
|
709
727
|
const { toAnthropicRequest, buildAnthropicHeaders } = await import("./anthropic-adapter-IBY3NPXW.js");
|
|
710
|
-
const { parseAnthropicSSE } = await import("./sse-parser-anthropic-
|
|
728
|
+
const { parseAnthropicSSE } = await import("./sse-parser-anthropic-MMTVWHLI.js");
|
|
711
729
|
const msgs = session.messages.map((m) => ({ role: m.role, content: m.content ?? "", tool_call_id: m.tool_call_id }));
|
|
712
730
|
const reqBody = { ...toAnthropicRequest(this.activeModel, msgs, this.config.maxOutput, getToolSchemas(this.sandboxPolicy)), stream: true };
|
|
713
731
|
const hdrs = buildAnthropicHeaders(this.activeApiKey ?? "");
|
|
@@ -900,6 +918,7 @@ ${summary}`);
|
|
|
900
918
|
this.activeEndpoint = opts.endpoint;
|
|
901
919
|
this.activeApiKey = opts.apiKey;
|
|
902
920
|
this.activeModel = opts.model;
|
|
921
|
+
this._activeMaxContext = opts.maxContext;
|
|
903
922
|
this.config.model = opts.model;
|
|
904
923
|
this.config.maxContext = opts.maxContext;
|
|
905
924
|
this.policy = opts.policy;
|
|
@@ -941,4 +960,4 @@ ${summary}`);
|
|
|
941
960
|
export {
|
|
942
961
|
DirectApiTransport
|
|
943
962
|
};
|
|
944
|
-
//# sourceMappingURL=direct-api-transport-
|
|
963
|
+
//# sourceMappingURL=direct-api-transport-QNNY2WWP.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/components/transport/direct-api-transport.ts", "../src/components/retry.ts", "../src/components/transport/conversation-session.ts", "../src/components/transport/sse-parser.ts", "../src/components/transport/transport-utils.ts"],
|
|
4
|
+
"sourcesContent": ["import { getEnv } from \"../env-schema.js\";\n/**\n * Direct API Transport \u2014 talks to any OpenAI-compatible endpoint.\n * Implements IKiroTransport with its own agent loop (send \u2192 stream \u2192 tools \u2192 loop).\n */\n\nimport { logInfo, logWarn, logError, logDebug, logTrace } from \"../logger.js\";\nimport { logAndSwallow } from \"../log-and-swallow.js\";\nimport { withRetry, isFatal } from \"../retry.js\";\nimport { ConversationSession, type ToolCall, type ContentPart } from \"./conversation-session.js\";\nimport { parseSSEStream, type SSEToolCallDelta } from \"./sse-parser.js\";\nimport { getToolSchemas, executeToolCall } from \"./tool-registry.js\";\nimport { classifyError } from \"./model-health-registry.js\";\nimport { normalizeToolCalls, parseErrorStatus, parseRetryAfter, parseUsageLimitCooldown } from \"./transport-utils.js\";\nimport { recordUsage } from \"../usage-tracker.js\";\nimport type { FallbackPolicy } from \"./fallback-policy.js\";\nimport type { IKiroTransport } from \"./kiro-transport.js\";\nimport { isCompactable } from \"../spin-types.js\";\n\nconst TAG = \"direct-api\";\n\n\nexport interface DirectApiConfig {\n endpoint: string;\n apiKey?: string;\n model: string;\n maxContext: number;\n maxOutput: number;\n maxTurns: number;\n maxToolRounds?: number;\n apiFormat?: \"chat\" | \"responses\" | \"anthropic\";\n thinking?: { style: \"effort\"; default: string } | { style: \"extended\"; default: number };\n fallbacks?: Array<{ endpoint: string; apiKey?: string; model: string; maxContext?: number }>;\n}\n\n\nexport class DirectApiTransport implements IKiroTransport {\n private readonly config: DirectApiConfig;\n private readonly sessions = new Map<string, ConversationSession>();\n private readonly abortControllers = new Map<string, AbortController>();\n private systemPrompt = \"\";\n private _contextPercent = -1;\n private _lastAnswer = \"\";\n private _timeoutOverrideMs: number | null = null;\n private _maxToolRoundsOverride: number | null = null;\n private _toolCallsSucceeded = 0;\n private _intermediateText = \"\";\n private _promptStartedAt: number | null = null;\n private _lastActivityAt: number | null = null;\n private activeEndpoint: string;\n private activeApiKey?: string;\n private activeModel: string;\n /** #1295: maxContext of the model currently serving requests. Used for accurate contextPercent. */\n private _activeMaxContext: number;\n private _lastPromptTokens = 0;\n private _lastCompletionTokens = 0;\n private _activeSessionKey = \"\";\n private _activeUserId = \"master\";\n\n /** Agent name for budget tracking (set by caller). */\n agentLabel = \"professor\";\n\n /** Currently active model (may differ from config if on fallback). */\n get currentModel(): string { return this.activeModel; }\n\n onIntermediateResponse?: (text: string) => void;\n onToolCallStart?: (toolName: string) => void;\n onSegmentBreak?: (text: string) => void;\n /** Sandbox policy for tool access control (#681). Set by pipeline before prompt. */\n sandboxPolicy?: import(\"../tool-sandbox.js\").SandboxPolicy;\n /** Called when fallback model is selected \u2014 send notification before response. */\n onFallback?: (model: string, ctxPercent: number, reason?: string) => void;\n /** #1296: fired when the primary model succeeds after a fallback episode, so the\n * notification layer can re-arm and notify again on the next fallback. */\n onPrimaryRestored?: () => void;\n /** Cooperative pause check \u2014 if returns true, agent loop breaks between tool calls. */\n isPaused?: () => boolean;\n /** Returns a pending instruction from parent, if any. Consumed once. */\n getPendingInstruction?: () => string | undefined;\n\n /** Context orchestrator \u2014 when set, messages are built from DB instead of in-memory session. */\n contextOrchestrator?: import(\"abmind\").ContextOrchestrator;\n\n /** Memory backend \u2014 used for hydrating sessions after restart (#843). */\n memoryBackend?: { getRecentConversation(userId: string, since: number, limit: number): Array<{ role: string; content: string; timestamp: number }> };\n\n private policy: FallbackPolicy | null;\n private emergencyOverride: { endpoint: string; apiKey?: string; model: string; maxContext: number } | null = null;\n\n /** Activate emergency (hailMary) mode \u2014 next prompts bypass the fallback policy. */\n setEmergencyMode(override: { endpoint: string; apiKey?: string; model: string; maxContext: number } | null): void {\n if (!override && !this.emergencyOverride) return; // no-op if already off\n this.emergencyOverride = override;\n if (override) logWarn(TAG, `\uD83D\uDEA8 EMERGENCY MODE: using ${override.model} (paid) \u2014 bypassing fallback chain`);\n else { this.activeModel = this.config.model; logInfo(TAG, `Emergency mode cleared \u2014 restored ${this.config.model}`); }\n }\n\n /** True if emergency (hailMary) mode is active. */\n get isEmergencyMode(): boolean { return this.emergencyOverride !== null; }\n\n constructor(config: DirectApiConfig, policy?: FallbackPolicy) {\n this.config = config;\n this.activeEndpoint = config.endpoint;\n this.activeApiKey = config.apiKey;\n this.activeModel = config.model;\n this._activeMaxContext = config.maxContext;\n this.policy = policy ?? null;\n }\n\n async initialize(): Promise<void> {\n const count = this.policy ? this.policy.candidates.length : (this.config.fallbacks?.length ?? 0) + 1;\n const fb = count > 1 ? ` (+${count - 1} fallback${count > 2 ? \"s\" : \"\"})` : \"\";\n logInfo(TAG, `\uD83D\uDD0C Direct API transport (${this.config.endpoint}, model: ${this.config.model}${fb})`);\n }\n\n setSystemPrompt(prompt: string): void {\n this.systemPrompt = prompt;\n }\n\n async sendPrompt(sessionKey: string, message: string, image?: { mime: string; base64: string }, userId?: string): Promise<string> {\n const session = this.getOrCreateSession(sessionKey);\n this._activeSessionKey = sessionKey;\n this._activeUserId = userId || \"master\";\n\n // If context orchestrator is active, rebuild messages from DB\n if (this.contextOrchestrator) {\n try {\n const ctx = await this.contextOrchestrator.getContext(sessionKey, this.config.maxContext);\n // Replace session messages with DB-backed context + system prompt\n session.messages = [\n { role: \"system\" as const, content: this.systemPrompt },\n ...ctx.messages.map((m: { role: string; content: string }) => ({ role: m.role as \"user\" | \"assistant\" | \"tool\", content: m.content })),\n ];\n if (ctx.compacted) logDebug(TAG, `Context compacted for ${sessionKey}`);\n } catch (err) {\n logWarn(TAG, `Context engine failed, falling back to in-memory: ${err}`);\n }\n }\n\n session.addUser(message, image);\n\n this._lastAnswer = \"\";\n this._toolCallsSucceeded = 0;\n this._intermediateText = \"\";\n this._promptStartedAt = Date.now();\n this._lastActivityAt = Date.now();\n\n const ac = new AbortController();\n this.abortControllers.set(sessionKey, ac);\n\n try {\n if (this.emergencyOverride) return await this.sendEmergency(session, ac.signal);\n if (!this.policy) throw new Error(\"DirectApiTransport requires a FallbackPolicy\");\n return await this.sendWithPolicy(session, ac.signal);\n } finally {\n // AfterPrompt hook \u2014 observe-only, fire-and-forget\n const durationMs = Date.now() - (this._promptStartedAt ?? Date.now());\n // #832: metrics\n import(\"../metrics-collector.js\").then(({ recordLatency, recordCall }) => {\n recordLatency(`llm:${this.activeModel}`, durationMs);\n recordCall(`llm:${this.activeModel}`, this._lastAnswer.length > 0);\n }).catch(() => {});\n import(\"../hooks/hook-system.js\").then(({ hasHooks, fire }) => {\n if (!hasHooks(\"AfterPrompt\")) return;\n fire(\"AfterPrompt\", {\n event: \"AfterPrompt\", timestamp: new Date().toISOString(),\n sessionKey, platform: \"\", userId: \"\",\n model: this.activeModel, durationMs,\n inputTokens: this._lastPromptTokens || null,\n outputTokens: null, // not tracked per-prompt in DirectApi\n }).catch(err => logAndSwallow(TAG, \"fire AfterPrompt\", err));\n }).catch(err => logAndSwallow(TAG, \"import hook-system\", err));\n this._promptStartedAt = null;\n this.abortControllers.delete(sessionKey);\n }\n }\n\n private async sendEmergency(session: ConversationSession, signal: AbortSignal): Promise<string> {\n const em = this.emergencyOverride!;\n this.activeEndpoint = em.endpoint;\n this.activeApiKey = em.apiKey;\n this.activeModel = em.model;\n this._activeMaxContext = em.maxContext;\n this._lastActivityAt = Date.now();\n logWarn(TAG, `\uD83D\uDEA8 Emergency mode: using ${em.model}`);\n const result = await this.agentLoop(session, signal);\n this._lastAnswer = result;\n return result;\n }\n\n private async sendWithPolicy(session: ConversationSession, signal: AbortSignal): Promise<string> {\n const policy = this.policy!;\n const failedAttempts: Array<{ model: string; kind: string; bucket: number }> = [];\n const isPrimary = (m: string): boolean => m === this.config.model;\n\n // Try each candidate via policy\n let candidate = policy.selectModel(this._lastPromptTokens);\n while (candidate) {\n this.activeEndpoint = candidate.endpoint;\n this.activeApiKey = candidate.apiKey;\n this.activeModel = candidate.model;\n this._activeMaxContext = candidate.maxContext;\n this._lastActivityAt = Date.now();\n logDebug(TAG, `Trying model: ${candidate.model}`);\n\n if (!isPrimary(candidate.model) && this.onFallback) {\n const ctxPct = candidate.maxContext > 0 ? Math.round((this._lastPromptTokens / candidate.maxContext) * 100) : -1;\n const lastFail = failedAttempts[failedAttempts.length - 1];\n this.onFallback(candidate.model, ctxPct, lastFail?.kind);\n }\n\n try {\n const result = await this.agentLoop(session, signal);\n this._lastAnswer = result;\n if (!result || !result.trim()) {\n policy.recordError(candidate, \"empty\");\n } else {\n policy.recordSuccess(candidate);\n // #1296: notify the phase-transport layer so it can re-arm the fallback notification\n if (isPrimary(candidate.model) && this.onPrimaryRestored) this.onPrimaryRestored();\n }\n return result;\n } catch (err) {\n if (signal.aborted) { session.rollbackToLastUser(); throw err; }\n const errMsg = err instanceof Error ? err.message : String(err);\n // Capability miss \u2014 strip image and retry text-only (#670)\n if (errMsg.includes(\"does not support image input\") || errMsg.includes(\"No endpoints found that support image\")) {\n session.rollbackToLastUser();\n // Strip image parts from session, retry same model text-only\n for (const m of session.messages) {\n if (Array.isArray(m.content)) {\n const textParts = (m.content as Array<{ type: string; text?: string }>).filter(p => p.type === \"text\");\n m.content = textParts.map(p => p.text ?? \"\").join(\"\\n\") || \"User sent an image (not supported by this model).\";\n }\n }\n logWarn(TAG, `${candidate.model} doesn't support images \u2014 retrying text-only`);\n if (this.onIntermediateResponse) this.onIntermediateResponse(\"\u26A0\uFE0F Model doesn't support images via this provider. Sending text-only.\\n\");\n try {\n const result = await this.agentLoop(session, signal);\n this._lastAnswer = result;\n policy.recordSuccess(candidate);\n return result;\n } catch (retryErr) {\n const retryStatus = this.parseErrorStatus(retryErr);\n const retryMsg = retryErr instanceof Error ? retryErr.message : String(retryErr);\n policy.recordError(candidate, classifyError(retryStatus, retryMsg));\n session.rollbackToLastUser();\n throw retryErr;\n }\n }\n const status = this.parseErrorStatus(err);\n const kind = classifyError(status, errMsg);\n const retryAfterMs = this.parseRetryAfter(err) ?? parseUsageLimitCooldown(errMsg);\n policy.recordError(candidate, kind, retryAfterMs);\n const bucket = policy.registry.getBucketLevel(candidate.model, candidate.endpoint);\n failedAttempts.push({ model: candidate.model, kind, bucket });\n session.rollbackToLastUser();\n logWarn(TAG, `${candidate.model} failed (${kind}, bucket: ${bucket}%${retryAfterMs ? `, retry-after: ${Math.round(retryAfterMs / 1000)}s` : \"\"}): ${errMsg.slice(0, 100)}`);\n }\n\n candidate = policy.selectModel(this._lastPromptTokens);\n }\n\n // Compaction fallback: pick smallest surviving candidate, truncate to fit\n const surviving = policy.survivingCandidates()\n .filter(c => c.maxContext > 0)\n .sort((a, b) => a.maxContext - b.maxContext);\n const smallest = surviving[0];\n\n if (smallest && this._lastPromptTokens > smallest.maxContext * 0.95) {\n logWarn(TAG, `Compacting session to fit ${smallest.model} (${smallest.maxContext} tokens)`);\n session.truncateToFit(smallest.maxContext);\n this.activeEndpoint = smallest.endpoint;\n this.activeApiKey = smallest.apiKey;\n this.activeModel = smallest.model;\n this._activeMaxContext = smallest.maxContext;\n if (this.onFallback) {\n this.onFallback(`${smallest.model} (compacted)`, Math.round((session.estimateTokens() / smallest.maxContext) * 100));\n }\n try {\n const result = await this.agentLoop(session, signal);\n this._lastAnswer = result;\n if (!result || !result.trim()) policy.recordError(smallest, \"empty\");\n else policy.recordSuccess(smallest);\n return result;\n } catch (err) {\n const status = this.parseErrorStatus(err);\n const errMsg2 = err instanceof Error ? err.message : String(err);\n policy.recordError(smallest, classifyError(status, errMsg2));\n failedAttempts.push({ model: smallest.model, kind: classifyError(status, errMsg2), bucket: policy.registry.getBucketLevel(smallest.model, smallest.endpoint) });\n }\n }\n\n const summary = failedAttempts.map(a => ` - ${a.model}: ${a.kind} (bucket: ${a.bucket}%)`).join(\"\\n\");\n if (policy.lastDecision) {\n logDebug(TAG, `Last decision: ${JSON.stringify(policy.lastDecision)}`);\n }\n throw new Error(`All models exhausted:\\n${summary}`);\n }\n\n private async agentLoop(session: ConversationSession, signal: AbortSignal): Promise<string> {\n let zeroTokenRetries = 0;\n const loopStart = Date.now();\n const callSigs: string[] = []; // #1133: track across turns for loop detection\n for (let turn = 0; turn < this.config.maxTurns; turn++) {\n if (signal.aborted) return signal.reason === \"timeout\" ? \"Response timed out.\" : \"Interrupted.\";\n if (this.isPaused?.()) return \"\u23F8 Session paused. Use `/session resume` to continue.\";\n if (turn >= (this._maxToolRoundsOverride ?? this.config.maxToolRounds ?? 25)) {\n logError(TAG, `Tool loop circuit breaker: ${turn} rounds without final response \u2014 aborting`);\n return \"[SYSTEM] Tool loop limit reached. Stopped after \" + turn + \" rounds.\";\n }\n\n const pendingInstruction = this.getPendingInstruction?.();\n if (pendingInstruction) session.addUser(pendingInstruction);\n\n const { content, toolCalls, usage } = await this.streamCompletion(session, signal);\n\n if (usage) {\n session.updateTokens(usage.prompt_tokens);\n this._contextPercent = this._activeMaxContext > 0\n ? Math.round((usage.prompt_tokens / this._activeMaxContext) * 100)\n : session.contextPercent;\n this._lastPromptTokens = usage.prompt_tokens;\n this._lastCompletionTokens = usage.completion_tokens ?? 0;\n // #1022: compaction fires only for A/C session types.\n if (isCompactable(this._activeSessionKey)) {\n this.contextOrchestrator?.onApiResponse(this._activeSessionKey, usage.prompt_tokens, this.config.maxContext);\n }\n logTrace(TAG, `${this.activeModel} \u2014 ${usage.prompt_tokens}\u2192${usage.completion_tokens ?? 0} tokens, ${Date.now() - (this._lastActivityAt ?? Date.now())}ms`);\n recordUsage(this.activeModel, usage.prompt_tokens, usage.completion_tokens ?? 0, this.agentLabel);\n }\n\n if (toolCalls.length > 0) {\n session.addAssistant(content, toolCalls);\n logDebug(TAG, `Tool calls: ${toolCalls.map(tc => tc.function.name).join(\", \")}`);\n logTrace(TAG, `Tool args: ${toolCalls.map(tc => {\n // #621: redact abmind_store args based on classification\n if ((tc.function.name === \"abmind_store\" || tc.function.name === \"memory_store\") && /class(?:ification)?[\":\\s]+[23]/.test(tc.function.arguments)) {\n return `${tc.function.name}([REDACTED])`;\n }\n return `${tc.function.name}(${tc.function.arguments})`;\n }).join(\", \")}`);\n\n // Deliver pre-tool text immediately (segment break)\n if (content?.trim()) {\n this.onSegmentBreak?.(content.trim());\n }\n\n // #1133: Track tool call signatures for loop detection\n for (let ti = 0; ti < toolCalls.length; ti++) {\n const tc = toolCalls[ti]!;\n if (signal.aborted) {\n // #1003: inject cancelled results for remaining tools \u2014 keeps conversation valid\n for (const remaining of toolCalls.slice(ti)) {\n session.addToolResult(remaining.id, remaining.function.name,\n `[SYSTEM] Cancelled \u2014 ${remaining.function.name} skipped due to user interrupt`);\n }\n return signal.reason === \"timeout\" ? \"Response timed out.\" : \"Interrupted.\";\n }\n this._lastActivityAt = Date.now();\n\n // #948: drain /wait between batched tool calls\n const mid = this.getPendingInstruction?.();\n if (mid) session.addUser(mid);\n\n this.onToolCallStart?.(tc.function.name ?? \"tool\");\n\n let args: Record<string, string>;\n try { args = JSON.parse(tc.function.arguments); } catch {\n // #1133: Reject malformed args \u2014 never execute with broken arguments\n const errMsg = `Tool call rejected: malformed arguments (JSON parse error). Reformat and retry.`;\n logWarn(TAG, `Malformed tool args for ${tc.function.name}: ${tc.function.arguments.slice(0, 80)}`);\n session.addToolResult(tc.id, tc.function.name, JSON.stringify({ error: errMsg }));\n continue;\n }\n\n // #1133: Loop detection \u2014 abort if same call (name+args hash) repeats 3x across turns\n const { createHash } = await import(\"node:crypto\");\n const sig = `${tc.function.name}:${createHash(\"sha256\").update(tc.function.arguments).digest(\"hex\").slice(0, 8)}`;\n callSigs.push(sig);\n if (callSigs.filter(s => s === sig).length >= 3) {\n logWarn(TAG, `Tool loop detected: ${tc.function.name} repeated 3x \u2014 aborting`);\n session.addToolResult(tc.id, tc.function.name, JSON.stringify({ error: \"[SYSTEM] Repeated identical tool call detected (3x). Stop retrying and provide a final text response to the user.\" }));\n break;\n }\n\n const result = await executeToolCall(tc.function.name, args, { userId: this._activeUserId, signal, sandboxPolicy: this.sandboxPolicy });\n session.addToolResult(tc.id, tc.function.name, result);\n\n // #621: scrub secret values from conversation history after store\n if ((tc.function.name === \"abmind_store\" || tc.function.name === \"memory_store\") && parseInt(args.classification ?? args.class ?? \"1\", 10) >= 2) {\n const secretValue = args.content ?? args.value ?? args.translated;\n if (secretValue && secretValue.length > 4) {\n session.scrubFromHistory(secretValue);\n }\n }\n\n try { if (!JSON.parse(result).error) this._toolCallsSucceeded++; } catch (err) { logAndSwallow(TAG, \"JSON.parse tool result\", err); this._toolCallsSucceeded++; }\n }\n continue;\n }\n\n // No tool calls \u2014 final response\n const answer = content ?? \"\";\n // Budget-aware backoff on 0\u21920 token response (#732)\n if (!answer && usage && usage.prompt_tokens === 0) {\n const elapsed = Date.now() - loopStart;\n const remaining = (this._timeoutOverrideMs ?? getEnv().modelApiTimeoutMs) - elapsed;\n const retryDelay = 5000 + (zeroTokenRetries * 3000);\n if (remaining > retryDelay + 5000) {\n zeroTokenRetries++;\n logWarn(TAG, `API returned 0 tokens \u2014 retry #${zeroTokenRetries} after ${retryDelay / 1000}s (${Math.round(remaining / 1000)}s left)`);\n await new Promise(r => setTimeout(r, retryDelay));\n continue;\n }\n }\n session.addAssistant(answer);\n return answer;\n }\n\n logWarn(TAG, `Max turns (${this.config.maxTurns}) reached`);\n const last = session.messages.at(-1)?.content;\n return (typeof last === \"string\" ? last : null) ?? \"(max turns reached)\";\n }\n\n private parseErrorStatus(err: unknown): number { return parseErrorStatus(err); }\n\n /** Extract Retry-After from error (seconds or date). Returns ms or undefined. */\n private parseRetryAfter(err: unknown): number | undefined { return parseRetryAfter(err); }\n\n private async streamCompletion(\n session: ConversationSession,\n signal: AbortSignal,\n ): Promise<{ content: string | null; toolCalls: ToolCall[]; usage: { prompt_tokens: number; completion_tokens: number } | null }> {\n // Compose pipeline signal (user /stop) with per-request timeout (silence-based)\n const timeoutCtrl = new AbortController();\n const timeoutMs = this._timeoutOverrideMs ?? getEnv().modelApiTimeoutMs;\n this._lastActivityAt = Date.now();\n const timer = setInterval(() => {\n if (Date.now() - (this._lastActivityAt ?? 0) > timeoutMs) {\n clearInterval(timer);\n timeoutCtrl.abort(new Error(\"model API timeout\"));\n }\n }, 5000);\n const composed = AbortSignal.any([signal, timeoutCtrl.signal]);\n\n try {\n // Responses API format (#465, streaming #472)\n if (this.config.apiFormat === \"responses\") {\n const { toResponsesRequest } = await import(\"./responses-adapter.js\");\n const { parseResponsesSSE } = await import(\"./sse-parser-responses.js\");\n const msgs = session.messages.map(m => ({ role: m.role, content: m.content ?? \"\" as string | ContentPart[] }));\n const reqBody = { ...toResponsesRequest(this.activeModel, msgs, getToolSchemas(this.sandboxPolicy), this.config.maxOutput), stream: true };\n const hdrs: Record<string, string> = { \"Content-Type\": \"application/json\" };\n if (this.activeApiKey) hdrs[\"Authorization\"] = `Bearer ${this.activeApiKey}`;\n const res = await fetch(`${this.activeEndpoint}/responses`, {\n method: \"POST\", headers: hdrs, body: JSON.stringify(reqBody), signal: composed,\n });\n if (!res.ok) { const text = await res.text().catch(err => { logAndSwallow(TAG, \"read error body\", err); return \"\"; }); throw new Error(`API error ${res.status}: ${text.slice(0, 500)}`); }\n\n let content = \"\";\n let usage: { prompt_tokens: number; completion_tokens: number } | null = null;\n const toolCallAcc = new Map<string, { id: string; name: string; arguments: string }>();\n for await (const event of parseResponsesSSE(res, composed)) {\n this._lastActivityAt = Date.now();\n if (event.type === \"chunk\") { content += event.content; this._intermediateText += event.content; this.onIntermediateResponse?.(event.content); }\n else if (event.type === \"tool_call_delta\") { this.accumulateToolCall(toolCallAcc, event); }\n else if (event.type === \"done\") { usage = event.usage; }\n }\n clearInterval(timer);\n const toolCalls = this.finalizeToolCalls(toolCallAcc);\n return { content: content || null, toolCalls, usage };\n }\n\n // Anthropic Messages API format (#467, streaming #472)\n if (this.config.apiFormat === \"anthropic\") {\n const { toAnthropicRequest, buildAnthropicHeaders } = await import(\"./anthropic-adapter.js\");\n const { parseAnthropicSSE } = await import(\"./sse-parser-anthropic.js\");\n const msgs = session.messages.map(m => ({ role: m.role, content: m.content ?? \"\" as string | ContentPart[], tool_call_id: m.tool_call_id }));\n const reqBody = { ...toAnthropicRequest(this.activeModel, msgs, this.config.maxOutput, getToolSchemas(this.sandboxPolicy)), stream: true };\n const hdrs = buildAnthropicHeaders(this.activeApiKey ?? \"\");\n const res = await fetch(`${this.activeEndpoint}/messages`, {\n method: \"POST\", headers: hdrs, body: JSON.stringify(reqBody), signal: composed,\n });\n if (!res.ok) { const text = await res.text().catch(err => { logAndSwallow(TAG, \"read error body\", err); return \"\"; }); throw new Error(`API error ${res.status}: ${text.slice(0, 500)}`); }\n\n let content = \"\";\n let usage: { prompt_tokens: number; completion_tokens: number } | null = null;\n const toolCallAcc = new Map<string, { id: string; name: string; arguments: string }>();\n for await (const event of parseAnthropicSSE(res, composed)) {\n this._lastActivityAt = Date.now();\n if (event.type === \"chunk\") { content += event.content; this._intermediateText += event.content; this.onIntermediateResponse?.(event.content); }\n else if (event.type === \"tool_call_delta\") { this.accumulateToolCall(toolCallAcc, event); }\n else if (event.type === \"done\") { usage = event.usage; }\n }\n clearInterval(timer);\n const toolCalls = this.finalizeToolCalls(toolCallAcc);\n return { content: content || null, toolCalls, usage };\n }\n\n const body: Record<string, unknown> = {\n model: this.activeModel,\n messages: session.messages,\n tools: getToolSchemas(this.sandboxPolicy),\n max_tokens: this.config.maxOutput,\n stream: true,\n stream_options: { include_usage: true },\n };\n\n // #466: inject thinking/reasoning parameters\n if (this.config.thinking) {\n if (this.config.thinking.style === \"effort\") {\n body.reasoning_effort = this.config.thinking.default;\n } else if (this.config.thinking.style === \"extended\") {\n body.thinking = { type: \"enabled\", budget_tokens: this.config.thinking.default };\n }\n }\n // #869: session-level reasoning override (from /reasoning command)\n if (session.reasoningEffort) {\n const BUDGET_MAP: Record<string, number> = { low: 1024, medium: 4096, high: 16384 };\n if ((this.config.apiFormat as string) === \"anthropic\") {\n body.thinking = { type: \"enabled\", budget_tokens: BUDGET_MAP[session.reasoningEffort] ?? 4096 };\n } else {\n body.reasoning_effort = session.reasoningEffort;\n }\n }\n\n const headers: Record<string, string> = { \"Content-Type\": \"application/json\" };\n if (this.activeApiKey) headers[\"Authorization\"] = `Bearer ${this.activeApiKey}`;\n\n const response = await withRetry(\n async () => {\n const res = await fetch(`${this.activeEndpoint}/chat/completions`, {\n method: \"POST\",\n headers,\n body: JSON.stringify(body),\n signal: composed,\n });\n if (!res.ok) {\n const text = await res.text().catch(err => { logAndSwallow(TAG, \"read error body\", err); return \"\"; });\n throw new Error(`API error ${res.status}: ${text.slice(0, 500)}`);\n }\n return res;\n },\n {\n attempts: 3, minDelayMs: 3000,\n isRecoverable: (err) => {\n const msg = err instanceof Error ? err.message : String(err);\n if (/model API timeout/.test(msg)) return false;\n // Don't retry 429/401/402/403 \u2014 let the bucket loop handle model switching\n if (/API error (429|401|402|403)/.test(msg)) return false;\n return !isFatal(err);\n },\n },\n );\n\n let content = \"\";\n const toolCallAccumulator = new Map<string, { id: string; name: string; arguments: string }>();\n let usage: { prompt_tokens: number; completion_tokens: number } | null = null;\n\n for await (const event of parseSSEStream(response, composed)) {\n this._lastActivityAt = Date.now();\n\n switch (event.type) {\n case \"chunk\":\n content += event.content;\n this._intermediateText += event.content;\n this.onIntermediateResponse?.(event.content);\n break;\n\n case \"tool_call_delta\":\n this.accumulateToolCall(toolCallAccumulator, event);\n break;\n\n case \"done\":\n usage = event.usage;\n break;\n }\n }\n\n const toolCalls = this.finalizeToolCalls(toolCallAccumulator);\n\n return { content: content || null, toolCalls, usage };\n } finally {\n clearInterval(timer);\n }\n }\n\n /** Accumulate streaming tool call deltas by ID (Ollama-safe: tracks by ID not index). */\n private accumulateToolCall(\n acc: Map<string, { id: string; name: string; arguments: string }>,\n delta: SSEToolCallDelta,\n ): void {\n // Use ID if available, fall back to index-based key\n const key = delta.id ?? `idx:${delta.index}`;\n const existing = acc.get(key);\n if (existing) {\n if (delta.arguments) existing.arguments += delta.arguments;\n } else {\n acc.set(key, { id: delta.id ?? `call_${acc.size}`, name: delta.name ?? \"\", arguments: delta.arguments ?? \"\" });\n }\n }\n\n /**\n * Convert accumulated tool call map \u2192 normalized ToolCall array.\n * Handles model fragmentation: some models (nemotron, mistral-free) split a\n * single tool call across multiple SSE entries with different indices/IDs.\n * Pattern: [name=\"execute_bash\" args=\"{}\"], [name=\"\" args=\"\"], [name=\"\" args='{\"command\":\"...\"}']\n * Fix: merge adjacent unnamed entries' args into the preceding named entry.\n */\n private finalizeToolCalls(acc: Map<string, { id: string; name: string; arguments: string }>): ToolCall[] {\n const raw: ToolCall[] = [...acc.values()].map(tc => ({\n id: tc.id, type: \"function\" as const, function: { name: tc.name, arguments: tc.arguments },\n }));\n return normalizeToolCalls(raw);\n }\n\n private getOrCreateSession(sessionKey: string): ConversationSession {\n let session = this.sessions.get(sessionKey);\n if (!session) {\n session = new ConversationSession(this.systemPrompt, this.config.maxContext);\n this.sessions.set(sessionKey, session);\n }\n return session;\n }\n\n async resetSession(sessionKey: string): Promise<void> {\n const session = this.sessions.get(sessionKey);\n if (session) session.reset(this.systemPrompt);\n else this.sessions.delete(sessionKey);\n logInfo(TAG, `Session ${sessionKey} reset`);\n }\n\n async sendInterrupt(reason?: string): Promise<void> {\n for (const ac of this.abortControllers.values()) ac.abort(reason ?? \"user\");\n }\n\n destroy(): void {\n for (const ac of this.abortControllers.values()) ac.abort();\n this.sessions.clear();\n this.abortControllers.clear();\n }\n\n get isReady(): boolean { return true; }\n get contextPercent(): number { return this._contextPercent; }\n get answerOnly(): string { return this._lastAnswer; }\n getActiveSession(): ConversationSession | null { return this.sessions.get(this._activeSessionKey) ?? null; }\n get toolCallsSucceeded(): number { return this._toolCallsSucceeded; }\n\n lastUsage(): { input: number; output: number } | null {\n return this._lastPromptTokens || this._lastCompletionTokens\n ? { input: this._lastPromptTokens, output: this._lastCompletionTokens }\n : null;\n }\n\n /** Hot-swap the active model. Takes effect on next API call. */\n setModel(model: string): void {\n this.activeModel = model;\n (this.config as { model: string }).model = model;\n logInfo(TAG, `Model switched (user): ${model}`);\n }\n\n /** Hot-swap provider+model+policy. Rejects if prompt is in flight. */\n switchProvider(opts: { endpoint: string; apiKey?: string; model: string; maxContext: number; policy: FallbackPolicy }): void {\n if (this._promptStartedAt !== null) {\n throw new Error(\"Cannot switch provider while a prompt is in progress \u2014 try after the response\");\n }\n this.activeEndpoint = opts.endpoint;\n this.activeApiKey = opts.apiKey;\n this.activeModel = opts.model;\n this._activeMaxContext = opts.maxContext;\n (this.config as { model: string; maxContext: number }).model = opts.model;\n (this.config as { maxContext: number }).maxContext = opts.maxContext;\n this.policy = opts.policy;\n logInfo(TAG, `Provider switched: ${opts.model} @ ${opts.endpoint} (maxCtx=${opts.maxContext})`);\n }\n\n /** Get current active model name. */\n getModel(): string { return this.activeModel; }\n get intermediateDeliveredText(): string { return this._intermediateText; }\n get transportCommands(): string[] { return []; }\n\n // Watchdog support\n get promptStartedAt(): number | null { return this._promptStartedAt; }\n setTimeoutOverride(ms: number | null): void { this._timeoutOverrideMs = ms; }\n setMaxToolRoundsOverride(n: number | null): void { this._maxToolRoundsOverride = n; }\n\n get lastActivityAt(): number | null { return this._lastActivityAt; }\n\n private readonly _stuckTimeout = getEnv().watchdogSilentSec * 1000;\n\n async healthCheck(): Promise<void> {\n if (!this._promptStartedAt) return;\n const idle = Date.now() - (this._lastActivityAt ?? this._promptStartedAt);\n if (idle > this._stuckTimeout) {\n logWarn(TAG, `[transport-health] Prompt stuck (${Math.round(idle / 1000)}s idle) \u2014 aborting`);\n await this.sendInterrupt();\n }\n }\n}\n", "/**\n * Generic retry utility with escalating backoff, jitter, and fatal error detection.\n */\n\nexport interface RetryPolicy {\n /** Max attempts (including first). Default: 3 */\n attempts?: number;\n /** Initial delay in ms. Default: 300 */\n minDelayMs?: number;\n /** Max delay cap in ms. Default: 30_000 */\n maxDelayMs?: number;\n /** Jitter factor 0-1 (0.1 = \u00B110%). Default: 0.1 */\n jitter?: number;\n /** Return false to stop retrying (fatal error). Default: always retry. */\n isRecoverable?: (err: unknown) => boolean;\n /** Extract delay hint from error (e.g. rate limit header). */\n getDelayHint?: (err: unknown) => number | undefined;\n /** Called before each retry. */\n onAttempt?: (info: { attempt: number; maxAttempts: number; err: unknown; delayMs: number }) => void;\n}\n\nconst DEFAULTS = { attempts: 3, minDelayMs: 300, maxDelayMs: 30_000, jitter: 0.1 };\n\n/** Known-fatal error patterns \u2014 don't retry these. */\nexport const FATAL_PATTERNS = [\n /auth.*fail|invalid.*key|unauthorized/i,\n /model.*not found|not supported/i,\n /account.*suspended|quota.*exceeded/i,\n /bot was blocked/i,\n];\n\n/** Check if an error matches a known-fatal pattern. */\nexport function isFatal(err: unknown): boolean {\n const msg = err instanceof Error ? err.message : String(err);\n return FATAL_PATTERNS.some(p => p.test(msg));\n}\n\n/** Execute `fn` with retry, escalating backoff, and jitter. */\nexport async function withRetry<T>(fn: () => Promise<T>, policy?: RetryPolicy): Promise<T> {\n const attempts = Math.max(1, policy?.attempts ?? DEFAULTS.attempts);\n const minDelay = Math.max(0, policy?.minDelayMs ?? DEFAULTS.minDelayMs);\n const maxDelay = Math.max(minDelay, policy?.maxDelayMs ?? DEFAULTS.maxDelayMs);\n const jitter = Math.max(0, Math.min(1, policy?.jitter ?? DEFAULTS.jitter));\n const isRecoverable = policy?.isRecoverable ?? ((err: unknown) => !isFatal(err));\n\n let lastErr: unknown;\n for (let i = 0; i < attempts; i++) {\n try {\n return await fn();\n } catch (err) {\n lastErr = err;\n if (i === attempts - 1) break;\n if (!isRecoverable(err)) break;\n\n const hint = policy?.getDelayHint?.(err);\n const baseDelay = hint ?? Math.min(maxDelay, minDelay * Math.pow(2, i));\n const offset = jitter > 0 ? (Math.random() * 2 - 1) * jitter * baseDelay : 0;\n const delayMs = Math.max(0, Math.round(baseDelay + offset));\n\n policy?.onAttempt?.({ attempt: i + 1, maxAttempts: attempts, err, delayMs });\n await new Promise(r => setTimeout(r, delayMs));\n }\n }\n throw lastErr;\n}\n", "/**\n * Per-session conversation state for DirectApiTransport.\n * Manages message history and token tracking.\n */\n\nexport type ContentPart =\n | { type: \"text\"; text: string }\n | { type: \"image_url\"; image_url: { url: string } };\n\nexport type ChatMessage = {\n role: \"system\" | \"user\" | \"assistant\" | \"tool\";\n content: string | ContentPart[] | null;\n tool_calls?: ToolCall[];\n tool_call_id?: string;\n name?: string;\n};\n\nexport type ToolCall = {\n id: string;\n type: \"function\";\n function: { name: string; arguments: string };\n};\n\nexport class ConversationSession {\n messages: ChatMessage[] = [];\n totalPromptTokens = 0;\n reasoningEffort: \"low\" | \"medium\" | \"high\" | null = null;\n showReasoning = false;\n private readonly maxContext: number;\n\n constructor(systemPrompt: string, maxContext: number) {\n this.maxContext = maxContext;\n this.messages.push({ role: \"system\", content: systemPrompt });\n }\n\n addUser(content: string, image?: { mime: string; base64: string }): void {\n if (image) {\n this.messages.push({ role: \"user\", content: [\n { type: \"image_url\", image_url: { url: `data:${image.mime};base64,${image.base64}` } },\n { type: \"text\", text: content },\n ]});\n } else {\n this.messages.push({ role: \"user\", content });\n }\n }\n\n addAssistant(content: string | null, toolCalls?: ToolCall[]): void {\n const msg: ChatMessage = { role: \"assistant\", content };\n if (toolCalls?.length) msg.tool_calls = toolCalls;\n this.messages.push(msg);\n }\n\n addToolResult(toolCallId: string, name: string, content: string): void {\n this.messages.push({ role: \"tool\", content, tool_call_id: toolCallId, name });\n }\n\n updateTokens(promptTokens: number): void {\n this.totalPromptTokens = promptTokens;\n }\n\n get contextPercent(): number {\n if (this.maxContext <= 0) return 0;\n return Math.round((this.totalPromptTokens / this.maxContext) * 100);\n }\n\n reset(systemPrompt: string): void {\n this.messages = [{ role: \"system\", content: systemPrompt }];\n this.totalPromptTokens = 0;\n this.reasoningEffort = null;\n this.showReasoning = false;\n }\n\n /** Roll back to last user message \u2014 remove everything after it for clean fallback. */\n rollbackToLastUser(): void {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n if (this.messages[i]!.role === \"user\") {\n this.messages.splice(i + 1);\n return;\n }\n }\n }\n\n /** Rough token estimate: ~4 chars per token. */\n estimateTokens(): number {\n return Math.round(this.messages.reduce((sum, m) => sum + (typeof m.content === \"string\" ? m.content.length : 0), 0) / 4);\n }\n\n /** Drop oldest non-system messages until estimated tokens fit within limit. */\n truncateToFit(maxTokens: number): void {\n while (this.messages.length > 2 && this.estimateTokens() > maxTokens * 0.85) {\n this.messages.splice(1, 1); // remove oldest after system prompt\n }\n this.totalPromptTokens = this.estimateTokens();\n }\n\n /** #621: Replace a literal secret value with [REDACTED] across all messages. */\n scrubFromHistory(value: string): void {\n for (const msg of this.messages) {\n if (typeof msg.content === \"string\" && msg.content.includes(value)) {\n msg.content = msg.content.replaceAll(value, \"[REDACTED]\");\n }\n }\n }\n}\n", "/**\n * SSE stream parser for OpenAI-compatible chat completions.\n * Parses Server-Sent Events into typed events.\n */\n\nimport { logAndSwallow } from \"../log-and-swallow.js\";\n\nconst TAG = \"sse_parser\";\n\nexport type SSEChunkEvent = { type: \"chunk\"; content: string };\nexport type SSEToolCallDelta = { type: \"tool_call_delta\"; index: number; id?: string; name?: string; arguments?: string };\nexport type SSEDoneEvent = { type: \"done\"; usage: { prompt_tokens: number; completion_tokens: number } | null };\nexport type SSEEvent = SSEChunkEvent | SSEToolCallDelta | SSEDoneEvent;\n\nconst STALE_TIMEOUT_MS = 90_000;\n\nexport async function* parseSSEStream(\n response: Response,\n signal: AbortSignal,\n): AsyncGenerator<SSEEvent> {\n const reader = response.body?.getReader();\n if (!reader) throw new Error(\"Response body is not readable\");\n\n const decoder = new TextDecoder();\n let buffer = \"\";\n let lastChunkAt = Date.now();\n let staleTimer: ReturnType<typeof setTimeout> | null = null;\n\n const resetStaleTimer = (): void => {\n lastChunkAt = Date.now();\n if (staleTimer) clearTimeout(staleTimer);\n staleTimer = setTimeout(() => {\n if (Date.now() - lastChunkAt >= STALE_TIMEOUT_MS) {\n reader.cancel(\"stale stream\").catch(err => logAndSwallow(TAG, \"reader.cancel stale\", err));\n }\n }, STALE_TIMEOUT_MS);\n };\n\n try {\n resetStaleTimer();\n while (true) {\n if (signal.aborted) break;\n const { done, value } = await reader.read();\n if (done) break;\n\n resetStaleTimer();\n buffer += decoder.decode(value, { stream: true });\n\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() ?? \"\";\n\n for (const line of lines) {\n if (!line.startsWith(\"data: \")) continue;\n const data = line.slice(6).trim();\n if (data === \"[DONE]\") return;\n\n let parsed: Record<string, unknown>;\n try { parsed = JSON.parse(data); } catch (err) { logAndSwallow(TAG, \"JSON.parse SSE chunk\", err); continue; }\n\n // Usage in final chunk (stream_options: { include_usage: true })\n if (parsed[\"usage\"]) {\n const u = parsed[\"usage\"] as Record<string, number>;\n yield { type: \"done\", usage: { prompt_tokens: u[\"prompt_tokens\"] ?? 0, completion_tokens: u[\"completion_tokens\"] ?? 0 } };\n }\n\n const choices = parsed[\"choices\"] as Array<Record<string, unknown>> | undefined;\n if (!choices?.length) continue;\n const delta = choices[0]![\"delta\"] as Record<string, unknown> | undefined;\n if (!delta) continue;\n\n // Text content\n if (typeof delta[\"content\"] === \"string\" && delta[\"content\"]) {\n yield { type: \"chunk\", content: delta[\"content\"] as string };\n }\n\n // Tool calls\n const toolCalls = delta[\"tool_calls\"] as Array<Record<string, unknown>> | undefined;\n if (toolCalls) {\n for (const tc of toolCalls) {\n const fn = tc[\"function\"] as Record<string, string> | undefined;\n yield {\n type: \"tool_call_delta\",\n index: (tc[\"index\"] as number) ?? 0,\n id: tc[\"id\"] as string | undefined,\n name: fn?.[\"name\"],\n arguments: fn?.[\"arguments\"],\n };\n }\n }\n }\n }\n } finally {\n if (staleTimer) clearTimeout(staleTimer);\n reader.releaseLock();\n }\n}\n", "/**\n * transport-utils.ts \u2014 Pure utility functions for the transport layer.\n * No I/O, no state, no side effects (except logging).\n */\n\nimport { logWarn } from \"../logger.js\";\nimport type { ToolCall } from \"./conversation-session.js\";\n\nconst TAG = \"direct-api\";\n\n/**\n * Normalize tool calls from models that fragment a single call across multiple entries.\n * Pattern: [name=\"execute_bash\" args=\"{}\"], [name=\"\" args=\"\"], [name=\"\" args='{\"command\":\"...\"}']\n * Fix: merge next unnamed entry's args into preceding named entry. Drop remaining unnamed.\n */\nexport function normalizeToolCalls(raw: ToolCall[]): ToolCall[] {\n if (raw.length <= 1) return raw;\n\n const result: ToolCall[] = [];\n for (let i = 0; i < raw.length; i++) {\n const tc = raw[i]!;\n if (tc.function.name) {\n if (!tc.function.arguments || tc.function.arguments === \"{}\") {\n // Look ahead for the next unnamed entry with real args\n for (let j = i + 1; j < raw.length; j++) {\n const next = raw[j]!;\n if (next.function.name) break; // hit another named entry, stop\n if (next.function.arguments && next.function.arguments !== \"{}\") {\n tc.function.arguments = next.function.arguments;\n i = j; // skip all entries up to and including the merged one\n break;\n }\n }\n }\n result.push(tc);\n }\n }\n\n if (result.length !== raw.length) {\n logWarn(TAG, `Normalized ${raw.length} tool call entries \u2192 ${result.length} (model fragmentation): ${raw.map(tc => `${tc.function.name || \"(unnamed)\"}(${tc.function.arguments.slice(0, 60)})`).join(\", \")}`);\n }\n return result;\n}\n\n/** Extract HTTP status code from error message. Returns 0 if not found. */\nexport function parseErrorStatus(err: unknown): number {\n const msg = err instanceof Error ? err.message : String(err);\n const m = /API error (\\d+)/.exec(msg);\n return m ? parseInt(m[1]!, 10) : 0;\n}\n\n/** Extract Retry-After from error (seconds or date). Returns ms or undefined. */\nexport function parseRetryAfter(err: unknown): number | undefined {\n const msg = err instanceof Error ? err.message : String(err);\n const jsonMatch = /retry[_-]after[\"\\s:]+(\\d+(?:\\.\\d+)?)/i.exec(msg);\n if (jsonMatch) return Math.ceil(parseFloat(jsonMatch[1]!) * 1000);\n const resetMatch = /x-ratelimit-reset[\"\\s:]+(\\d{10,13})/i.exec(msg);\n if (resetMatch) {\n const ts = parseInt(resetMatch[1]!, 10);\n const ms = ts < 1e12 ? ts * 1000 : ts;\n const delta = ms - Date.now();\n return delta > 0 ? delta : undefined;\n }\n return undefined;\n}\n\n/** Detect \"day/week/month limit\" in error message and return cooldown ms. */\nexport function parseUsageLimitCooldown(message: string): number | undefined {\n const lower = message.toLowerCase();\n if (!lower.includes(\"limit\")) return undefined;\n if (lower.includes(\"day\")) {\n const tomorrow = new Date();\n tomorrow.setDate(tomorrow.getDate() + 1);\n tomorrow.setHours(0, 0, 0, 0);\n return tomorrow.getTime() - Date.now();\n }\n if (lower.includes(\"week\")) {\n const now = new Date();\n const daysUntilMonday = (8 - now.getDay()) % 7 || 7;\n const monday = new Date(now);\n monday.setDate(monday.getDate() + daysUntilMonday);\n monday.setHours(0, 0, 0, 0);\n return monday.getTime() - Date.now();\n }\n if (lower.includes(\"month\")) {\n const now = new Date();\n const nextMonth = new Date(now.getFullYear(), now.getMonth() + 1, 1);\n return nextMonth.getTime() - Date.now();\n }\n return undefined;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["TAG", "TAG", "content", "usage", "toolCalls"]
|
|
7
|
+
}
|
|
@@ -7,46 +7,47 @@ import {
|
|
|
7
7
|
emojiToScore,
|
|
8
8
|
emojiToTag,
|
|
9
9
|
formatReactionSignal
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-W546CU3A.js";
|
|
11
11
|
import {
|
|
12
12
|
require_src
|
|
13
13
|
} from "./chunk-HFOCNYEO.js";
|
|
14
14
|
import {
|
|
15
15
|
handleInboundMessage
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-PB5GF4FG.js";
|
|
17
17
|
import "./chunk-63A7ZRIH.js";
|
|
18
|
-
import "./chunk-
|
|
19
|
-
import "./chunk-
|
|
20
|
-
import "./chunk-
|
|
21
|
-
import "./chunk-
|
|
18
|
+
import "./chunk-3GQX34S2.js";
|
|
19
|
+
import "./chunk-JXYWDAHD.js";
|
|
20
|
+
import "./chunk-DZJ5QZFD.js";
|
|
21
|
+
import "./chunk-BNXV7SZI.js";
|
|
22
22
|
import "./chunk-YWZPKBO6.js";
|
|
23
|
-
import "./chunk-
|
|
24
|
-
import "./chunk-
|
|
23
|
+
import "./chunk-YJZE4OK3.js";
|
|
24
|
+
import "./chunk-Y5FEFKGM.js";
|
|
25
25
|
import {
|
|
26
26
|
init_user_registry,
|
|
27
27
|
loadUsers
|
|
28
|
-
} from "./chunk-
|
|
29
|
-
import "./chunk-4S554KLW.js";
|
|
30
|
-
import "./chunk-LUNA6PM5.js";
|
|
28
|
+
} from "./chunk-E7XD5UGB.js";
|
|
31
29
|
import "./chunk-R76K6L6H.js";
|
|
32
|
-
import "./chunk-
|
|
33
|
-
import "./chunk-
|
|
30
|
+
import "./chunk-KOSFXW2S.js";
|
|
31
|
+
import "./chunk-3BG3AIDP.js";
|
|
32
|
+
import "./chunk-5RVOEFGT.js";
|
|
33
|
+
import "./chunk-WC5O5KOE.js";
|
|
34
|
+
import "./chunk-EFGBM555.js";
|
|
34
35
|
import "./chunk-N5KN3LGD.js";
|
|
35
36
|
import {
|
|
36
37
|
getEnv,
|
|
37
38
|
init_env_schema
|
|
38
|
-
} from "./chunk-
|
|
39
|
+
} from "./chunk-6PA5JBUU.js";
|
|
39
40
|
import {
|
|
40
41
|
init_log_and_swallow,
|
|
41
42
|
logAndSwallow
|
|
42
|
-
} from "./chunk-
|
|
43
|
+
} from "./chunk-2IYJ4I66.js";
|
|
43
44
|
import {
|
|
44
45
|
init_logger,
|
|
45
46
|
logDebug,
|
|
46
47
|
logError,
|
|
47
48
|
logInfo,
|
|
48
49
|
logWarn
|
|
49
|
-
} from "./chunk-
|
|
50
|
+
} from "./chunk-XRTXYN66.js";
|
|
50
51
|
import "./chunk-GALQBVKO.js";
|
|
51
52
|
import "./chunk-O7KQG6ME.js";
|
|
52
53
|
import {
|
|
@@ -414,7 +415,7 @@ var DiscordAdapter = class {
|
|
|
414
415
|
/** Interactive model picker — ephemeral select menus. */
|
|
415
416
|
async handleModelPicker(interaction) {
|
|
416
417
|
const { ActionRowBuilder, StringSelectMenuBuilder } = await import("./src-6BTCMOD3.js");
|
|
417
|
-
const { loadTransport } = await import("./transport-config-
|
|
418
|
+
const { loadTransport } = await import("./transport-config-6MB2K2XC.js");
|
|
418
419
|
const tc = loadTransport();
|
|
419
420
|
if (!tc) {
|
|
420
421
|
await interaction.reply({ content: "No transport config.", ephemeral: true });
|
|
@@ -435,7 +436,7 @@ var DiscordAdapter = class {
|
|
|
435
436
|
await selectInteraction.update({ content: "Provider not found.", components: [] });
|
|
436
437
|
return;
|
|
437
438
|
}
|
|
438
|
-
const { getModelsForProvider } = await import("./transport-config-
|
|
439
|
+
const { getModelsForProvider } = await import("./transport-config-6MB2K2XC.js");
|
|
439
440
|
const models = getModelsForProvider(providerId).filter((m) => m.entry.status === "alive" || !m.entry.status).slice(0, 25);
|
|
440
441
|
if (models.length === 0) {
|
|
441
442
|
await selectInteraction.update({ content: `No models for ${providerId}.`, components: [] });
|
|
@@ -528,7 +529,7 @@ Select model:`, components: [modelRow] });
|
|
|
528
529
|
let mediaPath;
|
|
529
530
|
if (message.attachments?.length) {
|
|
530
531
|
try {
|
|
531
|
-
const { saveInboundMedia } = await import("./media-utils-
|
|
532
|
+
const { saveInboundMedia } = await import("./media-utils-HUUIALAJ.js");
|
|
532
533
|
const att = message.attachments[0];
|
|
533
534
|
const res = await fetch(att.url);
|
|
534
535
|
if (res.ok) {
|
|
@@ -622,4 +623,4 @@ export {
|
|
|
622
623
|
DISCORD_CAPABILITIES,
|
|
623
624
|
DiscordAdapter
|
|
624
625
|
};
|
|
625
|
-
//# sourceMappingURL=discord-adapter-
|
|
626
|
+
//# sourceMappingURL=discord-adapter-ABAD56Y2.js.map
|